exponenta event banner

Генерировать битовые векторные и логические векторные типы данных

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

Создать компонент DPI SystemVerilog

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

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

  3. Сборка генерирует код C для подсистемы 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 использует для интерфейса логический тип SystemVerilog.

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

Примечания по типам портов

  • «Совместимые типы C» поддерживают порты шириной до 64 бит. Если конструкция содержит порты с длиной слова больше 64, необходимо выбрать «Bit Vector» или «Logic Vector».

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