第 142 篇

考研数电·零基础讲义 第16讲(上)|同步/异步计数器的原理

约 20 分钟 6714 字 华南师范大学数字电子技术考研数电零基础讲义

考研数电·零基础讲义 · 第 16 讲(上)|同步/异步计数器的原理 学完这一讲,你能自己用触发器"搭"出二进制、十进制的加法/减法计数器,写出它们的驱动方程、状态方程,画出状态转换图和波形,并能说清同步和异步计数器的区别。预计用时 90–120 分钟。

本讲地图

  • 计数器是什么:一种"每来一个时钟脉冲,内部数字就加 1(或减 1)"的时序电路;顺便学会"模""容量""分频"这几个词。
  • 同步计数器:所有触发器共用同一个时钟、同时翻转。重点是同步二进制加法计数器(用 T 触发器)和同步十进制计数器。
  • 异步计数器:触发器像接力赛一样一级带一级地翻转。重点是"下降沿接 Q 是加法、接Q‾\overline{Q}是减法"这条规律。
  • 华师怎么考:考纲明确写了"时序逻辑电路:触发器、计数器、寄存器"。计数器的原理是下一讲集成计数器 74HC161/160 和"任意进制计数器设计"(2026 回忆题第 8 题就是用两片 74HC161 设计模 28 计数器)的地基;分析一个由触发器构成的计数器、判断它是几进制、能否自启动,也是第 14 讲那类分析题的常见素材。
  • 教材对应:阎石《数字电子技术基础》第六版 第 6 章 6.3.2 节"计数器"中的"一、同步计数器"和"二、异步计数器"。

前置知识

  • 二进制数和二进制加法、减法(见第 01 讲)。
  • T 触发器、JK 触发器的特性方程:Q∗=T⊕QQ^{*}=T\oplus Q⁠,Q∗=JQ‾+K‾QQ^{*}=J\overline{Q}+\overline{K}Q⁠;上升沿/下降沿触发的含义(见第 13 讲(中)、第 13 讲(下))。
  • 时序电路分析的套路:驱动方程 → 状态方程 → 状态转换表 → 状态转换图 → 时序图 → 自启动(见第 14 讲)。

一、计数器到底是个什么东西

1.1 大白话

想象你在体育馆门口拿着一个"咔哒计数器",每进来一个人,你按一下,窗口里的数字就加 1。数到 9999 再按一下,它又回到 0000。

数字电路里的计数器就是这个东西的电子版:

  • "按一下"换成了时钟脉冲 CLK(也叫计数脉冲);
  • 窗口里的数字换成了几个触发器的状态——每个触发器记住一位二进制数(0 或 1),4 个触发器就能记住一个 4 位二进制数;
  • 每来一个脉冲,这个二进制数按规律变一次(加 1 或减 1),到头了再回到起点,周而复始。

计数器是数字系统里用得最多的时序电路。它不光能"数数",还能:

  • 分频:把高频的时钟变成低频的信号(后面会看到,最低位的输出频率正好是时钟的一半);
  • 定时:数够 N 个已知周期的脉冲,就等于过去了一段确定的时间;
  • 产生节拍、序列信号等。

1.2 计数器的分类(先混个脸熟)

分类依据 类别 一句话解释
触发器是否同时翻转 同步计数器 所有触发器接同一个 CLK,同时动作
异步计数器 触发器的时钟来自前一级的输出,有先有后
数字增还是减 加法计数器 每来一个脉冲加 1
减法计数器 每来一个脉冲减 1
可逆(加/减)计数器 由一根控制线决定加还是减
编码方式 二进制、二-十进制(BCD)、格雷码…… 状态按什么码排列
计数容量 十进制、十六进制、六十进制…… 一个循环有多少个状态

1.3 三个必须会的词:模、容量、分频

  • 模(进制)MM:计数器一个完整循环包含的有效状态个数。一个循环有 16 个状态,就叫"十六进制计数器"或"模 16 计数器"。
  • 容量:计数器能计到的最大数。nn位二进制计数器各位全为 1 时最大,所以容量是2n−12^{n}-1⁠。注意:4 位二进制计数器是模 16、容量 15,两者差 1,别混。
  • 分频:如果时钟频率是f0f_{0}⁠,某个输出端每kk个时钟周期重复一次,它的频率就是f0/kf_{0}/k⁠,叫做"kk分频"。

⚠️ 易错点:nn个触发器最多有2n2^{n}种状态,所以nn个触发器构成的计数器,模最多是2n2^{n}⁠。要做模 10 的计数器,3 个触发器(最多 8 种)不够,至少要 4 个。


二、同步二进制加法计数器

