同步时序逻辑电路的设计,就是根据逻辑问题的具体要求,结合同步时序逻辑电路的特点,设计出能够实现该逻辑功能的最简同步时序电路。
同步时序逻辑电路中含有组合逻辑电路部分和存储电路部分,组合电路的设计在第四章已作介绍,本节主要介绍存储电路部分的设计。存储电路部分主要用到的是触发器。
6.4.1设计方法
同步时序逻辑电路的设计的过程可以用图6.4.1简单表示。

具体步骤为:
1.根据所给逻辑设计的要求,进行逻辑抽象,将实际问题总结为逻辑问题。
根据电路的设计要求,确定输入量和输出量,并且定义输入和输出量逻辑值的含义,用字母表示出这些变量,例如输入量用X表示,输出量用Y或Z等表示。
2.建立原始状态转换图或状态转移表。
根据设计要求,确定系统的原始状态数,用字母表示出这些原始状态,例如用Sm来表示(m为0、1、2…)。找到原始状态Sm之间的转换关系,作出在各种输入条件下状态间的转换图或状态转移表,标明输入和输出的逻辑值。
3. 原始状态的化简。
在建立原始状态数时,主要是反映逻辑电路设计的要求,定义的原始状态图可能比较复杂,含有的状态数也较多,也可能包含了一些重复的状态。在设计中是要用最少的逻辑器件达到设计要求,如果逻辑状态较多,相应用到的触发器也就多,设计的电路就较复杂。为此,应该对原始状态进行化简,消去多余的状态,从而得到最简化的状态转换图。
状态的化简就是进行状态合并。用一个状态代替与之等价的状态。逻辑状态等价的依据是:(1)状态Si、Sj,在相同的输入条件下,状态Si、Sj对应的输出结果相同;(2)状态Si、Sj,在相同的输入条件下,状态Si、Sj转移效果完全相同。满足上述两个条件的状态,就是等价状态,可以将这些等价状态合并为一个状态。
状态Si、Sj转移效果相同的情况可能有以下三种情况:
(1) 次态相同
状态Si、Sj,在相同的输入条件下,转移到相同的次态,则状态Si、Sj转移效果相同,可以进行状态合并。图6.4.2说明了两个状态在相同的输入条件下次态相同的情况,用[Si ,Sj]来表示状态Si、Sj的等价,称为一个等价类,Si和Sj可以合并为一个状态。

等价关系具有传递性,如图6.4.3所示,S1、S3在相同的输入条件下分别转移到S2和S4状态,它们的输出也相同,而S2和S4在相同的输入条件下转移到相同的次态S5,输出也相同,S2和S4是等价状态,所以S1和S3也是等价的,可以合并。用[S1,S3]来表示状态S1、S3的等价,S1和S3是一个等价类。用[S2,S4]来表示状态S2、S4的等价,S2和S4是一个等价类。

对于逻辑状态较多或者不能直接看出逻辑间的等价时,可以用隐含表法来寻找状态的等价,这一点在例6.4.3中进行具体介绍。
(2) 次态交错
次态交错是指在某种输入条件下,Si的次态为Sj,Sj的次态为Si。图6.4.4说明了次态交错的情况。状态S1和S3在输入1时,转移的次态相同,而且输出也相同。在输入0时,S1转移的次态是S3,S3转移的次态是S1,输出结果均相同,属于次态交错情况,S1和S3是等价状态,S1和S3可以合并为一个状态。用[S1,S3]来表示状态S1、S3的等价。

(3) 次态循环
次态循环是指次态之间的关系构成循环。如Si和Sj在某种输入条件下的次态分别为Sm和Sn,并且输出相同;Sm和Sn在另外输入条件下的次态分别为Si和Sj,输出也相同,则状态Si和Sj等价,用[Si ,Sj]来表示状态等价。
4.状态分配
经过状态的合并之后得到了最少的状态数m,则可以得知需要用的触发器数n,n的值应该满足
<m≤![]()
状态的分配就是给化简后的各个状态分别分配一组代码。例如,化简后得到的状态有S0、S1、S2和S3,可知应该用2个触发器来实现,状态编码可以用二进制编码方式,令S0 = 00、S1 = 01、S2 = 10、S3 = 11,也可以用循环码来编码,令S0 = 00、S1 = 01、S2 = 11、S3= 10。
5.求出状态方程和驱动方程及输出方程
首先根据状态转移表或者状态转换图作出卡诺图,也就是用卡诺图来表示状态转移表(图)。以卡诺图的横向和纵向组合对应的逻辑值为初始状态,在小方格中填入次态结果。例如:某一时序电路有4个状态循环如图6.4.5(a)所示,则用卡诺图来表示的状态转换图为图6.4.5(b)所示。此时的卡诺图只是状态转换图的另外一种描述状态间转换的方法。将卡诺图分解为各个触发器输出端次态
的卡诺图,如图6.4.5(c)所示。
通过卡诺图化简逻辑函数,可以得出
函数表达式,即得状态转移方程,与所选触发器得特性方程比较,可以得出驱动方程。同样得方法总结出输出端的卡诺图,化简得出其逻辑函数表达式。

