exponenta event banner

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

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

Введение

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

Обычно процесс передачи обслуживания может быть утомительным и источником множества ошибок. Инженеры по внедрению ЛПВП и проверке проектирования ЛПВП должны:

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

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

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

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

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

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

Проектирование и испытания в 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

Создание исполняемого тестового стенда UVM

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

Запуск тестового стенда UVM

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