第 163 篇

考研数电·零基础讲义 第17讲(下)|设计实例与自启动检查

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

考研数电·零基础讲义 · 第 17 讲(下)|同步时序电路设计实例与自启动检查 学完这一讲,你能独立完成一道同步时序电路设计题:从状态表出发,用卡诺图求状态方程,分别用 D 触发器和 JK 触发器写出驱动方程和输出方程、画出逻辑图,并检查能否自启动;不能自启动时,会通过修改无关项的取法把它改成能自启动。预计用时 110–140 分钟。

本讲地图

  • 后三步怎么做:卡诺图求状态方程(用好无关项)→ 按触发器类型求驱动方程 → 画逻辑图 → 检查自启动。
  • 两种求驱动方程的方法:D 触发器直接"状态方程 = 驱动方程";JK 触发器可以"凑特性方程",也可以查激励表。
  • 实例 1:"101"序列检测器(米利型、可重叠),D 和 JK 两个版本。
  • 实例 2:同步六进制计数器(JK 触发器),带进位输出。
  • 自启动的检查与修改:3 位扭环形计数器从"死循环"改到"能自启动";教材例 6.4.4、6.4.5 的思路。
  • 华师怎么考:2026 回忆题第 7 题问"能否自启动",说明自启动是必考点;设计题则把整个流程走一遍。教材对应第 6 章 6.4.1、6.4.2 节。

前置知识

  • 设计前三步:逻辑抽象、状态化简、状态分配(见第 17 讲(上))。
  • D、JK、T 触发器的特性方程(见第 13 讲(下)):Q∗=DQ^{*}=D⁠;Q∗=JQ‾+K‾QQ^{*}=J\overline{Q}+\overline{K}Q⁠;Q∗=T⊕QQ^{*}=T\oplus Q⁠。
  • 卡诺图化简、无关项(见第 04 讲(中)、第 04 讲(下))。
  • 自启动的概念与检查方法(见第 14 讲)。

一、后三步的方法

1.1 第四步:求状态方程

编码完成后,状态转换表就变成了一张"真值表":输入是现态各位 + 外部输入,输出是次态各位 + 电路输出。对每一个次态位、每一个输出,各画一张卡诺图化简即可。

无关项:没用到的状态编码(以及不可能出现的输入组合)对应的格子填 ×。化简时 × 可以当 1 也可以当 0,用来把圈画大。

⚠️ 但要记住:你把 × 圈进去,就等于规定了那个无效状态的次态是 1;不圈,就规定为 0。 所以化简一结束,无效状态的去向就定了——这正是之后要检查自启动的原因。

1.2 第五步:由状态方程求驱动方程

D 触发器:特性方程Q∗=DQ^{*}=D⁠,所以

Di=Qi∗D_{i}=Q_{i}^{*}

(右边指Qi∗Q_{i}^{*}化简后的表达式。)状态方程化简完,驱动方程就有了,最省事。

JK 触发器,方法一:凑特性方程。 把每个Qi∗Q_{i}^{*}变形成

Qi∗=(⋯ )Qi‾+(⋯ )QiQ_{i}^{*}=(\cdots)\overline{Q_{i}}+(\cdots)Q_{i}

的形式,第一个括号就是JiJ_{i}⁠,第二个括号就是Ki‾\overline{K_{i}}⁠。如果某一项里不含QiQ_{i}也不含Qi‾\overline{Q_{i}}⁠,就乘上(Qi+Qi‾)(Q_{i}+\overline{Q_{i}})拆开。

JK 触发器,方法二:查激励表(更不容易出错)。 激励表回答的是:"要让触发器从 Q 变到Q∗Q^{*}⁠,J、K 应该是多少?"

Q→Q∗Q\to Q^{*} J K 理由
0 → 0 0 × 保持(J=K=0)或置 0(J=0,K=1)都行
0 → 1 1 × 置 1(J=1,K=0)或翻转(J=K=1)都行
1 → 0 × 1 置 0 或翻转都行
1 → 1 × 0 保持或置 1 都行

规律:现态是 0 时只看 J(J = 次态),K 无关;现态是 1 时只看 K(K = 次态取反),J 无关。 把这个规则用到每一行,就能直接得到 J、K 的卡诺图(× 很多,化简后往往很简单)。

同理,T 触发器的激励表:QQ与Q∗Q^{*}相同时 T=0,不同时 T=1,即T=Q⊕Q∗T=Q\oplus Q^{*}⁠。