2.1 大白话:二进制"加 1"时哪些位会变?

先用竖式算一个二进制加 1:

第 3 位 第 2 位 第 1 位 第 0 位
原数 0 1 1 1
加 1 +1
结果 1 0 0 0

你会发现一个规律:

  • **最低位(第 0 位)**每次加 1 都会变(0 变 1,或 1 变 0);
  • 第ii位只有在"它下面所有低位全是 1"的时候才会变——因为只有这时候,低位才会一路进位进到它这里。

上面的例子里,第 0、1、2 位都是 1,所以加 1 后它们全变成 0,进位一路冲到第 3 位,第 3 位也变了。

这个规律简直就是给 T 触发器量身定做的:T 触发器的特性是T=1T=1时翻转、T=0T=0时保持,而"翻转"恰好就是"这一位要变"。所以我们只需要让"该变的位"T=1T=1⁠、"不该变的位"T=0T=0就行了。

2.2 正式电路:驱动方程

把上面的规律写成公式。用Q0Q_{0}表示最低位,Q3Q_{3}表示最高位(4 位计数器)。第ii位的 T 输入应该是"所有比它低的位都为 1",也就是它们相与:

Ti=Qi−1Qi−2⋯Q1Q0(i=1,2,⋯ ,n−1),T0=1T_{i}=Q_{i-1}Q_{i-2}\cdots Q_{1}Q_{0}\quad (i=1,2,\cdots,n-1),\qquad T_{0}=1

对 4 位计数器,具体写出来就是驱动方程:

T0=1,T1=Q0,T2=Q0Q1,T3=Q0Q1Q2T_{0}=1,\quad T_{1}=Q_{0},\quad T_{2}=Q_{0}Q_{1},\quad T_{3}=Q_{0}Q_{1}Q_{2}

逐行拆解:

  • T0=1T_{0}=1⁠:最低位每个脉冲都翻转。实际电路里就是把 FF0 的 T 端接高电平。
  • T1=Q0T_{1}=Q_{0}⁠:只有Q0=1Q_{0}=1时,第 1 位才翻转。
  • T2=Q0Q1T_{2}=Q_{0}Q_{1}⁠:读作"T2 等于 Q0 与 Q1",需要一个两输入与门。
  • T3=Q0Q1Q2T_{3}=Q_{0}Q_{1}Q_{2}⁠:低三位全 1 时最高位才翻转。
  • 4 个触发器的 CLK 端全部接到同一个计数脉冲 CLK 上——这就是"同步"二字的来历。

2.3 状态方程和输出方程

把驱动方程代入 T 触发器特性方程Q∗=T⊕Q=TQ‾+T‾QQ^{*}=T\oplus Q=T\overline{Q}+\overline{T}Q(⁠Q∗Q^{*}读作"Q 的次态",即下一个脉冲之后的状态):

Q0∗=Q0‾Q_{0}^{*}=\overline{Q_{0}} Q1∗=Q0Q1‾+Q0‾Q1=Q0⊕Q1Q_{1}^{*}=Q_{0}\overline{Q_{1}}+\overline{Q_{0}}Q_{1}=Q_{0}\oplus Q_{1} Q2∗=Q0Q1Q2‾+Q0Q1‾ Q2Q_{2}^{*}=Q_{0}Q_{1}\overline{Q_{2}}+\overline{Q_{0}Q_{1}}\,Q_{2} Q3∗=Q0Q1Q2Q3‾+Q0Q1Q2‾ Q3Q_{3}^{*}=Q_{0}Q_{1}Q_{2}\overline{Q_{3}}+\overline{Q_{0}Q_{1}Q_{2}}\,Q_{3}

计数器还需要一个进位输出 CC⁠,告诉"更高一级":我已经数满一圈了。4 位二进制计数器数到 1111 时再来一个脉冲就要回到 0000、向高位进 1,所以:

C=Q0Q1Q2Q3C=Q_{0}Q_{1}Q_{2}Q_{3}

2.4 状态转换表(逐拍模拟结果)

从 0000 开始,把每个现态代入状态方程算次态(这张表我已用 Python 逐拍模拟核对过):

计数顺序 Q3Q_{3} Q2Q_{2} Q1Q_{1} Q0Q_{0} 十进制 进位CC
0 0 0 0 0 0 0
1 0 0 0 1 1 0
2 0 0 1 0 2 0
3 0 0 1 1 3 0
4 0 1 0 0 4 0
5 0 1 0 1 5 0
6 0 1 1 0 6 0
7 0 1 1 1 7 0
8 1 0 0 0 8 0
9 1 0 0 1 9 0
10 1 0 1 0 10 0
11 1 0 1 1 11 0
12 1 1 0 0 12 0
13 1 1 0 1 13 0
14 1 1 1 0 14 0
15 1 1 1 1 15 1
16 0 0 0 0 0 0

