Сгенерируйте векторные типы данных Bit\Logic

Этот пример показывает вам, как сгенерировать битные или логические векторные типы данных в интерфейсе SystemVerilog компонента DPI-C. Эта возможность полезна каждый раз, когда наличие точной ширины порта важно, чтобы интегрировать компонент DPI-C в вашем испытательном стенде.

Требования и предпосылки

Продукты потребовали для этого примера:

  • MATLAB®

  • Simulink®

  • Simulink Coder™

  • Fixed-Point Designer™

  • Наставник Graphics® ModelSim®/QuestaSim®

  • Один из поддерживаемых компиляторов C: Microsoft® Visual C ++ или GNU GCC

Обзор

Если модель Simulink имеет порт с типом данных с фиксированной точкой, по умолчанию, сгенерированные кодированные карты SystemVerilog порт к совместимому типу C, который может содержать необходимые биты. Для получения дополнительной информации об этих отображениях, см. "Поддерживаемые Типы данных Simulink" в документации.

Эта модель Simulink генерирует дискретную синусоиду с помощью типа данных с фиксированной точкой со знаком, содержащего 20 битов. По умолчанию сгенерированный код SystemVerilog использует 'международный' тип данных, чтобы представлять этот порт. Этот пример показывает, как сгенерировать код SystemVerilog, который использует битные или логические векторы, чтобы представлять точную длину номера фиксированной точки.

Настройте пример

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

cd(tempdir);
[~, ~, ~] = rmdir('svdpi_BitVector', 's');
mkdir('svdpi_BitVector');
cd('svdpi_BitVector');
open_system('svdpi_BitVector');

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

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

Также можно установить этот параметр путем выполнения: set_param ('svdpi_BitVector', 'DPIFixedPointDataType', 'Битовый вектор');

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

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

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

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

Кроме того, можно сгенерировать компонент путем выполнения: rtwbuild ('svdpi_BitVector/SineWaveGenerator');

Осмотрите код SystemVerilog

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