学习导航

本章主线是“触发器如何按时钟计数”。建议按顺序学习:异步(纹波)计数器 → 同步计数器 → 加/减计数器 → 自定义状态机 → 级联与分频 → 状态译码 → 数字系统应用 → 故障排查。记住:模数(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₀十进制
初始000
1011
2102
3113
4(回收)000

FF0 每个正边沿翻转;当 Q₀ 从 1 变 0 时,\overline{Q_0} 上升沿触发 FF1。两级并非同时变化,所以是异步。

图9-4:两位异步二进制计数器

图9-5:两位异步计数器时序图

2.2 三位计数与传播延迟

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

图9-6a:三位异步二进制计数器

图9-6b:三位计数器一个周期的时序图

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

图9-7:三位异步计数器的传播延迟

算例 9-1:4 位异步计数器每级传播延迟 10 ns。时钟边沿到 Q₃ 的最坏延迟需经过 4 级:

t_p(total)=4×10 ns=40 ns

f_max≈1/40 ns=25 MHz

实际工作频率应低于该上限,以留出稳定时间。

图9-8a:四位异步二进制计数器

图9-8b:四位异步计数器时序图

2.3 截断计数与异步十进制计数器

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

图9-9a:异步十进制计数器与异步回收

图9-9b:异步十进制计数器时序图

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

图9-10a:模十二异步计数器

图9-10b:模十二计数器时序图

改为模 13 时,应在 1101 出现时译码并清零相应触发器。

2.4 74HC93 与 VHDL 实现

74HC93 含一个独立除 2 触发器(CLK A)和三位异步计数器(CLK B),可配置为除 2、模 8、模 16 或十进制计数器;两个复位输入同时为高时清零。

图9-11a:74HC93 配置为模十六

图9-11b:74HC93 配置为十进制计数器

图9-11c:异步计数器器件符号

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

图9-11d:四位异步计数器 VHDL 结构

图9-11e:四位异步计数器实现图

易错点

异步计数器不是“所有位同时翻转”;它的译码毛刺和累积延迟是结构性问题。高速设计优先选同步计数器。

三、同步计数器

同步计数器所有 FF 共用时钟。低位 FF0 始终翻转;高位只有在所有更低位满足条件时才翻转。

3.1 两位、三位、四位同步计数器

两位 J-K 结构中,J₀=K₀=1,而 J₁=K₁=Q₀。因为同一时钟边沿采样的是边沿到来前的 Q 值,所以状态仍严格为 00→01→10→11→00。

图9-12:两位同步二进制计数器

图9-13a:同步计数器第一种时序细节

图9-13b:同步计数器第二种时序细节

图9-13c:同步计数器第三种时序细节

图9-13d:同步计数器第四种时序细节

图9-14:两位同步计数器完整时序图

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

图9-15:三位同步二进制计数器

图9-16:三位同步计数器时序图

图9-17a:四位同步二进制计数器

图9-17b:四位同步计数器时序图

3.2 同步 BCD 十进制计数器

同步 BCD 只走 0000~1001。各级翻转条件为:

最后一式同时识别状态 7(使 Q₃ 置 1)与状态 9(使 Q₃ 清 0),从而 9 的下一状态为 0。

图9-18:同步 BCD 十进制计数器

图9-19:BCD 十进制计数器时序图

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

图9-20:74HC163 四位同步二进制计数器

图9-21:74HC163 预置与计数时序示例

图9-21附图:同步十进制 VHDL 示意

四、加/减同步计数器

加/减计数器由 UP/DOWN 控制方向。三位二进制计数器中:

UP 时低位全为 1 才使高位翻转;DOWN 时低位全为 0 才使高位翻转。

图9-22:三位加/减同步计数器

算例 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)

图9-23:加/减计数器输入与输出时序

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

图9-24:74HC190 加/减十进制计数器

图9-25:74HC190 预置、加计数与减计数时序

图9-25附图:加/减十进制 VHDL 示意

五、如何设计任意序列的同步计数器

设计状态机可按六步走:

  1. 画状态图,明确每个状态的后继状态。
  2. 写现态/次态表。
  3. 根据触发器转换表,为每一级求 J、K(或 D)输入。
  4. 将输入条件填入卡诺图。
  5. 合并分组,得到最简逻辑表达式。
  6. 用门电路实现表达式,并连接触发器。

以三位 Gray 码计数器为例,状态图与次态表给出 000→001→011→010→110→111→101→100→000。

图9-26:三位 Gray 码计数器状态图

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-27:将转换条件填入卡诺图的示例

图9-28:Gray 码计数器 J/K 卡诺图

化简后:

图9-29:三位 Gray 码计数器实现

算例 9-4:不规则序列。 按状态图只使用 001、010、101、111 四个状态,可用三位 D 触发器;无效状态可先作为无关项化简,但必须确保误入无效态后最终回到有效态。书中化简结果:

D₀=\overline{Q₀}+Q₂D₁=\overline{Q₁}D₂=\overline{Q₀}+Q₂\overline{Q₁};无效态会沿 0→3→4→76→1 回到有效序列。

图9-30:不规则序列状态图

图9-31:不规则序列 D 输入卡诺图

图9-32:不规则序列计数器实现

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

图9-33:三位 Gray 码加/减状态图

图9-34:包含方向输入 Y 的 J/K 卡诺图

六、级联计数器与分频

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

图9-35:两个异步计数器级联

图9-36:异步级联时序图

