NOTE
本章把“能记住 1 位”的锁存器/触发器,与“能按时间产生脉冲”的定时器放在一起学习。建议先掌握状态、时钟沿、建立/保持时间三个关键词,再阅读 VHDL 与交通灯控制器案例。
本章导航
- 锁存器与触发器:电平敏感 versus 边沿敏感。
- D、J-K 触发器:真值表、波形和异步 PRE/CLR。
- 触发器的时序参数:传播延迟、建立/保持时间、最高时钟频率。
- 应用:并行存储、分频和计数。
- 单稳态(one-shot)与 555 定时器。
- 非稳态振荡器、占空比和故障排查。
- 用触发器和定时器构成交通信号控制器。
7.1 从锁存到触发
锁存器和触发器都是双稳态电路,能够稳定停在 0 或 1,并因此存储 1 bit。锁存器通常是电平敏感:使能有效的整个时间窗口内,输入变化可能传到输出;边沿触发器只在时钟的上升沿或下降沿采样。时钟(CLK)是规定状态更新时刻的控制输入。
识别逻辑符号时,时钟端的小三角形表示动态(边沿)输入;三角形旁没有气泡表示上升沿触发,有气泡表示下降沿触发。输出通常记为 与互补输出 。
WARNING
不要把“时钟为高电平”误认为“上升沿”。上升沿只是 LOW→HIGH 的瞬间;边沿触发器在瞬间采样,之后同一高电平期间改变 D、J、K 通常不会影响 Q。
7.2 D 触发器
D 是同步数据输入。对上升沿 D 触发器:在每个 到来时, 取 D 的值;D=1 为 SET,D=0 为 RESET。下降沿 D 触发器的规则完全相同,只是采样点换成 。
| D | 触发沿 | Q(沿后) | 动作 | |
|---|---|---|---|---|
| 0 | 0 | 1 | RESET | |
| 1 | 1 | 0 | SET |
记忆口诀:D 触发器 = 在指定时钟沿“拍照”,Q 只保存照片中的 D。
Worked example 7-4:按时钟沿读波形
题意:正沿触发 D 触发器初始 RESET,给出图 7-15、7-16 的 D 和 CLK,求 Q、。
解题只在六个上升沿读取 D:第 1、2 个沿 D=0,Q 保持 0;第 3 个沿 D=1,Q=1;第 4 个沿 D=0,Q=0;第 5、6 个沿 D=1,Q=1。 始终为 Q 的反相。若改为负沿触发,则把采样时刻全部换到下降沿。
7.3 J-K 触发器
J-K 触发器在 D 触发器基础上增加了“保持”和“翻转”选择:
| J | K | 触发沿后的 Q | 模式 |
|---|---|---|---|
| 0 | 0 | 保持不变 | |
| 0 | 1 | 0 | RESET |
| 1 | 0 | 1 | SET |
| 1 | 1 | Toggle,每个时钟沿翻转 |
其中 是时钟沿之前的状态。J=K=1 时,若原来 0 就变 1,若原来 1 就变 0,因此 J-K 触发器可直接作为 T 触发器使用。
Worked example 7-5:负沿 J-K 波形
题意:图 7-18 给出 J、K、CLK,触发器初始 RESET,符号气泡说明它是负沿触发。
解:只在下降沿处理输入。第 1 沿 J=K=1,翻转为 1;第 2 沿 J=K=0,保持 1;第 3 沿 J=0、K=1,复位为 0;第 4 沿 J=1、K=0,置位为 1;第 5 沿仍为 SET,Q 保持 1。常见错误是误在上升沿读值。
7.4 边沿触发的内部直觉
一个简化 D 触发器可看成“转向门 + 锁存器 + 脉冲过渡检测器”。反相器和 NAND 门的传播延迟制造出极窄的时钟尖脉冲;正沿型直接产生上升沿尖脉冲,负沿型先反相后产生下降沿尖脉冲。转向门依据 D 将尖脉冲送到置位或复位通路,锁存器随后反馈保持状态。
J-K 触发器把 、 反馈到门输入:J 通路负责置位,K 通路负责复位,J=K=1 时反馈使每个时钟尖脉冲只翻转一次。
Worked example 7-6:D 触发器输出
Q 在每个正沿等于该时刻的 D;初始 RESET 时,从第一条正沿开始逐沿记录即可。若把 D 波形反相,Q 也只需在每个采样沿读取反相后的值。
7.5 异步预置与清零
PRE(preset)和 CLR(clear)是异步输入,不必等待时钟:有效 PRE 立即使 Q=1, 有效 CLR 立即使 Q=0。带气泡通常表示低有效 、;正常同步工作时二者都应保持 HIGH,不能同时拉 LOW(该组合通常是禁止状态)。
WARNING
异步端优先级高于 D、J、K 和 CLK。排查波形时先看 PRE/CLR 是否有效,再看同步输入;否则会把“被清零”误判成 D=0。
Worked example 7-7:异步端优先
图 7-27 中,第 1~3 个时钟期间 PRE 为 LOW,所以 Q 强制为 1;第 4~7 个期间 PRE、CLR 都 HIGH,Q 才跟随正沿采样的 D;第 8~9 个期间 CLR 为 LOW,Q 强制为 0。交换 PRE、CLR 波形后,置位区和复位区互换。
74HC74 是双正沿 D 触发器,带低有效异步 PRE、CLR;74HC112 是双负沿 J-K 触发器,同样带低有效异步输入。VHDL 中可用 rising_edge(Clock) 或 falling_edge(Clock)描述采样沿,异步优先级应在时序逻辑中明确表达。
library ieee;
use ieee.std_logic_1164.all;
entity dffl is
port (D, Clock, Pre, Clr: in std_logic; Q: inout std_logic);
end entity dffl;
architecture LogicOperation of dffl is
begin
process
begin
wait until rising_edge (Clock);
if Clr = '1' then
if Pre = '1' then
if D = '1' then Q <= '1'; else Q <= '0'; end if;
else Q <= '1';
end if;
else Q <= '0';
end if;
end process;
end architecture LogicOperation;7.6 触发器工作特性
- 传播延迟:从时钟沿到 Q 的 LOW→HIGH()或 HIGH→LOW()所需时间;PRE→Q、CLR→Q 也各有延迟。
- 建立时间 :时钟沿到来前,D 或 J/K 必须稳定的最短时间。
- 保持时间 :时钟沿之后,输入仍需保持的最短时间。
- 最高时钟频率 :器件可靠工作的最高重复频率。
- 最小脉宽 :CLK、PRE、CLR 的高/低电平必须持续的最短时间。
若输入在建立或保持窗口内抖动,可能进入亚稳态,输出延迟甚至错误;因此时序设计必须给出裕量。
功耗按 计算。例如 5 V、5 mA 的触发器功耗为 25 mW;10 个同类器件总功耗 250 mW,5 V 电源至少提供 。CMOS 通常静态功耗低、供电范围宽,但低电压会降低最高频率。
7.7 触发器的三个典型应用
并行数据存储
把多条数据线分别接到多个 D 触发器,所有 CLK 相连,就能在同一个时钟沿同时保存一个字。例如四个 D 触发器组成 4 位寄存器;公共 CLR 可在上电时把全部位清零。寄存器常以 8 位或其倍数组织。
二分频与多级分频
D 触发器接成 ,或 J-K 触发器接成 J=K=1,每个时钟沿翻转一次,故 。把前一级 Q 接到后一级时钟,n 级得到 。
Worked example 7-9:8 kHz 分频
三级触发器构成 分频,输入 8 kHz 时, 为 4 kHz、 为 2 kHz、 为 1 kHz。输出每八个输入脉冲重复一次。
计数
两个负沿 J-K(J=K=1)触发器串接,Q_A 为最低位,得到 00→01→10→11→00 的二进制循环。三级可产生 000、001、010、011、100、101、110、111 共八个状态。
Worked example 7-10:三位计数器
逐个负沿记录 ,状态依次为 000、001、010、011、100、101、110、111,然后回到 000。要表示十进制 0~15,需要 4 个触发器。
7.8 单稳态(One-shot)
单稳态多谐振荡器只有一个稳定态。触发后暂时进入不稳定态,经过 RC 决定的时间自动返回;输出因此是单个定宽脉冲。
- 不可再触发:处于不稳定态时忽略后续触发。
- 可再触发:计时未结束又触发,会延长(重新计时)输出脉冲。
RC 电路中电容充电速度决定脉宽。74121 是不可再触发单稳态,典型公式为 (R 用 kΩ、C 用 pF 时, 为 ns;可使用内部 2 kΩ 电阻)。74LS122 是可再触发单稳态: 内部电阻约 10 kΩ。Schmitt 触发器符号表示带迟滞的输入,可避免慢变信号在阈值附近反复抖动。
Worked example 7-11:74121 约 100 ms
选 ,由 计算约 ;选标准 3.3 μF,脉宽约 91 ms。另一组 68 kΩ 与 2.2 μF 可得到约 105 ms。设计时应同时考虑器件容差和漏电流。
Worked example 7-12:74LS122 约 1 μs
取 pF,代入公式求得 kΩ,选标准值 4.7 kΩ。单位必须统一为 ns、pF、kΩ。
三个 74LS122 可级联成顺序定时器:OS1 超时后触发 OS2,OS2 超时后触发 OS3,得到三个连续的 1 s 脉冲,可用于流水灯或车辆转向指示。
7.9 555 定时器作单稳态
555 内含分压器(产生 、)、两个比较器、S-R 锁存器、放电晶体管和复位端。TRIG 低于 时置位,OUT 变 HIGH、放电管关断;THRESH 高于 时复位,OUT 变 LOW、放电管导通。
单稳态连接中,触发后电容经 R 充电;当电容达到阈值,输出结束。脉宽 控制电压端通常接去耦电容以降低噪声。
Worked example 7-13
、 时: 若要 1 ms,可反解 。
7.10 非稳态多谐振荡器
非稳态没有稳定状态,会在两个准稳态间自行往复,输出方波,常作系统时钟。Schmitt 反相器加 RC 反馈时,电容充到上触发点 UTP,输出翻转;放电到下触发点 LTP,又翻转回来,循环无需外部触发。
555 非稳态模式
555 中 THRESH 与 TRIG 相连, 构成定时网络。电容在 与 间充放电:充电经过 ,放电经过 。
标准连接的占空比通常不低于约 50%;并联二极管使电容充电只经过 ,可实现低于 50% 的占空比:
Worked example 7-14
kΩ、 kΩ、F:
SUCCESS
看到 555 题目时先判断模式:单稳态用 求一次脉冲;非稳态用 求频率,再用 求占空比。
7.11 故障排查:传播延迟造成毛刺
数字电路中的毛刺是极短暂的错误脉冲,常由竞争条件和传播延迟造成。两相时钟发生器若用正沿触发器,CLK 与 Q、 的延迟可能在 AND 门输入短暂同时为 HIGH,产生尖峰。改用负沿触发器,让状态变化发生在时钟下降沿,可避开该重合窗口。
示波器扫速较低时可能看不见纳秒级毛刺;逻辑分析仪的 latch/transition sampling 模式能把电平变化锁存下来,便于发现故障。排查顺序应是:确认触发沿→核对传播延迟→检查门输入竞争→用逻辑分析仪验证。
7.12 交通信号控制器综合案例
控制器需要 25 s 红/绿灯定时、4 s 黄灯定时和稳定时钟。可用两个 555 单稳态加一个 555 非稳态,也可从 24 MHz 外部时钟经频率分频得到精确 1 Hz,再用计数器形成 25 s、4 s 时间窗。VHDL 分频器计数到 SetCount(半周期计数)后翻转 ClkOut,从而得到 50% 占空比的 1 Hz 时钟。
时序逻辑用两个 D 触发器产生四状态 Gray 码,输入包括长定时 TL、短定时 TS 和车辆传感器 VS。D 触发器转移表的核心是 :下一状态为 1,D 就必须为 1。根据状态表列出各行最小项,再用 等布尔律化简,最后把 D0、D1 接到两个 D 触发器。状态译码器将 Gray 状态转换为主/支路红黄绿灯输出。
D1 <= (G0 and not TS) or (G1 and TS);
D0 <= (not G1 and not TL and VS) or (not G1 and G0)
or (G0 and TL and VS);
DFF0: dff port map(D => D0, Clk => Clk, Q => G0);
DFF1: dff port map(D => D1, Clk => Clk, Q => G1);本章小结
- 锁存器电平敏感,边沿触发器只在指定时钟沿更新。
- D 触发器在采样沿复制 D;J-K 触发器还支持保持、SET、RESET、Toggle。
- PRE/CLR 是优先级更高的异步置位/清零端。
- 建立时间、保持时间、传播延迟和最高频率决定可靠时序。
- 触发器可构成寄存器、 分频器和二进制计数器。
- 单稳态产生一次定宽脉冲;非稳态持续振荡产生时钟。
- 555 通过 与 阈值控制充放电。
- 毛刺通常源于竞争和延迟,改变触发沿或重新设计时序可消除。
SUCCESS
自测时先画“有效时钟沿”,再逐沿填 Q;遇到定时器先统一单位,最后检查图片、公式和代码围栏。
问题自测
- 门控 D 锁存器与边沿触发 D 触发器在“输入何时能影响 Q”方面有何区别?
- J=K=1 的 J-K 触发器接入 10 kHz 时钟,Q 的频率是多少?若串接三级,输出是多少?
- 为什么异步低有效 CLR 拉低时,D=1 也不能使 Q 置位?
- 555 单稳态的 、 时,输出脉宽约是多少?
- 两相时钟出现毛刺时,传播延迟如何造成短暂竞争,为什么换成负沿触发器能改善?
图片与原书图题
以下保留原书本章全部图片引用;图题按上下文译为中文,便于对照教材。
原书插图索引(全部图片引用)





















































































































































