Этот пример использует uvmbuild
функция, чтобы сгенерировать испытательный стенд Универсальной методологии верификации (UVM), который включает драйвер UVM и монитор из проекта Simulink® и испытательного стенда.
Переход от основанного на системе координат поведенческого моделирования до скалярного моделирования в Simulink требует, чтобы блоки преобразования преобразовали шаги расчета сигнала и размеры. Блоки преобразования делят испытательный стенд Simulink на эти две области.
Основанная на системе координат область: часть испытательного стенда, который управляет и работает с данными как системы координат.
Основанная на скаляре область: часть испытательного стенда, который управляет и работает с данными как скаляры.
Среда UVM использует моделирование уровня транзакций, чтобы обработать транзакции от последовательности (генератор стимула) и проверить получившиеся транзакции в табло (средство проверки).
Когда перевод испытательного стенда Simulink к испытательному стенду UVM, разделение этих областей важны. Доменное разделение включает лучшую компонентизацию и возможность многократного использования компонентов испытательного стенда.
Напишите основанный на скаляре алгоритм и добавьте испытательный стенд вокруг этого, который разделяет основанную на системе координат область и скалярную область с помощью подсистем преобразования (например, буфер, и освободите буфер, переход уровня или комбинация этих блоков). Модель состоит из подсистемы генерации стимула, основанного на скаляре проекта под тестом (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');
Используйте 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 может быть выполнен путем движения в директорию 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, монитором или обоими.