Разделите один вход на другой
Simulink/Математические операции
Операции HDL-кодера/HDL с плавающей точкой
HDL-кодер/математические операции
Блок Divide выводит результат деления его первого входа на второй. Входами могут быть скаляры, скаляр и нескаляр или два нескаляра, которые имеют одинаковые размерности. Этот блок поддерживает только сложные входные значения в портах с делением, когда все порты имеют один и тот же тип данных с одним или двумя типами.
Блок Divide функционально является Product блоком, который имеет два предустановленных значения параметров блоков:
Умножение -
Element-wise(.*)
Количество входов -
*/
Установка значений nondefault для любого из этих параметров может изменить блок 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-й вход для умножения или деления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
или *
блок выводит вход значение. Если значение /
, вход должен быть квадратной матрицей (включая скаляр как вырожденный случай), и блок выводит обратную матрицу. Для получения дополнительной информации смотрите Element-Wise Mode и Matrix Mode.
Целое число значения > 1
Блок имеет количество входов, заданных целым значением. Входы умножаются вместе в поэлементном режиме или матричном режиме, как задано параметром Умножение. Для получения дополнительной информации смотрите Element-Wise Mode и Matrix Mode.
Строка без кавычек из двух или более *
и /
персонажи
Блок имеет количество входов, заданных длиной вектора символов. Каждый вход, который соответствует *
символ умножается на выход. Каждый вход, который соответствует /
символ разделяется на выход. Операции происходят в поэлементном режиме или матричном режиме, как задается параметром Умножение. Для получения дополнительной информации смотрите Element-Wise Mode и Matrix Mode.
Параметры блоков:
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
- Размерность для умножения1
(по умолчанию) | 2
| ...
| N
Задайте величину для умножения как целое число, меньше или равное количеству размерностей входного сигнала.
Чтобы включить этот параметр, установите:
Number of inputs с *
Multiplication с Element-wise (.*)
Multiply over с Specified dimension
Параметры блоков: 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 использует минимум для выполнения:
Проверка области значений параметров (см. «Задание минимальных и максимальных значений для параметров блоков») для некоторых блоков.
Проверка области значений симуляции (см. «Задание диапазонов сигнала» и «Включение проверки области значений симуляции»).
Автоматическое масштабирование типов данных с фиксированной точкой.
Оптимизация кода, который вы генерируете из модели. Эта оптимизация может удалить алгоритмический код и повлиять на результаты некоторых режимов симуляции, таких как SIL или режим external mode. Для получения дополнительной информации смотрите Оптимизировать используя указанные минимальное и максимальное значения (Embedded Coder).
Примечание
Output minimum не насыщает или не зажимает фактический выходной сигнал. Вместо этого используйте блок Saturation.
Параметры блоков: OutMin |
Тип: Вектор символов |
Значения: '[ ]' | скаляр |
По умолчанию: '[ ]' |
Output maximum
- Максимальное выходное значение для проверки области значений[]
(по умолчанию) | скаляромВерхнее значение выходной области значений, который Simulink проверяет.
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 отображает ошибку в Diagnostic Viewer.
Не всегда программное обеспечение может оптимизировать эффективность кода и числовую точность одновременно. Если внутреннее правило не соответствует вашим конкретным потребностям в числовой точности или эффективности, используйте одну из следующих опций:
Явным образом задайте тип выходных данных.
Используйте простой выбор 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
- Используйте тип данных первого входного сигнала.
Когда вход является типом данных с плавающей точкой, меньшим, чем одинарная точность, Inherit: Inherit via internal rule
тип выходных данных зависит от параметра Inherit с плавающей точкой выходного типа, меньшего, чем параметр конфигурации с одной точностью. Типы данных меньше одной точности, когда количество бит, необходимых для кодирования типа данных, меньше 32 битов, необходимых для кодирования типа данных с одной точностью. Для примера, half
и int16
меньше, чем одинарная точность.
Параметры блоков: 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
- Предотвратите переопределение типа выходных данных инструментами с фиксированной точкойoff
(по умолчанию) | on
Выберите этот параметр, чтобы предотвратить переопределение инструментами с фиксированной точкой типа данных Output, заданного на блоке. Для получения дополнительной информации смотрите Использование настройки типа выходных данных блокировки (Fixed-Point Designer).
Параметры блоков:
LockScale
|
Тип: Вектор символов |
Значения:
'off' | 'on'
|
По умолчанию:
'off'
|
Integer rounding mode
- Режим округления для операций с фиксированной точкой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 и более ранними релизами | Да | Нет | Да |
Сокращение использования ПЗУ и ОЗУ по сравнению с 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 | Ничего | Сгенерируйте деление (/ ) оператор в HDL-код. |
ShiftAdd | UsePipelines | Выполните операции деления для фиксированных точек с помощью невосстановляющего алгоритма деления, который выполняет несколько сдвигов и добавляет операции, чтобы вычислить частное. Эта архитектура обеспечивает улучшенную точность по сравнению с методом приближения Ньютона-Рафсона. Когда вы используете эту архитектуру, чтобы достичь более высокой максимальной тактовой частоты на целевом устройстве FPGA, оставьте UsePipelines свойство блока в |
Обратный режим
Когда Number of Inputs установлено на /
блок Divide находится в режиме взаимности.
Этот блок имеет многоциклические реализации, которые вводят дополнительную задержку в сгенерированный код. Чтобы увидеть добавленную задержку, просмотрите сгенерированную модель или модель валидации. См. Сгенерированную модель и модель валидации (HDL Coder).
В режиме взаимности Divide блок имеет реализации HDL-блоков, описанные в следующей таблице.
Архитектуры | Параметры | Дополнительные циклы задержки | Описание |
---|---|---|---|
default Linear | Ничего | 0 | Когда вы вычисляете взаимное, используйте HDL-деление ( |
ReciprocalRsqrtBasedNewton | Iterations | Вход со знаком: Неподписанный вход: | Используйте итерационный метод Ньютона. Выберите эту опцию, чтобы оптимизировать площадь. Значение по умолчанию для Рекомендуемое значение для |
ReciprocalRsqrtBasedNewtonSingleRate | Iterations | Подписанный вход: ( Неподписанный вход: ( | Используйте односкоростной конвейерный метод Ньютона. Выберите эту опцию, чтобы оптимизировать скорость или если вы хотите получить одну реализацию скорости. Значение по умолчанию для Рекомендуемое значение для |
ShiftAdd | UsePipelines | Вход со знаком: (Длина входного слова + 4) Неподписанный вход: (Входная длина слова + 4) | Выполните обратную операцию на входе с фиксированной точкой с помощью невосстановляющего алгоритма деления, который выполняет несколько сдвигов и добавляет операции, чтобы вычислить обратную. Эта архитектура обеспечивает улучшенную точность по сравнению с методом приближения Ньютона-Рафсона. Когда вы используете эту архитектуру, чтобы достичь более высокой максимальной тактовой частоты на целевом устройстве FPGA, оставьте UsePipelines свойство блока в |
Итерационный метод Ньютона-Рафсона:
ReciprocalRsqrtBasedNewton
и ReciprocalRsqrtBasedNewtonSingleRate
реализуйте метод Ньютона-Рафсона с:
Общая информация | |
---|---|
ConstrainedOutputPipeline | Количество регистров для размещения на выходах путем перемещения существующих задержек в рамках вашего проекта. Распределённая конвейеризация не перераспределяет эти регистры. Значение по умолчанию является |
ConstrainedOutputPipeline | Количество регистров для размещения на выходах путем перемещения существующих задержек в рамках вашего проекта. Распределённая конвейеризация не перераспределяет эти регистры. Значение по умолчанию является |
DSPStyle | Атрибуты синтеза для отображения множителей. Значение по умолчанию является Используйте это свойство с:
|
InputPipeline | Количество входных этапов конвейера для вставки в сгенерированный код. Распределённая конвейеризация и ограниченная выходная конвейеризация могут перемещать эти регистры. Значение по умолчанию является |
OutputPipeline | Количество выходных этапов конвейера для вставки в сгенерированный код. Распределённая конвейеризация и ограниченная выходная конвейеризация могут перемещать эти регистры. Значение по умолчанию является |
LatencyStrategy | Чтобы включить это свойство, установите для архитектуры HDL значение |
CustomLatency | Чтобы включить это свойство, установите для архитектуры HDL значение |
Собственная переменная с плавающей точкой | |
---|---|
HandleDenormals | Укажите, хотите ли вы, чтобы HDL Coder вставил дополнительную логику для обработки денормальных чисел в ваш проект. Денормальные числа являются числами, которые имеют величины меньше, чем наименьшее число с плавающей запятой, которое может быть представлено без ведущих нулей в мантиссе. Значение по умолчанию является |
NFPCustomLatency | Чтобы задать значение, установите LatencyStrategy равным |
MantissaMultiplyStrategy | Задайте, как реализовать операцию умножения мантиссы во время генерации кода. При помощи различных настроек можно управлять использованием DSP на целевом устройстве FPGA. Значение по умолчанию является |
DivisionAlgorithm | Задайте, использовать ли алгоритм Radix-2 или Radix-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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.