Включите драйвер и монитор в испытательный стенд UVM

Этот пример использует uvmbuild функция для генерации испытательного стенда универсальной методологии верификации (UVM), который включает драйвер UVM и монитор от конструкторского и испытательного стенда Simulink ®.

Введение

Переход от основанного на кадрах поведенческого моделирования к скаляру моделированию в Simulink требует блоков преобразования для преобразования шагов расчета и размеров сигнала. Блоки преобразования делят испытательный стенд Simulink в этих двух областях.

  • Основанная на кадрах область: Часть испытательного стенда, которая манипулирует и работает с данными как системы координат.

  • Основанная на скаляре область: Часть испытательного стенда, которая манипулирует и действует на данных как скаляры.

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

При переводе испытательного стенда Simulink в испытательный стенд UVM важно сохранять эти домены раздельными. Разделение области позволяет улучшить компонентность и повторное использование компонентов испытательного стенда.

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

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

Пример использует Simulink, чтобы спроектировать и протестировать конвейерный алгоритм деления ядра и определить максимальный порог ошибок для заданного количества этапов трубопровода. В данном проекте испытываются семь этапов трубопровода.

Проект содержит два шага расчета в Simulink.

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

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

Подсистема VectorGenerator генерирует различные числительные и знаменательные векторные последовательности. Размер и область значений векторов определены в InitFcn коллбэк в Simulink model explorer .

Подсистема VectorToScalar переводит транзакции высокого уровня (векторы) в скалярную последовательность, которую может понять DUT.

Подсистема ScalarToVector собирает полученный вектор из скалярной последовательности, полученной от DUT.

Подсистема DivideChecker проверяет, что полученный вектор содержит правильный результат деления в пределах определенного порога ошибок. Если ошибка больше порога, то симуляция выводит предупреждение. В сложение подсистемы DivideChecker выходов три файла MAT, которые можно построить, чтобы визуализировать результаты.

Модель показана ниже:

Откройте и симулируйте модель. Поскольку утверждения не инициированы, нарушений порога ошибок не существует.

open_system('drv_and_mon_uvmtb');
r=sim('drv_and_mon_uvmtb');

Симуляция записывает три файла MAT на диск: num.mat, den.mat, и result_cordic.mat. Файлы содержат знаменатели, числители и результаты сердечного деления соответственно.

Функция MATLAB предназначена для генерации 3-D точечного графика из файлов MAT. Получившийся график помогает визуализировать ошибку и далее подтверждает, что ошибка меньше порога.

plot_cordic_results('num.mat','den.mat','result_cordic.mat');

Figure contains an axes. The axes with title 7 pipeline stage cordic divide error contains an object of type scatter.

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

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

Драйвер и монитор UVM позволяют вам разделяться между основанными на кадрах и основанными на скалярах областями. При переводе в среду UVM основанная на кадрах область сопоставляется с транзакциями UVM, а основанная на скаляре область сопоставляется с компонентами UVM с учетом времени (драйвер, dut и монитор). Стандартные определения компонентов разделяют части окружения по их роли в симуляции. Для этого примера:

  • Подсистема VectorGenerator сопоставлена с последовательностью UVM.

  • Подсистема VectorToScalar сопоставлена с драйвером UVM.

  • Pipelined_Cordic_Divide подсистема сопоставлена с модулем DPI DUT SystemVerilog.

  • Подсистема ScalarToVector сопоставлена с монитором UVM.

  • Подсистема DivideChecker сопоставлена с табло UVM.

Чтобы сгенерировать испытательный стенд UVM из проекта Simulink, выполните этот код.

