news 2026/4/17 19:34:37

完整指南:RS触发器背后的门电路实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
完整指南:RS触发器背后的门电路实现

从门电路到记忆:深度拆解RS触发器的底层实现

你有没有想过,一个简单的开关按下后,系统怎么“记住”这个动作的?
为什么哪怕按键抖动几十次,LED也只亮一次?
这一切的背后,其实都藏着一个最原始、却至关重要的数字电路单元——RS触发器

它不像CPU那样复杂,也不像内存那样庞大,但它却是所有能“存储状态”的数字系统的起点。而它的核心,不过是两个互相连接的逻辑门。

今天,我们就来彻底揭开RS触发器的面纱:不靠背诵真值表,而是从门电路的行为出发,一步步推导出它是如何“记住”信息的。你会看到,所谓的“记忆”,并不是魔法,而是一场精巧的反馈博弈。


RS触发器的本质:双稳态 + 反馈

在组合逻辑中,输出完全由当前输入决定,就像计算器——按什么键就出什么结果。但现实世界需要“状态”:比如洗衣机要记得自己处在“洗涤”还是“脱水”阶段;微控制器要确认某个中断是否已被响应。

这就引出了时序逻辑电路——它们的输出不仅取决于当前输入,还依赖于过去的状态。而实现这种“记忆”能力的基本单元,就是触发器(Flip-Flop)

其中最基础的一种,就是RS触发器(Reset-Set Latch),也叫SR锁存器

它有两个输入:
-S(Set):置位,让输出 Q = 1
-R(Reset):复位,让输出 Q = 0

以及两个输出:
-QQ̄(非Q),正常情况下总是互为反相

它的行为可以用一张简表概括:

SR功能Q 输出
00保持不变
10置位1
01复位0
11❌ 禁止状态不确定

注意最后一种情况:S=R=1 是不允许的。这不是设计缺陷,而是结构使然。我们稍后会看到,这其实是反馈回路失控的表现。

那么问题来了:仅仅用与非门或或非门,真的能让电路拥有“记忆”吗?

答案是肯定的。关键是——交叉耦合形成的正反馈


方法一:用或非门搭建RS触发器(高电平有效)

让我们从最直观的方式开始:使用两个或非门(NOR Gate)构建RS触发器。

电路结构

+---------+ R --| | | NOR |-- Q | U1 | | | +---------+ +----+----+ | | | | NOR |-- Q_bar +----------| U2 | | | S -------------------| | +---------+
  • U1 输入:R 和 Q̄,输出 Q
  • U2 输入:S 和 Q,输出 Q̄

⚠️ 注意:这是个闭环系统!每个门的输出都作为另一个门的输入。这意味着输出会影响自己未来的输入——这就是“记忆”的物理基础。

或非门的特性回顾

或非门的规则很简单:

只要任一输入为1,输出就是0;只有当所有输入为0时,输出才为1。

现在我们来手动模拟四种输入组合下的行为。

情况1:S=0, R=0 → 保持状态

假设初始状态 Q = 1,Q̄ = 0。

  • U1 输入:R=0,Q̄=0 → 两个输入都是0 → 输出 Q = 1 ✅
  • U2 输入:S=0,Q=1 → 至少有一个是1 → 输出 Q̄ = 0 ✅

闭环成立!即使没有外部变化,电路也能自我维持。

反过来,如果初始 Q=0,Q̄=1:
- U1: R=0, Q̄=1 → 输出 Q=0
- U2: S=0, Q=0 → 输出 Q̄=1

依然稳定。

✅ 所以当 S=R=0 时,无论之前是什么状态,都能保持不变。这就是“记忆”。

情况2:S=1, R=0 → 强制置位(Q=1)

现在我们想把状态设为1。

  • U2 输入:S=1 → 不管Q是多少,输出 Q̄ = 0(因为或非门只要有1就出0)
  • 这个 Q̄=0 传给 U1,加上 R=0 → U1 的两个输入都是0 → 输出 Q=1

完成置位!

此时反馈形成新平衡:Q=1 → Q̄=0 → Q=1……

即使你之后把 S 改回0,只要 R 还是0,状态仍然锁定在 Q=1。

情况3:S=0, R=1 → 强制复位(Q=0)

同理:
- U1 输入 R=1 → 输出 Q=0
- Q=0 传给 U2,S=0 → 两个输入都是0 → Q̄=1
- 回到 Q=0, Q̄=1 的稳定态

搞定。

情况4:S=1, R=1 → 危险!破坏互补性

来看看会发生什么:
- U1: R=1 → Q=0
- U2: S=1 → Q̄=0

所以 Q = 0,Q̄ = 0 ——两者相同了!

这违反了触发器的设计原则:Q 和 Q̄ 应该是互补的。一旦进入这个状态,当你同时把 S 和 R 都拉低(回到0),会出现竞争条件——哪个门先释放控制权,决定了最终状态。

更糟的是,由于传播延迟差异,可能产生震荡或亚稳态。