可以看到:16 个状态一个循环,所以它是十六进制(模 16)计数器;只有在 1111 时C=1C=1⁠。第 16 个脉冲到来时CC从 1 跳回 0,这个下降沿(或者CC为 1 的那段高电平)就可以用作向高位的进位信号。

它的状态转换图就是 16 个圆圈首尾相连的一个大环:0000→0001→⋯→1111→00000000\to0001\to\cdots\to1111\to0000⁠,每个状态都在环上,没有无效状态,自然能自启动。

2.5 时序图:顺便看懂"分频"

下面这张波形图是按上面的状态方程逐拍模拟画出来的(假设触发器在 CLK 上升沿动作)。红色竖线从左往右扫,你可以盯着每个上升沿,看看哪几位翻转了。

4 位同步二进制加法计数器时序图 CLK Q0 Q1 Q2 Q3 C 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 十进制

图 1:4 位同步二进制加法计数器的时序图,最下面一行是当前状态的十进制值(动画循环播放)

看图你会发现:

  • Q0Q_{0}每个时钟翻一次,周期是 CLK 的 2 倍 → 频率12f0\frac{1}{2}f_{0}⁠;
  • Q1Q_{1}周期是 CLK 的 4 倍 → 14f0\frac{1}{4}f_{0}⁠;
  • Q2Q_{2} → 18f0\frac{1}{8}f_{0}⁠,Q3Q_{3} → 116f0\frac{1}{16}f_{0}⁠。

也就是说,二进制计数器的每一位都是前一位的二分频。所以计数器也常叫"分频器"。

2.6 例题 1:只看驱动方程,判断下一拍哪些触发器翻转

题:4 位同步二进制加法计数器(⁠T0=1T_{0}=1⁠,T1=Q0T_{1}=Q_{0}⁠,T2=Q0Q1T_{2}=Q_{0}Q_{1}⁠,T3=Q0Q1Q2T_{3}=Q_{0}Q_{1}Q_{2}⁠),现态Q3Q2Q1Q0=1011Q_{3}Q_{2}Q_{1}Q_{0}=1011⁠。来一个计数脉冲后状态是多少?哪些触发器翻转?

解:

第 1 步,读出各位:Q3=1, Q2=0, Q1=1, Q0=1Q_{3}=1,\ Q_{2}=0,\ Q_{1}=1,\ Q_{0}=1⁠。

第 2 步,代入驱动方程算每个 T:

  • T0=1T_{0}=1⁠;
  • T1=Q0=1T_{1}=Q_{0}=1⁠;
  • T2=Q0Q1=1⋅1=1T_{2}=Q_{0}Q_{1}=1\cdot1=1⁠;
  • T3=Q0Q1Q2=1⋅1⋅0=0T_{3}=Q_{0}Q_{1}Q_{2}=1\cdot1\cdot0=0⁠。

第 3 步,T=1 的翻转、T=0 的保持:

  • Q0Q_{0}⁠:1 → 0;Q1Q_{1}⁠:1 → 0;Q2Q_{2}⁠:0 → 1;Q3Q_{3}⁠:保持 1。

所以次态是11001100⁠。FF0、FF1、FF2 翻转,FF3 不变。

第 4 步,自查:10111011是十进制 11,加 1 应该是 12,即11001100⁠。✔

2.7 另一种同步结构:控制时钟(了解即可)

上面是"控制 T 端":所有触发器都收到时钟,靠 T 决定翻不翻。教材还介绍了另一种做法——"控制时钟":把所有触发器都接成T=1T=1(来一个时钟就翻),然后用与门控制时钟能不能送到这个触发器:

clki=CLK⋅Qi−1Qi−2⋯Q0clk_{i}=CLK\cdot Q_{i-1}Q_{i-2}\cdots Q_{0}

只有低位全为 1 时,计数脉冲才能"通过"与门送到第ii位。两种结构的状态转换表完全一样,考试一般只要求掌握第一种。

⚠️ 易错点:

  1. TiT_{i}是"低位全 1"的与,不是"低位有 1"的或。
  2. "模 16"和"容量 15"别混。
  3. 进位CC只在 1111 这一个状态为 1,不是每次低位进位都输出CC⁠。

三、同步二进制减法计数器

3.1 大白话:减 1 时哪些位会变?

二进制减 1,比如1000−1=01111000-1=0111⁠:最低位每次都变;第ii位只有在"它下面所有低位全是 0"时才会变——因为只有这时才会一路向它借位。

