学习导航
本章主线是“触发器如何按时钟计数”。建议按顺序学习:异步(纹波)计数器 → 同步计数器 → 加/减计数器 → 自定义状态机 → 级联与分频 → 状态译码 → 数字系统应用 → 故障排查。记住:模数(modulus)是实际循环状态数,级数为 n 的二进制计数器最大模数是
2^n。
一、先建立直觉:计数器就是按规则走状态
计数器由触发器和组合逻辑组成,每来一个有效时钟边沿,输出状态按预定序列前进。若输出只由当前状态决定,是 Moore 型状态机;若输出还取决于外部输入,是 Mealy 型状态机。
- 异步计数器:只有第一级接外部时钟,后一级由前一级输出触发,变化像波纹一样传播,因此又叫 ripple counter。
- 同步计数器:所有触发器共用同一时钟,组合逻辑决定哪些级在该边沿翻转,速度更高。
- 模数:计数器循环一次包含的不同状态数。
n个触发器最多有2^n个状态;少于此值称截断序列。 - 终端计数(TC):一个周期中的最后状态;回收(recycle):从终端状态回到初始状态。
核心公式
级联计数器的总模数等于各级模数之积:
M_total=M_1×M_2×…;作为分频器时,f_out=f_in/M_total。
二、异步计数器(纹波计数器)
2.1 两位异步二进制计数器
两级触发器均置为 T(或 J=K=1)翻转模式。外部 CLK 只进入最低位 FF0,FF1 的时钟接 \overline{Q_0}。初态为 Q_1Q_0=00 时,四个时钟后的状态为:
| 时钟 | Q₁Q₀ | 十进制 |
|---|---|---|
| 初始 | 00 | 0 |
| 1 | 01 | 1 |
| 2 | 10 | 2 |
| 3 | 11 | 3 |
| 4(回收) | 00 | 0 |
FF0 每个正边沿翻转;当 Q₀ 从 1 变 0 时,\overline{Q_0} 上升沿触发 FF1。两级并非同时变化,所以是异步。


2.2 三位计数与传播延迟
三位异步计数器依次经过 000,001,010,011,100,101,110,111,第 8 拍回到 000,模数为 8。


输入时钟的影响要经过 FF0、FF1 才到 FF2;每一级都有传播延迟 t_p,最坏总延迟约为 n·t_p。若总延迟不小于时钟周期,下一拍到来时计数器可能仍未稳定。

算例 9-1:4 位异步计数器每级传播延迟 10 ns。时钟边沿到 Q₃ 的最坏延迟需经过 4 级:
t_p(total)=4×10 ns=40 ns
f_max≈1/40 ns=25 MHz
实际工作频率应低于该上限,以留出稳定时间。


2.3 截断计数与异步十进制计数器
四位计数器最大有 16 个状态。若只需要 0~9(BCD),就在状态 10(1010)出现时清零。只把 Q₁、Q₃ 接到 NAND 门也能识别 10,因为 0~9 中没有其他状态同时满足这两位为 1,这叫部分译码。异步清零会让 1010 短暂出现,因此可能在输出和 CLR 线上看到几纳秒的毛刺。


算例 9-2:设计模 12 异步计数器。 四级触发器可提供 16 状态;序列要求 0000~1011,到 1100 时回收。因此只需译码 Q₃=Q₂=1,将 NAND 输出接到 FF2、FF3 的 CLR;Q₀、Q₁ 在该时刻本来就会归零。


改为模 13 时,应在 1101 出现时译码并清零相应触发器。
2.4 74HC93 与 VHDL 实现
74HC93 含一个独立除 2 触发器(CLK A)和三位异步计数器(CLK B),可配置为除 2、模 8、模 16 或十进制计数器;两个复位输入同时为高时清零。



示意 VHDL 的要点是:FF0 时钟接 Clock,后续各级接前一级反相输出,J、K 恒为 1,Clr 接清零端。