1.3 第六步:检查自启动

把每个无效状态(以及每种输入)代入得到的方程,算出次态。只要每个无效状态都能直接或间接(经过别的无效状态)进入有效循环,电路就能自启动;有一个陷入"无效状态之间的循环"或停在原地,就不能自启动。

不能自启动时的两种解决办法(教材):

  1. 开机时通过预置数/复位把电路放到有效状态(例如给异步置零端加一个低电平);
  2. 修改逻辑设计:回到卡诺图,改变无关项的取法,让无效状态的次态落进有效循环(第四节详讲)。

二、实例 1:"101"序列检测器

2.1 题目

设计一个同步时序电路,串行输入 X,每当最近三位输入为 101 时输出 Y=1,否则 Y=0。允许重叠(例如 10101 中应检测到两次)。

2.2 第一步:逻辑抽象

电路要记住"已经和 101 对上了几位":

  • S0S_{0}⁠:还没对上(末尾既不是 1,也不是 10);
  • S1S_{1}⁠:末尾是 1(对上了"1");
  • S2S_{2}⁠:末尾是 10(对上了"10")。

逐个状态问"来 0 怎样、来 1 怎样":

  • S0S_{0}⁠:来 1 → S1S_{1}⁠;来 0 → 仍S0S_{0}⁠。输出都是 0。
  • S1S_{1}⁠:来 0 → 末尾变 10 → S2S_{2}⁠;来 1 → 末尾还是 1 → 留在S1S_{1}⁠。输出 0。
  • S2S_{2}⁠:来 1 → 凑成 101,输出 1;而且这个 1 可以作为下一个 101 的开头(重叠),所以去S1S_{1}⁠。来 0 → 末尾是 100,什么都没对上 → S0S_{0}⁠,输出 0。
现态 X=0 X=1
S0S_{0} S0/0S_{0}/0 S1/0S_{1}/0
S1S_{1} S2/0S_{2}/0 S1/0S_{1}/0
S2S_{2} S0/0S_{0}/0 S1/1S_{1}/1

2.3 第二步:状态化简

S2S_{2}在 X=1 时输出 1,其它状态都不会输出 1,所以S2S_{2}与谁都不等价;S0S_{0}和S1S_{1}⁠:X=0 时次态分别是S0S_{0}⁠、S2S_{2}(⁠S0S_{0}和S2S_{2}不等价),所以也不等价。已是最简,3 个状态。

2.4 第三步:状态分配

M=3M=3⁠,取n=2n=2⁠。编码Q1Q0Q_{1}Q_{0}⁠:S0=00S_{0}=00⁠,S1=01S_{1}=01⁠,S2=10S_{2}=10⁠;1111不用(无关项)。

编码后的状态转换表("真值表"形式):

Q1Q_{1} Q0Q_{0} X Q1∗Q_{1}^{*} Q0∗Q_{0}^{*} Y
0 0 0 0 0 0
0 0 1 0 1 0
0 1 0 1 0 0
0 1 1 0 1 0
1 0 0 0 0 0
1 0 1 0 1 1
1 1 0 × × ×
1 1 1 × × ×

2.5 第四步:卡诺图化简求状态方程

Q1∗Q_{1}^{*}:为 1 的只有Q1‾Q0X‾\overline{Q_{1}}Q_{0}\overline{X}(第 3 行)。把无关项Q1Q0X‾Q_{1}Q_{0}\overline{X}圈进来,两格合并消去Q1Q_{1}⁠:

Q1∗=Q0X‾Q_{1}^{*}=Q_{0}\overline{X}

Q0∗Q_{0}^{*}:为 1 的是第 2、4、6 行,恰好是"X=1 的所有有效行";再借用无关项Q1Q0XQ_{1}Q_{0}X⁠,4 格(X=1 的整列)合并:

Q0∗=XQ_{0}^{*}=X

Y:为 1 的是第 6 行Q1Q0‾XQ_{1}\overline{Q_{0}}X⁠,借用无关项Q1Q0XQ_{1}Q_{0}X⁠:

Y=Q1XY=Q_{1}X

(以上三个式子都用 sympy 的 SOPform 带无关项求得,并与状态表逐行核对。)

2.6 第五步(D 触发器版):驱动方程与逻辑图

