Блок assertion DPI проверяет, является ли его входной сигнал нулем. Используйте этот блок, чтобы проверить, что ваш Simulink® испытательный стенд ведет себя должным образом, создавая логическое выражение и соединяя его с блоком. Генерация SystemVerilog создает немедленное подтверждение в сгенерированном модуле. Используйте этот блок, чтобы проверить, что ваш стимул ведет себя должным образом как в ваших окружениях Simulink, так и в SystemVerilog.
В этом примере показано, как создать модель с блоком утверждения, который излучает предупреждение, когда выход блока усиления равен нулю. Затем используйте счетчик, чтобы отобразить выход модели.
Создайте модель Simulink
Пример модели имеет один блок усиления. Этот пример создает предупреждение каждый раз, когда выход усиления равен нулю.
Откройте Simulink Block Library > Commonly Used Blocks.
Добавьте блок Inport.
Дважды кликните этот блок, чтобы открыть его параметры. Установите значение Gain равным 2
.
Добавьте блок Outport.
Соедините все блоки как показано на предыдущей схеме.
Добавьте и сконфигурируйте блок Assertion
Найдите Assertion блок в древовидном представлении Libraries путем выбора HDL Verifier > For Use with DPI-C SystemVerilog. Добавьте этот блок к своей модели, затем соедините выход блока Gain с входом блока assertion.
Этот пример использует блок Assertion, чтобы контролировать выход Gain и вернуть предупреждение, когда сигнал равен нулю. Дважды кликните блок Assertion, чтобы сконфигурировать его параметры. Установите Severity значение warning
и Assertion fail message для "output is 0!"
. Убедитесь, что выбран Enable assertion.
Примечание
Раздел Parameters управляет выполнением Simulink, и они идентичны параметрам в блоке Simulink Assertion (Simulink). DPI-C assertion options управляют поведением значения только в сгенерированном SystemVerilog.
Настройка Assertion
Настройте значения путем установки значения Severity на custom
и ввод пользовательской команды SystemVerilog в поле Assertion custom command. Эта команда может включать в себя системные задачи, такие как $display
или $time
.
Можно далее настроить поведение утверждений, используя сгенерированный DPI_getAssertionInfo(obj)
Функция SystemVerilog. Эта функция проверяет выполненные значения и возвращает всю информацию, записанную для этого значения в массиве структур SystemVerilog. Для каждого утверждения, которое было выполнено в этом такте, функция возвращает Status
, Message
, и Severity
об утверждении.
Запустите симуляцию в Simulink
Перед симуляцией соедините источник стимула и приемник с вашей подсистемой. Этот пример использует счетчик, который генерирует 0-1-2-3 последовательности.
Чтобы создать и запустить симуляцию, нажмите кнопку Run на панели инструментов.
Обратите внимание на предупреждения из блока assertion в выходах.
Сгенерируйте компонент DPI SystemVerilog
На вкладке Apps Simulink нажмите HDL Verifier. Затем на вкладке HDL Verifier нажмите C Code Settings. Диалоговое окно Configuration Parameters откроется на Code Generation.
При System target file кликните Browse и выберите systemverilog_dpi_grt.tlc
.
Если у вас есть лицензия для Embedded Coder®можно выбрать целевую systemverilog_dpi_ert.tlc
. Эта цель позволяет вам получить доступ к дополнительным опциям генерации кода (на панели Генерация кода в параметрах конфигурации модели).
В группе Генерация кода щелкните SystemVerilog DPI.
Чтобы включить автоматическую генерацию испытательного стенда, установите флажок Generate test bench.
Нажмите кнопку OK, чтобы принять эти настройки и закрыть диалоговое окно Параметров конфигурации.
На вкладке HDL Verifier нажмите Generate DPI Component.
В диалоговом окне Код сборки для подсистемы нажмите Build.
Компонент SystemVerilog генерируется следующим dut_build/dut_dpi.sv
в текущей рабочей папке. В сложение файл пакета, включающий объявления функций, генерируется как dut_build/dut_dpi_pkg.sv
в текущей рабочей папке.
Запустите симуляцию SystemVerilog
На вкладке HDL Verifier щелкните Select Simulator, чтобы открыть Параметры конфигурации на SystemVerilog DPI pane. Затем выберите симулятор из списка HDL simulator. Нажмите OK.
Чтобы запустить симулятор в графическом интерфейсе пользователя, разверните кнопку Run Testbench и выберите Launch Simulator in GUI Mode.
Для ModelSim® или Questa®введите следующую команду, чтобы начать симуляцию.
do run_tb_mq.do
Заметьте предупреждения симуляции, отображаемые утверждением:
run -all # ** Warning: assertion:14:output is 0! # Time: 40 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 80 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 120 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 160 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 200 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 240 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 280 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 320 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 360 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 400 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 440 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 480 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # ** Warning: assertion:14:output is 0! # Time: 520 ns Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57 # **************TEST COMPLETED (PASSED)************** # ** Note: $finish : ./dut_dpi_tb.sv(62) # Time: 542 ns Iteration: 0 Instance: /dut_dpi_tb # End time: 14:16:43 on Dec 29,2017, Elapsed time: 0:00:04 # Errors: 0, Warnings: 13
После выполнения симуляции SystemVerilog с сгенерированной оценкой в файле журнала отображаются предупреждения и ошибки. Чтобы идентифицировать, какой блок утверждения вызвал определенное предупреждение или выход ошибки, используйте hilite_system
(Simulink) функция.
Каждое предупреждение отображает число, идентифицирующее конкретный Assertion блок, который сгенерировал это предупреждение. Этот номер является идентификатором Simulink (SID) этого блока. Например, ниже показано предупреждение, сгенерированное блоком assertion с SID № 14.
# ** Warning: assertion:14:output is 0!
Чтобы выделить блок, который сгенерировал это предупреждение, выполните следующий код в MATLAB® командное окно.
hilite_system('assertion:14')
Для получения дополнительной информации об идентификаторах Simulink смотрите Simulink Identifiers (Simulink).
Можно отключить выполнение любого блока assertion либо в окружение Simulink, либо в среде SystemVerilog. Отключите значения в Simulink, если необходимо, чтобы значения проигнорировались как в Simulink, так и в SystemVerilog. Отключите значения в SystemVerilog, если вы не хотите регенерировать код из Simulink, но хотите, чтобы была возможность отключить значения во время симуляции SystemVerilog.
Отключение утверждений в Simulink. Можно отключить блок DPI-C Assertion от проверки его входного сигнала или излучения предупреждений или ошибок, сняв флажок Enable assertion в параметрах блоков Assertion.
Снятие этого флажка отключает выдачу предупреждений или ошибок и генерацию значения SystemVerilog.
Отключение утверждений в SystemVerilog. В среде SystemVerilog можно отключить утверждение, предоставив Simulink Identifier в качестве аргумента командной строки для симулятора HDL. Например, при использовании ModelSim и предположении, что SID равен 14, можно отключить выход любых предупреждений, сообщений об ошибке или пользовательских команд, произведенных блоком Assertion со следующим плюс-аргументом:
vsim -c -voptargs=+acc -sv_lib ../dut_win64 work.dut_dpi_tb +assertion:14