В этом примере показано, как можно разработать дизайн и испытательный стенд в Simulink ® и создать эквивалентное моделирование для среды универсальной методики проверки (UVM) с помощьюuvmbuild. В соответствующих примерах показано, как расширить тестовый стенд для уточнения проверки с помощью драйверов для конкретных протоколов, ограниченных случайных последовательностей и параметризованных табло.
В этом примере рассматривается нисходящий процесс разработки проекта реализации ЛПВП. В таком рабочем процессе вы разрабатываете поведенческий алгоритм в Simulink и тестируете его с помощью окружающих блоков для генерации стимулов и проверки результатов. Как только моделирование подтвердит, что проект соответствует его требованиям, вы предоставите все сопутствующие материалы, необходимые группе внедрения HDL. Необходимо повторно проверить соответствие реализации ЛПВП требованиям, моделируемым в Simulink, а также любым другим уникальным аспектам конструкции, таким как интерфейсы протоколов, которые не были смоделированы в Simulink.
Обычно процесс передачи обслуживания может быть утомительным и источником множества ошибок. Инженеры по внедрению ЛПВП и проверке проектирования ЛПВП должны:
Перевод письменных спецификаций в среды HDL и тестирования.
Изучите поведение среды моделирования Simulink во время выполнения, например, как создается, обрабатывается и проверяется стимул.
Преобразование поведения во время выполнения в реализации SystemVerilog.
Интегрируйте проверку стимула, конструкции и отклика в выполняемый SystemVerilog, чтобы подтвердить, что переведенные поведения ведут себя так же, как и исходное моделирование Simulink.
Интегрируйте эти основные компоненты SystemVerilog в контекст UVM, чтобы позволить расширить тестирование Simulink с проверкой, созданной DV. Это расширенное тестирование может включать рандомизированное тестирование, утверждения SystemVerilog, функциональное покрытие и покрытие кодом.
Использование возможностей генерации HDL Verifier™ UVM позволяет автоматизировать процесс передачи обслуживания. Инженер DV получает проверенную тестовую среду UVM, которая соответствует тестам, выполненным в Simulink, и может легко обновить эту среду в соответствии с их нижестоящими требованиями к проверке.
Напишите свой алгоритм и добавьте к нему тестовый стенд. Модель состоит из типичных подсистем для испытательного стенда, таких как генерация стимулов, тестируемая конструкция (DUT) и проверка отклика.
В этой конструкции исходная подсистема создает случайный импульс из 64 выборок информации, встроенной в случайное местоположение в 5000 кадре выборки шума. Он также генерирует набор из 64 оптимальных согласованных коэффициентов фильтра для обнаружения импульса. Входные данные подаются как на устройство проектирования, так и на средство проверки отклика. Средство проверки отклика проверяет, что импульс обнаружен в правильном месте в шумовой форме сигнала. Правильная работа подтверждается посредством вывода на консоль. Если ожидаемая мощность обнаруженного сигнала не находится в определенных пределах, инициируется утверждение.

Моделирование модели обеспечивает подтверждение того, что в пяти сгенерированных импульсах обнаруживаются пять. На рисунке с тремя панелями показан сигнал передачи (исходный импульс), сигнал приема (импульс, внедренный в шум) и отфильтрованный выходной сигнал эталонной реализации, которая показывает, где обнаружен пик. Выходной сигнал задерживается на один кадр.
[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

Используйте uvmbuild для экспорта проекта в среду UVM. Испытательный стенд UVM обеспечивает структуру процесса проверки HDL и позволяет группе по проверке реализации повторно использовать все компоненты испытательного стенда Simulink и тестовые примеры. Стандартные определения компонентов разделяют элементы среды по их роли в моделировании. Для этого примера:
PulseDetector сопоставлен с модулем SystemVerilog DUT
GenPulse подсистема сопоставлена с sequence_item создание для UVM-компонента Sequencer
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 инициируется «начальным» блоком кода.
Вызов DPI «завершения» инициируется блоком «окончательного» кода.
Вызов DPI «сброса» инициируется активным сигналом сброса.
Вызовы DPI «output» и «update» инициируются нарастающим фронтом синхронизации, где сброс не активен, а включение синхронизации активно.

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. Поскольку последовательность параметризована входным портом SNR, ее значение по умолчанию будет равно 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. Курсор размещается на границе кадра и показывает мгновенное обновление согласованных коэффициентов фильтра.
