Генерация компонентов DPI с MATLAB

Можно экспортировать MATLAB® функция как компонент с интерфейсом прямого программирования (DPI) для использования в симуляции SystemVerilog. Перенос сгенерированного кода C с помощью оболочки DPI, которая взаимодействует с функцией тонкого интерфейса SystemVerilog в симуляции SystemVerilog.

Для MATLAB компонент генерируется с помощью dpigen функция.

Примечание

Для использования этой функции необходимо иметь лицензию MATLAB Coder™.

Поддерживаемые типы данных MATLAB

Поддерживаемые типы данных MATLAB преобразуются в типы данных SystemVerilog, как показано в этой таблице. При использовании dpigen function, использовать PortsDataType свойство для выбора Compatible C type, Logic vector, или Bit vector типы данных.

Сгенерированные типы SystemVerilog

MATLABSystemVerilog
Совместимый тип CЛогический векторБитовый вектор
uint8byte unsignedlogic [7:0] bit [7:0]
uint16shortint unsignedlogic [15:0] bit [15:0]
uint32int unsignedlogic [31:0]bit [31:0]
uint64longint unsignedlogic [63:0]bit [63:0]
int8bytelogic signed [7:0]bit signed [7:0]
int16shortintlogic signed [15:0]bit signed [15:0]
int32intlogic signed [31:0]bit signed [31:0]
int64longintlogic signed [63:0]bit signed [63:0]
logicalbyte unsignedlogic [0:0]bit [0:0]
fi(тип данных с фиксированной точкой)

Зависит от размера слова с фиксированной точкой. Если длина слова с фиксированной точкой больше размера слова хоста (для примера, 64-битного и 32-битного), то этот тип данных не может быть преобразован в тип данных SystemVerilog MATLAB Coder, и вы получите ошибку. Если длина слова с фиксированной точкой меньше или равна размеру слова хоста, MATLAB Coder преобразует тип данных с фиксированной точкой во встроенный тип C.

logic [n-1:0]

logic signed [n-1:0]

Логическая длина вектора (n) равно wordlength. Знак наследуется от типа фиксированной точки.

bit [n-1:0]

bit signed [n-1:0]

Длина вектора бита (n) равно wordlength. Знак наследуется от типа фиксированной точки.

singleshortreal
doublereal
complex

Кодер сплющивает комплексные сигналы в действительные и мнимые части в компоненте SystemVerilog.

векторы, матрицы

массивы

Для примера матрица 4 на 2 в MATLAB преобразуется в одномерный массив из восьми элементов в SystemVerilog. По умолчанию кодер уплощает матрицы в основном порядке столбца. Для перехода к порядку основных строк используйте -rowmajor опция со dpigen функция. Для получения дополнительной информации смотрите Сгенерировать код, который использует размещение массива Row-Major (MATLAB Coder).

structure

Кодер уплощает элементы структуры в отдельные порты в компоненте SystemVerilog.

перечисленные типы данныхenum

Сгенерированная общая библиотека

Функция dpigen автоматически компилирует общую библиотеку, необходимую для запуска экспортированного компонента DPI в среде SystemVerilog. make-файл, создающий общую библиотеку, имеет расширение _rtw.mk. Для примера, для fun.m, имя файла make fun_rtw.mk.

Во время компиляции функция dpigen создает файл библиотеки.

  • Windows® 64: function_win64.dll

  • Linux®: function.so

function - имя функции MATLAB, из которой был сгенерирован компонент DPI.

Примечание

Если вы используете 64-битный MATLAB в Windows, то получаете 64-битную DLL, которую можно использовать только с 64-битным симулятором HDL.

Убедитесь, что версия MATLAB соответствует версии Симулятора HDL.

Сгенерированный испытательный стенд

Функция dpigen также создает испытательный стенд. Можно использовать этот испытательный стенд, чтобы убедиться, что сгенерированный компонент SystemVerilog функционально эквивалентен исходной функции MATLAB. Генератор запускает ваш код MATLAB, чтобы сохранить входные и выходные данные вектора для использования в испытательный стенд. Этот испытательный стенд не предназначен для замены стенда системного тестирования для вашего собственного применения. Однако сгенерированный испытательный стенд можно использовать в качестве исходного примера при создании собственного системного испытательного стенда.

Сгенерированные выходы

  • C и заголовочные файлы из вашего алгоритма, сгенерированные MATLAB Coder

  • Файлы заголовков и C для оболочки DPI, сгенерированные HDL- Verifier™

  • Файл SystemVerilog, который открывает компонент и добавляет сигналы управления

  • Файл пакета SystemVerilog, который содержит все объявления функций компонента DPI

  • SystemVerilog испытательного стенда (с -testbench опция)

  • Файлы данных, используемые с Симулятором HDL (с -testbench опция)

  • Симулятор HDL скриптов, такие как *.do или *.sh-testbench опция)

  • Файлы make *.mk

Сгенерированный упаковщик SystemVerilog

Весь код SystemVerilog, сгенерированный функцией dpigen содержит набор управляющих сигналов и Initialize функция.

Сгенерированные управляющие сигналы

  • clk: синхроимпульс синхронизации

  • clk_enable: включение синхроимпульса

  • reset: асинхронный сброс

Сгенерированная функция инициализации

The Initialize функция вызывается в начале симуляции.

Для примера:

 import "DPI" function void DPI_Subsystem_initialize();

Если сигнал асинхронного сброса высок (переходит от 0 до 1), Initialize вызывается снова.

Факторы о симуляции

При симуляции компонента DPI в вашем HDL- окружения reset, clock, и clk_enable вести себя следующим образом:

  • Когда clk_enable является 0выходная функция DPI не выполняется, и выходные значения не обновляются.

  • Когда clk_enable является 1 и reset является 0выходная функция DPI выполняется на положительном ребре синхросигнала.

  • Когда reset является 1внутреннее состояние компонента DPI устанавливается на его начальное значение. Это действие эквивалентно использованию clear функция в MATLAB для обновления постоянных переменных. Затем выходы значения отражают начальное состояние компонента DPI и текущие значения входа. Для получения дополнительной информации о стойких переменных см. Раздел «Стойкие переменные».

Ограничения

  • Аргументы переменного размера не поддерживаются.

  • Большие номера с фиксированной точкой, которые превышают системные размеры слова, не поддерживаются.

  • Некоторые оптимизации, такие как постоянное складывание, не поддерживаются, потому что они изменяют интерфейс сгенерированной функции C. Для получения дополнительной информации смотрите Оптимизация кодера MATLAB в Сгенерированном коде (MATLAB Coder).

  • HDL Verifier ограничивает матрицы и векторы одномерными массивами в SystemVerilog. Для примера матрица 4 на 2 в MATLAB преобразуется в одномерный массив из восьми элементов в SystemVerilog.

  • Коллбэк PostCodegen в объектах config не поддерживается.

Похожие темы