D1=Q0X‾,D0=X,Y=Q1XD_{1}=Q_{0}\overline{X},\qquad D_{0}=X,\qquad Y=Q_{1}X

只需要一个反相器(得X‾\overline{X}⁠)和两个两输入与门:

用 D 触发器实现的“101”检测器 FF0 D Q CLK FF1 D Q CLK X D0 = X X′ Q0 D1 D1 = Q0·X′ Q1 Y = Q1·X CLK

图 1:用 D 触发器实现的"101"检测器。D0D_{0}直接接 X,D1=Q0X‾D_{1}=Q_{0}\overline{X}⁠,Y=Q1XY=Q_{1}X

用一个具体序列走一遍(Python 逐拍模拟):输入 X = 1,0,1,0,1,1,0,1,0,0,从 00 出发:

拍 现态Q1Q0Q_{1}Q_{0} X Y 次态
1 00 1 0 01
2 01 0 0 10
3 10 1 1 01
4 01 0 0 10
5 10 1 1 01
6 01 1 0 01
7 01 0 0 10
8 10 1 1 01
9 01 0 0 10
10 10 0 0 00

第 3、5、8 拍检测到 101(第 3、5 拍是重叠的"10101")。另外我用 1000 组随机序列与"直接判断最近三位是否为 101"对比,输出全部一致。

2.7 第六步:检查自启动(D 版)

无效状态Q1Q0=11Q_{1}Q_{0}=11代入:

  • X=0:Q1∗=Q0X‾=1Q_{1}^{*}=Q_{0}\overline{X}=1⁠,Q0∗=X=0Q_{0}^{*}=X=0 → 次态 10(有效,S2S_{2}⁠);
  • X=1:Q1∗=0Q_{1}^{*}=0⁠,Q0∗=1Q_{0}^{*}=1 → 次态 01(有效,S1S_{1}⁠)。此时Y=Q1X=1Y=Q_{1}X=1⁠。

无论输入是什么,11 一拍之内就回到有效状态,能自启动。小瑕疵:在无效状态 11 且 X=1 时会误输出一次 Y=1,只可能发生在上电后的第一拍;如果介意,可开机复位到 00。

完整状态转换图如下(虚线是无效状态的去向):

“101”序列检测器的状态转换图(Q1Q0,含无效状态) 00 S0 01 S1 10 S2 11 无效 0/0 1/0 1/0 0/0 1/1 0/0 0/0 1/1 标注 X/Y;红色 1/1 = 检测到 101(可重叠:输出后停在 S1)

图 2:"101"检测器完整状态转换图(D 触发器方案),红色虚线为无效状态 11 的转移

2.8 第五步(JK 触发器版):用激励表求驱动方程

逐行套激励表规则(现态 0 看 J、现态 1 看 K):

Q1Q0XQ_{1}Q_{0}X Q1→Q1∗Q_{1}\to Q_{1}^{*} J1J_{1} K1K_{1} Q0→Q0∗Q_{0}\to Q_{0}^{*} J0J_{0} K0K_{0}
000 0→0 0 × 0→0 0 ×
001 0→0 0 × 0→1 1 ×
010 0→1 1 × 1→0 × 1
011 0→0 0 × 1→1 × 0
100 1→0 × 1 0→0 0 ×
101 1→0 × 1 0→1 1 ×
11× — × × — × ×

化简(含无关项,sympy 核对):

J1=Q0X‾,K1=1,J0=X,K0=X‾J_{1}=Q_{0}\overline{X},\quad K_{1}=1,\qquad J_{0}=X,\quad K_{0}=\overline{X}

K1=1K_{1}=1的意思是:Q1Q_{1}一旦为 1,下一拍一定回 0——确实,S2S_{2}之后不是S0S_{0}就是S1S_{1}⁠,Q1Q_{1}都是 0。J0=XJ_{0}=X⁠、K0=X‾K_{0}=\overline{X}相当于"把 X 存进Q0Q_{0}",和 D 版的D0=XD_{0}=X一致。

自启动(JK 版):11 代入,X=0 → Q1Q_{1}⁠:K1=1K_{1}=1置 0;Q0Q_{0}⁠:J0=0,K0=1J_{0}=0,K_{0}=1置 0 → 00。X=1 → Q1Q_{1}置 0;Q0Q_{0}⁠:J0=1,K0=0J_{0}=1,K_{0}=0置 1 → 01。都回到有效状态,能自启动(Python 核对)。