和加法正好"镜像":加法看"低位全 1",减法看"低位全 0"。

3.2 驱动方程

T0=1,Ti=Qi−1‾⋅Qi−2‾⋯Q0‾(i=1,2,⋯ ,n−1)T_{0}=1,\qquad T_{i}=\overline{Q_{i-1}}\cdot\overline{Q_{i-2}}\cdots\overline{Q_{0}}\quad(i=1,2,\cdots,n-1)

4 位就是T1=Q0‾T_{1}=\overline{Q_{0}}⁠,T2=Q0‾ Q1‾T_{2}=\overline{Q_{0}}\,\overline{Q_{1}}⁠,T3=Q0‾ Q1‾ Q2‾T_{3}=\overline{Q_{0}}\,\overline{Q_{1}}\,\overline{Q_{2}}⁠。从 0000 开始,模拟出的序列是0000→1111→1110→⋯→0001→00000000\to1111\to1110\to\cdots\to0001\to0000(十进制 0, 15, 14, …, 1, 0),16 个状态一循环。

3.3 例题 2:3 位同步减法计数器的逐拍计算

题:3 位同步二进制减法计数器(⁠T0=1T_{0}=1⁠,T1=Q0‾T_{1}=\overline{Q_{0}}⁠,T2=Q0‾ Q1‾T_{2}=\overline{Q_{0}}\,\overline{Q_{1}}⁠),初态Q2Q1Q0=000Q_{2}Q_{1}Q_{0}=000⁠,写出连续 3 个脉冲后的状态。

解:

  • 第 1 个脉冲:Q0=0,Q1=0Q_{0}=0,Q_{1}=0 → T0=1,T1=1,T2=1T_{0}=1,T_{1}=1,T_{2}=1⁠,三位全翻:000→111000\to111⁠。(0 减 1 借位到底,变成 7,对!)
  • 第 2 个脉冲:现态 111,Q0=1Q_{0}=1 → T1=0,T2=0T_{1}=0,T_{2}=0⁠,只有Q0Q_{0}翻:111→110111\to110⁠。
  • 第 3 个脉冲:现态 110,Q0=0,Q1=1Q_{0}=0,Q_{1}=1 → T1=1T_{1}=1⁠,T2=Q0‾ Q1‾=1⋅0=0T_{2}=\overline{Q_{0}}\,\overline{Q_{1}}=1\cdot0=0⁠:Q0Q_{0}⁠、Q1Q_{1}翻,Q2Q_{2}保持 → 110→101110\to101⁠。

结果依次是111,110,101111,110,101⁠,即 7, 6, 5。✔

3.4 加/减可逆计数器(思路)

把加法和减法的控制电路合在一起,用一根控制线U‾/D\overline{U}/D(读作"U 非斜杠 D",Up/Down)来选:

Ti=(U‾/D)‾⋅∏j=0i−1Qj+(U‾/D)⋅∏j=0i−1Qj‾,T0=1T_{i}=\overline{(\overline{U}/D)}\cdot\prod_{j=0}^{i-1}Q_{j}+(\overline{U}/D)\cdot\prod_{j=0}^{i-1}\overline{Q_{j}},\qquad T_{0}=1

U‾/D=0\overline{U}/D=0时只剩前一项 → 加法;U‾/D=1\overline{U}/D=1时只剩后一项 → 减法。集成芯片 74HC191(十六进制)、74HC190(十进制)就是这么做的,下一讲会简单介绍。


四、同步十进制加法计数器

4.1 大白话:让二进制计数器"数到 9 就回头"

人习惯十进制。用 4 个触发器(16 种状态)表示 0~9,只用0000∼10010000\sim1001这 10 个状态(8421 BCD 码),1010∼11111010\sim1111这 6 个状态不用。问题是:怎么让它在 1001 之后直接回到 0000,而不是走到 1010?

办法:在二进制计数器的基础上"动点手脚"——到 1001 时,让Q0Q_{0}和Q3Q_{3}翻转(变 0),让Q1Q_{1}⁠、Q2Q_{2}别翻(本来就是 0)。

4.2 驱动方程(教材图 6.3.17 电路)

T0=1,T1=Q0Q3‾,T2=Q0Q1,T3=Q0Q1Q2+Q0Q3T_{0}=1,\quad T_{1}=Q_{0}\overline{Q_{3}},\quad T_{2}=Q_{0}Q_{1},\quad T_{3}=Q_{0}Q_{1}Q_{2}+Q_{0}Q_{3}

