В этом примере показано, как сгенерировать типы бит или логических векторов в интерфейсе SystemVerilog компонента DPI. Эта возможность используется всякий раз, когда точная ширина порта важна для интеграции компонента DPI в тестовом наборе.
Продукты, необходимые для этого примера:
MATLAB ®
Simulink ®
Функции Simulink Coder™
Fixed-Point Designer™
Ментор 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 с битовыми или логическими векторами, откройте параметры конфигурации. Затем в генерации кода > System Verilog DPI выберите Bit Vector
из меню Ports данных type.
Также можно задать этот параметр, выполнив:
set_param('svdpi_BitVector','DPIFixedPointDataType','BitVector');
В модели «svdpi_BitVector» щелкните правой кнопкой мыши блок SineWaveGenerator и выберите C/C + + код - > Build This Subsystem.
Нажмите Build в появившемся диалоговом окне.
Сборка генерирует код С для подсистемы 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 использует для интерфейса тип «logic» SystemVerilog.
Если вы выбираете «Совместимые типы C» по умолчанию, то сгенерированный тип данных SystemVerilog является «int», как показано на рисунке:
«Совместимые типы C» поддерживают порты шириной до 64 бит. Если ваш проект содержит порты с размером слова более 64, тогда необходимо выбрать «Bit Vector» или «Logic Vector».
Если ваш проект содержит вектор чисел с фиксированной точкой, и вы выбираете «Bit Vector» или «Logic Vector», то полученный тип данных является смешанным (распакованным и упакованным) массивом SystemVerilog. Для примера вектор размера 3, содержащий номера с фиксированной точкой размера слова 2, будет отображаться на бит [1:0] PortName [3].