🚫 所以我们必须避免 S=R=1。


方法二:用与非门实现(低电平有效)

另一种常见方式是使用两个与非门(NAND Gate)

但这里有个关键区别:为了实现类似功能,输入通常设计为低电平有效,标记为S̄(S-bar)R̄(R-bar)

电路结构

+---------+ S̄ --| | | NAND |-- Q | U1 | | | +---------+ +----+----+ | | | | NAND |-- Q_bar +----------| U2 | | | R̄ ------------------| | +---------+
  • U1 输入:S̄ 和 Q̄,输出 Q
  • U2 输入:R̄ 和 Q,输出 Q̄

与非门特性

只有当所有输入为1时,输出才是0;只要有一个输入为0,输出就是1。

我们再来走一遍状态。

情况1:S̄=1, R̄=1 → 保持

假设 Q=1, Q̄=0:
- U1: S̄=1, Q̄=0 → 有0 → 输出 Q=1 ✅
- U2: R̄=1, Q=1 → 全1 → 输出 Q̄=0 ✅

闭环自洽。

反之亦然。

情况2:S̄=0, R̄=1 → 置位(Q=1)
  • S̄=0 → U1 输出 Q=1(因为只要有一个0,NAND就出1)
  • Q=1 传给 U2,R̄=1 → 两个输入都是1 → Q̄=0
  • Q̄=0 反馈回 U1,维持 Q=1

成功置位。

情况3:S̄=1, R̄=0 → 复位(Q=0)
  • R̄=0 → U2 输出 Q̄=1
  • Q̄=1 传给 U1,S̄=1 → 两个输入都是1 → Q=0
  • Q=0 维持 Q̄=1

复位完成。

情况4:S̄=0, R̄=0 → 同样危险!
  • S̄=0 → Q=1
  • R̄=0 → Q̄=1

又出现了 Q=1, Q̄=1 —— 再次失去互补性。

而且当两者同时释放回1时,谁赢谁输取决于延迟。

🚫 所以 S̄=R̄=0 也是禁止状态。


对比两种实现方式

特性NOR型 RS触发器NAND型 RS触发器
输入极性高电平有效(S/R)低电平有效(S̄/R̄)
保持状态输入S=0, R=0S̄=1, R̄=1
置位条件S=1, R=0S̄=0, R̄=1
复位条件S=0, R=1S̄=1, R̄=0
禁止状态S=R=1S̄=R̄=0
常见应用场景教学演示、简单控制实际IC设计、去抖电路
抗干扰性较弱(常态低电平易扰)较强(常态高电平更稳定)

你会发现,NAND型更适合实际应用。因为在数字系统中,信号线常态为高电平(闲置状态),只有触发时才拉低,这样更不容易被噪声误触发。


Verilog建模:不只是仿真,更是理解工具

虽然RS触发器是纯硬件结构,但在FPGA开发和仿真中,我们可以用Verilog描述其行为逻辑,帮助验证设计。

行为级建模(用于仿真)

module rs_latch_nand( input S_bar, input R_bar, output reg Q, output Q_bar ); assign Q_bar = ~Q; always @(*) begin if (S_bar == 0 && R_bar == 1) Q = 1; else if (S_bar == 1 && R_bar == 0) Q = 0; else if (S_bar == 1 && R_bar == 1) Q = Q; // 保持 else Q = 1'bx; // 非法状态,标记为未知 end endmodule

这段代码清晰表达了四种输入条件下的行为。1'bx提醒我们在综合时必须避免这种情况。

但要注意:这种写法适合仿真,但综合工具可能会优化掉反馈路径,导致无法生成真正的锁存器。

门级建模(可综合,贴近物理实现)

module rs_latch_nand_gates( input S_bar, input R_bar, output Q, output Q_bar ); wire Q_internal, Q_bar_internal; nand (Q_internal, S_bar, Q_bar_internal); nand (Q_bar_internal, R_bar, Q_internal); assign Q = Q_internal; assign Q_bar = Q_bar_internal; endmodule

这才是真正映射到硬件的方式——直接写出两个与非门的连接关系。综合工具会忠实保留这种结构。


实战应用:机械按键去抖动

最经典的RS触发器应用场景之一,就是解决按键抖动问题。

什么是按键抖动?

当你按下机械按钮时,金属触点并不会立刻稳定接触,而是会在几毫秒内反复弹跳数次,产生多个上升/下降沿。

对于高速数字系统来说,这可能被识别为多次按键事件。

如何用RS触发器解决?

设想以下电路:
- 上拉电阻 + 按键 → 接地,连接到 S̄ 端
- 另一个按键接 R̄ 端(用于清除)
- 输出 Q 控制LED或MCU输入