图9-36附图:级联输出关系

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

图9-37:两个十进制计数器组成模 100

图9-38:三级十进制计数器组成除 1000 分频器

算例 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 拍产生一次输出。

图9-40:74HC190 组成除 100 分频器

6.1 截断级联:用同步装载实现任意模数

四个 74HC161 共 16 位时,全模数为 2^16=65536。若要模 40000,应在每次回收时装入 65536−40000=25536=63C0₁₆,于是从 25536 数到 65535,恰好 40000 个状态。

图9-41:74HC161 组成除 40000 计数器

七、计数器译码与毛刺

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

图9-42:译码三位计数器状态 6

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

图9-43a:状态 2、7 的译码电路

图9-43b:状态 2、7 的译码波形

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

图9-44:BCD 计数器与译码器

图9-45:译码毛刺示例

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

图9-46:用选通消除译码毛刺

图9-47:选通后的译码输出

八、计数器的典型应用

8.1 数字钟

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

图9-48:12 小时数字钟简化逻辑图

图9-49:典型除 60 计数器

图9-50:小时计数器和译码器

8.2 停车场余位控制

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

图9-51:停车场控制功能框图

图9-52:模 100 加/减计数器停车控制

8.3 并行转串行

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

图9-53:并行转串行数据转换逻辑

图9-54:并行转串行时序图

九、ANSI/IEEE 依赖标注与故障排查

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

图9-55a:74HC163 传统逻辑符号

图9-55b:74HC163 ANSI/IEEE 依赖标注符号

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

图9-56a:级联计数器正常工作

图9-56b:第二级 CTEN 开路故障

图9-57:截断级联计数器故障示例

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

图9-58:截断级联计数器测试

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

图9-59a:单个触发器计数器故障波形

图9-59b:故障分析对比波形

示波器技巧

双踪示波器测量两个数字信号的时间关系时,优先用较慢信号触发;时钟通常最快,不适合作为绝对时间测量的触发源。

十、应用逻辑:电梯控制器

电梯控制器是状态机实例,包含 WAIT、DOWN、UP、STOP/OPEN、CLOSE 五种状态。楼层计数器保存当前楼层,FLRCALL/FLRREQ 以三位编码表示呼叫层和目标层,比较器决定上行、下行或开门;每到一层由传感器脉冲使计数器加一或减一。

图9-60:一次电梯运行周期

图9-61:电梯控制器状态图

图9-62:电梯控制器功能框图

图9-63:楼层计数器状态图

图9-64:电梯控制器逻辑图

初始化时将电梯放在地下层、楼层计数器置 000。该简化设计每个周期只处理一次呼叫和一次请求。

十一、本章小结

  1. 异步计数器结构简单但存在传播延迟和译码毛刺;同步计数器所有级共时钟,适合高速。
  2. n 个触发器最大模数是 2^n;截断计数器通过译码清零或同步装载实现任意模数。
  3. 级联总模数为各级模数之积,也就是分频倍数之积。
  4. 计数器可构成状态机、数字钟、停车位控制器、并串转换器和电梯控制器。

十二、自测题

  1. 两级异步二进制计数器初态 00,连续 3 个时钟后的状态是什么?为什么第 2 级不是由外部 CLK 直接触发?
  2. 每级延迟 8 ns 的 5 位异步计数器,时钟到最高位最坏延迟是多少?最大理论频率是多少?
  3. 设计模 13 计数器时应译码哪个状态?为什么不能只把清零线接到普通时钟?
  4. 74HC163 的 LOAD、CLR、ENP、ENT、RCO 各在什么时刻起作用?
  5. 两个模 10 与一个模 5 计数器级联,总模数及 10 MHz 输入下输出频率是多少?
  6. 什么是译码毛刺?用“选通”为什么能够消除它?
  7. 用六步法设计任意序列计数器时,J-K 转换表和卡诺图分别解决什么问题?
  8. 停车场计数器如何区分入口和出口脉冲,并在满位时控制闸杆?

图9-24附图:加/减计数器器件示意

图9-39附图:级联计数器配置

图9-55附图:计数器故障排查框图

图9-60附图:Multisim 故障练习

图9-64附图:Multisim 练习电路

图9-82附图:相关问题计数器波形

图9-84附图:相关问题级联时序

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

图9-65:异步计数器练习电路

图9-66:异步计数器练习电路

图9-67:五级同步二进制计数器

图9-68:十进制计数器分析题

图9-69:计数使能、清零和时钟波形题

图9-70:BCD 计数器波形题

图9-71:74HC163/161 波形题

图9-72:74HC190 波形题

图9-73:同步计数器设计题

图9-74:同步计数器设计题

图9-75:二进制计数器状态图设计题

图9-76a:级联计数器练习配置一

图9-76b:级联计数器练习配置二

图9-76c:级联计数器练习配置三

图9-76d:级联计数器练习配置四

图9-77:计数器与译码器练习

图9-78:停车场传感器脉冲题

图9-79:计数器故障波形题

图9-80:计数器故障波形题

图9-81:Q₂ 故障波形题

图9-82:相关问题状态图

图9-83:相关问题计数器图

图9-84:相关问题级联计数器图

图9-85:相关问题计数器图

完成本章的标志

你能够从时序图读出计数状态,依据目标模数选择触发器数量,解释级联分频与译码毛刺,并用状态图、次态表、转换表和卡诺图设计一个自定义同步计数器。

自测一下