这次我们来看一个来自 Ben Eater 的经典数字电路教学项目——“JK 触发器赛跑”。这不是一个软件工具或 AI 模型,而是一个通过硬件电路和面包板搭建的、用于直观演示 JK 触发器工作原理的物理实验。它的核心价值在于,将抽象的数字逻辑概念(如触发器、时钟、竞争冒险)转化为可视化的、动态的“赛跑”游戏,让学习过程变得生动有趣。
对于电子工程、计算机组成原理的初学者,或者任何对数字电路底层运作感兴趣的朋友,这个项目提供了一个绝佳的动手实践机会。你不需要昂贵的 FPGA 开发板,只需要一些基础的逻辑芯片、面包板、LED 和开关,就能亲手搭建并观察 JK 触发器在时钟沿到来时的状态变化“赛跑”过程。
本文将带你完整复现这个项目。我们会从 JK 触发器的核心原理讲起,然后详细列出所需的元器件清单,一步步指导你在面包板上搭建电路,最后通过实际操作来观察和验证“赛跑”现象,并深入分析其背后的电路时序原理。无论你是学生、硬件爱好者,还是想巩固数电知识的开发者,这篇文章都能让你获得从理论到实践的完整收获。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 项目类型 | 数字电路教学实验 / 硬件动手项目 |
| 核心器件 | JK 触发器芯片 (如 74LS73)、逻辑门、时钟信号源、LED、按钮开关 |
| 核心概念 | JK 触发器功能、时钟边沿触发、竞争条件 (Race Condition)、状态转换 |
| 硬件门槛 | 低。需要基础电子元器件、面包板、杜邦线、电源(5V直流)。无需编程或高端设备。 |
| 输出形式 | 可视化状态指示(通过 LED 亮灭),直观展示触发器状态变化的“赛跑”过程。 |
| 学习目标 | 理解边沿触发与电平触发的区别,观察并分析电路中的时序冒险现象。 |
| 适合场景 | 数字电路/计算机组成原理教学、个人兴趣实验、电子竞赛基础训练。 |
2. 适用场景与使用边界
这个“JK 触发器赛跑”项目主要适用于以下场景和人群:
- 电子/计算机专业学生:作为《数字逻辑电路》或《计算机组成原理》课程的补充实验,帮助理解触发器这一核心时序元件的工作机制,特别是建立时间、保持时间和时钟偏移的影响。
- 硬件入门爱好者:希望通过有趣的项目入门数字电路,面包板搭建过程能锻炼电路布局、焊接(可选)和调试的基本功。
- 创客与教育者:可以将其作为一个生动的课堂演示或工作坊项目,用可视化的“赛跑”来替代枯燥的真值表讲解,提升教学效果。
使用边界与注意事项:
- 非生产级电路:这是一个教学演示电路,旨在揭示问题(竞争冒险),而非提供一个稳定可靠的触发器应用方案。切勿将其直接用于需要高可靠性的实际产品中。
- 电源要求:需使用稳定的 5V 直流电源(常见 USB 供电或稳压模块),注意正负极不要接反,避免烧毁芯片。
- 静电防护:CMOS 芯片(如 74HC 系列)对静电敏感,操作前可触摸接地金属物释放静电。本文示例使用更耐用的 74LS 系列。
- 信号完整性:在高速时钟下,导线长度、面包板接触电阻可能影响现象观察。建议初始使用低频时钟(如 1Hz)以便观察。
3. 环境准备与前置条件
在开始搭建电路之前,你需要准备以下硬件和软件环境。
3.1 硬件元器件清单
以下是搭建一个基础“JK 触发器赛跑”电路所需的核心元器件:
| 类别 | 型号/规格 | 数量 | 说明 |
|---|---|---|---|
| 集成电路 (IC) | 74LS73 (双 JK 触发器,带清零) | 2 片 | 核心器件,也可用 74LS76 或其他 JK 触发器。 |
| 74LS00 (四路2输入与非门) | 1 片 | 用于生成时钟信号和辅助逻辑。 | |
| 74LS04 (六反相器) | 1 片 | 可选,用于信号反相或整形。 | |
| 时钟源 | 555 定时器芯片 | 1 片 | 用于产生可调频率的方波时钟。 |
| 电位器 (10kΩ) | 1 个 | 调节 555 输出时钟的频率。 | |
| 电阻、电容套件 | 若干 | 用于 555 定时器及上下拉电阻,详见电路图。 | |
| 输入设备 | 轻触开关/拨动开关 | 2-4 个 | 用于手动控制 J、K 输入信号和清零信号。 |
| 输出显示 | LED (不同颜色) | 4-8 个 | 用于显示两个触发器的 Q 和 !Q 输出状态。建议不同颜色区分。 |
| 限流电阻 (220Ω - 1kΩ) | 4-8 个 | 与 LED 串联,保护 LED 和芯片输出端。 | |
| 供电与连接 | 面包板 (400孔以上) | 1 块 | 用于无焊接电路搭建。 |
| 杜邦线 (公-公) | 若干 | 建议多种颜色,便于区分电源、地、信号线。 | |
| 直流电源 | 1 套 | 输出 5V,电流 ≥ 500mA。可使用 USB 转 DC 接口或稳压模块。 | |
| 万用表 | 1 台 | 用于测量电压、检查通断,调试必备。 |
3.2 软件与知识准备
- 电路图查看工具:任何能打开图片的软件即可,用于查看我们提供的接线图。
- 基础知识:
- 了解 JK 触发器的真值表和逻辑功能(当 J=1, K=1 时,每个时钟脉冲到来,输出状态翻转)。
- 理解“边沿触发”(上升沿或下降沿有效)与“电平触发”的区别。
- 了解面包板的基本结构(电源轨、内部连接)。
- 知道如何计算 LED 的限流电阻(
R = (Vcc - V_led) / I_led,通常 5V 电源配 220Ω-470Ω 电阻)。
4. 电路原理与设计解析
在动手之前,理解“赛跑”的原理至关重要。Ben Eater 设计的巧妙之处在于,他利用了两个 JK 触发器共享同一个时钟信号,并通过逻辑门制造了一个微小的路径延迟差异。
4.1 核心思想:制造“竞争”
在一个理想的同步电路中,所有触发器在同一时钟边沿瞬间更新状态。但在现实中,信号从时钟源到达不同触发器输入端的路径延迟有微小差异。这个项目就是人为地、可观察地放大这种差异。
- 电路连接:两个 JK 触发器(假设为 FF1 和 FF2)的 J、K 输入端都接高电平(逻辑1)。这意味着每个有效的时钟边沿,它们都应该翻转(Toggle)一次。
- 交叉反馈:关键步骤是,将 FF1 的输出 Q 连接到 FF2 的某个控制端(或反之),或者通过一个逻辑门(如与门)来影响第二个触发器的时钟或输入。这样,FF1 的状态变化会试图去影响 FF2 在当前同一个时钟周期内的行为。
- 延迟路径:由于信号需要经过逻辑门和导线,FF1 的输出变化反馈到 FF2 需要时间。如果这个反馈时间与时钟边沿“赛跑”,结果将变得不确定。
- 观察现象:当时钟频率调节到某个范围时,你会看到两个 LED(代表两个触发器的状态)的翻转不是同步的,有时 FF1 先翻,有时 FF2 先翻,甚至出现非预期的状态组合。这就是“竞争冒险”(Race Hazard)的直观体现。
4.2 参考电路框图
一个典型的实现方案如下(具体引脚连接需根据芯片数据手册):
+5V | [PULL-UP Rs] | CLK源 ---+-------------------> CLK of FF1 | | | J1-+-+-> VCC (逻辑1) | K1-+-+-> VCC (逻辑1) | | +--[延迟路径]---> CLK of FF2 | J2-+-+-> VCC K2-+-+-> VCC- CLK源:由 555 定时器构成的可调频率方波发生器。
- 延迟路径:可能是一个反相器(74LS04)或一个与非门(74LS00),它的传播延迟(通常十几纳秒)就是制造“赛跑”的关键。
- FF1, FF2:两个 74LS73 JK 触发器。
5. 分步搭建指南
我们以使用 74LS73 和 74LS00 为核心,搭建一个经典电路为例。
5.1 步骤一:搭建可调时钟源(555定时器)
首先在面包板一侧搭建一个占空比约50%的方波发生器。
# 这不是命令,而是电路连接描述 1. 将 555 芯片跨坐在面包板中部分隔槽上。 2. 连接电源:引脚 8 (VCC) 接 +5V,引脚 1 (GND) 接地。 3. 在引脚 6 (THRES) 和引脚 2 (TRIG) 之间连接一个 10kΩ 电位器(中间抽头接引脚6和2,两端分别接引脚7和地?不,标准接法如下)。 4. 更标准的接法:引脚7 (DIS) 接一个1kΩ电阻到+5V,同时接电位器一端。电位器另一端和中间抽头连接到引脚6和2。引脚6和2之间再接一个0.1uF电容到地。 5. 引脚 5 (CONT) 接一个 0.01uF 电容到地(去耦)。 6. 输出:引脚 3 (OUT) 即为时钟输出,接一个1kΩ电阻后作为系统CLK。 7. 通过旋转电位器,可以改变输出方波的频率(建议从1Hz左右开始调试)。注意:555 电路有多种接法,建议搜索“555 astable multivibrator 50% duty cycle”找到标准电路图并按图施工。输出频率f ≈ 1.44 / ((R1 + 2*R2) * C),其中 R1 和 R2 是电阻,C 是电容。
5.2 步骤二:连接 JK 触发器基本电路
为每个 74LS73(内部有两个独立的 JK 触发器,我们只用一个)搭建基本电路。
# 对于第一个 JK 触发器 (FF1,使用 74LS73 的一半) 1. 芯片 74LS73-1:引脚 14 (VCC) 接 +5V,引脚 7 (GND) 接地。 2. 时钟输入:将 555 的时钟输出连接到 FF1 的时钟引脚 CLK1 (引脚 1)。 3. J 和 K 输入:将 J1 (引脚 14) 和 K1 (引脚 3) 通过一个 1kΩ 上拉电阻连接到 +5V(即置为逻辑高电平 1)。也可以直接接 VCC,但接上拉电阻是更好实践。 4. 清零端:将 CLR1 (引脚 2) 通过一个 10kΩ 上拉电阻接到 +5V,并连接一个轻触开关到地。按下开关时,CLR1 为低电平,触发器清零(Q=0)。 5. 输出显示:Q1 (引脚 15) 连接一个 LED(阳极)串联一个 220Ω 限流电阻到地。!Q1 (引脚 14) 同样接一个 LED 用于显示反相输出。5.3 步骤三:引入“赛跑”延迟路径
这是项目的精髓。我们需要让 FF1 的输出去影响 FF2 的时钟。
# 使用一个 74LS00 与非门制造延迟 1. 芯片 74LS00:引脚 14 (VCC) 接 +5V,引脚 7 (GND) 接地。 2. 将 FF1 的输出 Q1 连接到 74LS00 第一个与非门的一个输入端(如引脚 1)。 3. 将同一个与非门的另一个输入端(如引脚 2)接高电平(+5V)。这样,该与非门相当于一个反相器(因为 A NAND 1 = NOT A)。 4. 该与非门的输出(引脚 3)就是反相后的 Q1 信号,并且引入了约 10-20ns 的芯片传播延迟。 5. 将这个延迟后的信号(引脚 3)连接到第二个 JK 触发器 FF2 的时钟引脚 CLK2。5.4 步骤四:连接第二个 JK 触发器
第二个触发器 FF2 的连接与 FF1 类似,但时钟源来自延迟路径。
# 对于第二个 JK 触发器 (FF2,使用另一片 74LS73 或同一片的另一半) 1. 连接电源和地。 2. 时钟输入:CLK2 接来自 74LS00 引脚 3 的延迟时钟信号。 3. J2 和 K2:同样上拉到 +5V(逻辑1)。 4. 清零端 CLR2:同样接上拉电阻和清零按钮。 5. 输出显示:Q2 和 !Q2 同样接 LED 显示。5.5 步骤五:上电前最终检查
- 电源检查:用万用表直流电压档,测量面包板电源轨对地电压是否为稳定的 5V。
- 短路检查:目视和用万用表通断档检查,确保 +5V 和 GND 之间没有直接短路。
- 芯片方向:确认所有 IC 的缺口方向一致,且引脚 1 位置正确。
- 连接牢固:按压所有杜邦线和元件引脚,确保与面包板接触良好。
6. 功能测试与现象观察
电路搭建完成后,就可以开始进行测试,观察“赛跑”现象。
6.1 基础功能测试
上电与清零:
- 接通 5V 电源。
- 分别按下 FF1 和 FF2 的“清零”按钮。观察到对应的 Q 输出 LED 熄灭,!Q 输出 LED 点亮。这表明触发器处于 0 状态,且清零功能正常。
- 松开清零按钮。
单步时钟测试(低频):
- 将 555 电位器调到最低频率(可能低于 1Hz)。
- 观察时钟信号(可以用一个额外的 LED 接在 555 输出端来指示,或者用万用表测电压变化)。
- 当时钟信号每次发生跳变(上升沿或下降沿,取决于 74LS73 是下降沿触发)时,观察两个触发器的 LED 状态。
- 预期:在极低频率下,两个触发器应该几乎同步翻转。因为延迟时间相对于漫长的时钟周期微不足道。
6.2 “赛跑”现象验证
调节时钟频率:
- 缓慢增加 555 时钟源的频率(顺时针旋转电位器)。
- 当频率增加到几十赫兹到几百赫兹范围时,仔细观察。
观察不稳定状态:
- 现象 A(不同步):你会看到两个触发器的 LED 状态变化不再同步。可能 FF1 先翻转,然后 FF2 再翻;或者反过来。这说明延迟路径开始起作用,两个触发器对时钟的响应有了先后。
- 现象 B(亚稳态):在某些时钟边沿,你可能会看到某个 LED 闪烁(半亮),或两个触发器进入非预期的状态(例如,两个 Q 都亮,违反了互补规则)。这是竞争冒险导致触发器进入亚稳态(Metastable State)的直观表现,是数字电路设计中需要避免的。
- 现象 C(模式固定):在某些频率下,可能会稳定在一种固定的先后顺序模式。改变频率或按一下清零按钮,模式可能切换。
记录与验证:
- 尝试找到能稳定重现“不同步翻转”现象的时钟频率范围。
- 用手机慢动作拍摄可能有助于观察。
7. 原理深度分析与思考
观察到现象后,我们来深入分析其背后的电路原理。
7.1 时序图分析
假设初始状态 Q1=0, Q2=0,时钟 CLK 为下降沿触发。
- 第一个 CLK 下降沿到达 FF1,由于 J=K=1,Q1 翻转为 1。
- Q1 从 0->1 的变化,经过 74LS00 反相器延迟
t_pd后,在 FF2 的 CLK2 端产生一个从 1->0 的下降沿。 - 关键点:如果这个延迟产生的下降沿,与来自 555 的原始 CLK 下降沿在时间上非常接近,那么 FF2 可能在这个“混合”的时钟信号下行为异常。
- 实际上,FF2 看到的可能是一个带有毛刺(Glitch)的时钟信号。如果毛刺满足触发器的脉冲宽度要求,就可能引起一次额外的、非预期的触发,从而导致状态错误。
7.2 竞争冒险与亚稳态
- 竞争:指信号通过不同路径到达同一个点,在时间上有先有后的现象。本项目就是 CLK 直接路径与经过反馈的延迟路径之间的竞争。
- 冒险:由于竞争导致电路输出产生非预期尖峰脉冲的可能性。
- 亚稳态:当触发器的建立时间(Setup Time)或保持时间(Hold Time)不满足时,输出可能在一段时间内处于一个非 0 非 1 的中间电平,然后随机稳定到 0 或 1。实验中 LED 的闪烁可能就是亚稳态在宏观上的表现。
7.3 如何在实际设计中避免
这个实验演示了要避免的问题。在实际同步电路设计中,我们采用以下方法:
- 全局时钟树:使用低偏移的时钟分布网络,让时钟信号尽可能同时到达所有触发器。
- 静态时序分析:通过工具检查所有路径是否满足建立时间和保持时间。
- 同步器:对于异步信号(如按键输入),使用两级或多级触发器进行同步,降低亚稳态传播概率。
- 避免使用门控时钟:尽量避免用逻辑门来控制时钟信号,就像本实验中做的那样。如果必须使用,需进行极其严谨的时序分析。
8. 扩展实验与探索
完成基础实验后,你可以尝试以下扩展,加深理解:
- 改变延迟:将 74LS00 换成 74LS04(反相器),或者串联两个逻辑门,观察延迟变化对“赛跑”频率范围的影响。
- 改变触发边沿:如果使用上升沿触发的 JK 触发器(如 74LS109),电路和现象会有何不同?
- 测量延迟时间:使用示波器(如果有)测量 555 的原始 CLK 和经过 74LS00 后的 CLK2 信号,直观看到时间差
t_pd。 - 加入去抖电路:为清零按钮添加 RC 硬件去抖或软件去抖逻辑,观察对实验稳定性的影响。
- 设计“赢家”指示器:用逻辑门设计一个电路,当 FF1 先翻转时亮一个灯,FF2 先翻转时亮另一个灯。
9. 常见问题与排查方法
在搭建和实验过程中,你可能会遇到以下问题:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 上电后无任何 LED 亮 | 1. 电源未接通或电压不对。 2. 电源正负极接反。 3. 总电源开关或线路断路。 | 1. 用万用表测面包板 VCC/GND 间电压。 2. 检查电源适配器输出。 | 1. 确保电源输出 5V,正负极正确。 2. 检查所有电源线连接。 |
| 部分 LED 常亮或不亮 | 1. LED 或限流电阻接反、虚焊。 2. 芯片引脚接触不良或损坏。 3. 触发器输出端短路。 | 1. 检查 LED 极性(长脚正极)。 2. 用万用表测芯片输出引脚电压。 3. 重新插拔芯片和导线。 | 1. 更正 LED 方向。 2. 更换芯片或导线。 |
| 按下清零按钮无效 | 1. 清零按钮接线错误。 2. 上拉电阻未接或开路。 3. 芯片清零引脚损坏。 | 1. 检查按钮是否一端接 CLR,一端接地。 2. 检查上拉电阻是否接 VCC。 3. 测 CLR 引脚电压,按下时应接近 0V。 | 1. 更正按钮接线。 2. 确保上拉电阻正常工作。 |
| 时钟信号无变化 | 1. 555 定时器电路接错。 2. 电位器损坏或调节不当。 3. 电容值错误或损坏。 | 1. 对照标准 555 无稳态电路图检查。 2. 用万用表测 555 输出引脚 3 电压。 3. 更换电位器或电容。 | 1. 重新检查 555 外围电路。 2. 尝试更换元件。 |
| 看不到“赛跑”现象 | 1. 时钟频率不合适(太快或太慢)。 2. 延迟路径未正确连接。 3. 两个触发器时钟源意外短路或一致。 | 1. 大幅调节电位器,遍历不同频率。 2. 检查 74LS00 输入输出连接。 3. 用万用表测两个 CLK 信号是否独立。 | 1. 耐心调节时钟频率。 2. 确认反馈信号连接到第二个触发器 CLK。 |
| LED 闪烁(非正常翻转) | 1. 电源不稳定或纹波过大。 2. 接触不良导致信号断续。 3. 触发器进入亚稳态。 | 1. 用示波器看电源电压和时钟信号。 2. 按压各连接点看是否变化。 3. 降低时钟频率观察。 | 1. 使用更稳定的电源。 2. 加固所有连接。 3. 这是亚稳态现象,属于正常演示内容。 |
10. 总结与最佳实践
通过这个“JK 触发器赛跑”项目,你不仅搭建了一个有趣的硬件电路,更亲身体验了数字电路设计中至关重要的时序概念。从清晰的逻辑门到不可预测的“赛跑”结果,这一对比深刻揭示了理想模型与物理实现之间的差距。
项目核心收获:
- 动手巩固理论:将书本上的 JK 触发器、时钟、竞争冒险等概念转化为看得见、摸得着的现象。
- 理解时序本质:认识到信号传播延迟是真实存在的,并且会对电路行为产生决定性影响。
- 掌握调试技能:学习了面包板电路的搭建、调试流程和常见故障排查方法。
给实践者的建议:
- 从低频开始:调试时先将时钟调到极低频率(如 1Hz),确保基础功能(清零、单步翻转)正常,再逐步提高频率寻找“赛跑”现象。
- 善用万用表:它是你眼睛的延伸,用于测量电压、检查通断,能快速定位电源和信号问题。
- 保持电路整洁:使用不同颜色的杜邦线区分电源(红色)、地(黑色)和信号线(黄、绿等),合理布局芯片,避免飞线杂乱。
- 安全第一:确保 5V 电源稳定,避免短路。使用芯片座可以方便更换芯片,避免反复焊接损坏。
- 记录与分享:用笔记或视频记录你的搭建过程、观察到的现象和任何疑问。与同好交流往往能发现新的视角。
这个项目是深入数字电路世界的一个绝佳起点。理解了这里的竞争与冒险,你在未来面对更复杂的 FPGA 设计或高速 PCB 布局时,就会对“时序收敛”、“时钟域交叉”等高级议题有更直观和深刻的认识。建议收藏本文,在需要重温这些基础概念时,不妨再次拿出面包板,亲手让触发器们“赛跑”一次。