Разделите один вход на другой
Simulink / Математические операции
HDL Coder / Операции Плавающей точки HDL
HDL Coder / Математические операции
Блок Divide выводит результат деления его первого входа на второй. Входные параметры могут быть скалярами, скаляром и нескалярным, или двумя нескалярами, которые имеют те же размерности. Этот блок поддерживает только комплексные входные значения в портах деления, когда все порты имеют тот же один или двойной тип данных.
Блок Divide является функционально блоком Product, который имеет две предварительных установки значений параметров блоков:
Умножение —
Element-wise(.*)
Количество входных параметров —
*/
Устанавливание значений не по умолчанию или для тех параметров может изменить блок Divide, чтобы быть функционально эквивалентным блоку Product или для блоку Product of Elements.
X
— Входной сигнал, чтобы умножитьсяВходной сигнал, который будет умножен с другими входными параметрами.
Чтобы включить один или несколько портов X, задайте один или несколько *
символы для параметра Number of inputs.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
÷
— Входной сигнал, чтобы разделиться или инвертироватьВходной сигнал для операций деления или инверсии.
Чтобы включить один или несколько портов ÷, задайте один или несколько /
символы для параметра 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
Port_N
— Энный вход, чтобы умножиться или разделитьсяЭнный вход, чтобы умножиться или разделиться, обеспеченный как скаляр, вектор, матрица или массив N-D.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Port_1
— Выведите вычисленный путем умножения, делясь или инвертируя входные параметрыВыведите вычисленный путем умножения, делясь или инвертируя входные параметры.
Типы данных: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Number of inputs
— Контрольное число входных параметров и тип операции*/
(значение по умолчанию) | положительный целочисленный скаляр | *
или /
для каждого входного портаУправляйте двумя свойствами блока:
Количество входных портов на блоке
Умножен ли каждый вход или разделен на выход
Когда вы задаете:
1 или
*
или /
Блок имеет один входной порт. В поэлементном режиме блок обрабатывает вход как описано для блока Product of Elements. В матричном режиме, если значением параметров является 1
или *
, блок выводит входное значение. Если значением является /
, вход должен быть квадратной матрицей (включая скаляр как вырожденный случай), и блок выводит обратную матрицу. Смотрите Поэлементный Режим и Матричный Режим для получения дополнительной информации.
Целочисленное значение> 1
Блок имеет количество входных параметров, данных целочисленным значением. Входы умножены вместе в поэлементном режиме или матричном режиме, как задано параметром Умножения. Смотрите Поэлементный Режим и Матричный Режим для получения дополнительной информации.
Неупомянутая строка двух или больше *
и /
'characters'
Блок имеет количество входных параметров, данных длиной вектора символов. Каждый вход, который соответствует *
символ умножается в выход. Каждый вход, который соответствует /
символ разделен на выход. Операции происходят в поэлементном режиме или матричном режиме, как задано параметром Умножения. Смотрите Поэлементный Режим и Матричный Режим для получения дополнительной информации.
Параметры блоков:
Inputs |
Ввод: символьный вектор |
Значения:
'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
— Размерность, чтобы умножиться
(значение по умолчанию) | 2
| ...
| N
Задайте размерность, чтобы умножиться по как целое число, меньше чем или равное количеству размерностей входного сигнала.
Чтобы включить этот параметр, установите:
Number of inputs к *
Multiplication к Element-wise (.*)
Multiply over к Specified dimension
Параметры блоков: CollapseDim |
Ввод: символьный вектор |
Значения:
'1' | '2' | ... |
Значение по умолчанию: '1' |
Sample time
— Задайте шаг расчета как значение кроме -1
(значение по умолчанию) | скаляр | векторЗадайте шаг расчета как значение кроме-1. Для получения дополнительной информации см. Настройку времени выборки.
Этот параметр не отображается, если он явным образом не установлен в значение кроме -1
. Чтобы узнать больше, смотрите Блоки, для Которых Не Рекомендуется Шаг расчета.
Параметры блоков:
SampleTime |
Ввод: символьный вектор |
Значения: скаляр или вектор |
Значение по умолчанию:
'-1' |
Require all inputs to have the same data type
— Потребуйте, чтобы все входные параметры имели совпадающий тип данныхoff
(значение по умолчанию) | on
Задайте, должны ли входные сигналы все иметь совпадающий тип данных. Если вы включаете этот параметр, то ошибка происходит в процессе моделирования, если типы входного сигнала отличаются.
Параметры блоков:
InputSameDT |
Ввод: символьный вектор |
Значения:
'off' | 'on' |
Значение по умолчанию:
'off' |
Output minimum
— Минимальное выходное значение для проверки диапазона[]
(значение по умолчанию) | скалярНижнее значение выходной области значений, которую проверяет Simulink®.
Simulink использует минимум, чтобы выполнить:
Проверка диапазона параметра (см., Задает Минимальные и Максимальные значения для Параметров блоков) для некоторых блоков.
Проверка диапазона симуляции (см., Указывает Диапазоны сигнала и Включает Проверку диапазона Симуляции).
Автоматическое масштабирование типов данных с фиксированной точкой.
Оптимизация кода, который вы генерируете из модели. Эта оптимизация может удалить алгоритмический код и влиять на результаты некоторых режимов симуляции, такие как SIL или режим external mode. Для получения дополнительной информации смотрите, Оптимизируют использование заданных минимальных и максимальных значений (Embedded Coder).
Примечание
Output minimum не насыщает или отсекает фактический выходной сигнал. Используйте блок Saturation вместо этого.
Параметры блоков: OutMin |
Ввод: символьный вектор |
Значения: '[ ]' | скаляр |
Значение по умолчанию: '[ ]' |
Output maximum
— Максимальное выходное значение для проверки диапазона[]
(значение по умолчанию) | скалярВерхнее значение выходной области значений это Simulink Check.
Simulink использует максимальное значение, чтобы выполнить:
Проверка диапазона параметра (см., Задает Минимальные и Максимальные значения для Параметров блоков) для некоторых блоков.
Проверка диапазона симуляции (см., Указывает Диапазоны сигнала и Включает Проверку диапазона Симуляции).
Автоматическое масштабирование типов данных с фиксированной точкой.
Оптимизация кода, который вы генерируете из модели. Эта оптимизация может удалить алгоритмический код и влиять на результаты некоторых режимов симуляции, такие как SIL или режим external mode. Для получения дополнительной информации смотрите, Оптимизируют использование заданных минимальных и максимальных значений (Embedded Coder).
Примечание
Output maximum не насыщает или отсекает фактический выходной сигнал. Используйте блок Saturation вместо этого.
Параметры блоков: OutMax |
Ввод: символьный вектор |
Значения: '[ ]' | скаляр |
Значение по умолчанию: '[ ]' |
Output data type
— Задайте тип выходных данныхInherit: Inherit via internal rule
(значение по умолчанию) | Inherit: Inherit via back propagation
| Inherit: Same as first input
| double
| single
| 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: 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: Same as first input' | 'Inherit: Inherit via back propagation' | 'double' | 'single' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | '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
Задайте, насыщает ли переполнение или переносится.
Действие | Объяснение | Повлияйте на переполнение | Пример |
---|---|---|---|
Установите этот флажок ( |
Ваша модель имеет возможное переполнение, и вы хотите явную защиту насыщения в сгенерированном коде. |
Переполнение насыщает или к минимальному или к максимальному значению, которое может представлять тип данных. |
Максимальное значение, что |
Не устанавливайте этот флажок ( |
Вы хотите оптимизировать КПД своего сгенерированного кода. Вы не хотите чрезмерно определять, как блок обрабатывает сигналы из области значений. Для получения дополнительной информации смотрите Ошибки Диапазона сигнала Поиска и устранения неисправностей. |
Переполнение переносится к соответствующему значению, которое является представимым, по условию вводят. |
Максимальное значение, что |
Когда вы устанавливаете этот флажок, насыщение применяется к каждой внутренней операции на блоке, не только выходу или результату. Обычно, процесс генерации кода может обнаружить, когда переполнение не возможно. В этом случае генератор кода не производит код насыщения.
Параметры блоков: SaturateOnIntegerOverflow |
Ввод: символьный вектор |
Значения:
'off' | 'on' |
Значение по умолчанию: 'off' |
Типы данных |
|
Прямое сквозное соединение |
|
Многомерные сигналы |
|
Сигналы переменного размера |
|
Обнаружение пересечения нулем |
|
Эти условия могут привести к различным результатам между симуляцией и сгенерированным кодом:
Входные параметры блока Divide содержат NaN
или inf
значение
Блок Divide генерирует NaN
или inf
во время выполнения
Это различие происходит из-за неличного NaN
или inf
значения. В таких случаях смотрите свою настройку модели и устраните условия, которые производят NaN
или inf
.
Процесс сборки Simulink Coder™ предоставляет эффективный код для обратной матрицы и операций деления. Эта таблица описывает преимущества и когда каждое преимущество доступно.
Преимущество | Маленькие матрицы (2 на 2 к 5 на 5) | Средние матрицы (6 6 к 20 20) | Большие матрицы (больше, чем 20 20) |
---|---|---|---|
Более быстрое время выполнения кода, по сравнению с R2011a и более ранние релизы | Да | Нет | Да |
Уменьшаемый ROM и Использование оперативной памяти, по сравнению с R2011a и более ранними релизами | Да, для действительных значений | Да, для действительных значений | Да, для действительных значений |
Повторное использование переменных | Да | Да | Да |
Устранение мертвого кода | Да | Да | Да |
Сворачивание констант | Да | Да | Да |
Сворачивание выражения | Да | Да | Да |
Непротиворечивость результатами MATLAB Coder | Да | Да | Да |
Для блоков, которые имеют три или больше входных параметров различных размерностей, код может включать дополнительный буфер, чтобы сохранить временные переменные для промежуточных результатов.
HDL Coder™ обеспечивает дополнительные параметры конфигурации, которые влияют на реализацию HDL и синтезируемую логику.
Примечание
Когда вы развертываете сгенерированный HDL-код на целевой компьютер, убедитесь, что вы устанавливаете параметр signed integer division rounds to в панели Hardware Implementation диалогового окна Configuration Parameters к Zero
или Floor
.
Чтобы выполнить оптимизированную HDL операцию деления, соедините блок Product с блоком Divide во взаимном режиме.
Режим по умолчанию
Блок Divide совпадает с блоком Product с набором Number of Inputs к */
.
Архитектура | Параметры | Описание |
---|---|---|
Linear
default | 'none' | Сгенерируйте деление (/ ) оператор в HDL-коде. |
ShiftAdd | UsePipelines | Выполните делят операции на фиксированных точках при помощи алгоритма деления невосстановления, который выполняет, несколько переключают и добавляют операции, чтобы вычислить частное. Эта архитектура обеспечивает улучшенную точность по сравнению с методом приближения Ньютона-Raphson. Когда вы используете эту архитектуру, чтобы достигнуть более высокой максимальной тактовой частоты на целевом устройстве FPGA, оставить свойство блока UsePipelines HDL |
Взаимный режим
Когда Number of Inputs установлен в /
, блок Divide находится во взаимном режиме.
Этот блок имеет реализации мультицикла, которые вводят дополнительную задержку в сгенерированном коде. Чтобы видеть добавленную задержку, просмотрите сгенерированную модель или модель валидации. См. Сгенерированную Модель Модели и Валидации (HDL Coder).
Во взаимном режиме блок Divide имеет реализации блока HDL, описанные в следующей таблице.
Архитектуры | Параметры | Дополнительные циклы задержки | Описание |
---|---|---|---|
default Linear | 'none' | 0 | Когда вы вычисляете обратную величину, использование, HDL делится ( |
ReciprocalRsqrtBasedNewton | Iterations | Подписанный вход: Вход без знака: | Используйте итеративный метод Ньютона. Выберите эту опцию, чтобы оптимизировать область. Значение по умолчанию для Рекомендуемое значение для |
ReciprocalRsqrtBasedNewtonSingleRate | Iterations | Подписанный вход: ( Вход без знака: ( | Используйте конвейерный метод Ньютона одного уровня. Выберите эту опцию, чтобы оптимизировать скорость, или если вы хотите одну реализацию уровня. Значение по умолчанию для Рекомендуемое значение для |
ShiftAdd | UsePipelines | Подписанный вход: (Введите wordlength + 4), Вход без знака: (Введите wordlength + 4), | Выполните взаимную операцию на входе фиксированной точки при помощи алгоритма деления невосстановления, который выполняет, несколько переключают и добавляют операции, чтобы вычислить обратную величину. Эта архитектура обеспечивает улучшенную точность по сравнению с методом приближения Ньютона-Raphson. Когда вы используете эту архитектуру, чтобы достигнуть более высокой максимальной тактовой частоты на целевом устройстве FPGA, оставить свойство блока UsePipelines HDL |
Итерационный метод Ньютона-Raphson:
ReciprocalRsqrtBasedNewton
и ReciprocalRsqrtBasedNewtonSingleRate
реализуйте метод Ньютона-Raphson с:
Общий | |
---|---|
ConstrainedOutputPipeline | Количество регистров, чтобы поместить при выходных параметрах путем перемещения существующих задержек в рамках проекта. Распределенная конвейеризация не перераспределяет эти регистры. |
ConstrainedOutputPipeline | Количество регистров, чтобы поместить при выходных параметрах путем перемещения существующих задержек в рамках проекта. Распределенная конвейеризация не перераспределяет эти регистры. |
DSPStyle | Синтез приписывает для отображения множителя. Значением по умолчанию является Используйте это свойство с:
|
InputPipeline | Количество входных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. |
OutputPipeline | Количество выходных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. |
LatencyStrategy | Чтобы включить это свойство, установите архитектуру HDL на |
CustomLatency | Чтобы включить это свойство, установите архитектуру HDL на |
Нативная плавающая точка | |
---|---|
HandleDenormals | Задайте, хотите ли вы, чтобы HDL Coder вставил дополнительную логику, чтобы обработать нестандартные числа в вашем проекте. Нестандартные числа являются числами, которые имеют величины меньше, чем самое маленькое число с плавающей запятой, которое может быть представлено без начальных нулей в мантиссе. Значением по умолчанию является |
NFPCustomLatency | Чтобы задать значение, установите LatencyStrategy на |
MantissaMultiplyStrategy | Задайте, как реализовать операцию умножения мантиссы во время генерации кода. При помощи различных настроек можно управлять использованием DSP на целевом устройстве FPGA. Значением по умолчанию является |
DivisionAlgorithm | Задайте, использовать ли Основание 2 или Основание 4 алгоритма, чтобы выполнить деление с плавающей точкой. Режим Radix 2 предлагает компромисс между задержкой и частотой. Режим Radix 4 предлагает компромисс между задержкой и использованием ресурсов. Для получения дополнительной информации смотрите DivisionAlgorithm (HDL Coder). |
Видеть вычисление задержки для фиксированных точек с Divide и блоками Reciprocal, в командной строке MATLAB, введите:
HDLMathLib
Этот блок не поддерживает генерацию кода для деления с комплексными сигналами.
Когда вы используете блок Divide во взаимном режиме, следующие ограничения применяются:
Когда вы используете фиксированные точки, ввод и вывод должен быть скаляром. Чтобы использовать векторные входные параметры, задайте Math
архитектура и вход значение с плавающей точкой.
Только Zero
округление режима поддерживается.
Необходимо выбрать опцию Saturate on integer overflow на блоке.
Для блока Divide, только Zero
и Simplest
поддерживаются округляющиеся режимы.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.