易错点
异步计数器不是“所有位同时翻转”;它的译码毛刺和累积延迟是结构性问题。高速设计优先选同步计数器。
三、同步计数器
同步计数器所有 FF 共用时钟。低位 FF0 始终翻转;高位只有在所有更低位满足条件时才翻转。
3.1 两位、三位、四位同步计数器
两位 J-K 结构中,J₀=K₀=1,而 J₁=K₁=Q₀。因为同一时钟边沿采样的是边沿到来前的 Q 值,所以状态仍严格为 00→01→10→11→00。






三位计数器中:J₀=K₀=1,J₁=K₁=Q₀,J₂=K₂=Q₀Q₁。四位计数器再增加 J₃=K₃=Q₀Q₁Q₂。




3.2 同步 BCD 十进制计数器
同步 BCD 只走 0000~1001。各级翻转条件为:
最后一式同时识别状态 7(使 Q₃ 置 1)与状态 9(使 Q₃ 清 0),从而 9 的下一状态为 0。


74HC163 是四位同步二进制计数器:LOAD 为低时在下一个时钟同步装入 D₃…D₀;CLR 为低时同步清零;ENP、ENT 都为高才计数;到 15 时 RCO(纹波进位输出)为高,便于级联。



四、加/减同步计数器
加/减计数器由 UP/DOWN 控制方向。三位二进制计数器中:
UP 时低位全为 1 才使高位翻转;DOWN 时低位全为 0 才使高位翻转。

算例 9-3:初态 0000,按图 9-23 的方向控制,先 UP 再 DOWN,再 UP、DOWN。逐个有效边沿读方向,得到序列:
0000→0001→0010→0011→0100(UP)→0011→0010→0001→0000→1111(DOWN)→0000→0001→0010(UP)→0001→0000(DOWN)。

74HC190 是同步 BCD 加/减计数器:D/U=高时减计数、低时加计数;LOAD 低时预置 BCD 数;MAX/MIN 在加法到 9 或减法到 0 时产生高脉冲;CTEN、RCO、MAX/MIN 支持级联。



五、如何设计任意序列的同步计数器
设计状态机可按六步走:
- 画状态图,明确每个状态的后继状态。
- 写现态/次态表。
- 根据触发器转换表,为每一级求 J、K(或 D)输入。
- 将输入条件填入卡诺图。
- 合并分组,得到最简逻辑表达式。
- 用门电路实现表达式,并连接触发器。
以三位 Gray 码计数器为例,状态图与次态表给出 000→001→011→010→110→111→101→100→000。

J-K 转换规律:0→0 需 J=0、K=X;0→1 需 J=1、K=X;1→0 需 J=X、K=1;1→1 需 J=X、K=0。X 表示无关项。


化简后:

算例 9-4:不规则序列。 按状态图只使用 001、010、101、111 四个状态,可用三位 D 触发器;无效状态可先作为无关项化简,但必须确保误入无效态后最终回到有效态。书中化简结果:
D₀=\overline{Q₀}+Q₂,D₁=\overline{Q₁},D₂=\overline{Q₀}+Q₂\overline{Q₁};无效态会沿 0→3→4→7 或 6→1 回到有效序列。



算例 9-5:Gray 码加/减计数器。 将方向输入 Y 作为第四个状态变量,分别列出 Y=0(DOWN)和 Y=1(UP)的次态,再按同样六步法填 J/K 卡诺图并实现。


六、级联计数器与分频
异步级联中,前一级的末级输出驱动后一级;例如模 4 与模 8 级联,总模数 4×8=32,就是除 32。同步级联利用 TC/RCO 连接下一级 CTEN,只有前级到终端状态时后级才前进一步。



两个十进制计数器级联得到模 100,三级得到模 1000。1 MHz 经三级十进制链可依次得到 100 kHz、10 kHz、1 kHz。


算例 9-6:图 9-39(a) 的三级模数为 8、12、16,总模数 8×12×16=1536;图 9-39(b) 为 10、4、7、5,总模数 10×4×7×5=1400。
算例 9-7:1 MHz 要得到 10 kHz,需要除 100,因此用两个 74HC190 级联;左级每 10 拍产生一次进位,右级每 100 拍产生一次输出。

