Этот пример показывает вам, как сгенерировать битные или логические векторные типы данных в интерфейсе 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, выберите "BitVector" из меню "Fixed-point data type".
В качестве альтернативы можно установить этот параметр путем выполнения:
set_param('svdpi_BitVector','DPIFixedPointDataType','BitVector');
В "svdpi_BitVector" модели щелкните правой кнопкой мыши по блоку SineWaveGenerator и выберите C/C ++ Code-> Build This Subsystem.
Нажмите Build в диалоговом окне, которое появляется.
Сборка генерирует код С для подсистемы SineWaveGenerator, Система обертка DPI Verilog "SineWaveGenerator_build/SineWaveGenerator_dpi.sv" и файл пакета "SineWaveGenerator_build/SineWaveGenerator_dpi_pkg.sv".
Кроме того, можно сгенерировать компонент путем выполнения:
rtwbuild('svdpi_BitVector/SineWaveGenerator');
Откройте компонент 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].