Можно экспортировать функцию MATLAB® как компонент с интерфейсом программирования на машинном языке (DPI) для использования в симуляции SystemVerilog. Перенесите сгенерированный код C с оберткой DPI, которая передает с SystemVerilog тонкую функцию интерфейса в симуляции SystemVerilog.
Для MATLAB вы генерируете компонент с помощью функции dpigen
.
У вас должна быть лицензия MATLAB Coder™, чтобы использовать эту функцию.
Поддерживаемые типы данных MATLAB преобразованы в типы данных SystemVerilog, как показано в следующей таблице.
MATLAB | SystemVerilog |
---|---|
uint8 | byte unsigned |
uint16 | shortint unsigned |
uint32 | int unsigned |
uint64 | longint unsigned |
int8 | byte |
int16 | shortint |
int32 | int |
int64 | longint |
single | shortreal |
double | real |
logical | byte unsigned |
fi (тип данных с фиксированной точкой) | Зависит от размера слова фиксированной точки. Если размер слова фиксированной точки является больше, чем размер слова хоста (например, 64-битным по сравнению с 32-битным), то этот тип данных не может быть преобразован в тип данных SystemVerilog MATLAB Coder, и вы получите ошибку. Если размер слова фиксированной точки меньше чем или равен размеру слова хоста, MATLAB Coder преобразовывает тип данных с фиксированной точкой во встроенный тип C. |
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
: часы включают
сброс:
асинхронный сброс
Функция 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 и текущие входные значения. Для получения дополнительной информации на персистентных переменных, смотрите Персистентные Переменные (MATLAB).
Аргументы переменного размера не поддержаны.
Большие числа фиксированной точки, которые превышают системный размер слова, не поддержаны.
Некоторая оптимизация, такая как сворачивание констант, не поддержана, потому что они изменяют интерфейс сгенерированной функции C. Для получения дополнительной информации смотрите Оптимизацию MATLAB Coder в Сгенерированном коде (MATLAB Coder).
HDL Verifier ограничивает матрицы и векторы к одномерным массивам в SystemVerilog. Например, 4 2 матрица в MATLAB преобразована в одномерный массив восьми элементов в SystemVerilog.
Коллбэк PostCodegen в объектах конфигурации не поддержан.