6.1 截断级联:用同步装载实现任意模数
四个 74HC161 共 16 位时,全模数为 2^16=65536。若要模 40000,应在每次回收时装入 65536−40000=25536=63C0₁₆,于是从 25536 数到 65535,恰好 40000 个状态。

七、计数器译码与毛刺
要检测状态 6(110),可用 Q₂·Q₁·\overline{Q₀} 的 AND 门得到高有效信号;换 NAND 门则得到低有效信号。状态 2 和 7 的表达式分别是 \overline{Q₂}Q₁\overline{Q₀} 与 Q₂Q₁Q₀。

算例 9-8:把三位同步计数器的状态 2、7 接到两个译码门,沿完整时序即可观察两个输出各只在对应状态有效。


异步计数器翻转不是一次完成,例如 0111→1000 期间会短暂经过若干过渡态,译码器便会产生错误窄脉冲(glitch)。同步计数器虽明显改善,但不同触发器的传播延迟差异仍可能造成毛刺。


消除办法是选通(strobing):在计数输出已经稳定后才允许译码器输出。例如正边沿计数时,可用时钟低电平作为译码使能。


八、计数器的典型应用
8.1 数字钟
60 Hz 交流先整形成脉冲,再由除 10 和除 6 组成的除 60 计数器得到 1 Hz。秒、分各用一个模 60 链;小时部分用十进制计数器和一个触发器实现 1~12 循环。小时计数到 9 回 0 时翻转十位触发器,得到 10;到 12 时译码,下一拍同步装入 1 并清十位,得到 01。



8.2 停车场余位控制
入口传感器脉冲使加/减计数器 UP,出口脉冲使其 DOWN。两级十进制计数器记录 00~99;达到 100 时 MAX/MIN 置高,点亮 FULL 并落下闸杆;车辆离开后信号撤销,闸杆抬起。


8.3 并行转串行
模 8 计数器的 Q 输出接 8 选 1 多路复用器的数据选择端。计数器从 0 到 7 时,D₀~D₇ 逐位接到输出线,8 个时钟后一个字节完成串行发送,回到 0 后处理下一个字节。


九、ANSI/IEEE 依赖标注与故障排查
74HC163 的 ANSI/IEEE 符号可分为公共控制块、四个存储单元和限定符 CTR DIV 16。依赖标注中:C 表示控制(通常是时钟),M 表示模式(如预置/计数),G 表示 AND 依赖。ENP、ENT 和终端计数共同决定 RCO 是否有效。


故障排查顺序:先查电源、地和时钟波形,再查 CLR、LOAD、ENP/ENT 等控制输入,最后查输出是否被短路或悬空。级联计数器中,上游故障会影响所有下游级;截断计数器还要重点检查并行数据输入、LOAD 和反相器。



算例 9-9:16 位全模数为 65536,若预置 82C0₁₆=33472,截断模数为 65536−33472=32064,10 MHz 输入时正确输出约 312 Hz。若实测 637.8 Hz,则实际模数为约 15679,反推预置数为 C2C0₁₆,说明某个并行输入(书中判断为 D₂)异常。

算例 9-10:若 FF2 的 Q 波形与 FF1 完全相同,而 Q₀ 正常,检查 FF2 的 AND 门输入;若其一端内部开路并表现为高电平,Q₀ 就会错误地直接控制 FF2。更换该门后复测。


示波器技巧
双踪示波器测量两个数字信号的时间关系时,优先用较慢信号触发;时钟通常最快,不适合作为绝对时间测量的触发源。
十、应用逻辑:电梯控制器
电梯控制器是状态机实例,包含 WAIT、DOWN、UP、STOP/OPEN、CLOSE 五种状态。楼层计数器保存当前楼层,FLRCALL/FLRREQ 以三位编码表示呼叫层和目标层,比较器决定上行、下行或开门;每到一层由传感器脉冲使计数器加一或减一。