自测一下
同步计数器与异步计数器的时序差异是什么?
参考答案:异步(行波)计数器中,前一级的 Q 作后一级的时钟,各级依次翻转,传播延迟逐级累积,位数多时译码可能瞬时出现错误状态——本章 7.7 用负沿 J-K 触发器(J=K=1)串接构成的正是这种计数器。同步计数器则让所有触发器共用同一时钟、在同一沿同时翻转,总延迟只有一级,时序更规整,具体结构见后续计数器章节。
计数器的模数如何确定?
参考答案:模数是计数器循环经历的状态个数。n 个触发器最多有 个状态,因此 n 位二进制计数器的最大模数为 :本章 7.7 中三级触发器产生 000~111 共八个状态(模 8),要表示十进制 0~15 则需要 4 个触发器(模 16)。若只需要更小的模数 M,就要设法跳过部分状态,具体方法见计数器章节。
分频器如何由计数器实现?
参考答案:把触发器接成每个时钟沿翻转一次——D 触发器令 ,或 J-K 触发器令 J=K=1——输出频率就是时钟的一半(二分频);再把前一级 Q 接到后一级时钟,n 级级联即得 。例如本章 Worked example 7-9 中,三级触发器把 8 kHz 输入分成 4 kHz、2 kHz、1 kHz。
状态译码毛刺通常怎样产生?
参考答案:毛刺源于竞争条件和传播延迟:由于各级输出的延迟不同,多个信号不会严格同时翻转,译码门在过渡期间可能短暂”看到”错误的组合,输出极窄的错误脉冲。本章 7.11 的两相时钟发生器中,CLK 与 Q、 的延迟在 AND 门输入短暂同时为 HIGH 就产生尖峰;改用负沿触发器或用逻辑分析仪的锁存采样模式可帮助发现和消除这类毛刺。
设计自定义计数序列时如何处理无效状态?
参考答案:先列出状态转移表,为每个有效状态确定下一状态;无效状态也应指定确定的转移方向,使其在若干时钟后自动回到有效序列。本章 7.12 的交通灯控制器只使用 2 位 Gray 码的四个有效状态,用两个 D 触发器按 从状态表逐行写最小项再化简,就是这种设计方法的实例;更复杂的无效状态处理见计数器章节。