Сгенерируйте параметрированный испытательный стенд UVM от Simulink

В этом примере показано, как можно разработать дизайн и испытательный стенд в Simulink и сгенерировать эквивалентную симуляцию для среды Универсальной методологии верификации (UVM) с помощью uvmbuild. Связанные примеры показывают, как вы можете расширить этот испытательный стенд, чтобы совершенствовать вашу верификацию с помощью специфичных для протокола драйверов, ограниченных случайных последовательностей, и параметрировали табло.

Введение

Этот пример обходит вас посредством нисходящего процесса разработки проекта реализации HDL. В таком рабочем процессе вы проектируете поведенческий алгоритм в Simulink и тестируете его блоки окружения использования на генерацию стимула и проверку результатов. Если симуляция подтверждает, что проект удовлетворяет свои требования, вы поставляете любой имущественный залог, необходимый нисходящей команде внедрения HDL. Необходимо повторно проверить, что реализация HDL удовлетворяет требования, столь же симулированные в Simulink, а также любых других специфических аспектах проекта, таких как интерфейсы протокола, которые не были смоделированы в Simulink.

Обычно процесс передачи может быть утомительным и источник многих ошибок. Реализация HDL и инженеры Верификации проекта (DV) HDL должны:

  • Переведите записанные технические требования в HDL и тестовые среды.

  • Изучите поведение во время выполнения среды симуляции Simulink такой как, как стимул создается, обрабатывается и проверяется.

  • Переведите поведения во время выполнения в реализации SystemVerilog.

  • Интегрируйте стимул, проект и ответ, зарегистрировавшийся в выполнимом SystemVerilog, чтобы подтвердить, что переведенные поведения ведут себя то же самое как исходная симуляция Simulink.

  • Интегрируйте эти основные компоненты SystemVerilog в контекст UVM для того, чтобы позволить расширять тестирование Simulink с созданной DV верификацией. Это расширенное тестирование может включать рандомизированное тестирование, утверждения SystemVerilog, функциональное покрытие и покрытие кода.

Используя HDL Verifier возможности генерации UVM, автоматизирован этот процесс передачи. Инженер DV получает проверенную тестовую среду UVM, которая совпадает с тестированием, выполняемым в Simulink, и может легко обновить ту среду, чтобы удовлетворить их нисходящие потребности верификации.

Спроектируйте и протестируйте в Simulink

Напишите свой алгоритм и добавьте испытательный стенд в него. Модель состоит из типичных подсистем для испытательного стенда, таких как генерация стимула, проект под тестом (DUT) и проверка ответа.

В этом проекте исходная подсистема создает случайный импульс 64 выборок информации, встроенной в случайное местоположение в 5 000 демонстрационных систем координат шума. Это также генерирует набор 64 оптимальных коэффициентов согласованного фильтра для обнаружения импульса. Входные параметры питаются и проект и средство проверки ответа. Средство проверки ответа проверяет, что импульс обнаруживается в правильном местоположении в шумной форме волны. Правильное функционирование подтверждено через консоль выход. Если ожидаемая степень обнаруженного сигнала не в определенных пределах, утверждение запущено.

Симуляция модели обеспечивает подтверждение, которые в пяти сгенерированных импульсах, пять обнаруживаются. Три снабженных панелями рисунка показывают Сигнал Tx (исходный импульс), Сигнал Rx (импульс, встроенный в шум), и отфильтрованный выход ссылочной реализации, которая показывает, где пик обнаруживается. Выходной сигнал задерживается одной системой координат.

[FrameNum=  0] Peak location=2163.000000, mag-squared=0.280 using global max
[FrameNum=  0] Peak detected from impl=2163 error(abs)=0
[FrameNum=  0] Peak mag-squared from impl=0.280, error(abs)=0.000 error(pct)=0.017

[FrameNum=  1] Peak location=2163.000000, mag-squared=0.200 using global max
[FrameNum=  1] Peak detected from impl=2163 error(abs)=0
[FrameNum=  1] Peak mag-squared from impl=0.199, error(abs)=0.000 error(pct)=0.190

[FrameNum=  2] Peak location=2163.000000, mag-squared=0.224 using global max
[FrameNum=  2] Peak detected from impl=2163 error(abs)=0
[FrameNum=  2] Peak mag-squared from impl=0.223, error(abs)=0.000 error(pct)=0.183

[FrameNum=  3] Peak location=2163.000000, mag-squared=0.200 using global max
[FrameNum=  3] Peak detected from impl=2163 error(abs)=0
[FrameNum=  3] Peak mag-squared from impl=0.200, error(abs)=0.000 error(pct)=0.043

[FrameNum=  4] Peak location=2163.000000, mag-squared=0.255 using global max
[FrameNum=  4] Peak detected from impl=2163 error(abs)=0
[FrameNum=  4] Peak mag-squared from impl=0.255, error(abs)=0.000 error(pct)=0.031

[FrameNum=  5] Peak location=2163.000000, mag-squared=0.241 using global max
[FrameNum=  5] Peak detected from impl=2163 error(abs)=0
[FrameNum=  5] Peak mag-squared from impl=0.241, error(abs)=0.000 error(pct)=0.187

