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(.*)' |
乘法运算维度 — 所有维度或指定维度
“所有维度
” (默认) | “指定的维度
”
指定要乘以的维度是“所有维度
”还是“指定的维度
”。当选择“指定的维度
”时,您可以将维度指定为 1
或 2
。
依存关系
要启用此参数,请将输入的数目设置为 *
并将乘法设置为“按元素(.*)
”。
编程用法
模块参数:CollapseMode |
类型:字符向量 |
值:'All dimensions' | 'Specified dimension' |
默认值:'All dimensions' |
维度 — 要进行乘法运算的维度
1
(默认) | 2
| ...
| N
要进行乘法运算的维度需指定为小于或等于输入信号的维度数量的整数。
依存关系
要启用此参数,请进行如下设置:
将输入的数目设置为
*
将乘法设置为“
按元素(.*)
”将乘法运算维度设置为“
指定的维度
”
编程用法
模块参数: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 |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出数据类型 — 指定输出数据类型
“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)
” | “<数据类型表达式>
”
为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType
。有关详细信息,请参阅 控制信号的数据类型。
当您选择继承的选项时,模块的行为如下所示:
“
Inherit: Inherit via internal rule
” - Simulink 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。如果更改了嵌入式目标的设置,则依内部规则选择的数据类型可能会发生变化。例如,如果该模块将int8
类型的输入乘以int16
的增益,并且将 “ASIC/FPGA
” 指定为目标硬件类型,则输出数据类型为sfix24
。如果指定“未指定(假定通用 32 位)
”(即通用 32 位微处理器)为目标硬件,则输出数据类型为int32
。如果目标微处理器不能提供适应输出范围的字长,Simulink 软件将在诊断查看器中显示错误。有时软件不能同时满足优化代码效率和保证数值准确性这两个需求。如果内部规则不能满足您对数值准确性或性能的特定需求,请使用下列选项之一:
显式指定输出数据类型。
使用简单的选项 “
Inherit: Same as input
”。显式指定默认数据类型(例如
fixdt(1,32,16)
),然后使用定点工具为您的模型提供数据类型建议。有关详细信息,请参阅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 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' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
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 设计生成 Verilog 代码和 VHDL 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
注意
在将生成的 HDL 代码部署到目标硬件时,请确保在“配置参数”对话框的硬件实现窗格中将有符号整数除法舍入方式参数设置为“零
”或“向下
”。
要执行针对 HDL 进行了优化的除法运算,请将 Product 模块连接到倒数模式的 Divide 模块。
Divide 模块与输入的数目设置为 */
的 Product 模块相同。
架构 | 参数 | 描述 |
---|---|---|
“线性(默认值) ” | 无 | 在 HDL 代码中生成除法 (/ ) 运算符。 |
“ShiftAdd ” | UsePipelines | 通过使用非还原除法算法对定点类型执行除法运算,该算法执行多次移位相加运算来计算商。与 Newton-Raphson 逼近方法相比,这种架构提高了精度。 当您使用这种架构时,为了在目标 FPGA 设备上实现更高的最大时钟频率,请将 UsePipelines HDL 模块属性保留为 使用定点数据类型时,必须满足以下标准才能生成 HDL 代码:
|
倒数模式
当输入的数目设置为 /
时,Divide 模块处于倒数模式。
此模块具有多周期实现,这会在生成的代码中引入额外的延迟。要查看增加的延迟,请查看生成的模型或验证模型。请参阅Generated Model and Validation Model (HDL Coder)。
在倒数模式下,Divide 模块具有下表中所述的 HDL 模块实现。
架构 | 参数 | 额外的延迟周期 | 描述 |
---|---|---|---|
“线性(默认值) ” | 无 | 0 | 计算倒数时,使用 HDL 除法 ( |
“ReciprocalRsqrtBasedNewton ” | Iterations | 有符号输入: 无符号输入: | 使用牛顿迭代法。选择此选项以优化面积。
|
“ReciprocalRsqrtBasedNewtonSingleRate ” | Iterations | 有符号输入:( 无符号输入:( | 使用单频率流水线牛顿法。要优化速度或需要单速率实现,请选择此选项。
|
“ShiftAdd ” | UsePipelines | 有符号输入:(输入字长 + 4) 无符号输入:(输入字长 + 4) | 通过使用非还原除法算法对定点输入执行倒数运算,该算法执行多次移位相加运算来计算倒数。与 Newton-Raphson 逼近方法相比,这种架构提高了精度。 当您使用这种架构时,为了在目标 FPGA 设备上实现更高的最大时钟频率,请将 UsePipelines HDL 模块属性保留为 使用定点数据类型时,必须满足以下标准才能生成 HDL 代码:
|
Newton-Raphson 迭代方法:
“ReciprocalRsqrtBasedNewton
” 和 “ReciprocalRsqrtBasedNewtonSingleRate
” 一起实现 Newton-Raphson 方法,方式如下:
HDL 代码生成支持 “ShiftAdd
” 中 divide (*/)
和 reciprocal (/)
运算的不同输出数据类型。您可以对模块使用下列输出数据类型:
“
Inherit: Inherit via internal rule
”“
Inherit: Keep MSB
”“
Inherit: Match scaling
”“
Inherit: Inherit via back propagation
”“
Inherit: Same as first input
”“
整数类型(uint8,int8,uint16,int16,uint32,int32,uint64,int64)
”“
定点类型
”
通用 | |
---|---|
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线处理不会重新分发这些寄存器。默认值为 |
DSPStyle | 乘法器映射的综合属性。默认值为“ 将此属性用于:
|
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
LatencyStrategy | 要启用此属性,请将 HDL 架构设置为 “ |
CustomLatency | 要启用此属性,请将 HDL 架构设置为 “ |
本机浮点 | |
---|---|
HandleDenormals | 指定是否希望 HDL Coder 在设计中插入额外的逻辑来处理非正规数字。非规范数是量级非常小、必须使用包含前导零的尾数才能表示的浮点数。默认值为 “ |
NFPCustomLatency | 要指定值,请将 LatencyStrategy 设置为 |
MantissaMultiplyStrategy | 指定在代码生成期间如何实现尾数乘法运算。通过使用不同设置,您可以控制目标 FPGA 设备上 DSP 的使用。默认值为 “ |
DivisionAlgorithm | 指定是使用 Radix-2 还是 Radix-4 算法来执行浮点除法。Radix-2 模式提供延迟和频率之间的折衷。Radix-4 模式提供延迟和资源使用量之间的折衷。有关详细信息,请参阅 DivisionAlgorithm (HDL Coder)。 |
要查看 Divide 和 Reciprocal 模块的定点类型的延迟计算,请在 MATLAB 命令提示符下输入:
HDLMathLib
此模块不支持复信号除法的代码生成。
当您在倒数模式下使用 Divide 模块时,存在以下限制:
当使用定点类型时,输入和输出必须为标量。要使用向量输入,请指定
Math
架构并输入浮点值。仅支持“
零
”舍入模式。您必须为模块选择对整数溢出进行饱和处理选项。
对于 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)