6.自启动检查
在状态编码中可能还存在偏离状态,这时就要进行自启动检查。将偏离状态值代入状态转移方程中,检查这些偏离状态能否进入到正常得计数循环中去,如果能够进入,则说明所设计的电路可以自启动,否则不可以自启动,需要修改状态转移方程,电路也该作相应的修改。
7.根据所选触发器画出逻辑电路。
以上是同步时序逻辑电路的设计步骤,下面通过一些实例来运用这些设计方法。
6.4.2设计举例
例6.4.1 设计一个五进制计数器,进位输出端Y,分别用JK触发器和D触发器实现该设计电路。
解:根据前面的同步时序逻辑电路的设计步骤,解题如下
步骤1.根据题意,该设计为计数器电路,所以除了时钟信号外,没有其他的输入量,输出量为Y,表示进位,用1来表示有进位,0表示没有进位。
步骤2.由于题中已经明确了是五进制计数器,应该用5个状态来表示五进制计数器对应的5个逻辑状态循环,设这5个状态分别为S0、S1、S2、S3和S4,所以可以作出其原始状态图为图6.4.6(a)所示。

步骤3.由于五进制计数器必定有5个状态循环,它们在相同的输入会转移到不同的次态,所以原始状态图已经不可以进一步化简,没有可以合并的状态。这一步骤可以省去。
步骤4.要表示5个逻辑状态的循环,至少要用3位二进制数来表示,所以用到的触发器数为3。对于状态S0、S1、S2、S3和S4的编码这里采用二进制方式,令S0= 000、S1 =001、S2 = 010、S3 = 011、S4 = 100,这时状态转换图为6.4.6(b)图所示。
步骤5.以卡诺图中纵向与横向对应作为初始状态
,如初态
,结合状态转换图6.4.6(b),则次态为
,将其填入卡诺图中对应的小方格里。如此对应的填入状态循环中的所有状态,由于偏离状态在卡诺图中没有出现,所以在这些小方格中填入任意项。可以作出该状态转换图的卡诺图表示为图6.4.7(a)所示,斜线下方是输出端Y的值。

将图6.4.7(a)的卡诺图分解得到图(b)、(c)、(d)和(e)。为了得到最简表达式,将卡诺图中某些无关项视为1或0,化简卡诺图得到状态转移方程
(6.4.1)
输出方程
(6.4.2)
采用JK触发器实现逻辑设计时,在卡诺图画圈时必须注意保留触发器的
或者
项,便于写出驱动方程。在化简得到
的结果时,如果利用了无关项,将会消去
项,虽然可以通过在
表达式中乘以(
)项,但是这样得到的结果会更复杂,所以在式(6.4.1)的化简结果中保存了
或者
项,便于得出驱动方程。
采用JK触发器实现电路,则根据JK触发器的特性方程
与式(6.4.1)进行比较得出驱动方程为
(6.4.3)
若用采用D触发器实现电路,可以不必保留化简结果中的
或者
项。其状态转移方程为
(6.4.4)
结合D触发器的特性方程
与式(6.4.4)进行比较得出驱动方程为
(6.4.5)
步骤6.在画出逻辑电路前,还必须检查该设计能否自启动。将偏离状态代入式(6.4.1)和式(6.4.4),画出其完整状态转换图,如图6.4.8所示。图6.4.8(a)中画出了用JK触发器设计时的完整状态转换图。图6.4.8(b)为用D触发器设计时的完整状态转换图。

从图6.4.8可以看出,虽然两个状态转换图中偏离状态的转移情况有部分不同,但是它们的正常计数循环都是相同的,所以无论用JK触发器还是用D触发器来设计此时序逻辑电路,电路都可以自启动。
步骤7. 根据式(6.4.3)和式(6.4.5)的驱动方程来画出电路。如图6.4.9所示,图中的(a)图为用JK触发器设计的五进制计数器,图中的(b)图为用D触发器和与-非门设计的五进制计数器。
从图6.4.9来看,选用不同的触发器,电路的复杂程度是不同,电路的设计还与状态编码有关,读者可以采用循环码的编码方式来设计该逻辑电路,在此不再赘述。

