Сгенерируйте типы данных векторов и логических векторов

В этом примере показано, как сгенерировать типы бит или логических векторов в интерфейсе 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');

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

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

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

  3. Сборка генерирует код С для подсистемы SineWaveGenerator, оболочки DPI System Verilog «SineWaveGenerator_build/SineWaveGenerator_dpi.sv,» и файла пакета «SineWaveGenerator_build/SineWaveGenerator_dpi_pkg.sv.»

Также можно сгенерировать компонент путем выполнения:

slbuild('svdpi_BitVector/SineWaveGenerator');

Смотрите код SystemVerilog

Откройте компонент 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].