逐行拆解(和二进制版对比):

  • T1=Q0Q3‾T_{1}=Q_{0}\overline{Q_{3}}⁠:多乘了一个Q3‾\overline{Q_{3}}⁠。平时Q3=0Q_{3}=0⁠,和二进制一样;到 1001 时Q3=1Q_{3}=1⁠,T1T_{1}被"封住"为 0,Q1Q_{1}不会翻成 1。
  • T2=Q0Q1T_{2}=Q_{0}Q_{1}⁠:和二进制一样(在 1001 时Q1=0Q_{1}=0⁠,自然T2=0T_{2}=0⁠)。
  • T3=Q0Q1Q2+Q0Q3T_{3}=Q_{0}Q_{1}Q_{2}+Q_{0}Q_{3}⁠:前一项是二进制本来的(0111 → 1000 时Q3Q_{3}要翻);后一项Q0Q3Q_{0}Q_{3}专门负责"在 1001 时让Q3Q_{3}翻回 0"。

进位输出C=Q0Q3C=Q_{0}Q_{3}(只在 1001 时为 1)。

4.3 例题 3:验证 1001 之后回到 0000

题:用上面的驱动方程,算 1001 的次态。

解:Q3Q2Q1Q0=1001Q_{3}Q_{2}Q_{1}Q_{0}=1001⁠,即Q3=1,Q2=0,Q1=0,Q0=1Q_{3}=1,Q_{2}=0,Q_{1}=0,Q_{0}=1⁠。

  • T0=1T_{0}=1 → Q0Q_{0}⁠:1→0;
  • T1=Q0Q3‾=1⋅0=0T_{1}=Q_{0}\overline{Q_{3}}=1\cdot0=0 → Q1Q_{1}保持 0;
  • T2=Q0Q1=1⋅0=0T_{2}=Q_{0}Q_{1}=1\cdot0=0 → Q2Q_{2}保持 0;
  • T3=Q0Q1Q2+Q0Q3=0+1⋅1=1T_{3}=Q_{0}Q_{1}Q_{2}+Q_{0}Q_{3}=0+1\cdot1=1 → Q3Q_{3}⁠:1→0。

次态00000000⁠。✔ 而从 0000 到 1000 的过程中Q3=0Q_{3}=0⁠,各式退化成二进制计数器的式子,所以前 9 个脉冲和二进制一样。逐拍模拟结果:0→1→2→⋯→9→00\to1\to2\to\cdots\to9\to0⁠,10 个状态一循环。

4.4 能自启动吗?——把 6 个无效状态挨个代进去

上电时触发器的状态是随机的,万一落在1010∼11111010\sim1111怎么办?把这 6 个状态逐个代入状态方程(Python 已核对):

无效现态 次态 再下一拍
1010 1011 0110(有效)
1011 0110(有效) —
1100 1101 0100(有效)
1101 0100(有效) —
1110 1111 0010(有效)
1111 0010(有效) —

每个无效状态最多 2 拍就回到有效循环,所以能自启动。完整状态转换图如下:

同步十进制计数器状态转换图(含无效状态) 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 C=1 有效循环 10 个状态 1010 1011 1100 1101 1110 1111 虚线圈:无效状态 1010~1111

图 2:同步十进制加法计数器的完整状态转换图,红色虚线圈是无效状态,箭头表示它们怎样回到有效循环

4.5 同步十进制减法计数器(了解)

减法版要做到00000000减 1 后变成10011001(而不是 1111)。教材的做法是:在全 0 状态时把T1T_{1}⁠、T2T_{2}封锁为 0,于是来脉冲时只有Q0Q_{0}⁠、Q3Q_{3}翻成 1,得到 1001;之后就和二进制减法一样往下数:0→9→8→⋯→1→00\to9\to8\to\cdots\to1\to0⁠。

⚠️ 易错点:

  1. 判断十进制计数器能否自启动,必须把 6 个无效状态全部代入,一个都不能漏;有一个状态绕不回来(例如自己转圈)就不能自启动。
  2. 十进制计数器的进位是C=Q0Q3C=Q_{0}Q_{3}(1001 时),不是Q0Q1Q2Q3Q_{0}Q_{1}Q_{2}Q_{3}⁠。

五、异步二进制计数器

5.1 大白话:接力赛

同步计数器像军训"齐步走",口令(CLK)一下,大家同时动。异步计数器则像接力赛:只有第一棒(FF0)听发令枪(CLK),后面每一棒都要等前一棒"交棒"才跑。

"交棒"是什么?回忆二进制加法:低位从 1 变成 0 的那一刻,正好要向高位进位。而"从 1 变 0"在波形上就是一个下降沿。所以:

用下降沿触发的 T 触发器、令T=1T=1(来一个时钟沿就翻),再把低位的QQ接到高位的 CLK 端——低位一从 1 变 0,高位就收到一个下降沿而翻转。这就是异步二进制加法计数器。