初始化时将电梯放在地下层、楼层计数器置 000。该简化设计每个周期只处理一次呼叫和一次请求。
十一、本章小结
- 异步计数器结构简单但存在传播延迟和译码毛刺;同步计数器所有级共时钟,适合高速。
n个触发器最大模数是2^n;截断计数器通过译码清零或同步装载实现任意模数。- 级联总模数为各级模数之积,也就是分频倍数之积。
- 计数器可构成状态机、数字钟、停车位控制器、并串转换器和电梯控制器。
十二、自测题
- 两级异步二进制计数器初态 00,连续 3 个时钟后的状态是什么?为什么第 2 级不是由外部 CLK 直接触发?
- 每级延迟 8 ns 的 5 位异步计数器,时钟到最高位最坏延迟是多少?最大理论频率是多少?
- 设计模 13 计数器时应译码哪个状态?为什么不能只把清零线接到普通时钟?
- 74HC163 的 LOAD、CLR、ENP、ENT、RCO 各在什么时刻起作用?
- 两个模 10 与一个模 5 计数器级联,总模数及 10 MHz 输入下输出频率是多少?
- 什么是译码毛刺?用“选通”为什么能够消除它?
- 用六步法设计任意序列计数器时,J-K 转换表和卡诺图分别解决什么问题?
- 停车场计数器如何区分入口和出口脉冲,并在满位时控制闸杆?







十三、教材图例索引(补充图题)
























完成本章的标志
你能够从时序图读出计数状态,依据目标模数选择触发器数量,解释级联分频与译码毛刺,并用状态图、次态表、转换表和卡诺图设计一个自定义同步计数器。
自测一下
异步计数器为什么会产生纹波延迟?
参考答案:因为异步(纹波)计数器只有第一级 FF0 接外部时钟,后一级由前一级的输出(如 Q₀ 的下降沿经反相后)触发,变化像波纹一样逐级传播。每一级都有传播延迟 t_p,最坏总延迟约为 n·t_p,例如 4 位计数器每级 10 ns 时总延迟为 40 ns。若总延迟不小于时钟周期,下一拍到来时计数器可能还未稳定,因此实际频率应低于 f_max≈1/(n·t_p)。
同步计数器如何提高工作速度?
参考答案:同步计数器让所有触发器共用同一个时钟,状态是否翻转由组合逻辑(如 J₁=K₁=Q₀、J₂=K₂=Q₀Q₁)在该边沿到来前决定,而不是等前一级翻转后再触发后一级。这样各级几乎同时变化,延迟只有一级触发器加门电路的时间,避免了纹波计数器 n·t_p 的累积延迟。代价是需要额外的组合逻辑,且译码时仍可能因各级延迟差异出现轻微毛刺。
模 N 计数器设计的关键步骤是什么?
参考答案:先确定所需触发器级数:n 级最大模数为 2^n,要覆盖 N 个状态须满足 2^n≥N。异步方案是译码第 N 个状态并接清零端,可采用部分译码(如模 10 只需 NAND 检测 Q₁、Q₃,模 12 只需检测 Q₃、Q₂);同步方案常用同步装载,在回收时预置 2^n−N(如 16 位做模 40000 时装入 65536−40000=25536)。任意序列则用六步法:状态图→次态表→转换表→卡诺图→化简→实现,并确保无效状态能回到有效序列。
计数器译码毛刺如何抑制?
参考答案:毛刺的根源是计数器翻转不是一次完成,例如异步计数器从 0111→1000 时会短暂经过若干过渡态,译码器因此输出错误的窄脉冲。抑制办法是选通(strobing):等计数输出稳定后才允许译码器工作,例如正边沿计数时用时钟低电平作为译码使能。此外优先选用同步计数器也能明显减少毛刺,因为各级同时翻转。
级联计数器实现分频时如何计算分频比?
参考答案:级联计数器的总模数(即分频比)等于各级模数之积:M_total=M₁×M₂×…,输出频率 f_out=f_in/M_total。例如模 4 与模 8 级联为除 32;两个模 10 十进制计数器级联得模 100,三级得模 1000,1 MHz 经三级十进制链可依次得到 100 kHz、10 kHz、1 kHz。再如 1 MHz 要得到 10 kHz,需除 100,用两个 74HC190 级联即可。