Сгенерируйте утверждения SystemVerilog из Simulink Test Stench

Блок assertion DPI проверяет, является ли его входной сигнал нулем. Используйте этот блок, чтобы проверить, что ваш Simulink® испытательный стенд ведет себя должным образом, создавая логическое выражение и соединяя его с блоком. Генерация SystemVerilog создает немедленное подтверждение в сгенерированном модуле. Используйте этот блок, чтобы проверить, что ваш стимул ведет себя должным образом как в ваших окружениях Simulink, так и в SystemVerilog.

Рабочий процесс «Сгенерировать утверждения»

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

  1. Создайте модель Simulink

    Пример модели имеет один блок усиления. Этот пример создает предупреждение каждый раз, когда выход усиления равен нулю.

    1. Откройте Simulink Block Library > Commonly Used Blocks.

    2. Добавьте блок Inport.

    3. Дважды кликните этот блок, чтобы открыть его параметры. Установите значение Gain равным 2.

    4. Добавьте блок Outport.

    5. Соедините все блоки как показано на предыдущей схеме.

  2. Добавьте и сконфигурируйте блок 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.

  3. Настройка Assertion

    Настройте значения путем установки значения Severity на custom и ввод пользовательской команды SystemVerilog в поле Assertion custom command. Эта команда может включать в себя системные задачи, такие как $display или $time.

    Можно далее настроить поведение утверждений, используя сгенерированный DPI_getAssertionInfo(obj) Функция SystemVerilog. Эта функция проверяет выполненные значения и возвращает всю информацию, записанную для этого значения в массиве структур SystemVerilog. Для каждого утверждения, которое было выполнено в этом такте, функция возвращает Status, Message, и Severity об утверждении.

  4. Запустите симуляцию в Simulink

    Перед симуляцией соедините источник стимула и приемник с вашей подсистемой. Этот пример использует счетчик, который генерирует 0-1-2-3 последовательности.

    Чтобы создать и запустить симуляцию, нажмите кнопку Run на панели инструментов.

    Обратите внимание на предупреждения из блока assertion в выходах.

  5. Сгенерируйте компонент DPI SystemVerilog

    1. На вкладке Apps Simulink нажмите HDL Verifier. Затем на вкладке HDL Verifier нажмите C Code Settings. Диалоговое окно Configuration Parameters откроется на Code Generation.

    2. При System target file кликните Browse и выберите systemverilog_dpi_grt.tlc.

      • Если у вас есть лицензия для Embedded Coder®можно выбрать целевую systemverilog_dpi_ert.tlc. Эта цель позволяет вам получить доступ к дополнительным опциям генерации кода (на панели Генерация кода в параметрах конфигурации модели).

    3. В группе Генерация кода щелкните SystemVerilog DPI.

    4. Чтобы включить автоматическую генерацию испытательного стенда, установите флажок Generate test bench.

    5. Нажмите кнопку OK, чтобы принять эти настройки и закрыть диалоговое окно Параметров конфигурации.

    6. На вкладке HDL Verifier нажмите Generate DPI Component.

    7. В диалоговом окне Код сборки для подсистемы нажмите Build.

      Компонент SystemVerilog генерируется следующим dut_build/dut_dpi.sv в текущей рабочей папке. В сложение файл пакета, включающий объявления функций, генерируется как dut_build/dut_dpi_pkg.sv в текущей рабочей папке.

  6. Запустите симуляцию SystemVerilog

    На вкладке HDL Verifier щелкните Select Simulator, чтобы открыть Параметры конфигурации на SystemVerilog DPI pane. Затем выберите симулятор из списка HDL simulator. Нажмите OK.

    1. Чтобы запустить симулятор в графическом интерфейсе пользователя, разверните кнопку Run Testbench и выберите Launch Simulator in GUI Mode.

    2. Для 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

После выполнения симуляции 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

См. также

Похожие темы