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

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

Введение

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

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

  • Перевод письменных спецификаций в HDL и окружения проверки.

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

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

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

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

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

Проект и тестирование в Simulink

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

В этом проекте исходная подсистема создает случайный импульс из 64 выборок информации, встроенной в случайном месте в систему координат шума 5000 дискретизации. Это также генерирует набор из 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 создание для компонента Sequencer 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:

  • Вызов «initialize» DPI запускается блоком «initial» кода.

  • Вызов DPI «завершает» инициируется блоком кода «final».

  • Вызов DPI «сброса» инициируется активным сигналом сброса.

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

Запуск UVM- Испытательного стенда

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

  • Mentor 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; это может быть сделано через плюсарг, который мы передаем в скрипт через переменную окружения.

% 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 uvm_build/prm_uvmtb_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. Курсор помещается в систему координат контура и показывает мгновенное обновление коэффициентов согласованного фильтра.