它的连接极简单,不需要任何门电路。

异步二进制加法计数器的连接与"接力"波形 FF0 T Q0 1 FF1 T Q1 1 FF2 T Q2 1 CLK Q0 Q1 Q2 低位 Q 由 1 变 0(下降沿)时,正好给高位一个时钟 → 高位翻转(逐级"接力") CLK Q0 Q1 Q2 每级比前一级晚一个 tpd(图中夸大画出)

图 3:下降沿动作的 3 位异步二进制加法计数器。上:连接方式(每级 T=1,Q 接下一级时钟);下:波形,每一级都比前一级晚一个传输延迟 tpd

5.2 加法还是减法?看"接哪个端、什么沿"

  • 加法:低位 1→0 时给高位一个触发沿。
  • 减法:低位 0→1 时(低位是 0 再减 1,要借位)给高位一个触发沿。而QQ从 0 变 1,就是Q‾\overline{Q}从 1 变 0,也就是Q‾\overline{Q}的下降沿。

于是有这张必背的表:

触发器动作沿 加法计数器:高位 CLK 接 减法计数器:高位 CLK 接
下降沿 低位QQ 低位Q‾\overline{Q}
上升沿 低位Q‾\overline{Q} 低位QQ

记法:先记"下降沿接 Q 是加法",其余三格每变一个条件就反过来。

5.3 例题 4:异步减法计数器的状态序列

题:3 个下降沿触发的 T 触发器(⁠T=1T=1⁠),FF0 的 CLK 接计数脉冲,FF1 的 CLK 接Q0‾\overline{Q_{0}}⁠,FF2 的 CLK 接Q1‾\overline{Q_{1}}⁠。初态 000,写出前 4 个脉冲后的状态。

解:

  • 第 1 个脉冲下降沿:FF0 翻转,Q0Q_{0}⁠:0→1。这时Q0‾\overline{Q_{0}}⁠:1→0,是下降沿 → FF1 翻转,Q1Q_{1}⁠:0→1 → Q1‾\overline{Q_{1}}出现下降沿 → FF2 翻转,Q2Q_{2}⁠:0→1。状态Q2Q1Q0=111Q_{2}Q_{1}Q_{0}=111⁠。
  • 第 2 个:Q0Q_{0}⁠:1→0,Q0‾\overline{Q_{0}}是上升沿,FF1 不动 → 110110⁠。
  • 第 3 个:Q0Q_{0}⁠:0→1 → FF1 翻,Q1Q_{1}⁠:1→0,Q1‾\overline{Q_{1}}是上升沿,FF2 不动 → 101101⁠。
  • 第 4 个:Q0Q_{0}⁠:1→0 → 100100⁠。

序列000→111→110→101→100000\to111\to110\to101\to100⁠,正是 0, 7, 6, 5, 4,减法计数。✔(Python 模拟同样得到 7, 6, 5, 4, 3, 2, 1, 0, 7…)

5.4 异步计数器的两大缺点

  1. 速度慢:最坏情况(例如 0111→1000)要一级一级传下去,新状态要经过所有触发器延迟之和才稳定。nn级、每级延迟tpdt_{pd}⁠,最坏要n tpdn\,t_{pd}⁠。
  2. 译码有毛刺:在"接力"的过程中,会短暂出现中间状态。例如011→100011\to100时,实际可能经过011→010→000→100011\to010\to000\to100⁠。如果有门电路在"译码"某个状态,就可能在这些瞬间误输出一个窄脉冲(竞争-冒险,见第 12 讲)。

优点只有一个但很实在:结构简单。


六、异步十进制加法计数器

6.1 思路

在 4 位异步二进制计数器基础上,想办法让它数到 1001 后,第 10 个脉冲直接回 0000,跳过1010∼11111010\sim1111⁠。

6.2 教材典型电路(图 6.3.27,即例 6.2.4 的电路)

4 个下降沿 JK 触发器(TTL 电路,J、K 悬空相当于接 1):

  • FF0:J0=K0=1J_{0}=K_{0}=1⁠,CLK 接计数脉冲;
  • FF1:J1=Q3‾J_{1}=\overline{Q_{3}}⁠,K1=1K_{1}=1⁠,CLK 接Q0Q_{0}⁠;
  • FF2:J2=K2=1J_{2}=K_{2}=1⁠,CLK 接Q1Q_{1}⁠;
  • FF3:J3=Q1Q2J_{3}=Q_{1}Q_{2}⁠,K3=1K_{3}=1⁠,CLK 接Q0Q_{0}⁠;
  • 进位C=Q0Q3C=Q_{0}Q_{3}⁠。

