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 в обратной связи и предотвратить алгебраические циклы. Для получения дополнительной информации смотрите Использование Непрямое Сквозное соединение в блоке 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
| string
| 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
| string
| fixed point
| enumerated
| bus
Вывод
развернуть все
y
— Выходной аргумент
скаляр | вектор | матрица
Первый выходной аргумент функции в блоке MATLAB Function. Если вы переименовываете аргумент функции в редакторе, блок переименовывает порт соответственно.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| string
| fixed point
| enumerated
| bus
n
— Выходной аргумент n
скаляр | вектор | матрица
n
выходной аргумент th от функции в блоке MATLAB Function. Когда вы добавляете аргумент в редакторе, блок добавляет порт соответственно.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| string
| 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 см.:
Архитектура HDLMATLAB Function (Значение по умолчанию) | Это - архитектура по умолчанию для блоков MATLAB Function с типами данных с фиксированной точкой. Когда вы используете эту архитектуру, можно использовать скорость и оптимизацию области для блоков, которые окружают блок MATLAB Function. Код в блоке MATLAB Function не оптимизирован. |
MATLAB Datapath | Это - архитектура по умолчанию для блоков MATLAB Function с типами данных с плавающей точкой. Когда вы используете эту архитектуру, генератор кода обрабатывает блок MATLAB Function как регулярный блок Subsystem. Путем включения этой архитектуры для фиксированных точек можно использовать скорость и оптимизацию области для блоков в блоке MATLAB Function и через блок MATLAB Function с другими блоками Simulink. Эта возможность позволяет вам задать дополнительные свойства для блока MATLAB Function, который вы задали бы для Subsystem, такого как ClockRatePipelining и FlattenHierarchy. |
Свойства блока HDLAdaptivePipelining | Автоматическая конвейерная вставка на основе инструмента синтеза, предназначайтесь для частоты и размеров слова множителя. Значением по умолчанию является 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). |
VariablesToPipeline | Предупреждение VariablesToPipeline не рекомендуется. Использование coder.hdl.pipeline (HDL Coder) вместо этого.
Вставьте конвейерный регистр при выходе заданной переменной или переменных. Задайте список переменных как вектор символов с пробелами, разделяющими переменные. Чтобы задать это свойство, установите Architecture на MATLAB Function . |
ОграниченияЕсли блок содержит Систему object™, входные параметры блока не могут иметь недискретный (постоянный или Inf
Размер шага.
HDL Coder не поддерживает MATLAB Function, который содержит ту же переменную как ввод и вывод функции. Например, этот код MATLAB не поддерживается.
Для подмножества языка MATLAB, поддержанного для генерации HDL-кода от блока MATLAB Function, смотрите Поддерживаемые типы данных MATLAB, Операторы и Операторы управления (HDL Coder).
Генерация кода PLC
Сгенерируйте код Структурированного текста с помощью Simulink® PLC Coder™.
Преобразование фиксированной точки
Спроектируйте и симулируйте системы фиксированной точки с помощью Fixed-Point Designer™.
Фактическая поддержка типа данных или возможности зависит от реализации блока.
Введенный в R2011a