sequence = 'drv_and_mon_uvmtb/VectorGenerator';
driver = 'drv_and_mon_uvmtb/VectorToScalar';
dpi_dut = 'drv_and_mon_uvmtb/Pipelined_Cordic_Divide';
moninor = 'drv_and_mon_uvmtb/ScalarToVector';
scoreboard = 'drv_and_mon_uvmtb/DivideChecker';
uvmbuild(dpi_dut,sequence,scoreboard,'Driver',driver,'Monitor',moninor);
### Starting DPI subsystem generation for UVM test bench
### Starting build procedure for model: Pipelined_Cordic_Divide
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/Pipelined_Cordic_Divide_build/Pipelined_Cordic_Divide_dpi.h
### Generating DPI C Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/Pipelined_Cordic_Divide_build/Pipelined_Cordic_Divide_dpi.c
### Generating UVM module package /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/Pipelined_Cordic_Divide_build/Pipelined_Cordic_Divide_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/Pipelined_Cordic_Divide_build/Pipelined_Cordic_Divide_dpi.sv
### Generating makefiles for: Pipelined_Cordic_Divide_dpi
### Invoking make to build the DPI Shared Library
### Successful completion of build procedure for model: Pipelined_Cordic_Divide

Build Summary

Top model targets built:

Model                    Action                       Rebuild Reason                                    
========================================================================================================
Pipelined_Cordic_Divide  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 24.259s
### Starting build procedure for model: VectorGenerator
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorGenerator_build/VectorGenerator_dpi.h
### Generating DPI C Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorGenerator_build/VectorGenerator_dpi.c
### Generating UVM module package /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorGenerator_build/VectorGenerator_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorGenerator_build/VectorGenerator_dpi.sv
### Generating makefiles for: VectorGenerator_dpi
### Invoking make to build the DPI Shared Library
### Successful completion of build procedure for model: VectorGenerator

Build Summary

Top model targets built:

Model            Action                       Rebuild Reason                                    
================================================================================================
VectorGenerator  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 9.8212s
### Starting build procedure for model: VectorToScalar
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorToScalar_build/VectorToScalar_dpi.h
### Generating DPI C Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorToScalar_build/VectorToScalar_dpi.c
### Generating UVM module package /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorToScalar_build/VectorToScalar_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/VectorToScalar_build/VectorToScalar_dpi.sv
### Generating makefiles for: VectorToScalar_dpi
### Invoking make to build the DPI Shared Library
### Successful completion of build procedure for model: VectorToScalar

Build Summary

Top model targets built:

Model           Action                       Rebuild Reason                                    
===============================================================================================
VectorToScalar  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 7.5294s
### Starting build procedure for model: ScalarToVector
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/ScalarToVector_build/ScalarToVector_dpi.h
### Generating DPI C Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/ScalarToVector_build/ScalarToVector_dpi.c
### Generating UVM module package /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/ScalarToVector_build/ScalarToVector_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/ScalarToVector_build/ScalarToVector_dpi.sv
### Generating makefiles for: ScalarToVector_dpi
### Invoking make to build the DPI Shared Library
### Successful completion of build procedure for model: ScalarToVector

Build Summary

Top model targets built:

Model           Action                       Rebuild Reason                                    
===============================================================================================
ScalarToVector  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 6.6012s
### Starting build procedure for model: DivideChecker
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/DivideChecker_build/DivideChecker_dpi.h
### Generating DPI C Wrapper /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/DivideChecker_build/DivideChecker_dpi.c
### Generating UVM module package /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/DivideChecker_build/DivideChecker_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2021ad_1657350_5204/mlx_to_docbook1/tp7bf1d09a/hdlverifier-ex46125948/uvm_build/drv_and_mon_uvmtb_dpi_components/DivideChecker_build/DivideChecker_dpi.sv
### Generating makefiles for: DivideChecker_dpi
### Invoking make to build the DPI Shared Library
### Successful completion of build procedure for model: DivideChecker

Build Summary

Top model targets built:

