Сгенерируйте собственные утверждения SystemVerilog из Simulink

В этом примере показано, как сгенерировать собственные утверждения SystemVerilog из утверждений в модели Simulink ®. Эта возможность полезна всякий раз, когда вам нужно то же поведение assertion в Simulink и в вашем окружении проверки HDL.

Требования и необходимые условия

Продукты, необходимые для этого примера:

  • MATLAB ®

  • Simulink ®

  • Функции Simulink Coder™

  • Mentor Graphics ® ModelSim ®/QuestaSim ® или поддерживаемый симулятор SystemVerilog

  • Один из поддерживаемых компиляторов C: Microsoft ® Visual C++ или GNU GCC

Обзор

Чтобы сгенерировать компонент DPI-C, который содержит утверждения SystemVerilog, модель Simulink должна использовать блок Assertion for DPI-C. Найдите этот блок в HDL Verifier- > Для использования с библиотекой DPI-C SystemVerilog как показано ниже:

Этот блок может использоваться так же, как и типовой блок Assertion в библиотеке Верификации модели. Поведение симуляции идентично блоку Simulink Assertion, однако во время генерации компонента DPI-C блок генерирует собственное значение SystemVerilog для каждого блока Assertion для DPI-C, присутствующего в модели.

Пример настройки

Модель в этом примере содержит два блока Assertion для DPI-C. Один из них используется для предоставления информации о задержке с помощью опции индивидуальной настройки, второй блок устанавливается для предоставления предупреждений, когда вторая задержка закончена.

Запустите следующий код, чтобы открыть проект.

open_system('svdpi_assertion');

Настройте модель для генерации кода

Модель предварительно сконфигурирована с одним из системных целевых файлов DPI-C (systemverilog_dpi_grt.tlc). Перед генерацией компонента DPI-C убедитесь, что конфигурировали требуемое поведение проверки типа «assertion» в SystemVerilog через маску блока.

По умолчанию блок assertion генерирует ошибку SystemVerilog ($error("")) с пустым сообщением при срабатывании. Это может быть изменено либо путем предоставления сообщения об ошибке, изменения ошибки на предупреждение ($warning("")) с предупреждающим сообщением или предоставлением вашей собственной пользовательской команды SystemVerilog, которая будет выполнена.

На рисунке ниже показано строение поведения SystemVerilog для блока assertion после первой задержки. Параметры за пределами группы опций assertion DPI-C влияют только на поведение симуляции Simulink.

Заметьте, что пользовательская команда Assertion является допустимым оператором SystemVerilog.

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

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

Сгенерируйте компонент DPI-C SystemVerilog

  1. В модели svdpi_assertion щелкните правой кнопкой мыши блок DPI_C_Assertion и выберите C/C + + код - > Build This Subsystem.

  2. Нажмите Build в появившемся диалоговом окне.

  3. Сборка генерирует код С для подсистемы DPI_C_Assertion, и оболочку System Verilog DPI-C и файл пакета с именем "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');

Запустите сгенерированный тестбенч в Симулятор HDL

В данном примере будет использоваться симулятор ModelsSim/QuestaSim. Более подробные инструкции по запуску теста см. в разделе «Начало работы с генерацией компонентов DPI SystemVerilog».

После запуска testbench заметьте сообщения и предупреждения, которые выдаются компонентом DPI-C.

Трассировка значения SystemVerilog назад к Simulink

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

Когда вы находите SID для блока assertion, вы можете использовать программные API Simulink, чтобы выделить соответствующий блок. Выполните:

Simulink.ID.hilite('svdpi_assertion:7');

Это выделит соответствующий блок.

Фильтрация значения в Симулятор HDL

Если вы хотите фильтровать значения в Симулятор HDL, вам нужно предоставить SID блока, который вы хотите фильтровать как аргумент plusargs, в Симулятор HDL.

Для образца SID блока проверки типа «InfoAssertion» является «svdpi_assertion:6.» Так что для фильтрации информационных сообщений, заданных этим блоком, нам нужно предоставить аргумент «+ svdpi _ assertion: 6» в Симулятор HDL. В данном примере в ModelSim/QuestaSim команда симуляции будет:

vsim -c -voptargs=+acc -sv_lib ../DPI_C_Assertion work.DPI_C_Assertion_dpi_tb +svdpi_assertion:6