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

Этот пример показывает вам, как сгенерировать битные или логические векторные типы данных в интерфейсе 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 использует 'международный' тип данных, чтобы представлять этот порт. В этом примере показано, как сгенерировать код SystemVerilog, который использует битные или логические векторы, чтобы представлять точную длину номера фиксированной точки.

Открытый пример

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

open_system('svdpi_BitVector');

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

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

В качестве альтернативы можно установить этот параметр путем выполнения:

set_param('svdpi_BitVector','DPIFixedPointDataType','BitVector');

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

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

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

  3. Сборка генерирует код С для подсистемы SineWaveGenerator, Система обертка DPI 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 для интерфейса.

Если вы выбираете "Совместимые Типы C по умолчанию", затем сгенерированный тип данных SystemVerilog является "int" как показано:

Факторы для типов порта

  • "Совместимые Типы C" поддерживают порты 64 бита шириной. Если ваш проект содержит порты с размером слова, больше, чем 64, то необходимо выбрать "Bit Vector" или "Logic Vector".

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