6.3 例题 5:从物理过程直接分析第 8、9、10 个脉冲

解:

  • 前 7 个脉冲:Q3=0Q_{3}=0⁠,所以J1=1J_{1}=1⁠,FF0~FF2 都是"T=1"的接力,和异步二进制一样;虽然Q0Q_{0}的下降沿也送到 FF3,但这时J3=Q1Q2J_{3}=Q_{1}Q_{2}只在 0111 时才为 1,之前J3=0J_{3}=0⁠、K3=1K_{3}=1⁠,FF3 保持 0。到第 7 个脉冲后状态 0111。
  • 第 8 个脉冲:Q0Q_{0}⁠:1→0(下降沿)。此刻(沿到来之前)J1=1J_{1}=1⁠,FF1:1→0;J3=Q1Q2=1J_{3}=Q_{1}Q_{2}=1⁠、K3=1K_{3}=1⁠,FF3:0→1。Q1Q_{1}的下降沿又使 FF2:1→0。状态10001000⁠。
  • 第 9 个脉冲:Q0Q_{0}⁠:0→1(上升沿,FF1、FF3 不动)→ 10011001⁠。
  • 第 10 个脉冲:Q0Q_{0}⁠:1→0(下降沿)。此刻J1=Q3‾=0J_{1}=\overline{Q_{3}}=0⁠、K1=1K_{1}=1⁠,FF1 保持 0(置 0);J3=Q1Q2=0J_{3}=Q_{1}Q_{2}=0⁠、K3=1K_{3}=1⁠,FF3 被置 0。状态00000000⁠。

于是0000→⋯→1001→00000000\to\cdots\to1001\to0000⁠,十进制。✔(Python 逐拍模拟核对一致,且 6 个无效状态都能回到有效循环。)

集成芯片 74LS290 就是按这个原理做的"二-五-十进制异步计数器":FF0 单独构成二进制,FF1~FF3 构成五进制,把它们串起来就是十进制;另有置 0 端和置 9 端。


七、同步 vs 异步:一张表对比

对比项 同步计数器 异步计数器
时钟 所有触发器接同一个 CLK 只有第一级接 CLK,其余接前级输出
翻转 同时 逐级、有先后
电路 需要与门等控制电路 二进制时可以不加任何门
速度 快(约一级触发器延迟 + 门延迟) 慢(最坏n tpdn\,t_{pd}⁠)
译码毛刺 少 容易出现
典型芯片 74HC161、74HC160、74HC191 74LS290、74HC393

速记卡

类型 关键式子 / 规律
同步二进制加法(T 触发器) T0=1T_{0}=1⁠,Ti=Qi−1⋯Q0T_{i}=Q_{i-1}\cdots Q_{0}(低位全 1 才翻);C=Q0Q1⋯Qn−1C=Q_{0}Q_{1}\cdots Q_{n-1}
同步二进制减法 T0=1T_{0}=1⁠,Ti=Qi−1‾⋯Q0‾T_{i}=\overline{Q_{i-1}}\cdots\overline{Q_{0}}(低位全 0 才翻)
可逆 用U‾/D\overline{U}/D在两组式子中选一组
同步十进制加法 T1=Q0Q3‾T_{1}=Q_{0}\overline{Q_{3}}⁠,T3=Q0Q1Q2+Q0Q3T_{3}=Q_{0}Q_{1}Q_{2}+Q_{0}Q_{3}⁠,C=Q0Q3C=Q_{0}Q_{3}⁠,能自启动
模与容量 nn位二进制:模2n2^{n}⁠,容量2n−12^{n}-1
分频 二进制计数器第ii位输出频率f0/2i+1f_{0}/2^{i+1}
异步接法 下降沿:加法接QQ⁠、减法接Q‾\overline{Q}⁠;上升沿反过来
异步缺点 慢(最坏n tpdn\,t_{pd}⁠)、译码毛刺
自启动 把所有无效状态代入,都能(直接或间接)进入有效循环才算

自测练习

1. 4 位同步二进制加法计数器(T 触发器,驱动方程同正文)现态01110111⁠。来一个脉冲后状态是多少?哪些触发器翻转?

答案与提示

T0=1T_{0}=1⁠,T1=Q0=1T_{1}=Q_{0}=1⁠,T2=Q0Q1=1T_{2}=Q_{0}Q_{1}=1⁠,T3=Q0Q1Q2=1T_{3}=Q_{0}Q_{1}Q_{2}=1⁠,四个触发器全部翻转,次态10001000(7+1=8)。

2. 3 位同步二进制减法计数器初态101101⁠,写出连续 5 个脉冲后的状态序列。

答案与提示