注意:同样的状态方程,用 JK 实现时无效状态的去向(X=0 时到 00)和 D 版(到 10)不一样——因为 JK 的激励表里多了许多 ×,化简时被取成了不同的值。所以换了触发器类型,自启动要重新检查。

2.9 变式:如果"不允许重叠"呢?

题目若改成"不允许重叠"(已经用来组成一个 101 的位,不能再算进下一个 101),只有一处要改:S2S_{2}来 1 输出 1 之后,这个 1 已经"用掉了",应该回S0S_{0}而不是S1S_{1}⁠:

现态 X=0 X=1
S0S_{0} S0/0S_{0}/0 S1/0S_{1}/0
S1S_{1} S2/0S_{2}/0 S1/0S_{1}/0
S2S_{2} S0/0S_{0}/0 S0/1S_{0}/1

编码不变,重新化简(sympy 核对):

D1=Q0X‾,D0=XQ1‾,Y=Q1XD_{1}=Q_{0}\overline{X},\qquad D_{0}=X\overline{Q_{1}},\qquad Y=Q_{1}X

和重叠版相比,只是D0D_{0}多乘了一个Q1‾\overline{Q_{1}}⁠:在S2S_{2}(⁠Q1=1Q_{1}=1⁠)时即使来 1,Q0Q_{0}也不置 1,于是回到 00。核对:输入 10101 时只在第 3 位输出 1(重叠版在第 3、5 位都输出 1);输入 101101 时在第 3、6 位输出 1。无效状态 11:X=0 → 10,X=1 → 00,同样能自启动。

启示:审题时一定要看清"是否允许重叠",它决定了检测成功后回到哪个状态。


三、实例 2:用 JK 触发器设计同步六进制计数器

3.1 题目

用 JK 触发器设计一个同步六进制加法计数器,按自然二进制 000~101 计数,计到 101 时进位输出 C=1。检查能否自启动。

3.2 前三步

  • 逻辑抽象:没有输入变量,只有输出 C,穆尔型;6 个状态S0∼S5S_{0}\sim S_{5}依次循环,S5S_{5}时 C=1。
  • 状态化简:计数器的 6 个状态代表 6 种不同的已计数个数,不能化简。
  • 状态分配:22<6≤232^{2}<6\le2^{3}⁠,取 3 个触发器Q2Q1Q0Q_{2}Q_{1}Q_{0}⁠,S0∼S5S_{0}\sim S_{5}编为 000~101;110、111 为无关项。
Q2Q1Q0Q_{2}Q_{1}Q_{0} Q2∗Q1∗Q0∗Q_{2}^{*}Q_{1}^{*}Q_{0}^{*} C
000 001 0
001 010 0
010 011 0
011 100 0
100 101 0
101 000 1
110 ××× ×
111 ××× ×

3.3 第四步:状态方程

用卡诺图(含无关项)化简,sympy 核对:

Q2∗=Q1Q0+Q2Q0‾Q_{2}^{*}=Q_{1}Q_{0}+Q_{2}\overline{Q_{0}} Q1∗=Q1Q0‾+Q2‾ Q1‾Q0Q_{1}^{*}=Q_{1}\overline{Q_{0}}+\overline{Q_{2}}\,\overline{Q_{1}}Q_{0} Q0∗=Q0‾Q_{0}^{*}=\overline{Q_{0}} C=Q2Q0C=Q_{2}Q_{0}

(如果题目要求用 D 触发器,到这里就结束了:D2=Q2∗D_{2}=Q_{2}^{*}⁠、D1=Q1∗D_{1}=Q_{1}^{*}⁠、D0=Q0∗D_{0}=Q_{0}^{*}⁠。)

3.4 第五步:驱动方程(凑特性方程法)

  • Q2∗=Q1Q0+Q2Q0‾Q_{2}^{*}=Q_{1}Q_{0}+Q_{2}\overline{Q_{0}}⁠:第一项不含Q2Q_{2}⁠,乘(Q2+Q2‾)(Q_{2}+\overline{Q_{2}})得Q1Q0Q2‾+Q1Q0Q2Q_{1}Q_{0}\overline{Q_{2}}+Q_{1}Q_{0}Q_{2}⁠。于是
