В этом примере показано, как создавать собственные утверждения SystemVerilog из утверждений в модели Simulink ®. Эта возможность полезна всякий раз, когда требуется одинаковое поведение подтверждения в Simulink и в среде тестирования HDL.
Продукты, необходимые для этого примера:
MATLAB ®
Симулинк ®
Симулинк Coder™
Mentor Graphics ® ModelSim ®/QuestaSim ® или поддерживаемый симулятор SystemVerilog
Один из поддерживаемых компиляторов C: Microsoft ® Visual C++ или GNU GCC
Чтобы создать компонент DPI-C, содержащий утверждения SystemVerilog, модель Simulink должна использовать блок Assertion for DPI-C. Найдите этот блок в библиотеке HDL Verifier- > For Use with DPI-C SystemVerilog, как показано ниже:

Этот блок можно использовать так же, как и общий блок Assertion в библиотеке проверки модели. Поведение моделирования идентично блоку Simulink Assertion, однако во время генерации компонента DPI-C блок генерирует собственное утверждение SystemVerilog для каждого блока Assertion для DPI-C, присутствующего в модели.
Модель в этом примере содержит два блока Assertion for DPI-C. Один из них используется для предоставления информации для задержки с помощью опции настройки, второй блок устанавливается для предоставления предупреждений, когда вторая задержка закончена.
Чтобы открыть проект, выполните следующий код.
open_system('svdpi_assertion');

Модель предварительно сконфигурирована с одним из целевых файлов системы DPI-C (systemverilog_dpi_grt.tlc). Перед созданием компонента DPI-C убедитесь, что в SystemVerilog с помощью маски блока настроено требуемое поведение утверждения.
По умолчанию блок утверждения создает ошибку SystemVerilog ($error("")) с пустым сообщением при срабатывании. Это можно изменить, выдав сообщение об ошибке, изменив ошибку на предупреждение ($warning("")) с предупреждающим сообщением или предоставлением собственной пользовательской команды SystemVerilog для выполнения.
На рисунке ниже показана конфигурация поведения SystemVerilog для блока утверждения после первой задержки. Параметры вне группы параметров утверждения DPI-C влияют только на поведение симулятора Simulink.

Обратите внимание, что пользовательская команда Assertion является допустимым оператором SystemVerilog.
Второй блок утверждения сконфигурирован для вывода предупреждения с указанным сообщением, как показано ниже.

Если мы запустим модель, мы увидим, что в Simulink инициируются два предупреждения утверждения:

В модели svdpi_assertion щелкните правой кнопкой мыши на блоке DPI_C_Assertion и выберите «C/C + + Code - > Build This Subsystem».
Нажмите кнопку Построить (Build) в появившемся диалоговом окне.
Сборка генерирует код C для подсистемы DPI_C_Assertion, обертку DPI-C System Verilog и файл пакета с именем "DPI_C_Assertion_build/DPI_C_Assertion_dpi.sv" и "DPI_C_Assertion_build/DPI_C_Assertion_dpi_pkg.sv".
Кроме того, можно создать компонент путем выполнения следующих действий:
slbuild('svdpi_assertion/DPI_C_Assertion');
В данном примере используется симулятор Sim/QuestaSim. Для получения более подробных инструкций по запуску testbench см. раздел «Начало работы с генерацией компонентов SystemVerilog DPI».
После запуска средства тестирования обратите внимание на сообщения и предупреждения, передаваемые компонентом DPI-C.

Чтобы отследить утверждение, которое сгенерировало предупреждение, в Simulink, необходимо найти идентификатор Simulink Identifier (SID) из предупреждающего сообщения, как показано ниже:

Как только вы найдете SID для блока утверждения, вы можете использовать Simulink programmatic API для выделения соответствующего блока. Выполнить:
Simulink.ID.hilite('svdpi_assertion:7');
При этом будет выделен соответствующий блок.

Если требуется отфильтровать утверждение в симуляторе HDL, необходимо указать SID блока, который требуется отфильтровать, в качестве аргумента plusargs в симуляторе HDL.
Например, SID блока утверждения «InfoAssertion» имеет значение «» svdpi_assertion:6. Таким образом, чтобы отфильтровать информативные сообщения, заданные этим блоком, мы должны предоставить аргумент «+ svdpi _ assertion: 6» в симулятор ЛПВП. Для этого примера в ModelSim/QuestaSim команда моделирования будет следующей:
vsim -c -voptargs=+acc -sv_lib ../DPI_C_Assertion work.DPI_C_Assertion_dpi_tb +svdpi_assertion:6