exponenta event banner

Создание компонентов DPI с помощью MATLAB

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

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

Примечание

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

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

Поддерживаемые типы данных MATLAB преобразуются в типы данных SystemVerilog, как показано в этой таблице. При использовании dpigen , используйте 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, и появится ошибка. Если длина слова с фиксированной точкой меньше или равна размеру слова хоста, кодер MATLAB преобразует тип данных с фиксированной точкой во встроенный тип 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 функция. Дополнительные сведения см. в разделе Создание кода, использующего макет главного массива строк (кодер MATLAB).

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

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

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

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

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

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

  • Сценарии имитатора HDL, такие как *.do или *.sh (с помощью -testbench опция)

  • Makefile *.mk

Сгенерированная оболочка SystemVerilog

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

Генерируемые сигналы управления

  • clk: часы синхронизации

  • clk_enable: включение часов

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

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

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).

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

  • Обратный вызов PostCodegen в объектах конфигурации не поддерживается.

Связанные темы