Product
Умножьте и разделите скаляры и нескаляры или умножьте и инвертируйте матрицы
- Библиотека:
Simulink / Обычно Используемые Блоки
Simulink / Математические операции
HDL Coder / Обычно Используемые Блоки
HDL Coder / Операции Плавающей точки HDL
HDL Coder / Математические операции
Описание
Блок Product выводит результат умножения двух входов: два скаляра, скаляр и нескалярное, или два нескаляра, которые имеют те же размерности. Значения параметров по умолчанию, которые задают это поведение:
Эта таблица показывает, что выход блока Product, например, вводит использующие значения параметров блоков по умолчанию.
Входные параметры и поведение | Пример |
---|
Скаляр X скаляров Выведите продукт двух входных параметров. |
|
Скаляр X нескалярный Выведите нескалярное наличие тех же размерностей как нескалярный вход. Каждым элементом нескалярного выхода является продукт входного скаляра и соответствующий элемент нескалярного входа. |
|
Нескалярный X нескалярный Выведите нескалярное наличие тех же размерностей как входные параметры. Каждым элементом выхода является продукт соответствующих элементов входных параметров. |
|
Divide и блоки Product of Elements являются вариантами блока Product.
Блок Product (или блок Divide или блок Product of Elements, если соответственно сконфигурировано) могут:
Численно умножьте и разделите любое количество скаляра, вектора или матричных входных параметров
Выполните умножение матриц и деление на любом количестве матричных входных параметров
Блок Product выполняет скалярное умножение или умножение матриц, в зависимости от значения параметра Умножения. Блок принимает одни или несколько входных параметров, в зависимости от Количества входного параметра. Количество входного параметра также задает операцию, чтобы выполнить на каждом входе.
Блок Product может ввести любую комбинацию скаляров, векторов и матриц, для которых операция выполнить имеет математически заданный результат. Блок выполняет заданные операции на входных параметрах, затем выводит результат.
Блок Product имеет два режима: Поэлементный режим, который процессы нескалярные входные параметры поэлементно и режим Matrix, который процессы нескалярные входные параметры как матрицы.
Поэлементный режим
Когда вы устанавливаете Умножение на Element-wise(.*)
, блок продукта находится в Поэлементном режиме, в котором он работает с отдельными числовыми элементами любых нескалярных входных параметров. Эквивалентным MATLAB® является .*
оператор. В поэлементном режиме блок Product может выполнить разнообразие умножения, деления и арифметических операций инверсии.
Значение Количества входного параметра управляет и сколько входных параметров существует и умножен ли каждый или разделен, чтобы сформировать выход. Когда блок Product находится в поэлементном режиме и имеет только один вход, это функционально эквивалентно блоку Product of Elements. Когда блок имеет несколько входных параметров, любые нескалярные входные параметры должны иметь идентичные размерности, и блок выводит нескалярное с теми размерностями. Чтобы вычислить выход, блок сначала расширяет любой скалярный вход до нескалярного, которое имеет те же размерности как нескалярные входные параметры.
Эта таблица показывает, что выход блока Product, например, вводит, с помощью указанных значений для Количества входного параметра.
Значения параметров | Примеры |
---|
Количество входных параметров:
2 |
|
Количество входных параметров:
*/ |
|
Количество входных параметров:
/**/ |
|
Количество inputs:** |
|
Количество входных параметров:
*/* |
|
Матричный режим
Когда значением параметра Умножения является Matrix(*)
, блок Product находится в режиме Matrix, в котором он обрабатывает нескалярные входные параметры как матрицы. Эквивалентным MATLAB является *
оператор. В режиме Matrix блок Product может инвертировать одну квадратную матрицу, или умножить и разделить любое количество матриц, которые имеют размерности, для которых математически задан результат.
Значение Количества входного параметра управляет и сколько входных параметров существует и умножена ли каждая входная матрица или разделена, чтобы сформировать выход. Синтаксис Количества входных параметров эквивалентен в поэлементном режиме. Различие между режимами находится в типе умножения и деления, которые происходят.
Ожидаемые различия между симуляцией и генерацией кода
Для поэлементных операций на комплексных входных параметрах с плавающей точкой симуляция и результаты генерации кода могут отличаться по случаям почти переполнения. Несмотря на то, что complex numbers выбран, и non-finite numbers не является выбранным On > панель диалогового окна Configuration Parameters, генератор кода не испускает код особого случая для промежуточного переполнения. Этот метод повышает эффективность встроенных операций для общего случая, который не включает экстремумы. Если входные параметры могли бы включать экстремумы, необходимо управлять этими случаями явным образом.
Сгенерированный код не может произвести тот же шаблон NaN
и inf
значения как симуляция, когда эти значения математически бессмысленны. Например, если симуляция выход содержит NaN
, выведите от сгенерированного кода, также содержит NaN
, но не обязательно в том же месте.
Порты
Входной параметр
развернуть все
Port_1
— Сначала введите, чтобы умножиться или разделиться
скаляр | вектор | матрица | массив N-D
Сначала введите, чтобы умножиться или разделиться, обеспеченный как скаляр, вектор, матрица или массив N-D.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Port_N
— Энный вход, чтобы умножиться или разделиться
скаляр | вектор | матрица | массив N-D
Энный вход, чтобы умножиться или разделиться, обеспеченный как скаляр, вектор, матрица или массив N-D.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
X
— Входной сигнал, чтобы умножиться
скаляр | вектор | матрица | массив N-D
Входной сигнал, который будет умножен с другими входными параметрами.
Зависимости
Чтобы включить один или несколько портов X, задайте один или несколько *
символы для параметра Number of inputs.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
÷
— Входной сигнал, чтобы разделиться или инвертировать
скаляр | вектор | матрица | массив N-D
Входной сигнал для операций деления или инверсии.
Зависимости
Чтобы включить один или несколько портов ÷, задайте один или несколько /
символы для параметра Number of inputs.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Вывод
развернуть все
Port_1
— Выведите вычисленный путем умножения, делясь или инвертируя входные параметры
скаляр | вектор | матрица | массив N-D
Выведите вычисленный путем умножения, делясь или инвертируя входные параметры.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Параметры
развернуть все
Основной
Number of inputs
— Контрольное число входных параметров и тип операции
2
(значение по умолчанию) | скаляр | *
или /
для каждого входного порта
Управляйте двумя свойствами блока:
Когда вы задаете:
1
или *
или /
Блок имеет один входной порт. В поэлементном режиме блок обрабатывает вход как описано для блока Product of Elements. В матричном режиме, если значением параметров является 1
или *
, блок выводит входное значение. Если значением является /
, вход должен быть квадратной матрицей (включая скаляр как вырожденный случай), и блок выводит обратную матрицу. Смотрите Поэлементный Режим и Матричный Режим для получения дополнительной информации.
Целочисленное значение> 1
Блок имеет количество входных параметров, данных целочисленным значением. Входы умножены вместе в поэлементном режиме или матричном режиме, как задано параметром Умножения. Смотрите Поэлементный Режим и Матричный Режим для получения дополнительной информации.
Неупомянутая строка двух или больше *
и /
'characters'
Блок имеет количество входных параметров, данных длиной вектора символов. Каждый вход, который соответствует *
символ умножается в выход. Каждый вход, который соответствует /
символ разделен на выход. Операции происходят в поэлементном режиме или матричном режиме, как задано параметром Умножения. Смотрите Поэлементный Режим и Матричный Режим для получения дополнительной информации.
Программируемое использование
Параметры блоков:
Inputs |
Ввод: символьный вектор |
Значения:
'2' | '**' | '*/' | '*/*' | ... |
Значение по умолчанию:
'2' |
Multiplication
— Поэлементный (.*) или Матрица (*) умножение
Element-wise(.*)
(значение по умолчанию) | Matrix(*)
Задайте, выполняет ли блок Element-wise(.*)
или Matrix(*)
умножение.
Программируемое использование
Параметры блоков:
Multiplication |
Ввод: символьный вектор |
Значения:
'Element-wise(.*)' | 'Matrix(*)' |
Значение по умолчанию:
'Element-wise(.*)' |
Multiply over
— Все размерности или заданное измерение
All dimensions
(значение по умолчанию) | Specified dimension
Задайте размерность, чтобы умножиться по как All dimensions
, или Specified dimension
. Когда вы выбираете Specified dimension
, можно задать Dimension как 1
или 2
.
Зависимости
Чтобы включить этот параметр, установите Number of inputs на *
и Multiplication к Element-wise (.*)
.
Программируемое использование
Параметры блоков: CollapseMode |
Ввод: символьный вектор |
Значения: 'All dimensions' | 'Specified dimension' |
Значение по умолчанию: 'All dimensions' |
Dimension
— Размерность, чтобы умножиться
1
(значение по умолчанию) | 2
| ...
| N
Задайте размерность, чтобы умножиться по как целое число, меньше чем или равное количеству размерностей входного сигнала.
Зависимости
Чтобы включить этот параметр, установите:
Программируемое использование
Параметры блоков: CollapseDim |
Ввод: символьный вектор |
Значения:
'1' | '2' | ... |
Значение по умолчанию: '1' |
Sample time
— Задайте шаг расчета как значение кроме -1
-1
(значение по умолчанию) | скаляр | вектор
Задайте шаг расчета как значение кроме-1. Для получения дополнительной информации см. Настройку времени выборки.
Зависимости
Этот параметр не отображается, если он явным образом не установлен в значение кроме -1
. Чтобы узнать больше, смотрите Блоки, для Которых Не Рекомендуется Шаг расчета.
Программируемое использование
Параметры блоков:
SampleTime |
Ввод: символьный вектор |
Значения: скаляр или вектор |
Значение по умолчанию:
'-1' |
Атрибуты сигнала
Require all inputs to have the same data type
— Потребуйте, чтобы все входные параметры имели совпадающий тип данных
off
(значение по умолчанию) | on
Задайте, должны ли входные сигналы все иметь совпадающий тип данных. Если вы включаете этот параметр, то ошибка происходит в процессе моделирования, если типы входного сигнала отличаются.
Программируемое использование
Параметры блоков:
InputSameDT |
Ввод: символьный вектор |
Значения:
'off' | 'on' |
Значение по умолчанию:
'off' |
Output minimum
— Минимальное выходное значение для проверки диапазона
[]
(значение по умолчанию) | скаляр
Нижнее значение выходной области значений, которую проверяет Simulink®.
Simulink использует минимум, чтобы выполнить:
Примечание
Output minimum не насыщает или отсекает фактический выходной сигнал. Используйте блок Saturation вместо этого.
Программируемое использование
Параметры блоков: OutMin |
Ввод: символьный вектор |
Значения: '[ ]' | скаляр |
Значение по умолчанию: '[ ]' |
Output maximum
— Максимальное выходное значение для проверки диапазона
[]
(значение по умолчанию) | скаляр
Верхнее значение выходной области значений это Simulink Check.
Simulink использует максимальное значение, чтобы выполнить:
Примечание
Output maximum не насыщает или отсекает фактический выходной сигнал. Используйте блок Saturation вместо этого.
Программируемое использование
Параметры блоков: OutMax |
Ввод: символьный вектор |
Значения: '[ ]' | скаляр |
Значение по умолчанию: '[ ]' |
Output data type
— Задайте тип выходных данных
Inherit: Inherit via internal rule
(значение по умолчанию) | Inherit: Keep MSB
| Inherit: Match scaling
| Inherit: Inherit via back propagation
| Inherit: Same as first input
| double
| single
| half
| int8
| uint8
| int16
| uint16
| int32
| uint32
| int64
| uint64
| fixdt(1,16)
| fixdt(1,16,0)
| fixdt(1,16,2^0,0)
| <data type expression>
Выберите тип данных для выхода. Тип может быть наследован, задан непосредственно или описан как объект типа данных, такой как Simulink.NumericType
. Для получения дополнительной информации смотрите Типы данных Управляющего сигнала.
Когда вы выбираете наследованную опцию, блок ведет себя можно следующим образом:
Inherit: Inherit via internal rule
— Simulink выбирает тип данных, чтобы сбалансировать числовую точность, эффективность и размер сгенерированного кода, при принятии во внимание свойств оборудования целевого процессора. Если вы изменяете настройки целевого процессора, тип данных, выбранный внутренним правилом, может измениться. Например, если блок умножает вход типа int8
усилением int16
и ASIC/FPGA
задан как целенаправленный тип оборудования, типом выходных данных является sfix24
. Если Unspecified (assume 32-bit Generic)
, другими словами, типовой 32-битный микропроцессор, задан как целевой компьютер, типом выходных данных является int32
. Если ни один из размеров слова, обеспеченных целевым микропроцессором, не может вместить выходную область значений, программное обеспечение Simulink отображает ошибку в Диагностическом Средстве просмотра.
Inherit: Keep MSB
– Simulink выбирает тип данных, который обеспечивает полный спектр операции, затем уменьшает точность выхода к размеру, подходящему для оборудования целевого процессора.
Совет
Для более эффективного сгенерированного кода отмените выбор параметра Saturate on integer overflow.
Это правило никогда не производит переполнение.
Inherit: Match scaling
– Simulink выбирает тип данных, масштабирование которого соответствий масштабирование входа вводит. Если полный спектр типа не соответствует на оборудовании целевого процессора, область значений уменьшается, давая к типу, подходящему для оборудования целевого процессора. Это правило может произвести переполнение. Это правило не поддерживает умножение между комплексными сигналами
Inherit: Keep MSB
и Inherit: Match scaling
правила не поддерживают умножение между комплексными сигналами или сигналами с ненулевым смещением. Правила поддерживают только умножение и деление ('**'
, '*/'
, '/*'
) между двумя входными параметрами, умножением матриц двух входных параметров и выходящим из строя продуктом двух элементов вектора.
Для программного обеспечения не всегда возможно оптимизировать КПД кода и числовую точность одновременно. Если внутреннее правило не удовлетворяет ваши определенные потребности для числовой точности или эффективности, используйте одну из следующих опций:
Задайте тип выходных данных явным образом.
Используйте простой выбор Inherit: Same as input
.
Явным образом задайте тип данных по умолчанию, такой как fixdt(1,32,16)
и затем используйте Fixed-Point Tool, чтобы предложить типы данных для вашей модели. Для получения дополнительной информации смотрите fxptdlg
(Fixed-Point Designer).
Чтобы задать ваше собственное правило наследования, используйте Inherit: Inherit via back propagation
и затем используйте блок Data Type Propagation. Примеры того, как использовать этот блок, доступны в библиотеке Signal Attributes блок Data Type Propagation Examples.
Inherit: Inherit via back propagation
— Используйте тип данных ведущего блока.
Inherit: Same as first input
— Используйте тип данных первого входного сигнала.
Программируемое использование
Параметры блоков: OutDataTypeStr |
Ввод: символьный вектор |
Значения: 'Inherit: Inherit via internal rule | 'Inherit: Keep MSB' | 'Inherit: Match scaling' | 'Inherit: Same as first input' | 'Inherit: Inherit via back propagation' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'uint64' |'int64' |'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>' |
Значение по умолчанию: 'Inherit: Inherit via internal rule' |
Lock output data type setting against changes by the fixed-point tools
— Препятствуйте тому, чтобы Fixed-Point Tool заменили тип Выходных данных
off
(значение по умолчанию) | on
Выберите этот параметр, чтобы препятствовать тому, чтобы Fixed-Point Tool заменили тип данных Output, который вы задаете на блоке. Для получения дополнительной информации смотрите, что Тип Выходных данных Блокировки Использования Устанавливает (Fixed-Point Designer).
Программируемое использование
Параметры блоков:
LockScale |
Ввод: символьный вектор |
Значения:
'off' | 'on' |
Значение по умолчанию:
'off' |
Integer rounding mode
— Режим Rounding для операций фиксированной точки
Floor
(значение по умолчанию) | Ceiling
| Convergent
| Nearest
| Round
| Simplest
| Zero
Выберите округляющийся режим для операций фиксированной точки. Можно выбрать:
Ceiling
Округляет положительные и отрицательные числа к положительной бесконечности. Эквивалентный MATLAB ceil
функция.
Convergent
Номер раундов к самому близкому представимому значению. Если связь происходит, раунды к самому близкому даже целое число. Эквивалентный Fixed-Point Designer™ convergent
функция.
Floor
Округляет положительные и отрицательные числа к отрицательной бесконечности. Эквивалентный MATLAB floor
функция.
Nearest
Номер раундов к самому близкому представимому значению. Если связь происходит, раунды к положительной бесконечности. Эквивалентный Fixed-Point Designer nearest
функция.
Round
Номер раундов к самому близкому представимому значению. Если связь происходит, округляет положительные числа к положительной бесконечности и округляет отрицательные числа к отрицательной бесконечности. Эквивалентный Fixed-Point Designer round
функция.
Simplest
Принимает решение между округлением к полу и округлением к нулю сгенерировать округление кода, который максимально эффективен.
Zero
Номер раундов к нулю. Эквивалентный MATLAB fix
функция.
Для получения дополнительной информации смотрите Округление (Fixed-Point Designer).
Параметры блоков всегда вокруг к самому близкому представимому значению. Чтобы управлять округлением параметров блоков, введите выражение с помощью функции округления MATLAB в поле маски.
Программируемое использование
Параметры блоков:
RndMeth |
Ввод: символьный вектор |
Значения:
'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
Значение по умолчанию:
'Floor' |
Saturate on integer overflow
— Метод действия переполнения
off
(значение по умолчанию) | on
Задайте, насыщает ли переполнение или переносится.
Действие | Объяснение | Повлияйте на переполнение | Пример |
---|
Установите этот флажок (on ).
|
Ваша модель имеет возможное переполнение, и вы хотите явную защиту насыщения в сгенерированном коде.
|
Переполнение насыщает или к минимальному или к максимальному значению, которое может представлять тип данных.
|
Максимальное значение, что int8 (8-битное целое число со знаком) тип данных может представлять, 127. Любой результат блочной операции, больше, чем это максимальное значение, вызывает переполнение 8-битного целого числа. С установленным флажком блок выход насыщает в 127. Точно так же блок выход насыщает в минимальном выходном значении-128.
|
Не устанавливайте этот флажок (off ).
|
Вы хотите оптимизировать КПД своего сгенерированного кода.
Вы не хотите чрезмерно определять, как блок обрабатывает сигналы из области значений. Для получения дополнительной информации смотрите Ошибки Диапазона сигнала Поиска и устранения неисправностей.
|
Переполнение переносится к соответствующему значению, которое является представимым, по условию вводят.
|
Максимальное значение, что int8 (8-битное целое число со знаком) тип данных может представлять, 127. Любой результат блочной операции, больше, чем это максимальное значение, вызывает переполнение 8-битного целого числа. Со снятым флажком программное обеспечение интерпретирует вызывающее переполнение значение как int8 , который может привести к непреднамеренному результату. Например, результат блока 130 (двоичный файл 1000 0010) описанный как int8 ,-126.
|
Когда вы устанавливаете этот флажок, насыщение применяется к каждой внутренней операции на блоке, не только выходу или результату. Обычно, процесс генерации кода может обнаружить, когда переполнение не возможно. В этом случае генератор кода не производит код насыщения.
Программируемое использование
Параметры блоков: SaturateOnIntegerOverflow |
Ввод: символьный вектор |
Значения:
'off' | 'on' |
Значение по умолчанию: 'off' |
Характеристики блока
Типы данных | Boolean | double | fixed point | half | integer | single
|
Прямое сквозное соединение | yes
|
Многомерные сигналы | yes
|
Сигналы переменного размера | yes
|
Обнаружение пересечения нулем | no
|
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью Simulink® Coder™.
Генерация HDL-кода
Сгенерируйте Verilog и код VHDL для FPGA и проекты ASIC с помощью HDL Coder™.
HDL Coder™ обеспечивает дополнительные параметры конфигурации, которые влияют на реализацию HDL и синтезируемую логику.
Архитектура HDLLinear
по умолчанию
реализация генерирует цепь операций N (множители) для входных параметров N.
Свойства блока HDLЕсли вы используете блок в режиме умножения матриц, можно задать DotProductStrategy. Эта установка определяет, хотите ли вы реализовать умножение матриц при помощи дерева сумматоров и множителей, или использовать реализацию блока Multiply - Accumulate. Значением по умолчанию является Fully Parallel
.
Примечание
DotProductStrategy должен быть установлен в Fully Parallel
когда вы используете Native Floating Point
режим.
Для получения дополнительной информации смотрите DotProductStrategy (HDL Coder).
См. также Конструктивные соображения для Матриц и Векторов (HDL Coder).
Общий |
---|
ConstrainedOutputPipeline | Количество регистров, чтобы поместить при выходных параметрах путем перемещения существующих задержек в рамках проекта. Распределенная конвейеризация не перераспределяет эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите ConstrainedOutputPipeline (HDL Coder).
|
DSPStyle | Синтез приписывает для отображения множителя. Значением по умолчанию является none . См. также DSPStyle (HDL Coder).
|
InputPipeline | Количество входных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите InputPipeline (HDL Coder).
|
OutputPipeline | Количество выходных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите OutputPipeline (HDL Coder).
|
Нативная плавающая точка |
---|
HandleDenormals | Задайте, хотите ли вы, чтобы HDL Coder вставил дополнительную логику, чтобы обработать нестандартные числа в вашем проекте. Нестандартные числа являются числами, которые имеют величины меньше, чем самое маленькое число с плавающей запятой, которое может быть представлено без начальных нулей в мантиссе. Значением по умолчанию является inherit . См. также HandleDenormals (HDL Coder). |
LatencyStrategy | Задайте, сопоставить ли блоки в вашем проекте к inherit Max min , Zero , или Custom для оператора с плавающей точкой. Значением по умолчанию является inherit . См. также LatencyStrategy (HDL Coder).
|
NFPCustomLatency | Чтобы задать значение, установите LatencyStrategy на Custom . HDL Coder добавляет задержку, равную значению, которое вы задаете для установки NFPCustomLatency. См. также NFPCustomLatency (HDL Coder).
|
MantissaMultiplyStrategy | Задайте, как реализовать операцию умножения мантиссы во время генерации кода. При помощи различных настроек можно управлять использованием DSP на целевом устройстве FPGA. Значением по умолчанию является inherit . См. также MantissaMultiplyStrategy (HDL Coder). |
Поддержка комплексных данных(Линейные) комплексные данные поддержки внедрения по умолчанию.
Комплексное деление не поддерживается. Для реализаций блока блока Product в режиме деления или взаимном режиме, смотрите генерацию HDL-кода на странице с описанием блока Divide.
ОграниченияГенерация HDL-кода не поддерживает больше чем два входных параметров в портах блока, когда вы используете блок в режиме умножения матриц.
Блок продукта с /*
для Number of inputs параметры блоков выполняют деление, где второй вход разделен на первый вход. Этот режим имеет те же ограничения, которые применяются к блоку Divide. Смотрите генерацию HDL-кода.
Генерация кода PLC
Сгенерируйте код Структурированного текста с помощью Simulink® PLC Coder™.
Преобразование фиксированной точки
Спроектируйте и симулируйте системы фиксированной точки с помощью Fixed-Point Designer™.
Представлено до R2006a