[FrameNum=  6] Peak location=2163.000000, mag-squared=0.241 using global max
[FrameNum=  6] Peak detected from impl=2163 error(abs)=0
[FrameNum=  6] Peak mag-squared from impl=0.241, error(abs)=0.000 error(pct)=0.019

[FrameNum=  7] Peak location=2163.000000, mag-squared=0.225 using global max
[FrameNum=  7] Peak detected from impl=2163 error(abs)=0
[FrameNum=  7] Peak mag-squared from impl=0.225, error(abs)=0.000 error(pct)=0.032

[FrameNum=  8] Peak location=2163.000000, mag-squared=0.239 using global max
[FrameNum=  8] Peak detected from impl=2163 error(abs)=0
[FrameNum=  8] Peak mag-squared from impl=0.239, error(abs)=0.000 error(pct)=0.037

[FrameNum=  9] Peak location=2163.000000, mag-squared=0.225 using global max
[FrameNum=  9] Peak detected from impl=2163 error(abs)=0
[FrameNum=  9] Peak mag-squared from impl=0.225, error(abs)=0.000 error(pct)=0.146

[FrameNum= 10] Peak location=2163.000000, mag-squared=0.207 using global max
[FrameNum= 10] Peak detected from impl=2163 error(abs)=0
[FrameNum= 10] Peak mag-squared from impl=0.207, error(abs)=0.000 error(pct)=0.134

Сгенерируйте исполняемый испытательный стенд UVM

Используйте uvmbuild функционируйте, чтобы экспортировать ваш проект в среду UVM. Испытательный стенд UVM предоставляет структуру процессу верификации HDL-кода и позволяет, чтобы все компоненты испытательного стенда Simulink и тесты были снова использованы командой верификации реализации. Стандартные определения компонента разделяют части среды их ролью в симуляции. Для этого примера:

  • PulseDetector сопоставлен с модулем DUT SystemVerilog

  • GenPulse подсистема сопоставлена с sequence_item создание для Секвенсера компонент UVM

  • CheckDetection подсистема сопоставлена с Табло компонент UVM.

Сгенерированный испытательный стенд UVM показывают ниже:

% Generate a UVM test bench
design     = 'prm_uvmtb/PulseDetector'
sequence   = 'prm_uvmtb/GenPulse'
scoreboard = 'prm_uvmtb/CheckDetection'
uvmbuild(design, sequence, scoreboard)

Каждая из подсвеченных частей испытательного стенда UVM реализована путем переноса сгенерированного кода C от Подсистемы Simulink и вызова ее точек входа с помощью DPI. Следующее изображение показывает несколько объявлений функции для подсистемы PulseDetector.

Код SystemVerilog/UVM определяет синхронизацию вызовов DPI. Например, в модуле PulseDetector SystemVerilog:

  • "Инициализировать" вызов DPI инициирован "начальным" блоком кода.

  • "Оконечный" вызов DPI инициирован "итоговым" блоком кода.

  • Вызов DPI "сброса" инициирован активным сигналом сброса.

  • Вызовы DPI "выхода" и "обновления" инициированы возрастающим фронтом синхроимпульса, где сброшенный не активно, и часы включают, активно.

Запустите испытательный стенд UVM

uvmbuild процесс также генерирует скрипт, чтобы запустить симуляцию теста UVM. Скрипты сгенерированы для следующих средств моделирования:

  • Наставник Graphics® Modelsim® и Questa®: run_tb_mq.do

  • Cadence® Incisive™: run_tb_incisive.sh

  • Cadence® Xcelium™: run_tb_xcelium.sh

  • Synopsys® VCS®: run_tb_vcs.sh

Сгенерированный скрипт для ModelSim показывают.

Выполните сгенерированный скрипт, чтобы проверить, что выполнение UVM совпадает с выполнением Simulink. Поскольку последовательность параметрируется с входным портом ОСШ, его значение по умолчанию будет 0.0 в UVM. Для того, чтобы правильно сравнить запуски симуляции, мы должны изменить ее значение по умолчанию в 2,0 (который имеет немного значения 0b10_000000), чтобы совпадать с Simulink; это может быть сделано через plusarg, который мы передаем скрипту через переменную окружения.

% Clear environment variables that influence the UVM simulation'
setenv EXTRA_UVM_SIM_ARGS
setenv EXTRA_UVM_COMP_ARGS
setenv UVM_TOP_MODULE
% Simulate the UVM test bench using an SNR of 2.0
cd prm_uvmtb_uvmbuild/uvm_testbench/top
setenv EXTRA_UVM_SIM_ARGS +SNR_default_inp_val=10000000
! vsim -do run_tb_mq.do     % ModelSim/QuestaSim (gui)
! vsim -c -do run_tb_mq.do  % ModelSim/QuestaSim (console)
! ./run_tb_incisive.sh      % Incisive (console)
! ./run_tb_xcelium.sh       % Xcelium (console)
! ./run_tb_vcs.sh           % VCS (console)
cd ../../..

Журнал симуляции показывает те же диагностические сообщения:

И форма волны показывает синхронизацию сигналов интерфейса DUT. Курсор установлен на контуре системы координат и показывает мгновенное обновление коэффициентов согласованного фильтра.