MATLAB Function
Включайте код MATLAB в модели, которые генерируют встраиваемый код С
Описание
С блоком MATLAB Function можно записать функцию MATLAB® для использования в модели Simulink®. Функция MATLAB, которую вы создаете, выполняется для симуляции и генерирует код для цели Simulink Coder™. Если вы плохо знакомы с Simulink и продуктами MATLAB, смотрите, что функции MATLAB Реализации Используют Блоки, и Создайте Пользовательскую Функциональность Используя блок MATLAB function для обзора.
Двойной клик по блоку MATLAB function открывает свой редактор, где вы пишете функцию MATLAB, как в этом примере:
Чтобы узнать больше об этом редакторе, см. Редактор блока MATLAB function.
Вы задаете входные и выходные данные с блоком MATLAB Function в функциональном заголовке в качестве аргументов и возвращаемых значений. Значения аргументов и возвращаемые значения предыдущей функции, взятой в качестве примера, соответствуют вводам и выводам блока в модели:
Можно также задать данные, ввести триггеры и вызов функции выходные параметры с помощью Портов и Менеджера данных, к которому вы получаете доступ из Редактора блока MATLAB function путем выбора Edit Data. Смотрите Порты и Менеджер данных.
Блок MATLAB Function генерирует эффективный встраиваемый код на основе анализа, который определяет размер, класс и сложность каждой переменной. Этот анализ вводит следующие ограничения:
В дополнение к ограничениям языка блок MATLAB Function поддерживает подмножество функций, доступных в MATLAB. Список поддерживаемых функций дан в Функциях и Объектах, Поддержанных для Генерации кода C/C++. Эти функции включают функции в общие категории, такие как:
Примечание
Несмотря на то, что код для этого блока пытается привести точно к тем же результатам как MATLAB, различия могут произойти из-за погрешностей округления. Эти числовые различия, которые могут быть некоторыми eps
первоначально, может увеличить после повторенных операций. Уверенность в поведении nan
не рекомендуется. Различные компиляторы C могут привести к различным результатам для того же расчета.
Примечание
В блоке MATLAB Function, %#codegen
директива включена, чтобы подчеркнуть, что алгоритм MATLAB блока всегда предназначается для генерации кода. %#codegen
директива или отсутствие ее, не изменяет поведение проверки ошибок в контексте блока MATLAB Function. Для получения дополнительной информации смотрите Направляющий % Компиляции #codegen.
Чтобы поддержать визуализацию данных, блок MATLAB Function поддерживает вызовы функций MATLAB для симуляции только. Смотрите Внешние Функции, чтобы изучить некоторые ограничения этой возможности, и как она объединяется с анализом кода для этого блока. Если эти вызовы функции непосредственно не влияют ни на один из вводов или выводов Simulink, вызовы не появляются в сгенерированном коде Simulink Coder.
От блоков MATLAB Function можно также вызвать функции, определяемые в блоке Simulink Function. Можно вызвать функции Stateflow® с Export Chart Level Functions (Make Global), и Allow exported functions to be called by Simulink зарегистрировался в диалоговом окне свойств диаграммы.
В Портах и Менеджере данных, можно объявить, что вход блока параметр Simulink вместо порта. Блок MATLAB Function также поддерживает наследование типов и размера для входных параметров, выходных параметров и параметров. Можно также задать эти свойства явным образом. Смотрите Аргументы функции Типа, Аргументы функции Размера, и Добавьте Аргументы Параметра для описаний переменных, которые вы используете в блоках MATLAB Function.
Рекурсивные вызовы не позволены в блоках MATLAB Function.
По умолчанию блоки MATLAB Function имеют прямое включенное сквозное соединение. Чтобы отключить его, в Портах и Менеджере данных, снимают флажок Allow direct feedthrough. Непрямое сквозное соединение позволяет семантике гарантировать, что выходные параметры полагаются только на текущее состояние. Используя непрямое сквозное соединение позволяет вам использовать блоки MATLAB Function в обратной связи и предотвратить алгебраические циклы.
Порты
Входной параметр
развернуть все
u
— Входной параметр u
скаляр | вектор | матрица
Введите соответствие первому входному параметру функции в блоке MATLAB Function. Если вы переименовываете аргумент функции в редакторе, блок переименовывает порт соответственно.
Типы данных, поддержанные MATLAB, но не поддерживаемые Simulink, не могут быть переданы между моделью Simulink и функцией в блоке MATLAB Function. Эти типы могут использоваться в блоке MATLAB Function.
Для получения дополнительной информации о поддержке фиксированной точки этого блока обратитесь к Типам данных с фиксированной точкой с блоком MATLAB function (Fixed-Point Designer) и блок MATLAB function с Переопределением Типа данных (Fixed-Point Designer).
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
n
— Входной параметр n
скаляр | вектор | матрица
n
входной параметр th к функции в блоке MATLAB Function. Когда вы добавляете аргумент в редакторе, блок добавляет порт соответственно.
Типы данных, поддержанные MATLAB, но не поддерживаемые Simulink, не могут быть переданы между моделью Simulink и функцией в блоке MATLAB Function. Эти типы могут использоваться в блоке MATLAB Function.
Для получения дополнительной информации о поддержке фиксированной точки этого блока обратитесь к Типам данных с фиксированной точкой с блоком MATLAB function (Fixed-Point Designer) и блок MATLAB function с Переопределением Типа данных (Fixed-Point Designer).
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
Вывод
развернуть все
y
— Выходной аргумент
скаляр | вектор | матрица
Первый выходной аргумент функции в блоке MATLAB Function. Если вы переименовываете аргумент функции в редакторе, блок переименовывает порт соответственно.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
n
— Выходной аргумент n
скаляр | вектор | матрица
n
выходной аргумент th от функции в блоке MATLAB Function. Когда вы добавляете аргумент в редакторе, блок добавляет порт соответственно.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
Характеристики блока
Типы данных | Boolean[a] | | | | | |
|
Прямое сквозное соединение | no
|
Многомерные сигналы |
|
Сигналы переменного размера |
|
Обнаружение пересечения нулем | no
|
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью Simulink® Coder™.
Фактическая поддержка типа данных или возможности зависит от реализации блока.
Генерация HDL-кода
Сгенерируйте Verilog и код VHDL для FPGA и проекты ASIC с помощью HDL Coder™.
HDL Coder™ обеспечивает дополнительные параметры конфигурации, которые влияют на реализацию HDL и синтезируемую логику. Фактическая поддержка типа данных или возможности зависит от реализации блока. Для лучшых практик использования блока MATLAB Function см.:
Архитектура HDL
MATLAB Function (Значение по умолчанию) | Это - архитектура по умолчанию для блоков MATLAB Function с типами данных с фиксированной точкой. Когда вы используете эту архитектуру, можно использовать скорость и оптимизацию области для блоков, которые окружают блок MATLAB Function. Код в блоке MATLAB Function не оптимизирован. |
MATLAB Datapath | Это - архитектура по умолчанию для блоков MATLAB Function с типами данных с плавающей точкой. Когда вы используете эту архитектуру, генератор кода обрабатывает блок MATLAB Function как регулярный блок Subsystem. Путем включения этой архитектуры для фиксированных точек можно использовать скорость и оптимизацию области для блоков в блоке MATLAB Function и через блок MATLAB Function с другими блоками Simulink. Эта возможность позволяет вам задать дополнительные свойства для блока MATLAB Function, который вы задали бы для Subsystem, такого как ClockRatePipelining и FlattenHierarchy. |
Свойства блока HDL
AdaptivePipelining | Автоматическая конвейерная вставка на основе инструмента синтеза, предназначайтесь для частоты и размеров слова множителя. Значением по умолчанию является inherit . Чтобы задать это свойство, установите Architecture на MATLAB Datapath . См. также AdaptivePipelining (HDL Coder). |
BalanceDelays | Обнаруживает введение новых задержек вдоль одного пути и вставляет соответствие с задержками на других путях. Значением по умолчанию является inherit . Чтобы задать это свойство, установите Architecture на MATLAB Datapath . См. также BalanceDelays (HDL Coder). |
ClockRatePipelining | Вставьте конвейерные регистры на более быстрой тактовой частоте вместо более медленной скорости передачи данных. Значением по умолчанию является inherit . Чтобы задать это свойство, установите Architecture на MATLAB Datapath . См. также ClockRatePipelining (HDL Coder). |
ConstMultiplierOptimization | Каноническая цифра со знаком (CSD) или учтенная оптимизация CSD. Значением по умолчанию является none . См. также ConstMultiplierOptimization (HDL Coder).
|
ConstrainedOutputPipeline | Количество регистров, чтобы поместить при выходных параметрах путем перемещения существующих задержек в рамках проекта. Распределенная конвейеризация не перераспределяет эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите ConstrainedOutputPipeline (HDL Coder).
|
DistributedPipelining | Конвейерно обработайте распределение регистра или повторную синхронизацию регистра. Значением по умолчанию является off . См. также DistributedPipelining (HDL Coder).
|
DSPStyle | Синтез приписывает для отображения множителя. Значением по умолчанию является none . Чтобы задать это свойство, установите Architecture на MATLAB Datapath . См. также DSPStyle (HDL Coder). |
FlattenHierarchy | Удалите иерархию подсистемы из сгенерированного HDL-кода. Значением по умолчанию является inherit . Чтобы задать это свойство, установите Architecture на MATLAB Datapath . См. также FlattenHierarchy (HDL Coder). |
InputPipeline | Количество входных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите InputPipeline (HDL Coder).
|
InstantiateFunctions | Сгенерируйте VHDL® entity или Verilog® module для каждой функции. Значением по умолчанию является off . См. также InstantiateFunctions (HDL Coder).
|
LoopOptimization | Разверните, передайте потоком или не оптимизируйте циклы. Значением по умолчанию является none . Если вы устанавливаете Architecture на MATLAB Datapath , можно только развернуть циклы. Если вы хотите использовать потоковую передачу цикла с MATLAB Datapath архитектура, можно использовать оптимизацию потоковой передачи путем определения StreamingFactor. См. также LoopOptimization (HDL Coder). |
MapPersistentVarsToRAM | Сопоставьте персистентные массивы с RAM. Значением по умолчанию является off . См. также MapPersistentVarsToRAM (HDL Coder).
|
OutputPipeline | Количество выходных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите OutputPipeline (HDL Coder).
|
ResetType | Подавите генерацию логики сброса. Значением по умолчанию является default , который генерирует логику сброса. См. также ResetType (HDL Coder).
|
SharingFactor | Количество функционально эквивалентных ресурсов, чтобы сопоставить с одним совместно используемым ресурсом. Значением по умолчанию является 0. См. также Разделение ресурсов (HDL Coder).
|
StreamingFactor | Количество параллельных информационных каналов или векторы, которые являются временем, мультиплексированным, чтобы преобразовать в последовательные, скалярные информационные каналы. Значение по умолчанию 0, который реализует полностью параллельные информационные каналы. Чтобы задать это свойство, установите Architecture на MATLAB Datapath . См. также Передающий потоком (HDL Coder). |
UseMatrixTypesInHDL | Сгенерируйте 2D матрицы в HDL-коде. Значением по умолчанию является off . Чтобы задать это свойство, установите Architecture на MATLAB Function . См. также UseMatrixTypesInHDL (HDL Coder). |
VariablesToPipeline | ПредупреждениеVariablesToPipeline не рекомендуется. Используйте coder.hdl.pipeline вместо этого.
Вставьте конвейерный регистр при выходе заданной переменной или переменных. Задайте список переменных как вектор символов с пробелами, разделяющими переменные. Чтобы задать это свойство, установите Architecture на MATLAB Function . |
Ограничения
Если блок содержит Систему object™, входные параметры блока не могут иметь недискретный (постоянный или Inf
'SampleTime' .
HDL Coder не поддерживает MATLAB Function, который содержит ту же переменную как ввод и вывод функции. Например, этот код MATLAB не поддержан.
Для подмножества языка MATLAB, поддержанного для генерации HDL-кода от блока MATLAB Function, смотрите Поддерживаемые типы данных MATLAB, Операторы и Операторы управления (HDL Coder).
Генерация кода PLC
Сгенерируйте код Структурированного текста с помощью Simulink® PLC Coder™.
Преобразование фиксированной точки
Спроектируйте и симулируйте системы фиксированной точки с помощью Fixed-Point Designer™.
Фактическая поддержка типа данных или возможности зависит от реализации блока.
Введенный в R2011a