例 试设计一个序列脉冲检测器,当连续输入信号110时,该电路输出为1,否则输出为0。
解:由设计要求可知,要设计的电路有一个输入信号x 和一个输出信号z,电路功能是对输入信号进行检测。
1.由给定的逻辑功能确定电路应包含的状态,并画出原始状态图。
因为该电路在连续收到信号110时,输出为1,其他情况下输出为0,因此要求该电路能记忆收到的输入为0,收到1个1,连续收到两个1,连续收到110后的状态,由此可见该电路应有4个状态,用s0表示输入为0时的电路状态(或称初始状态),s1、s2、s3分别表示收到一个1,连续收到两个1和连续收到110时的状态。先假设电路处于状态s0,在此状态下,电路可能输入有x=0和x=1两种情况。若x=0,则输出z=0,且电路应保持在状态s0不变;若x=1,则z=0,但电路应转向状态s1,表示电路收到一个1。现在以s1为现态,若这时输入x=0,则输出z=0,且电路应回到s0,重新开始检测;若x=1,则输出z=0,且电路应进入s2,表示已连续收到两个1。又以s2为现态,若输入x=0,则输出z=1,电路应进入s3状态,表示已连续收到110;若x=1,则z=0,且电路应保持在状态s2不变。再以s3为现态,若输入x=0,则输出z=0,电路应回到状态s0,重新开始检测;若x=1,则z=0,电路应转向状态s1,表示又重新收到了一个1。根据上述分析,可以画出该例题的原始状态图,如图1所示。
2.状态化简。
观察图1便知,s0和s3是等价状态,因为当输入x=0时,输出z都为0,而且次态均转向s0;当x=1时,输出z都为0,而且次态均转向s1,所以s0和s3可以合并。去掉s3的圆圈及由此圆圈出发的连线,将指向s3的连线指向s0,得到简化后的状态图,如图2所示。
3.状态编码及画编码形式的状态图和状态表。
图1 例1的原始状态图
图2 例1的简化状态图
图3 例1的编码形式的状态图
由图2可知,该电路有3个状态,可以用2位二进制代码组合(00,01,10,11)中的任意三个代码表示,这里取00,01,11分别表示s0,s1,s2,即令s0=00,s1=01,s2=11。图3是该例的编码形式的状态图。
由编码形式的状态图可画出编码后的状态表如表1所示。
表1 例1的编码状态表
4.选择触发器。
根据式 2n-1<m≤2n可知,本例需用两个触发器,可选用前面介绍的集成jk 触发器hc76。
5.确定各触发器的驱动方程及电路的输出方程。
根据编码状态表1及jk 触发器的驱动表,画出各触发器驱动信号及电路输出信号的真值表,如表2 所示,由此表画出各触发器jk 端和电路输出端z的卡诺图。如图4所示,利用卡诺图化简得各触发器的驱动方程及电路的输出方程。
图4 驱动信号及输出信号的卡诺图
j0=x k0=x ;j1=xq0 k1=x ;z=xq1
表2 驱动信号及输出信号的真值表
输入
现态
次态
输出
驱动信号
x
q1n
q0n
q1n+1
q0n+1
z
j1
k1
j0
k0
0
0
0
0
0
0
0
×
0
×
0
0
1
0
0
0
0
×
×
1
0
1
1
0
0
1
×
1
×
1
1
0
0
0
1
0
0
×
1
×
1
0
1
1
1
0
1
×
×
0
1
1
1
1
1
0
×
0
×
0
6.根据方程画出逻辑电路图。
图5 例1的逻辑电路图
7.检查该电路的自启动能力。
当电路进入无效状态10后,由各方程可知,若x=0,则次态为00,若x=1,则次态为11,电路能自动进入有效序列。但从输出来看,若电路在无效状态10,当x=0时,z=1,这是错误的。为了消除这个错误输出,需要对输出方程作适当修改,即将图4中输出信号z卡诺图内的无关项xq1q0不画在包围圈内,则输出方程变为z=xq1q0,根据此式对图5也作相应修改即可。
如果发现设计的电路没有自启动能力,则应对设计进行修改。其方法是:在驱动信号之卡诺图的包围圈中,对无效状态的处理作适当修改,即原来取1画入包围圈的,可试改为取0而不画入包围圈,或者相反。得到新的驱动方程和逻辑图,再检查自启动能力,直到能够自启动为止。