Q2∗=(Q1Q0)Q2‾+(Q0‾+Q1Q0)Q2Q_{2}^{*}=(Q_{1}Q_{0})\overline{Q_{2}}+(\overline{Q_{0}}+Q_{1}Q_{0})Q_{2}

对照Q∗=JQ‾+K‾QQ^{*}=J\overline{Q}+\overline{K}Q⁠:J2=Q1Q0J_{2}=Q_{1}Q_{0}⁠,K2‾=Q0‾+Q1Q0=Q0‾+Q1\overline{K_{2}}=\overline{Q_{0}}+Q_{1}Q_{0}=\overline{Q_{0}}+Q_{1}⁠。如果直接取K2=Q0‾+Q1‾=Q0Q1‾K_{2}=\overline{\overline{Q_{0}}+Q_{1}}=Q_{0}\overline{Q_{1}}也正确;但用激励表、借助无关项可以得到更简单的K2=Q0K_{2}=Q_{0}(检查:在有效状态中Q2=1Q_{2}=1时只有 100、101,此时Q1=0Q_{1}=0⁠,两种写法结果相同)。

  • 同理Q1∗=(Q2‾Q0)Q1‾+(Q0‾)Q1Q_{1}^{*}=(\overline{Q_{2}}Q_{0})\overline{Q_{1}}+(\overline{Q_{0}})Q_{1} → J1=Q2‾Q0J_{1}=\overline{Q_{2}}Q_{0}⁠,K1=Q0K_{1}=Q_{0}⁠。
  • Q0∗=Q0‾=1⋅Q0‾+0⋅Q0Q_{0}^{*}=\overline{Q_{0}}=1\cdot\overline{Q_{0}}+0\cdot Q_{0} → J0=1J_{0}=1⁠,K0=1K_{0}=1⁠。

最终(sympy 用激励表 + 无关项化简得到同样结果):

J2=Q1Q0, K2=Q0;J1=Q2‾Q0, K1=Q0;J0=K0=1J_{2}=Q_{1}Q_{0},\ K_{2}=Q_{0};\qquad J_{1}=\overline{Q_{2}}Q_{0},\ K_{1}=Q_{0};\qquad J_{0}=K_{0}=1

3.5 第六步:检查自启动

把无效状态代入驱动方程,逐个触发器算(JK:J=K=0 保持,J=1,K=0 置 1,J=0,K=1 置 0,J=K=1 翻转):

  • 110:J2=Q1Q0=0, K2=Q0=0J_{2}=Q_{1}Q_{0}=0,\ K_{2}=Q_{0}=0 → Q2Q_{2}保持 1;J1=Q2‾Q0=0, K1=0J_{1}=\overline{Q_{2}}Q_{0}=0,\ K_{1}=0 → Q1Q_{1}保持 1;Q0Q_{0}翻转为 1。次态 111。
  • 111:J2=1,K2=1J_{2}=1,K_{2}=1 → Q2Q_{2}翻为 0;J1=0,K1=1J_{1}=0,K_{1}=1 → Q1Q_{1}置 0;Q0Q_{0}翻为 0。次态 000(有效)。

110→111→000110\to111\to000⁠,能自启动。Python 逐拍模拟:有效循环 000→001→010→011→100→101→000,无效状态 110→111→000,与手算一致。

3.6 逻辑图怎么画(文字版)

按驱动方程连线即可,步骤是:

  1. 画 3 个 JK 触发器 FF0、FF1、FF2,CLK 端全部接同一个计数脉冲(同步)。
  2. FF0:J、K 都接高电平 1,每个脉冲翻转一次。
  3. FF1:J1J_{1}接一个两输入与门,输入是Q2‾\overline{Q_{2}}和Q0Q_{0}⁠;K1K_{1}直接接Q0Q_{0}⁠。
  4. FF2:J2J_{2}接一个两输入与门,输入是Q1Q_{1}和Q0Q_{0}⁠;K2K_{2}直接接Q0Q_{0}⁠。
  5. 进位 C:再用一个两输入与门,输入Q2Q_{2}和Q0Q_{0}⁠。

一共只要 3 个与门,比用 D 触发器(⁠D2D_{2}⁠、D1D_{1}都是两项与或式)省门。这说明:同一个状态表,用 JK 触发器往往能借助激励表里的 × 得到更简单的驱动方程;用 D 触发器的好处是思路最直接、不容易出错。考试时按题目指定的触发器做,没指定时选自己最有把握的。