101→100→011→010→001→000101\to100\to011\to010\to001\to000(5, 4, 3, 2, 1, 0)。逐拍用T1=Q0‾T_{1}=\overline{Q_{0}}⁠、T2=Q0‾ Q1‾T_{2}=\overline{Q_{0}}\,\overline{Q_{1}}计算即可,已用 Python 模拟核对。

3. 4 位二进制计数器的计数脉冲频率为 16 kHz,Q3Q_{3}端输出信号的频率是多少?这个计数器的模和容量各是多少?

答案与提示

Q3Q_{3}是 16 分频:16 kHz/16=1 kHz16\ \text{kHz}/16=1\ \text{kHz}⁠。模 16,容量 15。

4. 用上升沿触发的 T 触发器(⁠T=1T=1⁠)接成异步二进制加法计数器,高位的 CLK 应接低位的哪个输出端?如果改成减法呢?

答案与提示

上升沿:加法接Q‾\overline{Q}(⁠QQ由 1 变 0 时Q‾\overline{Q}出现上升沿),减法接QQ⁠。

5. 正文的同步十进制加法计数器上电后落在11001100⁠,经过几个脉冲进入有效循环?进入的是哪个状态?

答案与提示

1100→1101→01001100\to1101\to0100⁠,经过 2 个脉冲进入有效状态01000100⁠。

6. 一个 4 位异步二进制加法计数器,每个触发器的传输延迟tpd=10 nst_{pd}=10\ \text{ns}⁠。最坏情况下新状态要多久才稳定?如果要求每个计数脉冲周期内状态必须稳定,计数脉冲的周期至少约为多少、频率最高约为多少(只考虑触发器延迟)?

答案与提示

最坏是0111→10000111\to1000或1111→00001111\to0000这类四级都要翻的情况:4×10=40 ns4\times10=40\ \text{ns}⁠。周期至少约40 ns40\ \text{ns}⁠,频率最高约1/40 ns=25 MHz1/40\ \text{ns}=25\ \text{MHz}(实际还要考虑建立时间、译码电路延迟等,会更低)。

7.(华师分析题风格) 某同步时序电路由 4 个 T 触发器组成,驱动方程为T0=1T_{0}=1⁠,T1=Q0Q3‾T_{1}=Q_{0}\overline{Q_{3}}⁠,T2=Q0Q1T_{2}=Q_{0}Q_{1}⁠,T3=Q0Q1Q2+Q0Q3T_{3}=Q_{0}Q_{1}Q_{2}+Q_{0}Q_{3}⁠,输出C=Q0Q3C=Q_{0}Q_{3}⁠。(1) 写出状态方程;(2) 画状态转换图;(3) 说明功能,能否自启动?

答案与提示

(1) 代入Q∗=T⊕QQ^{*}=T\oplus Q⁠:Q0∗=Q0‾Q_{0}^{*}=\overline{Q_{0}}⁠,Q1∗=Q0Q3‾ Q1‾+Q0Q3‾‾ Q1Q_{1}^{*}=Q_{0}\overline{Q_{3}}\,\overline{Q_{1}}+\overline{Q_{0}\overline{Q_{3}}}\,Q_{1}⁠,Q2∗=Q0Q1Q2‾+Q0Q1‾ Q2Q_{2}^{*}=Q_{0}Q_{1}\overline{Q_{2}}+\overline{Q_{0}Q_{1}}\,Q_{2}⁠,Q3∗=(Q0Q1Q2+Q0Q3)Q3‾+(Q0Q1Q2+Q0Q3)‾ Q3Q_{3}^{*}=(Q_{0}Q_{1}Q_{2}+Q_{0}Q_{3})\overline{Q_{3}}+\overline{(Q_{0}Q_{1}Q_{2}+Q_{0}Q_{3})}\,Q_{3}⁠。

(2) 有效循环0000→0001→⋯→1001→00000000\to0001\to\cdots\to1001\to0000⁠;无效状态1010→1011→01101010\to1011\to0110⁠,1100→1101→01001100\to1101\to0100⁠,1110→1111→00101110\to1111\to0010(见图 2)。

(3) 同步十进制(8421 BCD)加法计数器,CC为进位输出;所有无效状态都能回到有效循环,能自启动。


下一讲预告

第 16 讲(中)我们把这些"自己搭"的计数器换成现成的集成芯片:读懂 74HC161、74HC160 的引脚和功能表——异步清零、同步置数、保持、计数,以及进位输出 C 怎么用、多片怎么级联。

👉 点击进入下一讲:第16讲(中)|集成计数器 74HC161 与 74HC160

评论

还没有评论。 来写第一条。

留下一条评论

选填,不会公开

纯文本,链接会自动识别。