Программное обеспечение HDL Coder™ поддерживает генерацию HDL-кода от блоков MATLAB Function, которые включают скомпилированные внешние функции. Эта функция позволяет вам записать допускающий повторное использование код MATLAB® и вызвать его от нескольких блоков MATLAB Function.
Такие функции должны быть заданы в файлах, которые находятся на пути к блоку MATLAB Function. Используйте %#codegen
директива компиляции, чтобы указать, что код MATLAB подходит для генерации кода. См. Функциональное Определение (MATLAB Coder) для получения информации о том, как создать, скомпилировать, и вызвать внешние функции.
Прежде, чем сгенерировать HDL-код для подсистемы, содержащей блок MATLAB Function, создайте блочный код MATLAB Function, чтобы проверить ошибки. Чтобы создать код, выберите Build из меню Tools в Редакторе Блока MATLAB Function (или нажмите CTRL+B).
hdlfimath
Утилита для оптимизированных настроек FIMATHhdlfimath
функция является утилитой, которая задает спецификацию FIMATH, которая оптимизирована для генерации HDL-кода.
Следующий листинг показывает fimath
установка заданного hdlfimath
.
hdlfm = fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'FullPrecision', 'ProductWordLength', 32,... 'SumMode', 'FullPrecision', 'SumWordLength', 32,... 'CastBeforeSum', true);
Оператор деления HDL не поддерживает 'floor'
округление режима. Используйте 'round'
режим или изменение операции деления целого числа со знаком к делению беззнаковых целых чисел.
Когда 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 явным образом, вы включаете оптимизацию для отображения RAM и конвейеризации. Постарайтесь не наследовать тип выходных данных для блока MATLAB Function, для которого вы хотите включить оптимизацию.
HDL Coder поддерживает и настраиваемый и ненастраиваемые параметры со следующими типами данных:
Скаляр
Вектор
Комплекс
Структура
Перечисление
При использовании настраиваемых параметров с блоком MATLAB Function:
Настраиваемым параметром должен быть Simulink. Объект параметра с StorageClass
установите на ExportedGlobal
.
x = Simulink.Parameter
x.Value = 1
x.CoderInfo.StorageClass = 'ExportedGlobal'
В диалоговом окне Ports и Data Manager установите флажок tunable.
Для получения дополнительной информации смотрите, Генерируют Порты DUT для Настраиваемых параметров.
Когда ваш проект содержит блоки MATLAB Function, прежде чем вы сгенерируете HDL-код, можно осуществить Проверку проверки на настройки блока MATLAB function в Средстве проверки Модели HDL. Эта проверка проверяет, используете ли вы рекомендуемые блоки MATLAB Function в генерации HDL-кода. Настройки включают ли fimath
настройки заданы согласно hdlfimath
и флажок Saturate on integer overflow снимается.
В диалоговом окне 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