3.7 顺带看一下教材例 6.4.1(十三进制)

教材用同样的步骤设计了带进位的十三进制计数器(JK 触发器),得到J3=Q2Q1Q0,K3=Q2J_{3}=Q_{2}Q_{1}Q_{0},K_{3}=Q_{2}⁠;J2=Q1Q0,K2=Q3‾ Q1Q0‾‾J_{2}=Q_{1}Q_{0},K_{2}=\overline{\overline{Q_{3}}\,\overline{Q_{1}Q_{0}}}⁠;J1=K1=Q0J_{1}=K_{1}=Q_{0}⁠;J0=Q3Q2‾,K0=1J_{0}=\overline{Q_{3}Q_{2}},K_{0}=1⁠;C=Q3Q2C=Q_{3}Q_{2}⁠。我把这组方程代入模拟:从 0000 出发 13 拍一循环;三个无效状态 1101、1110、1111 的次态分别是 0010、0010、0000,能自启动,与教材结论一致。


四、不能自启动怎么办:修改设计

4.1 大白话

化简时把 × 当 0 还是当 1,本来"随你";但这一选,就给无效状态指了一条路。如果指的路通向有效循环,皆大欢喜;如果通向另一个无效状态、并且绕成圈,电路一旦掉进去就永远出不来——这叫死循环(无效循环)。

当然,也可以不改逻辑,而是在开机时用复位信号把电路强行放到有效状态(例如教材的售饮料机例子,就是在异步置零端加低电平把电路置为 00)。但这种办法有一个隐患:工作中如果受到干扰跳进了无效状态,电路就再也回不来,只能再复位一次。所以题目要求"能自启动"时,应该修改设计。

修改的思路很直接:回到卡诺图,把那个无效状态对应的 × 改成某个确定的值,使它的次态落在有效循环里,再重新化简。

4.2 例题 3:3 位扭环形计数器的自启动修改

题:用 D 触发器设计 3 位扭环形计数器,有效循环(⁠Q1Q2Q3Q_{1}Q_{2}Q_{3}⁠)为000→100→110→111→011→001→000000\to100\to110\to111\to011\to001\to000⁠,要求能自启动。为保持移位结构,规定D2=Q1D_{2}=Q_{1}⁠、D3=Q2D_{3}=Q_{2}⁠,只允许改D1D_{1}⁠。

第 1 步:先求最简设计。 6 个有效状态,010、101 为无关项。化简得:

D1=Q3‾,D2=Q1,D3=Q2D_{1}=\overline{Q_{3}},\quad D_{2}=Q_{1},\quad D_{3}=Q_{2}

第 2 步:检查自启动。 次态是(D1,Q1,Q2)(D_{1},Q_{1},Q_{2})⁠:

  • 010 → (0‾,0,1)=101(\overline{0},0,1)=101⁠;
  • 101 → (1‾,1,0)=010(\overline{1},1,0)=010⁠。

010 和 101 互相转,形成死循环,不能自启动。

扭环形计数器的自启动修改(Q1Q2Q3) 000 100 110 111 011 001 000 100 110 111 011 001 修改前:D1 = Q3′ 修改后:D1 = Q1Q3′ + Q2′Q3′ 010 101 死循环,回不来! 101 010 010 → 001,101 → 010 → 001:能自启动

图 3:左为最简设计(010、101 死循环);右为修改 D1 后,两者都回到有效循环

第 3 步:修改。 010 的次态是(D1,0,1)(D_{1},0,1)⁠:若令D1=0D_{1}=0⁠,次态就是 001——有效!所以在D1D_{1}的卡诺图里,把 010 对应的格子从 × 改为 0,101 仍保留 ×,重新化简(sympy 核对):

D1=Q1Q3‾+Q2‾ Q3‾=Q3‾ (Q1+Q2‾)D_{1}=Q_{1}\overline{Q_{3}}+\overline{Q_{2}}\,\overline{Q_{3}}=\overline{Q_{3}}\,(Q_{1}+\overline{Q_{2}})

第 4 步:再检查。

  • 010:D1=0‾⋅(0+1‾)=0D_{1}=\overline{0}\cdot(0+\overline{1})=0 → 次态 001(有效);
  • 101:D1=1‾⋅(⋯ )=0D_{1}=\overline{1}\cdot(\cdots)=0 → 次态 010 → 再下一拍 001(有效)。