工作流程如下:

  1. 初始状态:S̄=1, R̄=1 → Q=0(LED灭)
  2. 按下设置键:S̄接地 → S̄=0 → 触发置位 → Q=1(LED亮)
  3. 触点弹跳:S̄在0和1之间快速跳变
    - 但由于 Q=1 已反馈至 U2 输入端,只要 R̄=1,Q̄ 就会被强制为0 → U1 继续维持 Q=1
    - 形成“自锁”
  4. 释放按键:S̄恢复为1 → 但状态已锁定
  5. 手动复位:按下R̄键 → R̄=0 → Q=0 → LED熄灭

✅ 无论S̄端抖动多少次,输出只翻转一次。

这就是“首次触发即锁定”的威力。


设计陷阱与最佳实践

尽管简单,RS触发器在实际使用中仍有不少坑需要注意:

1. 绝对避免禁用状态

  • 在PCB布局中,可通过添加反相器确保 S 和 R 不会同时激活。
  • 或者使用编码逻辑,例如通过单个输入 + 状态机生成互斥的S/R信号。

2. 传播延迟匹配

  • 若两个门延迟不一致,在切换瞬间可能出现短暂的竞争冒险。
  • 使用同一批次、同一封装的逻辑芯片可降低风险。

3. 电源去耦不可少

  • CMOS门电路在状态翻转时会产生瞬态电流尖峰。
  • 建议在Vcc引脚附近放置0.1μF陶瓷电容到地,减少电压波动影响。

4. 未使用引脚处理

  • CMOS输入端严禁悬空!否则容易积累电荷,导致功耗增加甚至损坏。
  • 未使用的S̄或R̄应通过上拉/下拉电阻固定电平。

5. 向同步逻辑演进

  • 在现代数字系统中,异步RS触发器多用于前端信号采集。
  • 主系统通常采用时钟同步的D触发器,以提高时序可控性和抗干扰能力。
  • 可将RS锁存器输出接入同步寄存器进行采样,兼顾实时性与稳定性。

总结:从简单门电路看数字世界的基石

我们从头到尾走了一遍RS触发器的构建过程,不是为了记住公式,而是为了理解一件事:

记忆,并非神秘的功能,而是反馈结构下的自然产物。

两个简单的逻辑门,通过交叉反馈,就能在两个稳定状态间切换并长期保持——这就是所有数字存储的起点。

无论是NOR还是NAND实现,其本质都是利用门电路的非线性特性,构造出具有“惯性”的双稳系统。而这种“由简入繁”的思想,贯穿了整个计算机工程的发展史。

当你下次看到处理器中的寄存器、内存中的比特位,不妨回想一下这个小小的RS触发器。正是这些最基本的单元,一层层堆叠起来,构成了我们今天的数字文明。

如果你在调试电路时遇到状态异常,别忘了回头看看最基础的锁存行为——有时候,问题就藏在那两个相互注视的逻辑门之间。

如果你正在学习数字逻辑、准备面试,或者想亲手做一个去抖电路,欢迎在评论区分享你的实践经历。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:00:28

腾讯开源Hunyuan-1.8B:Int4量化与256K上下文新突破

腾讯开源Hunyuan-1.8B:Int4量化与256K上下文新突破 【免费下载链接】Hunyuan-1.8B-Instruct-AWQ-Int4 腾讯开源Hunyuan-1.8B-Instruct-AWQ-Int4大语言模型,支持快慢双推理模式,原生256K超长上下文,优化Agent任务性能。采用GQA架构…

作者头像 李华
网站建设 2026/4/16 21:49:06

1小时原型开发:用INDEXTTS2验证语音交互创意

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速开发一个语音交互demo原型,功能:1. 语音问答系统 2. 用户语音输入转文本 3. 系统用INDEXTTS2语音回答 4. 简单的对话逻辑(如天气查询、时间…

作者头像 李华
网站建设 2026/4/16 12:00:05

终极免费解锁:WeMod Pro完整功能全攻略

终极免费解锁:WeMod Pro完整功能全攻略 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 还在为WeMod免费版的功能限制而烦恼吗&#…

作者头像 李华
网站建设 2026/4/17 12:33:56

RISC-V中断系统入门:手把手配置流程

手把手教你配置 RISC-V 中断系统:从寄存器到 ISR 的完整实践你有没有遇到过这种情况:代码写好了,外设也初始化了,可中断就是不触发?或者一进中断就卡死、返回不了主程序?在 RISC-V 平台上,这类问…

作者头像 李华
网站建设 2026/4/17 15:50:07

用Anaconda3快速验证数据科学创意:COVID-19分析实例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个COVID-19数据分析原型:1) 使用conda快速创建环境;2) 导入公开数据集;3) 实现感染趋势可视化和简单预测;4) 打包成可分享的B…

作者头像 李华
网站建设 2026/4/17 17:13:26

AI如何解决‘CURRENT REQUEST IS NOT A MULTIPART REQUEST‘错误

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个AI辅助调试工具,能够自动检测HTTP请求头中的Content-Type字段,当发现请求应该是multipart/form-data但实际上不是时,自动生成修复建议和…

作者头像 李华