Model          Action                       Rebuild Reason                                    
==============================================================================================
DivideChecker  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 10.196s
### Starting UVM test bench generation for model: drv_and_mon_uvmtb
### Generating UVM transaction object ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/scoreboard/mw_Pipelined_Cordic_Divide_scoreboard_trans.sv
### Generating UVM interface ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_if.sv
### Generating UVM sequence ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/sequence/mw_Pipelined_Cordic_Divide_sequence.sv
### Generating UVM sequence transaction ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/sequence/mw_Pipelined_Cordic_Divide_sequence_trans.sv
### Generating UVM driver ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/driver/mw_Pipelined_Cordic_Divide_driver.sv
### Generating UVM monitor ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/monitor/mw_Pipelined_Cordic_Divide_monitor.sv
### Generating UVM input monitor ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_monitor_input.sv
### Generating UVM agent ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_agent.sv
### Generating UVM scoreboard ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/scoreboard/mw_Pipelined_Cordic_Divide_scoreboard.sv
### Generating UVM scoreboard configuration object ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/scoreboard/mw_Pipelined_Cordic_Divide_scoreboard_cfg_obj.sv
### Generating UVM environment ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_environment.sv
### Generating UVM test ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_test.sv
### Generating UVM top ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/top/mw_Pipelined_Cordic_Divide_top.sv
### Generating UVM test package ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/top/drv_and_mon_uvmtb_pkg.sv
### Generating UVM test bench simulation script for Mentor Graphics QuestaSim/Modelsim ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/top/run_tb_mq.do
### Generating UVM test bench simulation script for Cadence Incisive ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/top/run_tb_incisive.sh
### Generating UVM test bench simulation script for Cadence Xcelium ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/top/run_tb_xcelium.sh
### Generating UVM test bench simulation script for Synopsys VCS ./uvm_build/drv_and_mon_uvmtb_uvm_testbench/top/run_tb_vcs.sh

Драйвер и монитор UVM генерируются в отдельных директориях, как показано на этом рисунке.

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

Сгенерированный тестовый стенд UVM может быть выполнен путем перехода в каталог верхнего модуля UVM drv_and_mon_uvmtb_uvmbuild\uvm_testbench\top и выполнение одного из сгенерированных HDL скриптов симулятора HDL. В этом примере используется ModelSim/QuestaSim ®. Команды, которые необходимо выполнить, показаны на этом рисунке.

Чтобы подтвердить, что симуляция UVM соответствует испытательному стенду Simulink, проверьте эти требования.

  • Нарушений порога ошибок не выдается. Это проверяется путем просмотра журнала симуляции UVM и проверки отсутствия ошибок UVM. Журнал симуляции UVM показан на этом рисунке.

  • Табло UVM выводит три файла MAT (num.mat, den.mat, и result_cordic.mat) в конце симуляции UVM. Визуально 3-D рассеянный график, сгенерированный из проекта Simulink, должен совпадать с графиком из симуляции UVM. График из файлов MAT симуляции UVM может быть сгенерирован с помощью этой команды:

Результат симуляции 3-D точечного графика UVM показан на этом рисунке. График соответствует проекту Simulink, показанному в предыдущих разделах.

Заключение

Сохранение основанного на кадрах и скалярного поведенческого моделирования отдельно в среде Simulink и UVM приводит к этим преимуществам.

  • Разделение области позволяет моделировать транзакционную обработку на основе фрейма на более высоком уровне абстракций, не вводя преобразования более низкого уровня, которые зависят от разрабатываемого алгоритма.

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

  • Разделение области позволяет алгоритму DUT быть многократным.

  • Разделение области позволяет транзакции высокого уровня работать в различные типы данных, чем DUT. В этом примере DUT имеет типы данных портов ufx10_en5, но подсистемы VectorGenerator и DivideChecker имеют double тип данных.

  • Если у вас есть Simulink Test ®, можно опционально сопоставить блоки преобразования в Simulink Test Harness с драйвером и монитором UVM. Разделение области включает более оптимизированный рабочий процесс генерации испытательного стенда UVM.

The uvmbuild функция позволяет вам разделить основанные на кадрах и скалярные области путем предоставления дополнительных необязательных пар "имя-значение" для задания подсистем Simulink, которые сопоставлены с драйвером UVM, монитором или тем и другим.