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

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

Требования и предпосылки

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

  • MATLAB®

  • Simulink®

  • Simulink Coder™

  • Наставник Graphics® ModelSim®/QuestaSim®

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

Обзор

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

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

Настройте пример

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

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

cd(tempdir);
[~, ~, ~] = rmdir('svdpi_assertion', 's');
mkdir('svdpi_assertion');
cd('svdpi_assertion');
open_system('svdpi_assertion');

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

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

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

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

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

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

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

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

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

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

  3. Сборка генерирует код С для подсистемы DPI_C_Assertion и Систему Verilog обертка DPI-C и файл с именем пакета "DPI_C_Assertion_build/DPI_C_Assertion_dpi.sv" и "DPI_C_Assertion_build/DPI_C_Assertion_dpi_pkg.sv".

Кроме того, можно сгенерировать компонент путем выполнения: rtwbuild ('svdpi_assertion/DPI_C_Assertion');

Запустите сгенерированный испытательный стенд в симуляторе HDL

Для этого примера будет использоваться средство моделирования ModelsSim/QuestaSim. Чтобы преуспеть более подробные инструкции, как запустить испытательный стенд, обратитесь к "Началу работы с Генерацией Компонента SystemVerilog DPI".

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

Прослеживание утверждения SystemVerilog к Simulink

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

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

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
Для просмотра документации необходимо авторизоваться на сайте