Divide
一个输入除以另一个输入
库:
Simulink /
Math Operations
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
描述
Divide 模块输出其第一个输入除以第二个输入的结果。输入可以是两个标量、一个标量和一个非标量或者具有相同维度的两个非标量。当所有端口都具有相同的单精度或双精度数据类型时,此模块的除法端口仅支持复数输入值。
Divide 模块在功能上是预设了两个模块参数值的 Product 模块:
乘法 - 按元素(.*)
输入的数目 - */
将这两个参数之一设置为非默认值即可将 Divide 模块更改为在功能上等效于 Product 模块或 Product of Elements 模块。
示例
端口
输入
X — 要相乘的输入信号
标量 | 向量 | 矩阵 | N 维数组
要与其他输入相乘的输入信号。
依存关系
要启用一个或多个 X 端口,请为输入的数目参数指定一个或多个 *
字符,并将乘法参数设置为按元素(.*)。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
÷ — 要进行除法或逆运算的输入信号
标量 | 向量 | 矩阵 | N 维数组
要进行除法或逆运算的输入信号。
依存关系
要启用一个或多个 ÷ 端口,请为输入的数目参数指定一个或多个 /
字符,并将乘法参数设置为按元素(.*)。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Port_1 — 要进行乘法或除法运算的第一个输入
标量 | 向量 | 矩阵 | N 维数组
要进行乘法或除法运算的第一个输入,作为标量、向量、矩阵或 N 维数组提供。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Port_N — 要进行乘法或除法运算的第 N 个输入
标量 | 向量 | 矩阵 | N 维数组
要进行乘法或除法运算的第 N 个输入,作为标量、向量、矩阵或 N 维数组提供。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
* — 要相乘的输入信号
标量 | 向量 | 矩阵 | N 维数组
要与其他输入相乘的输入信号。
依存关系
要启用一个或多个 * 端口,请为输入数目参数指定一个或多个 *
字符,并将乘法参数设置为矩阵(*)。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Inv — 要进行除法或逆运算的输入信号
标量 | 向量 | 矩阵 | N 维数组
要进行除法或逆运算的输入信号。
依存关系
要启用一个或多个 Inv 端口,请为输入数目参数指定一个或多个 /
字符,并将乘法参数设置为矩阵(*)。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
输出
Port_1 — 通过对输入进行乘法、除法或逆运算来计算得出输出
标量 | 向量 | 矩阵 | N 维数组
通过对输入进行乘法、除法或逆运算来计算得出输出。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
参数
常设
输入的数目 — 控制输入的数量和运算的类型
*/
(默认) | 正整数标量 | 对每个输入端口应用 *
或 /
控制模块的两个属性:
模块上的输入端口数
是乘以还是除以每个输入来得到输出
如果您指定:
1
或*
或/
模块有一个输入端口。在按元素模式下,模块按照 Product of Elements 模块说明处理输入。在矩阵模式下,如果参数值为
1
或*
,则模块将输出输入值。如果值为/
,则输入必须为方阵(包括作为简并情况的标量),模块将输出逆矩阵。有关详细信息,请参阅按元素模式和矩阵模式。大于 1 的整数值
不带引号的含有两个或更多
*
和/
字符的字符串模块的输入的数量由字符向量长度指定。乘以与
*
字符相对应的每个输入来得到输出。除以与/
字符相对应的每个输入来得到输出。依乘法参数指定的按元素模式或矩阵模式进行运算。有关详细信息,请参阅按元素模式和矩阵模式。
编程用法
模块参数:Inputs |
类型:字符向量 |
值:'2' | '*' | '**' | '*/' | '*/*' | ... |
默认值:'*/' |
乘法 — 按元素 (.*) 或矩阵 (*) 乘法
按元素(.*) (默认) | 矩阵(*)
指定模块是执行按元素(.*) 还是矩阵(*) 乘法。
编程用法
模块参数:Multiplication |
类型:字符向量 |
值:'Element-wise(.*)' | 'Matrix(*)' |
默认值:'Element-wise(.*)' |
应用于 — 如何沿指定维度应用函数
所有维度 (默认) | 指定的维度
指定如何沿指定维度应用函数。
所有维度 - 对所有维度的所有输入值应用函数。
指定维度 - 对指定维度的所有输入值应用函数。
例如,在此模型中,将乘法设置为按元素方式(.*),将应用于设置为所有维度。该模块返回所有维度的所有值的乘积。
依存关系
要启用此参数,请将输入的数目设置为 *
并将乘法设置为按元素(.*)。
编程用法
模块参数:CollapseMode |
类型:字符向量 |
值:'All dimensions' | 'Specified dimension' |
默认值:'All dimensions' |
维度 — 要沿其相乘的维度
1
(默认) | 正整数
指定要沿其相乘的维度,值为正整数。例如,对于二维矩阵,1
将函数应用于每列,2
将函数应用于每行。
例如,在此模型中,将乘法设置为按元素方式(.*),将应用于设置为指定的维度,将维度设置为 2
。该模块返回每行中所有值的乘积。
依存关系
要启用此参数,请进行如下设置:
将输入的数目设置为
*
将乘法设置为按元素(.*)
将应用于设置为指定的维度
编程用法
模块参数:CollapseDim |
类型:字符向量 |
值:'1' | '2' | ... |
默认值:'1' |
采样时间(-1 表示继承) — 采样之间的时间间隔
-1
(默认) | 标量 | 向量
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1
。有关详细信息,请参阅指定采样时间。
依存关系
仅当您将此参数设置为 -1
以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
模块参数:SampleTime |
类型:字符串标量或字符向量 |
默认值:"-1" |
信号属性
要求所有输入具有相同的数据类型 — 要求所有输入具有相同的数据类型
off
(默认) | on
指定输入信号是否必须全部具有相同的数据类型。如果启用此参数,则在输入信号类型不同时,仿真过程中会发生错误。
编程用法
模块参数:InputSameDT |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
输出最小值 — 范围检查的最小输出值
[]
(默认) | 标量
Simulink® 检查的输出范围的下限值。
Simulink 使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最小值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMin |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出最大值 — 范围检查的最大输出值
[]
(默认) | 标量
Simulink 检查的输出范围的上限值。
Simulink 使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最大值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMax |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出数据类型 — 指定输出数据类型
继承: 从内部规则继承 (默认) | 继承: 通过反向传播继承 | 继承: 与第一个输入相同 | double | single | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16) | fixdt(1,16,0) | fixdt(1,16,2^0,0) | <数据类型表达式>
为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType
。有关详细信息,请参阅 控制信号的数据类型。
当您选择继承的选项时,模块的行为如下所示:
继承: 从内部规则继承 - Simulink 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。如果更改了嵌入式目标的设置,则依内部规则选择的数据类型可能会发生变化。例如,如果该模块将
int8
类型的输入乘以int16
的增益,并且将 ASIC/FPGA 指定为目标硬件类型,则输出数据类型为sfix24
。如果指定未指定(假定通用 32 位)(即通用 32 位微处理器)为目标硬件,则输出数据类型为int32
。如果目标微处理器不能提供适应输出范围的字长,Simulink 软件将在诊断查看器中显示错误。有时软件不能同时满足优化代码效率和保证数值准确性这两个需求。如果内部规则不能满足您对数值准确性或性能的特定需求,请使用下列选项之一:
显式指定输出数据类型。
使用简单的选项继承: 与输入相同。
显式指定默认数据类型(例如
fixdt(1,32,16)
),然后使用定点工具为您的模型提供数据类型建议。有关详细信息,请参阅fxptdlg
(Fixed-Point Designer)。要指定您自己的继承规则,请使用继承: 通过反向传播继承,然后使用 Data Type Propagation 模块。有关如何使用此模块的示例说明,请参阅 Signal Attributes 模块库中的 Data Type Propagation Examples 模块。
继承: 通过反向传播继承 - 使用驱动模块的数据类型。
继承: 与第一个输入相同 - 使用第一个输入信号的数据类型。
依存关系
当输入是小于单精度的浮点数据类型时,继承: 从内部规则继承输出数据类型取决于 Inherit floating-point output type smaller than single precision 配置参数的设置。当对数据类型进行编码所需的位数小于对单精度数据类型编码所需的 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' |
锁定输出数据类型设置以防止被定点工具更改 — 用于防止定点工具覆盖输出数据类型的选项
off
(默认) | on
选择此参数可防止定点工具覆盖您在模块上指定的输出数据类型。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
整数舍入模式 — 定点运算的舍入模式
向下 (默认) | 向上 | 收敛 | 最邻近值 | 舍入 | 最简 | 零
选择定点运算的舍入模式。您可以选择:
- 向上
朝正无穷方向舍入正数和负数。等同于 MATLAB®
ceil
函数。- 收敛
将数值舍入到最邻近的可表示值。如果出现结值,则舍入到最邻近的偶数整数。等同于 Fixed-Point Designer™
convergent
函数。- 向下
朝负无穷方向舍入正数和负数。等同于 MATLAB
floor
函数。- 最邻近值
将数值舍入到最邻近的可表示值。如果出现结值,则朝正无穷方向舍入。等同于 Fixed-Point Designer
nearest
函数。- 舍入
将数值舍入到最邻近的可表示值。如果出现结值,则将正数朝正无穷方向舍入,将负数朝负无穷方向舍入。等同于 Fixed-Point Designer
round
函数。- 最简
在向负无穷大方向舍入和向零舍入之间选择,以生成尽可能有效的舍入代码。这种舍入模式受硬件实现窗格中的以下配置参数的影响。
如果有符号整数除法舍入方式参数设置为零或未定义,则最简解析为零。
如果有符号整数除法舍入方式参数设置为向下,则最简解析为
floor
。
- 零
将数值向零舍入。等同于 MATLAB
fix
函数。
有关详细信息,请参阅舍入 (Fixed-Point Designer)。
模块参数始终舍入到最邻近的可表示值。要控制模块参数的舍入方法,请在封装字段中使用 MATLAB 舍入函数输入表达式。
编程用法
模块参数:RndMeth |
类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Floor' |
对整数溢出进行饱和处理 — 溢出操作的方法
off
(默认) | on
指定对溢出是进行饱和处理还是绕回处理。
操作 | 原理说明 | 对溢出的影响 | 示例 |
---|---|---|---|
选中此复选框 ( | 您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。 | 将溢出饱和处理为数据类型能够表示的最小值或最大值。 |
|
不选中此复选框 ( | 您需要优化所生成代码的效率。 您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。 | 溢出会绕回到由数据类型表示的适当值。 |
|
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。通常,代码生成过程可以检测何时不会发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
模块参数:SaturateOnIntegerOverflow |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
模式 — 选择数据类型模式
Inherit
(默认) | Built in
| Fixed Point
选择要指定的数据类别。
继承 - 数据类型的继承规则。选择
Inherit
将在右侧启用另一个菜单/文本框,您可以在其中选择继承模式。内置 - 内置数据类型。选择
Built in
将在右侧启用另一个菜单/文本框,您可以在其中选择内置数据类型。定点 - 定点数据类型。选择定点将启用可用于指定定点数据类型的其他参数。
表达式 - 计算结果为数据类型的表达式。选择
Expression
将在右侧启用另一个菜单/文本框,您可以在其中输入表达式。
有关详细信息,请参阅使用数据类型助手指定数据类型。
依存关系
要启用此参数,请点击显示数据类型助手按钮。
数据类型覆盖 — 为此信号指定数据类型覆盖模式
Inherit
| Off
为此信号选择数据类型覆盖模式。
当您选择 inherit 时,Simulink 从信号的上下文(即:从 Simulink 中使用该信号的模块、
Simulink.Signal
对象或 Stateflow® 图)中继承数据类型覆盖设置。当您选择 off 时,Simulink 忽略信号上下文的数据类型覆盖设置,并使用为信号指定的定点数据类型。
有关详细信息,请参阅 Simulink 文档中的使用数据类型助手指定数据类型。
依存关系
要启用此参数,请将模式设置为内置或定点。
提示
由于能够关闭单个数据类型的数据类型覆盖,您可以在应用数据类型覆盖时更好地控制模型中的数据类型。例如,您可以使用此选项确保数据类型满足下游模块的要求,而忽略数据类型覆盖设置。
符号性 — 指定有符号或无符号
Signed
(默认) | Unsigned
指定定点数据是有符号还是无符号。有符号数据可以表示正值和负值,无符号数据只表示正值。
有符号,将定点数据指定为有符号数据。
无符号,将定点数据指定为无符号数据。
有关详细信息,请参阅使用数据类型助手指定数据类型。
依存关系
要启用此参数,请将模式设置为 Fixed point
。
字长 — 存储量化整数的字的位大小
16
(默认) | 从 0 到 32 的整数
小数长度 — 指定定点数据类型的小数长度
0
(默认) | 标量整数
定标 — 定标定点数据的方法
最佳精度 (默认) | 二进制小数点 | 斜率和偏置
斜率 — 指定定点数据类型的斜率。
2^0
(默认) | 正实数值标量
偏置 — 指定定点数据类型的偏置。
0
(默认) | 实数值标量
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
这些条件可能在仿真和生成的代码之间产生不同结果:
Divide 模块输入包含
NaN
或inf
值在执行过程中,Divide 模块生成
NaN
或inf
这种差异是由非有限 NaN
或 inf
值引起的。在这种情况下,请检查模型配置,并消除产生 NaN
或 inf
的条件。
Simulink Coder™ 编译过程为矩阵求逆和除法运算提供了高效率代码。下表说明了其主要优势以及每种优势的适用场景。
优势 | 小型矩阵 (2×2 到 5×5) | 中型矩阵 (6×6 到 20×20) | 大型矩阵 (大于 20×20) |
---|---|---|---|
与 R2011a 及更早版本相比,代码执行时间更短 | 是 | 否 | 是 |
与 R2011a 及更早版本相比,减少了对 ROM 和 RAM 的使用 | 是(对于实数值) | 是(对于实数值) | 是(对于实数值) |
重用变量 | 是 | 是 | 是 |
死代码消除 | 是 | 是 | 是 |
常量折叠 | 是 | 是 | 是 |
表达式折叠 | 是 | 是 | 是 |
与 MATLAB Coder 结果一致 | 是 | 是 | 是 |
对于具有不同维度的三个或更多输入的模块,代码可能包含额外的缓冲区来存储中间结果的临时变量。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
注意
在将生成的 HDL 代码部署到目标硬件时,请确保在“配置参数”对话框的硬件实现窗格中将有符号整数除法舍入方式参数设置为零或向下。
要执行针对 HDL 进行了优化的除法运算,请将 Product 模块连接到倒数模式的 Divide 模块。
Divide 模块与输入的数目设置为 */
的 Product 模块相同。
架构 | 参数 | 额外的延迟周期 | 描述 |
---|---|---|---|
ShiftAdd(默认值) | 无 | 取决于输入和输出的字长和小数长度。有关详细信息,请参阅 | 通过使用非还原除法算法执行除法运算,该算法执行多次移位相加运算来计算商。 使用定点数据类型时,必须满足以下标准才能生成 HDL 代码:
|
倒数模式
当输入的数目设置为 /
时,Divide 模块处于倒数模式。
此模块具有多周期实现,这会在生成的代码中引入额外的延迟。要查看增加的延迟,请查看生成的模型或验证模型。请参阅Generated Model and Validation Model (HDL Coder)。
在倒数模式下,Divide 模块具有下表中所述的 HDL 模块实现。
架构 | 参数 | 额外的延迟周期 | 描述 |
---|---|---|---|
ShiftAdd(默认值) | 无 | 取决于输入和输出的字长和小数长度。有关详细信息,请参阅 | 通过使用非还原除法算法执行倒数运算,该算法执行多次移位相加运算来计算倒数。 使用定点数据类型时,必须满足以下标准才能生成 HDL 代码:
|
HDL 代码生成支持 ShiftAdd 中 divide (*/)
和 reciprocal (/)
运算的不同输出数据类型。您可以对模块使用下列输出数据类型:
继承: 从内部规则继承
继承: Keep MSB
继承: Match scaling
继承: 通过反向传播继承
继承: 与第一个输入相同
整数类型(uint8,int8,uint16,int16,uint32,int32,uint64,int64)
定点类型
通用 | |
---|---|
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
LatencyStrategy | 要启用此属性,请将 HDL 架构设置为 ShiftAdd。对于定点和浮点类型,指定是将设计中的模块映射到 |
CustomLatency | 要启用此属性,请将 HDL 架构设置为 ShiftAdd。当 LatencyStrategy 设置为 |
本机浮点 | |
---|---|
HandleDenormals | 指定是否希望 HDL Coder 在设计中插入额外的逻辑来处理非正规数字。非正规数是量级非常小、必须使用包含前导零的尾数才能表示的浮点数。默认值为 inherit。另请参阅HandleDenormals (HDL Coder)。 |
MantissaMultiplyStrategy | 指定在代码生成期间如何实现尾数乘法运算。通过使用不同设置,您可以控制目标 FPGA 设备上 DSP 的使用。默认值为 inherit。另请参阅MantissaMultiplyStrategy (HDL Coder)。 |
DivisionAlgorithm | 指定是使用 Radix-2 还是 Radix-4 算法来执行浮点除法。Radix-2 模式提供延迟和频率之间的折衷。Radix-4 模式提供延迟和资源使用量之间的折衷。有关详细信息,请参阅 DivisionAlgorithm (HDL Coder)。 |
此模块不支持复信号除法的代码生成。
您可以使用 ShiftAdd 架构对 Divide 和 Reciprocal 模块应用共享或流优化。
模块输入 | 资源共享 | 流式传输 |
---|---|---|
除法(/* 或 */) | 是 | 是 |
倒数 (/) | 是 | 否 |
有关详细信息,请参阅Resource Sharing (HDL Coder)和Streaming (HDL Coder)。
当您在倒数模式下使用 Divide 模块时,存在以下限制:
当使用定点类型时,输入和输出必须为标量。要使用向量输入,请使用浮点类型输入和输出。
您必须为模块选择对整数溢出进行饱和处理选项。
对于 Divide 模块,仅支持零和最简舍入模式。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
版本历史记录
在 R2006a 之前推出
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)