exponenta event banner

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

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

Введение

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

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

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

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

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

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

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

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

Конструкция содержит два примера в Simulink.

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

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

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

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

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

Подсистема проверки ошибок проверяет, что результирующий вектор содержит правильный результат деления в пределах определенного порога ошибок. Если ошибка превышает пороговое значение, то при моделировании выдается предупреждение. Кроме того, подсистема проверки ошибок выводит три файла 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 подсистема сопоставляется с модулем SystemVerilog DPI DUT.

  • Подсистема ScalarToVector отображается на монитор UVM.

  • Подсистема «Проверка» сопоставлена с 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 и выполняют один из сгенерированных сценариев имитатора ЛПВП. В этом примере используется ModelSim/QuestaSim ®. Команды для выполнения показаны на этом рисунке.

Для подтверждения соответствия моделирования UVM тестовому стенду Simulink проверьте эти требования.

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

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

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

Заключение

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

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

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

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

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

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

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