Сгенерируйте векторные типы данных 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].