在本例中,将卡诺图中的有些无关项作为了1处理,有些作为了0处理,这些无关项的处理与电路设计是有关系的,如果在卡诺图的化简中,用图6.4.10的方式处理无关项,结果得到的设计电路将不能自启动。
从图6.4.10可知,偏离状态111的下一个状态为110,110的下一个状态为111,如此循环,它们不能进入到有效循环中去。时序逻辑电路的设计中,在处理卡诺图中的无关项时必须注意这一点。

例6.4.2 设计一个模可变计数器,当控制信号M= 1时为六进制计数器,当控制信号M= 0时为四进制,进位输出端Y,用JK触发器实现该设计电路。
解:本例的设计要求是一个进制数可变的计数器,M为工作模式的控制端,也就是输入量。由于输入量M的逻辑含义在题中已经确定,所以只需确定输出量Y的逻辑含义,用1来表示有进位,0表示没有进位。
据题意,在M= 0时,工作在四进制循环状态,设状态循环为S0、S1、S2和S3,在M= 1时,工作在六进制循环状态,设状态循环为S0、S1、S2、S3、S4和S5,建立原始状态转图如图6.4.11(a)所示。由于不存在等价状态,所以不能进行状态简化。本设计中用到了6个状态,所以用3个触发器来实现状态的记忆。对原始状态转换图进行状态编码得到6.4.11(b)中的状态转换图。

状态图中反应了在输入条件下,状态间的转换关系。进一步用卡诺图来表示状态间的转化情况,图6.4.12所示为例6.4.2的卡诺图。卡诺图中将没有出现的状态编码作为了无关项处理。

从图6.4.12可以看出触发器次态
与初态
、输入量M之间的关系,化简卡诺图得到3个触发器的状态转移方程为
(6.4.6)
输出端方程为
(6.4.7)
设计是否合理还需将偏离状态代入式(6.4.6)中,检查偏离状态能否进入到计数循环中去,若可以进入正常的计数循环中,则可以自启动。也可以结合图6.4.12的卡诺图中的无关项的处理来检查自启动,卡诺图中被圈的无关项作为了“1”处理,没有被圈的无关项作为了“0”处理,于是可以得到完整状态转换图如图6.4.13所示。

从图6.4.13可知,偏离状态可以进入到有效计数循环中,可以自启动。根据据状态转移方程(6.4.6)式来设计电路是可行的,从而得出驱动方程为
(6.4.8)
据驱动方程不难画出逻辑电路,如图6.4.14所示。

例6.4.3 设计一个串行数据转换电路,已知串行数据输入端X所加的是两位8421BCD码,输出端为Y为两位串行循环码,用JK触发器实现此逻辑电路。
解:用组合逻辑电路的方法也可以实现代码转换,不过其实现的是并行码的转换,由于本题的输入和输出端只有一个,每输入一位数据都必须记忆,所以只能用时序逻辑电路的设计方法。
输入端X的两位串行8421BCD码数据分别为:00、01、10、11,输出端Y的两位串行循环码数据分别为:00、01、11、10,设计任务就是要将输入的8421BCD转换为循环码。即:
|
输入 |
00 |
01 |
10 |
11 |
|
|
↓ |
↓ |
↓ |
↓ |
|
输出 |
00 |
01 |
11 |
10 |
输入数据时,假设先输入高位数,然后输入低位数。设电路的初始状态为S0,输入数据X,加入时钟信号边沿,触发器状态发生翻转。第一次输入的数据(输入高位)只有两种可能性,分别时0和1,用状态S1和S2来分别记录这种新的状态,此时的输出Y分别为0和1。在第2次输入数据(输入低位)时分别又有两种可能,分别是0和1,对应得到的新的状态有4种,分别记作S3、S4、S5和S6,输出端Y的值分别为0、1、1和0,根据分析可以作出原始状态转换图为图6.4.15所示。

