В этом примере показано, как можно разработать дизайн и испытательный стенд в Simulink и сгенерировать эквивалентную симуляцию для среды Универсальной методологии верификации (UVM) с помощью uvmbuild
. Это показывает, как можно заменить частями сгенерированной среды UVM с проектом под тестом (DUT) RTL с помощью интерфейсов протокола AXI и рукописного драйвера и контролировать компоненты.
Этот пример обходит вас посредством нисходящего процесса разработки проекта реализации 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, и может легко обновить ту среду, чтобы удовлетворить их нисходящие потребности верификации.
Скопируйте файлы в качестве примера в writeable рабочую директорию. Без аргумента это создаст директорию в системе временная директория. Задайте любой относительный или абсолютный путь. Директория будет создана, если заданная директория не будет существовать.
hdlv_copyfiles('hdlv_uvmtb', 'workingDir', '.')
Copied example files for 'hdlv_uvmtb' to '.'.
Напишите свой алгоритм и добавьте испытательный стенд в него. Модель состоит из типичных подсистем для испытательного стенда, таких как генерация стимула, проект под тестом (DUT) и проверка ответа.
В этом проекте исходная подсистема создает случайный импульс 64 выборок информации, встроенной в случайное местоположение в 5 000 демонстрационных систем координат шума. Это также генерирует набор 64 оптимальных коэффициентов согласованного фильтра для обнаружения импульса. Входные параметры питаются и проект и средство проверки ответа. Средство проверки ответа проверяет, что импульс обнаруживается в правильном местоположении в шумной форме волны. Правильное функционирование подтверждено через консоль выход. Если ожидаемая степень обнаруженного сигнала не в определенных пределах, утверждение запущено.
model = 'hdlv_uvmtb';
open_system(model);
Симуляция модели обеспечивает подтверждение, которые в пяти сгенерированных импульсах, пять обнаруживаются. Три снабженных панелями рисунка показывают Сигнал Tx (исходный импульс), Сигнал Rx (импульс, встроенный в шум), и отфильтрованный выход ссылочной реализации, которая показывает, где пик обнаруживается. Выходной сигнал задерживается одной системой координат.
sim(model);
[time=1.000000] Peak location=4404.000000, mag-squared=0.059 using global max [time=1.000000] Peak detected from impl=4412 error(abs)=8 [time=1.000000] Peak mag-squared from impl=0.059, error(abs)=0.000 error(pct)=0.002 [time=2.000000] Peak location=1377.000000, mag-squared=0.042 using global max [time=2.000000] Peak detected from impl=1385 error(abs)=8 [time=2.000000] Peak mag-squared from impl=0.042, error(abs)=0.000 error(pct)=0.002 [time=3.000000] Peak location=1010.000000, mag-squared=0.060 using global max [time=3.000000] Peak detected from impl=1018 error(abs)=8 [time=3.000000] Peak mag-squared from impl=0.060, error(abs)=0.000 error(pct)=0.002 [time=4.000000] Peak location=2832.000000, mag-squared=0.071 using global max [time=4.000000] Peak detected from impl=2840 error(abs)=8 [time=4.000000] Peak mag-squared from impl=0.070, error(abs)=0.000 error(pct)=0.001 [time=5.000000] Peak location=3538.000000, mag-squared=0.052 using global max [time=5.000000] Peak detected from impl=3546 error(abs)=8 [time=5.000000] Peak mag-squared from impl=0.051, error(abs)=0.000 error(pct)=0.002
Используйте uvmbuild
функционируйте, чтобы экспортировать ваш проект в среду UVM. Испытательный стенд UVM предоставляет структуру процессу верификации HDL-кода и позволяет, чтобы все компоненты испытательного стенда Simulink и тесты были снова использованы командой верификации реализации. Стандартные определения компонента разделяют части среды их ролью в симуляции. Для этого примера:
PulseDetector
сопоставлен с модулем DUT SystemVerilog
GenPulse
подсистема сопоставлена с sequence_item
создание для Секвенсера компонент UVM
CheckDetection
подсистема сопоставлена с Табло компонент UVM.
Сгенерированный испытательный стенд UVM показывают ниже:
design = 'hdlv_uvmtb/PulseDetector'; sequence = 'hdlv_uvmtb/GenPulse'; scoreboard = 'hdlv_uvmtb/CheckDetection'; uvmbuild(design, sequence, scoreboard);
Каждая из подсвеченных частей испытательного стенда UVM реализована путем переноса сгенерированного кода C от Подсистемы Simulink и вызова ее точек входа с помощью DPI. Следующее изображение показывает несколько объявлений функции для подсистемы PulseDetector.
Код SystemVerilog/UVM определяет синхронизацию вызовов DPI. Например, в модуле PulseDetector SystemVerilog:
"Инициализировать" вызов DPI инициирован "начальным" блоком кода.
"Оконечный" вызов DPI инициирован "итоговым" блоком кода.
Вызов DPI "сброса" инициирован активным сигналом сброса.
Вызовы DPI "выхода" и "обновления" инициированы возрастающим фронтом синхроимпульса, где сброшенный не активно, и часы включают, активно.
uvmbuild
процесс также генерирует скрипт, чтобы запустить симуляцию теста UVM. Скрипты сгенерированы для следующих средств моделирования:
Наставник Graphics® Modelsim® и Questa®: run_tb_mq.do
Cadence® Xcelium™: run_tb_incisive.sh
Synopsys® VCS®: run_tb_vcs.sh
Сгенерированный скрипт для ModelSim показывают.
Выполните сгенерированный скрипт, чтобы проверить, что выполнение UVM совпадает с выполнением Simulink. Например, в системном интерпретаторе:
cd hdlv_uvmtb_uvmbuild/uvm_testbench/top vsim -do run_tb_mq.do cd ../../..
Журнал симуляции показывает те же диагностические сообщения:
И форма волны показывает синхронизацию сигналов интерфейса DUT. Курсор установлен на контуре системы координат и показывает мгновенное обновление коэффициентов согласованного фильтра.
DUT в Simulink представляет функциональное поведение импульсного детектора и не использует аппаратных интерфейсов протокола, которые типичны для ядер IP HDL. Испытательный стенд UVM использует проект Simulink в качестве заместителя для фактической реализации HDL. Следующий шаг в рабочем процессе верификации интегрирует фактическую реализацию HDL, которая использует основанные на AXI протоколы в сгенерированный испытательный стенд того же самого UVM.
Чтобы использовать RTL DUT, необходимо заменить частями испытательного стенда UVM, как показано в синем:
Для этого RTL DUT, coeff
порт сопоставлен с интерфейсом процессора, AXI4-облегченным, data_in
порт сопоставлен с AXI4-потоковым ведомым интерфейсом и data_out
порт сопоставлен с AXI4-потоковым ведущим интерфейсом как показано ниже.
Можно вручную записать этот RTL или использовать рабочий процесс генерации ядра IP HDL Coder, чтобы создать его.
Пример основанная на AXI реализация RTL расположен в top_AXIDUT/AXIIPSource.
Файлы UVM, чтобы заменить исходный DUT расположены в top_AXIDUT. Нет никакой потребности изменить любой из сгенерированных файлов от uvmbuild
вызов.
mw_PulseDetector_AXIRTL_if.sv: Переопределяет основной класс интерфейса DUT. Сравните с исходным интерфейсным определением.
mw_PulseDetector_driver.sv: входные транзакции Дисков согласно протоколам AXI интерфейса DUT. Сравните с исходным драйвером.
mw_PulseDetector_monitor/monitor_input.sv: Получает переданные потоком данные AXI и преобразует в те же типы транзакции как прежде. Сравните с исходным определением монитора.
mw_PulseDetector_top.sv: Инстанцируйте RTL AXI DUT и включайте основные пакеты UVM. Сравните с исходным главным определением.
Выполните скрипт для новой среды UVM в системном интерпретаторе, например, для Questasim:
cd top_AXIDUT vsim -do run_tb_mq.do
Журнал симуляции и отрывок формы волны показывают ниже. Заметьте, что журнал показывает те же результаты как прежде, 5 обнаруженных импульсов. Однако также заметьте, что формы волны показывают различную синхронизацию для того, чтобы осуществить проект. Вместо непрекращающегося потока всегда допустимых данных, для каждой системы координат 5 000 выборок сигнала, эти 64 коэффициента сначала запрограммированы через интерфейс процессора, затем эти 5 000 выборок передаются потоком.
Этот пример показал, как проект и испытательный стенд, разработанный в Simulink, могут использоваться, чтобы сгенерировать полностью исполняемый испытательный стенд UVM. uvmbuild
команда автоматизирует генерацию, компиляцию и интегрирование ключевых компонентов в среду UVM.
Инженеры верификации HDL-кода могут подтвердить полное покрытие от Simulink и увеличить покрытие с их собственной библиотекой нативных последовательностей UVM.
Они могут также заменить поведенческим проектом от Simulink с проектом RTL, который перенесен в аппаратные протоколы, такие как AXI4 без изменений в исходном генераторе последовательности и средствах проверки ответа.