🔌 Simulink教程 - 第8章 | 逻辑与位运算模块
⚡ 数字逻辑的“工具箱”! 本章聚焦逻辑判断、位操作和信号检测,帮你实现数字信号处理、状态机控制和底层硬件接口建模。
📚 前言
前几章介绍了连续和离散系统模块,但在数字系统中,逻辑判断和位操作同样重要。本章讲解区间检测、组合逻辑、位运算、移位操作和信号检测等模块,这些是构建数字控制系统、状态机、通信协议处理的核心工具。每一节都配有逻辑直觉和工程应用,帮你快速理解“如何用逻辑模块实现控制决策、如何操作二进制数据”。
1. 逻辑运算与位运算库导航
- 逻辑运算与位运算库包含区间检测、组合逻辑、比较、位操作、移位、检测等模块。
- 注意:逻辑运算模块和关系运算模块在第3章已介绍,本章不再赘述。

2. 区间检测模块:信号的“范围判断器”
2.1 Interval Test 区间检测模块
- 功能:判断输入信号的值是否在设定的区间内,如果在则输出逻辑 1,否则输出逻辑 0。
- 区间类型:勾选 “Interval closed” 选项可设置为闭区间。
- 数据类型注意:如果输入信号是整型,而区间边界是浮点型,可能造成判断失误,需要统一数据类型。



2.2 Interval Test Dynamic 动态区间检测模块
- 功能:区间边界由外部输入信号
up和lo决定,区间的开闭由模块属性配置决定。 - 溢出注意:当规定了输入信号的数据类型时,需考虑是否会产生溢出。例如 8 位整型只能表示 -128~127,超出范围可能导致仿真错误或结果不正确。


3. Combinatorial Logic 组合逻辑模块:真值表的“实现器”
- 功能:用矩阵表示的真值表实现组合逻辑,行表示不同输入组合下的输出结果,列表示模块的输出端口。
- 工作原理:
- 真值表的输入端是隐式的,Simulink 通过从输入向量元素计算索引来返回矩阵的指定行。
- 索引计算方法:构建一个二进制数,0 值输入元素为 0,非 0 值元素为 1,然后将结果加 1。
- 对于 m 个元素的输入向量 u,索引计算公式如下:



4. 比较模块:信号的“关系判断器”
4.1 Compare To Zero 与 0 比较模块
- 功能:判断输入信号与 0 的关系,输出布尔值。
- 配置:设定关系运算符,0 作为右操作数,输入信号作为左操作数。
- 输出:关系表达式成立时输出逻辑 1,否则输出逻辑 0。


4.2 Compare To Constant 与常数比较模块
- 功能:判断输入信号与指定常数的关系,输出布尔值。
- 配置:设定关系运算符和作为右操作数的常数,输入信号作为左操作数。
- 输出:关系表达式成立时输出逻辑 1,否则输出逻辑 0。


5. 位设置与位清零:二进制数据的“精确控制”
5.1 Bit Set 位设置模块
- 功能:将输入信号转换为二进制形式,将指定位置 1,其他位不变,然后转换回原形式输出。
- 配置:双击模块可配置对每个输入信号分别需要置 1 的位(二进制数低位从 0 开始数)。
- 应用场景:设置标志位、配置寄存器等。

5.2 Bit Clear 位清零模块
- 功能:将输入信号转换为二进制形式,将指定位置 0,其他位不变,然后转换回原形式输出。
- 配置:双击模块可配置对每个输入信号分别需要置 0 的位(二进制数低位从 0 开始数)。
- 应用场景:清除标志位、复位寄存器等。

6. Bitwise Operator 位运算模块:二进制数据的“逻辑操作”
6.1 多操作数模式
- 功能:对多个操作数按位进行逻辑运算(如按位与、按位或、按位异或等)。
- 工作原理:输入信号转换为二进制形式,对每个位分别进行逻辑运算,具体运算类型可双击模块配置。