而 6 个有效状态的次态不变(Python 逐拍核对,有效循环保持 000→100→110→111→011→001)。现在能自启动了。 101 是"间接"回到有效循环的,这也是允许的。

4.3 教材两个例子的思路(了解)

  • 例 6.4.4 七进制计数器:唯一的无效状态 000,最简化简时 × 全取 0,结果 000 的次态还是 000(停在原地),不能自启动。把 000 的次态指定为有效状态 010,修改后Q2∗=Q1+Q2‾ Q3‾Q_{2}^{*}=Q_{1}+\overline{Q_{2}}\,\overline{Q_{3}}⁠,就能自启动了。教材指出:指定为其它任何一个有效状态也行,选哪个看哪种方程最简单。
  • 例 6.4.5 3 位环形计数器(⁠100→010→001100\to010\to001⁠):最简设计Q1∗=Q3Q_{1}^{*}=Q_{3}不能自启动;只修改第一位,得Q1∗=Q1‾ Q2‾Q_{1}^{*}=\overline{Q_{1}}\,\overline{Q_{2}}⁠,即D1=Q1+Q2‾D_{1}=\overline{Q_{1}+Q_{2}}⁠,能自启动(我用 Python 代入 5 个无效状态,全部最多两拍回到有效循环)。

4.4 设计题答题模板

  1. 逻辑抽象:说明输入、输出变量及取值含义,定义各状态,画原始状态图/表。
  2. 状态化简:指出等价状态(或说明已最简)。
  3. 状态分配:写出nn及编码表。
  4. 求方程:画次态/输出卡诺图(无关项标 ×),写状态方程;按触发器类型写驱动方程;写输出方程。
  5. 画逻辑图。
  6. 检查自启动:逐个代入无效状态,画完整状态转换图,下结论;不能自启动则修改。

五、常见失分点 ⚠️

  1. 状态图漏画转移:每个状态对每种输入都要有一条箭头。米利型 3 个状态、1 个输入,应有 6 条箭头(自循环也算)。
  2. 卡诺图变量顺序写乱:次态卡诺图的行列标注要和真值表一致,格雷码顺序(00、01、11、10)不能写成 00、01、10、11。
  3. 无关项用了却忘了检查自启动:只要化简时用到了 ×,就必须把无效状态代回去验算,并在完整状态图上画出来。
  4. JK 驱动方程凑错:凑Q∗=JQ‾+K‾QQ^{*}=J\overline{Q}+\overline{K}Q时,第二个括号是K‾\overline{K}而不是 K,要再取一次反。拿不准就改用激励表。
  5. "能自启动"只说结论:要写出每个无效状态的次态(或画出完整状态图)作为依据,否则会扣分。
  6. 重叠与不重叠没区分:序列检测器检测成功后回到哪个状态,取决于题目是否允许重叠。
  7. 输出方程忘了写:米利型输出与输入有关(如Y=Q1XY=Q_{1}X⁠),穆尔型输出只与状态有关(如C=Q2Q0C=Q_{2}Q_{0}⁠),都要单独写出来并画进逻辑图。

速记卡

项目 要点
D 触发器 Di=Qi∗D_{i}=Q_{i}^{*}
JK 激励表 0→0:J=0,K=×;0→1:J=1,K=×;1→0:J=×,K=1;1→1:J=×,K=0
JK 凑形式 Q∗=( J )Q‾+( K‾ )QQ^{*}=(\ J\ )\overline{Q}+(\ \overline{K}\ )Q
T 触发器 T=Q⊕Q∗T=Q\oplus Q^{*}
101 检测器(D) D1=Q0X‾D_{1}=Q_{0}\overline{X}⁠,D0=XD_{0}=X⁠,Y=Q1XY=Q_{1}X⁠,能自启动
101 检测器(JK) J1=Q0X‾,K1=1J_{1}=Q_{0}\overline{X},K_{1}=1⁠;J0=X,K0=X‾J_{0}=X,K_{0}=\overline{X}
六进制(JK) J2=Q1Q0,K2=Q0J_{2}=Q_{1}Q_{0},K_{2}=Q_{0}⁠;J1=Q2‾Q0,K1=Q0J_{1}=\overline{Q_{2}}Q_{0},K_{1}=Q_{0}⁠;J0=K0=1J_{0}=K_{0}=1⁠;C=Q2Q0C=Q_{2}Q_{0}⁠;110→111→000
自启动判据 每个无效状态直接或间接进入有效循环
修改方法 把无效状态的 × 改成使次态有效的值,重新化简
注意 换触发器类型或改化简方式后,自启动要重新查

