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