6.2 使用屏蔽位模式
- 功能:勾选 “Use bit mask …” 选项后,模块只有一个输入端口,将输入信号与位屏蔽数(Bit Mask)进行按位逻辑运算。
- 配置:双击模块可设置逻辑运算类型和位屏蔽数。
- 应用场景:提取特定位、掩码操作等。

7. 移位运算与位提取:二进制数据的“移动与提取”
7.1 Shift Arithmetic 移位运算模块
- 移位类型:
- 二进制数本身移位:左移时移动位数 n 为负数,右移时 n 为正数。
- 小数点移位:对二进制小数进行移位。
- 二进制数移位:
- 先将输入值转换为二进制形式,然后进行数的移位。
- 移位后产生的空位用 0 补上,被移出的位直接丢弃。
- 数学意义:对数值进行 ÷ 2^n 的运算(在不超出数据类型表示范围的前提下)。
- 小数点移位:
- 先将输入值转换为二进制小数形式,然后进行移位。
- 数学意义:对数值进行 × 2^n 的运算(在不超出数据类型表示范围的前提下)。


7.2 Extract Bits 位提取模块
- 功能:从输入信号的二进制表示中提取一部分位并输出。
- 提取方式:
- Upper half:提取信号高位的一半(如 16 位数据的高 8 位)
- Lower half:提取信号低位的一半(如 16 位数据的低 8 位)
- Range starting with most significant bit:从最高位开始向低位提取指定位数
- Range starting with least significant bit:从最低位开始向高位提取指定位数
- Range of bits:从指定范围中提取(如第 0 位到第 7 位)


8. 检测模块:信号的“变化监控器”
8.1 Detect Increase 上升检测模块
- 功能:判断当前时刻的输入信号值是否大于上一时刻的输入信号值,如果是则输出逻辑 1,否则输出逻辑 0。
- 初始条件:需设置 t=0 时刻“上一时刻”的输入值。


8.2 Detect Decrease 下降检测模块
- 功能:判断当前时刻的输入信号值是否小于上一时刻的输入信号值,如果是则输出逻辑 1,否则输出逻辑 0。
- 初始条件:需设置 t=0 时刻“上一时刻”的输入值。


8.3 Detect Change 变化检测模块
- 功能:判断当前时刻的输入信号值是否等于上一时刻的输入信号值,如果相等则输出逻辑 1,否则输出逻辑 0。
- 初始条件:需设置 t=0 时刻“上一时刻”的输入值。


8.4 Detect Rise Positive 正值上升检测模块
- 功能:如果当前时刻的输入信号值 > 0,且上一时刻的输入信号值 ≤ 0,则输出逻辑 1,否则输出逻辑 0。
- 初始条件:需设置 t=0 时刻“上一时刻”的输入值。


8.5 Detect Rise Nonnegative 非负值上升检测模块
- 功能:如果当前时刻的输入信号值 ≥ 0,且上一时刻的输入信号值 < 0,则输出逻辑 1,否则输出逻辑 0。
- 初始条件:需设置 t=0 时刻“上一时刻”的输入值。


8.6 Detect Fall Negative 负值下降检测模块
- 功能:如果当前时刻的输入信号值 < 0,且上一时刻的输入信号值 ≥ 0,则输出逻辑 1,否则输出逻辑 0。
- 初始条件:需设置 t=0 时刻“上一时刻”的输入值。


8.7 Detect Fall Nonpositive 非正值下降检测模块
- 功能:如果当前时刻的输入信号值 ≤ 0,且上一时刻的输入信号值 > 0,则输出逻辑 1,否则输出逻辑 0。
- 初始条件:需设置 t=0 时刻“上一时刻”的输入值。


9. 参考
👨💻 关于作者
成大事 - 10年嵌入式与控制系统开发经验,长期深耕 Simulink 建模与车载软件工程。
擅长领域: Simulink 建模仿真、模型驱动开发、AUTOSAR、整车控制系统。
原创不易,请点赞! ⭐
版权声明: CC 4.0 BY-NC-SA。
189

被折叠的 条评论
为什么被折叠?



