В этом примере показано, как создавать типы данных битов или логических векторов в интерфейсе SystemVerilog компонента DPI. Эта возможность полезна в тех случаях, когда для интеграции компонента DPI в тестовые среды важна точная ширина порта.
Продукты, необходимые для этого примера:
MATLAB ®
Симулинк ®
Симулинк Coder™
Designer™ с фиксированной точкой
Mentor Graphics ® ModelSim ®/QuestaSim ®
Один из поддерживаемых компиляторов C: Microsoft ® Visual C++ или GNU GCC
Если модель Simulink имеет порт с фиксированным типом данных, по умолчанию сгенерированный код SystemVerilog сопоставляет порт совместимому типу C, который может содержать необходимые биты. Дополнительные сведения об этих сопоставлениях см. в разделе «Поддерживаемые типы данных Simulink» в документации.
Эта модель Simulink генерирует дискретную синусоидальную волну, используя подписанный тип данных с фиксированной точкой, содержащий 20 битов. По умолчанию созданный код SystemVerilog использует тип данных int для представления этого порта. В этом примере показано, как создать код SystemVerilog, который использует битовые или логические векторы для представления точной длины числа с фиксированной точкой.
Чтобы открыть проект, выполните следующий код.
open_system('svdpi_BitVector');

Модель предварительно сконфигурирована с одним из целевых файлов системы DPI-C (systemverilog_dpi_grt.tlc). Чтобы создать код SystemVerilog с битовыми или логическими векторами, откройте параметры конфигурации. Затем в разделе Создание кода > DPI System Verilog выберите Bit Vector в меню Ports data type.

Можно также установить этот параметр, выполнив следующие действия:
set_param('svdpi_BitVector','DPIFixedPointDataType','BitVector');
В модели «svdpi_BitVector» щелкните правой кнопкой мыши блок SineWaveGenerator и выберите C/C + + Code - > Build This Subsystem.
Нажмите кнопку Построить (Build) в появившемся диалоговом окне.
Сборка генерирует код C для подсистемы SineWaveGenerator, обертку DPI System Verilog «SineWaveGenerator_build/SineWaveGenerator_dpi.sv,» и файл пакета «SineWaveGenerator_build/SineWaveGenerator_dpi_pkg.sv.»
Кроме того, можно создать компонент путем выполнения следующих действий:
slbuild('svdpi_BitVector/SineWaveGenerator');
Откройте компонент DPI «SineWaveGenerator_dpi.sv» и запишите тип данных в интерфейсе:

Если выбран параметр «Logic Vector», то компонент SystemVerilog DPI-C использует для интерфейса логический тип SystemVerilog.
Если выбрать значение по умолчанию «Compatible C Types», то генерируемый тип данных SystemVerilog будет «int», как показано на рисунке:

«Совместимые типы C» поддерживают порты шириной до 64 бит. Если конструкция содержит порты с длиной слова больше 64, необходимо выбрать «Bit Vector» или «Logic Vector».
Если конструкция содержит вектор из чисел с фиксированной точкой и выбран «Bit Vector» или «Logic Vector», то результирующим типом данных является смешанный (распакованный и упакованный) массив SystemVerilog. Например, вектор размера 3, содержащий числа с фиксированной точкой длины слова 2, будет сопоставлен биту [1:0] PortName [3].