图6.4.15表示出了原始状态之间的转换关系。S1状态说明已经输入了一位高位数为0,输出则为0,S3状态说明输入数据的低位为0,输出则为0;处于S3状态时,如果再输入下一位数据为X= 0,则从S3状态转移到S1状态,说明输入数据的高位为0,输出为0,如果输入的数据为X= 1,则从S3状态转移到S2状态,说明输入数据的高位为1,输出为1。
当电路处于S1状态时,说明已经输入了一位高位数为0,输出为0,从状态S1转移到S4状态,说明又输入了一位低位数为1,输出则为1;处于S4状态时,如果再输入下一位数据为X= 0,则从S4状态转移到S1状态,说明输入数据的高位为0,输出为0,如果输入的数据为X= 1,则从S4状态转移到S2状态,说明输入数据的高位为1,输出为1。
同样的可以得出状态S5和S6的转换关系。根据原始状态图可以画出原始状态转换表。如表6.4.1所示。
|
表6.4.1 例6.4.3原始状态转换表 |
||||
|
初态 |
次 态 |
输出Y |
||
|
输入X=0 |
输入X=1 |
X=0 |
X=1 |
|
|
S0 S1 S2 S3 S4 S5 S6 |
S1 S3 S5 S1 S1 S1 S1 |
S2 S4 S6 S2 S2 S2 S2 |
0 0 1 0 0 0 0 |
1 1 0 1 1 1 1 |
将原始状态图化简,合并等价的逻辑状态,寻找状态间的等价应该遵循时序电路设计方法中的第3点,为了可以方便地找出等价状态,可以采用隐含表的方法,
隐含表就是把原始状态表中的各个状态用图形的方法表示出来,便于查找等价状态的一种方法。隐含表为一个等边直角三角形网格,横向从左到依次右标记为第一个状态至倒数第二个状态,如图6.4.16(a)中的横向标记为S0、S1…S5,纵向从上到下依次标记为第二个状态至最后一个状态,如图6.4.16(a)中的纵向标记为S1、S2…S6。

这样在可以在网格中记录原始状态中的两两对应关系,将它们间的等价关系填入网格中。如果两个状态满足等价关系,则在网格中记作“√”;如果两个状态间不满足等价关系,则在网格中记作“×”;如果两个状态是否等价取决于其他状态是否等价,则在网格中填入其他的状态。结合原始状态表,可以先将S0状态与其他6个状态进行比较,得到的等价关系记入图6.4.16(b)中,在图6.4.16(b)的S0对应的一列中,S0和S1的等价性取决于S1和S3、S2和S4是否等价,所以在其网格中填入的是状态S1.S3、S2.S4。依次将原始状态表中的状态进行比较,得到图6.4.16(b)的隐含表。
从图6.4.16(b)可以进一步判断等价状态,因为S2的输出结果与其他状态都不相同,所以状态S2与其他任一状态都不等价,比较其他的状态可以得到图6.4.16(c)
的全部状态等价关系。从化简的结果可以得到等价关系[S0 S3 S4 S5 S6]、[S1]、[S2]。
可见经过状态合并后的状态只有三个,可以用S0来代替状态S3、S4 、S5 、S6,化简后状态转换表,如表6.4.2所示。化简后的状态转换图如图6.4.17(a)所示。

|
表6.4.2 例6.4.3状态合并之后的转换表 |
||||
|
初 态 |
次 态 |
输 出 Y |
||
|
输入X=0 |
输入X=1 |
输入X=0 |
输入X=1 |
|
|
S0 S1 S2 |
S1 S0 S0 |
S2 S0 S0 |
0 0 1 |
1 1 0 |
将状态S0、S1、S2进行编码,因为用到的只有3个状态,所以用两位二进制数表示即可。用00来表示状态S0,用01来表示状态S1,用11来表示状态S2。
图6.4.17(b)为编码后的状态转换图。
根据编码后的状态转换图可以作出卡诺图如图6.4.18所示。

应用无关项化简卡诺图可得到触发器得状态转移方程
(6.4.8)
输出端方程为
(6.4.9)
在上面的化简中用到了无关项,式(6.4.8)是否合理,还需进行自启动检查,将没有用到得状态
,代入式(6.4.8)中可以作出完全状态转换图如图6.4.19所示。

从图6.4.19的完整状态转换图中可以看出,一旦电路处于偏离状态时,只要输入X,一个时钟脉冲之后便可进入有效循环,则系统可以从偏离状态中转化到正常的状态循环中去。系统便可以自启动。所以可以根据式6.4.8式来求驱动方程。
由于要用JK触发器来实现该逻辑设计,在得到驱动方程前,应该将6.4.8式写成JK触发器得特征方程得形式。即将(6.4.8)式变化为
(6.4.10)
所以可以得到JK触发器得驱动方程为
(6.4.11)
根据(6.4.9)式的输出方程和(6.4.11)式的驱动方程,可以画出逻辑电路图6.4.20所示。

根据设计的逻辑电路,设电路的处于初始状态时,触发器输出都为0,现将输入端连续输入数据00 10 11 01 01 00 11(先输入高位),可以用表6.4.3来表示输出端对应得到的变换代码。
|
表6.4.3 输入端和输出端的编码转换关系 |
||||||||||||||
|
时钟 CP |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
|
输入 X |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
|
状态 |
01 |
00 |
11 |
00 |
11 |
00 |
01 |
00 |
01 |
00 |
01 |
00 |
11 |
00 |
|
输出 Y |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
