Add, Subtract, Sum of Elements, Sum
输入信号的加减运算

库:
Simulink /
Math Operations
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
描述
Sum 模块对输入信号执行加减运算。Add、Subtract、Sum of Elements 和 Sum 模块是相同的模块。此模块可对标量、向量或矩阵输入执行加减运算。它还可以缩减信号的元素并执行求和。
您可以使用符号列表参数以及加号 (+
)、减号 (-
) 和分隔符 (|
) 指定模块的运算。
+
和-
字符的个数等于输入的个数。例如,+-+
需要三个输入。模块从第一个(顶部)输入信号中减去第二个(中间)输入信号,然后加上第三个(底部)输入信号。分隔符在模块图标上的端口之间产生额外空间。
如果仅执行加法,则可以使用一个与输入个数相等的数值。
如果只有一个输入端口,则单个
+
或-
会在所有维度上或在指定的维度中加上或减去元素。
Sum 模块首先将输入数据类型转换为其累加器数据类型,然后执行指定的运算。最后,模块使用指定的舍入和溢出模式,将计算结果转换为输出数据类型。
模块输出的计算
Sum 模块的输出计算取决于模块输入的个数和输入端口的符号:
如果 Sum 模块有... | 而且... | 输出计算公式为... | 其中... |
---|---|---|---|
一个输入端口 | 输入端口符号为 + 号 |
y = e[0] + e[1] + e[2] ... + e[m] |
|
输入端口符号为 – 号 |
y = 0.0 – e[0] – e[1] – e[2] ... – e[m] | ||
两个或更多输入端口 | 所有输入端口符号均为 – 号 |
y = 0.0 – u[0] – u[1] – u[2] ... – u[n] |
|
第 k 个输入端口是第一个符号为 + 号的端口 |
y = u[k] – u[0] – u[1] – u[2] – u[k–1] (+/–) u[k+1] ... (+/–) u[n] |
端口
输入
输入可以具有不同的数据类型,除非您选中了要求所有输入具有相同的数据类型参数。
Port_1 — 第一个输入操作数信号
标量 | 向量 | 矩阵
用于加法或减法运算的输入信号。如果只有一个输入信号,则对所有维度或指定维度中的元素执行加法或减法。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Port_n — 第 n
个输入操作数信号
标量 | 向量 | 矩阵
运算的第 n
个输入信号。输入的个数与符号列表参数中的符号个数相匹配。模块按照列出的顺序将运算应用于输入。您还可以使用一个与输入端口个数相等的数值作为符号列表参数。模块创建输入端口并将加法应用于所有输入。例如,如果为符号列表参数赋值 5
,则模块创建 5
个输入端口并将它们相加以产生输出。
所有的非标量输入信号必须具有相同的维度。标量输入将扩展为与其他输入具有相同的维度。
数据类型: 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
参数
常设
图标形状 — 模块图标形状
矩形 (默认) | 舍入
将模块的图标形状指定为矩形或圆形。
对于矩形模块,第一个输入端口是顶部端口。对于一个圆形 Sum 模块,第一个输入端口最靠近 12 点钟位置,按逆时针方向围绕模块。类似地,其他输入端口也按逆时针方向围绕模块。
编程用法
模块参数:IconShape |
类型:字符向量 |
值:'rectangular' | 'round' |
默认值:'round' |
符号列表 — 对输入执行的运算
++
(默认) | +
| -
| |
| integer
输入对输入信号执行的加法和减法运算。为每个运算创建一个输入端口。分隔符 (|
) 在模块图标上的输入端口之间产生额外空间。加法是默认运算。如果您只想将输入信号相加,请键入输入端口的个数。各项运算按所列顺序执行。
只输入一个元素时,模块将启用求和维度参数。对于单个向量输入,+
或 -
会在所有维度上或在指定的维度中加上或减去元素。
提示
您可以通过在符号列表参数中的符号之间插入分隔符 (|
) 来控制输入端口在模块上的位置。例如,“++|--
”将在第二个和第三个输入端口之间留出额外空间。
编程用法
模块参数:Inputs |
类型:字符向量 |
值:'+' | '-' | | | 整数 |
默认值:'++' |
求和维度 — 对单个向量输入执行的运算的维度
所有维度 (默认) | 指定的维度
选择模块执行求和运算所用的维度。
选择所有维度,则所有输入元素累加求和。选择配置参数 使用针对行优先数组布局优化的算法 时,Simulink® 为仿真启用行优先算法。要生成行优先代码,除选择使用针对行优先数组布局优化的算法外,还要将配置参数 数组布局 (Simulink Coder) 设置为“行优先
”。列优先算法和行优先算法仅在求和顺序上不同。在某些情况下,由于对同一数据集的运算顺序不同,列优先算法和行优先算法的输出可能存在微小的数值差异。
选择指定的维度,则会出现另一个参数维度。选择对向量输入求和所用的特定维度。
依存关系
当符号列表参数中仅列出一个符号时启用。
编程用法
模块参数:CollapseMode |
类型:字符向量 |
值:'All dimensions' | 'Specified dimension' |
默认值:'All dimensions' |
维度 — 对向量输入求和所用的维数
1
(默认) | integer
当为求和维度参数选择指定的维度时,请指定执行运算所用的维度。
模块遵循的求和规则与 MATLAB® 中的 sum
函数相同。
假设您有一个 2×3 矩阵 U。
如果将维度设置为
1
,输出 Y 的计算公式如下:如果将维度设置为
2
,输出 Y 的计算公式如下:
如果指定的维度大于输入的维度,则会显示错误消息。
依存关系
为求和维度参数选择“指定的维度
”时启用。
编程用法
模块参数:CollapseDim |
类型:字符向量 |
值:integer |
默认值:'1' |
采样时间 — -1
以外的采样时间值
-1
(默认) | 标量 | 向量
将采样时间指定为 -1
以外的值。有关详细信息,请参阅指定采样时间。
依存关系
此参数不可见,除非将其显式设置为 -1
以外的值。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
模块参数:SampleTime |
类型:字符串标量或字符向量 |
默认值:"-1" |
信号属性
点击显示数据类型助手按钮 以显示数据类型助手,帮助您设置数据类型属性。有关详细信息,请参阅使用数据类型助手指定数据类型。
要求所有输入具有相同的数据类型 — 要求所有输入具有相同的数据类型
off
(默认) | on
指定输入信号是否必须全部具有相同的数据类型。如果启用此参数,则在输入信号类型不同时,仿真过程中会发生错误。
编程用法
模块参数:InputSameDT |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
累加器数据类型 — 累加器的数据类型
“Inherit: Inherit via internal rule
” (默认) | “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 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。
编程用法
模块参数: AccumDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule | '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>' |
默认值:'Inherit: Inherit via internal rule' |
输出最小值 — 范围检查的最小输出值
[]
(默认) | 标量
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: Keep MSB
” | “Inherit: Keep LSB
” | “Inherit: Inherit via back propagation
” | “Inherit: Same as first input
” | “Inherit: Same as accumulator
” | “double
” | “single
” | “half
” | “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 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。注意
累加器内部规则的优点是数值更准确,而代价可能是生成的代码效率低下。要获取相同的输出精度,请将输出数据类型设置为 “
Inherit: Inherit same as accumulator
”。注意
当输入是小于单精度的浮点数据类型时,“
Inherit: Inherit via internal rule
” 输出数据类型取决于 Inherit floating-point output type smaller than single precision 配置参数的设置。当对数据类型进行编码所需的位数小于对单精度数据类型编码所需的 32 位时,数据类型小于单精度。例如,half
和int16
小于单精度。“
Inherit: Keep MSB
” - Simulink 选择一种能够保持运算的完整范围的数据类型,然后将输出精度降低到适合嵌入式目标硬件的大小。提示
要获得更高效的生成代码,请将累加器数据类型设置为 “
Inherit: Inherit via internal rule
”,并取消选择对整数溢出进行饱和处理参数。此规则从不产生溢出。
“
Inherit: Keep LSB
” - Simulink 选择一种保持运算精度的数据类型,但如果完整类型不适合嵌入式目标硬件,则会缩小范围。提示
要获得更高效的生成代码,请将累加器数据类型设置为 “
Inherit: Inherit via internal rule
”,并取消选择对整数溢出进行饱和处理参数。此规则可能产生溢出。
如果更改了嵌入式目标的设置,则依这些内部规则选择的数据类型可能会发生变化。有时软件不能同时满足优化代码效率和保证数值准确性这两个需求。如果这些规则不能满足您对数值准确性或性能的特定需求,请使用下列选项之一:
显式指定输出数据类型。
使用简单的选项 “
Inherit: Same as first 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 same as accumulator
” - 使用累加器的数据类型。
编程用法
模块参数:OutDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule |'Inherit: Keep MSB' |'Inherit: Keep LSB' | 'Inherit: Inherit via back propagation' 'Inherit: Same as first input' | 'Inherit: Same as accumulator' | '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>' |
默认值:'Inherit: Inherit via internal rule' |
锁定数据类型设置以防止被定点工具更改 — 防止定点工具覆盖数据类型
off
(默认) | on
选择此选项可锁定数据类型设置,防止使用定点工具和定点顾问进行更改。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
值:'off' | 'on' |
默认值:'off' |
整数舍入模式 — 定点运算的舍入模式
“向下
” (默认) | “向上
” | “收敛
” | “最邻近值
” | “舍入
” | “最简
” | “零
”
指定定点运算的舍入模式。有关详细信息,请参阅舍入 (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++ 代码。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 Verilog 代码和 VHDL 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
默认的“线性
”架构为 N 个输入生成包含 N 个运算(加法器)的运算链。
对于 Sum of Elements 模块,HDL Coder 支持对单个向量输入具有多个元素的 Sum of Elements 模块使用“树
”和“层叠
”架构。
此模块具有多周期实现,这会在生成的代码中引入额外的延迟。要查看增加的延迟,请查看生成的模型或验证模型。请参阅Generated Model and Validation Model (HDL Coder)。
架构 | 额外的延迟周期 | 描述 |
---|---|---|
“线性 ” | 0 | 生成线性加法器链来计算乘积之和。 对于具有不同位宽的多个输入,“ |
“树 ” | 0 | 生成加法器树形结构来计算乘积之和。 |
“层叠 ” | 1,当模块具有单个向量输入端口时。 | 此实现优化延迟 * 面积,并且比“ “ 请参阅Cascade Architecture Best Practices (HDL Coder)。 |
注意
要使用“HDL 模块属性”对话框的本机浮点选项卡中的 LatencyStrategy 设置,请指定“线性
”或“树
”作为 HDL 架构。
通用 | |
---|---|
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线处理不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
注意
Sum of Elements 模块不支持本机浮点模式下双精度数据类型的 HDL 代码生成。
本机浮点 | |
---|---|
LatencyStrategy | 指定对于浮点运算符是否将设计中的模块映射到 |
NFPCustomLatency | 要指定值,请将 LatencyStrategy 设置为 |
默认的“线性
”实现支持复数数据。
“树
”实现支持符号列表模块参数为 +
的复数数据。借助本机浮点支持,“树
”实现支持符号列表为 +
和 -
的复数数据。
要为混合使用标量和向量输入的多输入 Sum 模块生成 HDL 代码,您必须在 Sum 模块的前两个输入之一上指定向量输入。
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)