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