Программное обеспечение HDL Coder™ поддерживает генерацию HDL-кода из блоков MATLAB Function, которые включают скомпилированные внешние функции. Эта функция позволяет вам записать переиспользуемый MATLAB® код и вызвать его из нескольких блоков MATLAB Function.
Такие функции должны быть определены в файлах, которые находятся на MATLAB Function пути блока. Используйте %#codegen
директива компиляции, указывающая, что код MATLAB подходит для генерации кода. Смотрите Определение функции для получения информации о том, как создавать, компилировать и активировать внешние функции.
Перед генерацией HDL-кода для подсистемы, содержащей MATLAB Function блок, создайте MATLAB Function блочный код, чтобы проверить на ошибки. Чтобы создать код, нажмите кнопку Build Model в редакторе функций.
hdlfimath
Утилита для оптимизированных настроек FIMATH hdlfimath
функция является утилитой, которая задает спецификацию FIMATH, оптимизированную для генерации HDL-кода.
В следующем списке показаны fimath
настройка, заданная как hdlfimath
.
hdlfm = fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'FullPrecision', 'ProductWordLength', 32,... 'SumMode', 'FullPrecision', 'SumWordLength', 32,... 'CastBeforeSum', true);
Оператор деления не поддерживает 'floor'
режим округления. Использование 'round'
mode или измените целое число со знаком операций деления на беззнаковое целое деление.
Когда fimath
OverflowMode
свойство fimath
для спецификации задано значение 'Saturate'
Генерация HDL-кода запрещена для следующих случаев:
SumMode
установлено в 'SpecifyPrecision'
ProductMode
установлено в 'SpecifyPrecision'
Используйте значение по умолчанию (Fixed-point
) настройка опции Treat these inherited signal types as fi objects.
Очистить настройку Saturate on integer overflow для блока MATLAB Function.
Путем явной установки типа выходных данных блока MATLAB Function, вы включаете оптимизацию для отображения ОЗУ и конвейеризации. Избегайте наследования типа выходных данных для блока MATLAB Function, для которого вы хотите включить оптимизацию.
HDL Coder поддерживает как настраиваемые, так и не настраиваемые параметры со следующими типами данных:
Скаляр
Вектор
Комплекс
Структура
Перечисление
При использовании настраиваемых параметров с блоком MATLAB Function:
Настраиваемым параметром должен быть объект Simulink .Parameter с StorageClass
установлено на ExportedGlobal
.
x = Simulink.Parameter
x.Value = 1
x.CoderInfo.StorageClass = 'ExportedGlobal'
В диалоговом окне Ports and Data Manager установите флажок tunable.
Для получения дополнительной информации смотрите Сгенерировать порты DUT для настраиваемых параметров.
Когда ваш проект содержит MATLAB Function блоков, перед генерацией HDL-кода можно запустить проверку параметров блока Check for MATLAB Function в HDL Code Advisor. Эта проверка проверяет, используете ли вы рекомендуемые блоки MATLAB Function для генерации HDL-кода. Параметры включают в себя: fimath
настройки определяются как hdlfimath
и Saturate on integer overflow флажок снимается.
Смотрите также Проверка совместимости HDL модели Simulink с использованием HDL-код Advisor.
В диалоговом окне HDL Block Properties для блоков MATLAB Function можно задать, использовать ли MATLAB Function
или MATLAB Datapath
как архитектура HDL. Модели с плавающей точкой используют MATLAB Datapath
архитектура, даже если вы задаете HDL-архитектуру следующим MATLAB Function
на блоке. Модели с фиксированной точкой используют MATLAB Function
по умолчанию архитектура.
Чтобы выполнить различные оптимизации скорости и площади, такие как совместное и распределённая конвейеризация внутри блока MATLAB Function и через контур блока MATLAB Function с другими Simulink® блоки, используйте MATLAB Datapath
архитектура. Когда вы используете эту архитектуру, генератор кода обрабатывает блок MATLAB Function как обычный блок Subsystem. Эта возможность позволяет вам оптимизировать алгоритм внутри блока MATLAB Function и через блок MATLAB Function с другими блоками в вашей модели.
Смотрите Оптимизации HDL через контур блока MATLAB function с использованием архитектуры MATLAB Datapath.
Проверьте настройки блока MATLAB Function