exponenta event banner

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

В этом примере показано, как создавать собственные утверждения 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 инициируются два предупреждения утверждения:

Создание компонента SystemVerilog DPI-C

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

  2. Нажмите кнопку Построить (Build) в появившемся диалоговом окне.

  3. Сборка генерирует код 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.

Отслеживание подтверждения SystemVerilog в Simulink

Чтобы отследить утверждение, которое сгенерировало предупреждение, в 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