Можно экспортировать MATLAB® функция как компонент с интерфейсом прямого программирования (DPI) для использования в симуляции SystemVerilog. Перенос сгенерированного кода C с помощью оболочки DPI, которая взаимодействует с функцией тонкого интерфейса SystemVerilog в симуляции SystemVerilog.
Для MATLAB компонент генерируется с помощью dpigen функция.
Примечание
Для использования этой функции необходимо иметь лицензию MATLAB Coder™.
Поддерживаемые типы данных MATLAB преобразуются в типы данных SystemVerilog, как показано в этой таблице. При использовании dpigen function, использовать PortsDataType свойство для выбора Compatible C type, Logic vector, или Bit vector типы данных.
Сгенерированные типы SystemVerilog
| MATLAB | SystemVerilog | ||
|---|---|---|---|
| Совместимый тип C | Логический вектор | Битовый вектор | |
uint8 | byte unsigned | logic [7:0] | bit [7:0] |
uint16 | shortint unsigned | logic [15:0] | bit [15:0] |
uint32 | int unsigned | logic [31:0] | bit [31:0] |
uint64 | longint unsigned | logic [63:0] | bit [63:0] |
int8 | byte | logic signed [7:0] | bit signed [7:0] |
int16 | shortint | logic signed [15:0] | bit signed [15:0] |
int32 | int | logic signed [31:0] | bit signed [31:0] |
int64 | longint | logic signed [63:0] | bit signed [63:0] |
logical | byte unsigned | logic [0:0] | bit [0:0] |
fi(тип данных с фиксированной точкой) | Зависит от размера слова с фиксированной точкой. Если длина слова с фиксированной точкой больше размера слова хоста (для примера, 64-битного и 32-битного), то этот тип данных не может быть преобразован в тип данных SystemVerilog MATLAB Coder, и вы получите ошибку. Если длина слова с фиксированной точкой меньше или равна размеру слова хоста, MATLAB Coder преобразует тип данных с фиксированной точкой во встроенный тип C. |
Логическая длина вектора ( |
Длина вектора бита ( |
single | shortreal | ||
double | real | ||
complex | Кодер сплющивает комплексные сигналы в действительные и мнимые части в компоненте SystemVerilog. | ||
| векторы, матрицы | массивы Для примера матрица 4 на 2 в MATLAB преобразуется в одномерный массив из восьми элементов в SystemVerilog. По умолчанию кодер уплощает матрицы в основном порядке столбца. Для перехода к порядку основных строк используйте | ||
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, сгенерированный функцией 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 не поддерживается.