Simulink教程 - 第8章 | 逻辑与位运算模块

🔌 Simulink教程 - 第8章 | 逻辑与位运算模块

⚡ 数字逻辑的“工具箱”! 本章聚焦逻辑判断、位操作和信号检测,帮你实现数字信号处理、状态机控制和底层硬件接口建模。

📚 前言

前几章介绍了连续和离散系统模块,但在数字系统中,逻辑判断和位操作同样重要。本章讲解区间检测、组合逻辑、位运算、移位操作和信号检测等模块,这些是构建数字控制系统、状态机、通信协议处理的核心工具。每一节都配有逻辑直觉和工程应用,帮你快速理解“如何用逻辑模块实现控制决策、如何操作二进制数据”。

1. 逻辑运算与位运算库导航

  • 逻辑运算与位运算库包含区间检测、组合逻辑、比较、位操作、移位、检测等模块。
  • 注意:逻辑运算模块和关系运算模块在第3章已介绍,本章不再赘述。

逻辑运算与位运算库概览

2. 区间检测模块:信号的“范围判断器”

2.1 Interval Test 区间检测模块

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

区间检测模块配置

区间检测数据类型问题

区间检测正确配置

2.2 Interval Test Dynamic 动态区间检测模块

  • 功能:区间边界由外部输入信号 uplo 决定,区间的开闭由模块属性配置决定。
  • 溢出注意:当规定了输入信号的数据类型时,需考虑是否会产生溢出。例如 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。

与0比较模块配置

与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 多操作数模式

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

位运算模块多操作数配置1

位运算模块多操作数配置2

6.2 使用屏蔽位模式

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

位运算模块屏蔽位配置

7. 移位运算与位提取:二进制数据的“移动与提取”

7.1 Shift Arithmetic 移位运算模块

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

移位运算模块配置

移位运算模块示例

7.2 Extract Bits 位提取模块

  • 功能:从输入信号的二进制表示中提取一部分位并输出。
  • 提取方式
    1. Upper half:提取信号高位的一半(如 16 位数据的高 8 位)
    2. Lower half:提取信号低位的一半(如 16 位数据的低 8 位)
    3. Range starting with most significant bit:从最高位开始向低位提取指定位数
    4. Range starting with least significant bit:从最低位开始向高位提取指定位数
    5. 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。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成大事AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值