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

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

Введение

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

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

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

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

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

Спроектируйте и протестируйте в Simulink

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

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

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

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

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

Подсистема VectorGenerator генерирует различный числитель и последовательности вектора знаменателя. Размер и область значений векторов заданы в InitFcn коллбэк в соответствии с моделью Simulink 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. Файлы содержат знаменатели, числители и результаты cordic деления соответственно.

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

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

Сгенерируйте испытательный стенд 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/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/Pipelined_Cordic_Divide_build/Pipelined_Cordic_Divide_dpi.h
### Generating DPI C Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/Pipelined_Cordic_Divide_build/Pipelined_Cordic_Divide_dpi.c
### Generating UVM module package /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/Pipelined_Cordic_Divide_build/Pipelined_Cordic_Divide_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/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 23.938s
### Starting build procedure for model: VectorGenerator
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/VectorGenerator_build/VectorGenerator_dpi.h
### Generating DPI C Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/VectorGenerator_build/VectorGenerator_dpi.c
### Generating UVM module package /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/VectorGenerator_build/VectorGenerator_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/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.2398s
### Starting build procedure for model: VectorToScalar
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/VectorToScalar_build/VectorToScalar_dpi.h
### Generating DPI C Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/VectorToScalar_build/VectorToScalar_dpi.c
### Generating UVM module package /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/VectorToScalar_build/VectorToScalar_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/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 6.5617s
### Starting build procedure for model: ScalarToVector
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/ScalarToVector_build/ScalarToVector_dpi.h
### Generating DPI C Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/ScalarToVector_build/ScalarToVector_dpi.c
### Generating UVM module package /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/ScalarToVector_build/ScalarToVector_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/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 5.1545s
### Starting build procedure for model: DivideChecker
### Starting SystemVerilog DPI Component Generation
### Generating DPI H Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/DivideChecker_build/DivideChecker_dpi.h
### Generating DPI C Wrapper /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/DivideChecker_build/DivideChecker_dpi.c
### Generating UVM module package /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/DivideChecker_build/DivideChecker_dpi_pkg.sv
### Generating SystemVerilog module /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/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 7.8316s
### Starting UVM test bench generation for model: drv_and_mon_uvmtb
### Generating UVM transaction object /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_trans.sv
### Generating UVM interface /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_if.sv
### Generating UVM sequence /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/sequence/mw_Pipelined_Cordic_Divide_sequence.sv
### Generating UVM sequence transaction /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/sequence/mw_Pipelined_Cordic_Divide_sequence_trans.sv
### Generating UVM driver /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/driver/mw_Pipelined_Cordic_Divide_driver.sv
### Generating UVM monitor /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/monitor/mw_Pipelined_Cordic_Divide_monitor.sv
### Generating UVM input monitor /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_monitor_input.sv
### Generating UVM agent /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_agent.sv
### Generating UVM scoreboard /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/scoreboard/mw_Pipelined_Cordic_Divide_scoreboard.sv
### Generating UVM scoreboard configuration object /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/scoreboard/mw_Pipelined_Cordic_Divide_scoreboard_cfg_obj.sv
### Generating UVM environment /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_environment.sv
### Generating UVM test /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/uvm_artifacts/mw_Pipelined_Cordic_Divide_test.sv
### Generating UVM top /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/top/mw_Pipelined_Cordic_Divide_top.sv
### Generating UVM test package /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/top/drv_and_mon_uvmtb_pkg.sv
### Generating UVM test bench simulation script for Mentor Graphics QuestaSim/Modelsim /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/top/run_tb_mq.do
### Generating UVM test bench simulation script for Cadence Incisive /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/top/run_tb_incisive.sh
### Generating UVM test bench simulation script for Cadence Xcelium /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/top/run_tb_xcelium.sh
### Generating UVM test bench simulation script for Synopsys VCS /tmp/BR2020bd_1462360_136931/mlx_to_docbook1/tpb7a34416/hdlverifier-ex46125948/drv_and_mon_uvmtb_uvmbuild/uvm_testbench/top/run_tb_vcs.sh

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

Запустите испытательный стенд UVM

Сгенерированный испытательный стенд UVM может быть выполнен путем движения в директорию drv_and_mon_uvmtb_uvmbuild\uvm_testbench\top модуля верхней части испытательного стенда UVM и выполнение одного из сгенерированных скриптов симулятора HDL. For this example, 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 к драйверу UVM и монитору. Доменное разделение включает более оптимизированный рабочий процесс генерации испытательного стенда UVM.

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

Для просмотра документации необходимо авторизоваться на сайте