自测练习

1. 填空:JK 触发器要从 1 变为 0,J=,K=;要从 0 保持 0,J=,K=。

答案与提示

1→0:J=×,K=1;0→0:J=0,K=×。

2. 用 D 触发器设计同步五进制加法计数器(000~100 自然二进制)。写出驱动方程,并检查能否自启动。

答案与提示

无关项 101、110、111。化简得D2=Q1Q0D_{2}=Q_{1}Q_{0}⁠,D1=Q1⊕Q0D_{1}=Q_{1}\oplus Q_{0}(即Q1Q0‾+Q1‾Q0Q_{1}\overline{Q_{0}}+\overline{Q_{1}}Q_{0}⁠),D0=Q2‾ Q0‾D_{0}=\overline{Q_{2}}\,\overline{Q_{0}}⁠。无效状态:101→010,110→010,111→100,都进入有效循环,能自启动(Python 核对)。

3. 教材十三进制计数器(例 6.4.1)的三个无效状态 1101、1110、1111 的次态分别是什么?能否自启动?

答案与提示

分别为 0010、0010、0000,都是有效状态,能自启动(代入 JK 驱动方程模拟核对)。

4. 3 位环形计数器有效循环100→010→001100\to010\to001(⁠Q1Q2Q3Q_{1}Q_{2}Q_{3}⁠),若取D1=Q3D_{1}=Q_{3}⁠、D2=Q1D_{2}=Q_{1}⁠、D3=Q2D_{3}=Q_{2}⁠,能否自启动?若改为D1=Q1+Q2‾D_{1}=\overline{Q_{1}+Q_{2}}呢?

答案与提示

D1=Q3D_{1}=Q_{3}时:000→000(停在原地),011→101→110→011(无效循环),111→111,不能自启动。改为D1=Q1+Q2‾D_{1}=\overline{Q_{1}+Q_{2}}后:000→100,011→001,101→010,110→011→001,111→011→001,全部回到有效循环,能自启动(Python 核对)。

5. 第 17 讲(上)例题 1 "连续三个及以上 1 输出 1"的检测器,化简后S0=00,S1=01,S2=10S_{0}=00,S_{1}=01,S_{2}=10⁠,用 D 触发器实现。写出驱动方程和输出方程,并检查无效状态 11。

答案与提示

D1=XQ1+XQ0D_{1}=XQ_{1}+XQ_{0}⁠,D0=XQ1‾ Q0‾D_{0}=X\overline{Q_{1}}\,\overline{Q_{0}}⁠,Y=XQ1Y=XQ_{1}(与教材式 6.4.8、6.4.9 一致)。11 代入:X=0 → 00;X=1 → 10。能自启动。1000 组随机序列核对正确。

6.(华师设计题风格) 用 JK 触发器设计"101"序列检测器(允许重叠),要求:(1) 画状态转换图;(2) 写驱动方程和输出方程;(3) 检查自启动。

答案与提示

(1) 状态图见图 2(有效部分):S0→1/0S1S_{0}\xrightarrow{1/0}S_{1}⁠,S1→0/0S2S_{1}\xrightarrow{0/0}S_{2}⁠,S2→1/1S1S_{2}\xrightarrow{1/1}S_{1}⁠,S2→0/0S0S_{2}\xrightarrow{0/0}S_{0}⁠,S0S_{0}来 0、S1S_{1}来 1 自循环。

(2) 编码S0=00,S1=01,S2=10S_{0}=00,S_{1}=01,S_{2}=10⁠:J1=Q0X‾,K1=1J_{1}=Q_{0}\overline{X},K_{1}=1⁠;J0=X,K0=X‾J_{0}=X,K_{0}=\overline{X}⁠;Y=Q1XY=Q_{1}X⁠。

(3) 无效状态 11:X=0 → 00,X=1 → 01,能自启动(X=1 时会误输出一次 Y=1,可开机复位避免)。


下一讲预告

时序逻辑部分到这里就告一段落。第 18 讲进入"脉冲波形的产生和整形",从施密特触发电路讲起:它为什么有两个阈值、回差有什么用。

评论

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

留下一条评论

选填,不会公开

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