之前对同步电路的描述(同步时序逻辑电路的描述)是有了电路图,然后由方程推导状态转化,分析出电路功能;
设计同步电路,先分析实现怎样的功能,用状态图怎么描述,然后根据状态图写方程,画电路图。
同步时序逻辑电路设计
步骤 :
(1)分析要求,作状态图;
(2)状态化简;
(3)选触发器及确定触发器的个数;(4)状态分配(状态编码);
(5)作状态转换真值表;
(6)求出状态方程、激励方程和输出方程;
(7)对存在无效状态的电路,检查能否自启动(8)画电路图。
还是举例来直观感受同步电路的设计
入门案例
作101串行序列检测器(这部分较为简单,用于初步熟悉流程)
(1)分析要求,作状态图;
先作出我们需要的情况,S0检测到1变为S1,S1检测到0变为S2,S2检测到1变为S1(此时的1即可作为101,也可以是101),同时输出1,也就是检测到了我们需要的序列。
然后将剩余的进行补充,由于输入只有两种情况0和1,所以每种状态有两条指向外的箭头。
(2)状态分配
由于有三种状态,需要两位来表示,那么就会多出一种状态没有用到,让他的次态、输出都为d
设S0=00 S1=01 S2=10 S3=11
(3)作状态转换真值表
由状态图作转换真值表
(4)求出状态方程、激励方程和输出方程
,
,
(5)画电路图
由于状态方程较为简单,所以采用D触发器
状态化简
目的:状态少,则使触发器最少;触发器少了,也就简化了激励方程
一、完全确定状态表的化简
等效状态判别:
1、对于两个状态,如果输入相同,输出相同,到达的次态也相同,那么这两个状态等效。
2、次态满足下列条件之一:(1)次态相同;(2)次态交错(循环);
(3)次态对等效(4)次态保持原状态不变
等效状态具有传递性:若状态S1和S2是等效的,状态S2和S3是等效的,则状态S1和S3也是等效的。任意等效状态的组合称为等效类。
状态化简就是从原始状态表中找出最大等效类的集合,然后用一个新符号表示最大等效类,从而得到最小化状态表,(S1,S2 ,S3)->A。
如果状态较少或者简单,我们可以直接观察,但是状态较多的时候,会有传递性导致直接看不出来,作隐含表,例如
隐含表就是将状态两两进行比较,
如果两状态的输出不同,那么一定不同;如果两状态输出和次态完全相同,打对钩;如果输出相同但次态不同,先将次态填入表中
然后由递推判断未确定状态的等效性:CF等效,那么AB等效(传递性);AE依赖BE,BE依赖AE,所以ABE等效(次态对等效);CD和DE不等效,所以DG不等效。最终
所以最大等效类的集合为:{(A,B,E)、(C,F)、(D)、(G)}
令(A,B,E)=a , (C,F)=b , (D)=c , (G)=d,得到化简表
二、不完全确定状态表的化简
有时我们只用到非2的幂次方个状态,注定有一些状态是未知d
相容状态:设S1和S2是不完全确定状态表中的两个状态,如果对于所有的有效输入序列,分别从S1和S2出发,所得到的输出响应序列和次态(除不确定的那些位外)是完全相同的,则S1和S2是相容的。
最大相容类:若一个相容类不是任何其它相容类的子集,则称该相容类为最大相容类
相容状态判别:
第一,它们的输出完全相同,或者其中的一个两个输出为任意值(d)。
第二,它们的次态满足下列条件之一:(1)次态相同;(2)次态交错;
(3)次态保持原状态不变;(4)次态对相容;(5)其中一个(或两个)为任意值。
相较于等效,相容无传递性。一个最大相容类里的元素一定是两两互相相容。
做隐含表,寻找相容状态对,输出不一致则一定不相容;输出和次态相同则相容;输出相同或者不确定,看次态;
依次推导,得
A只与BF相容,其他的互相相容,得到两个最大相容类:(B,C,D,E,F) (A,B,F)
如果用状态A代替(A,B,F),用状态C代替(B,C,D,E,F),则可得最小化状态表
因为现态A输入X=0得到B,而B既属于A又属于C,得到的次态为A,C,也就是不确定,所以次态为d;现态A输入X=1得到CD,而CD只属于C,所以得到的次态为C;对于C同理。
状态分配
状态分配遵循以下原则:
(1)在相同输入条件下具有相同次态的现状态应分配逻辑相邻编码。
(2)同一现状态在相邻输入条件下的不同次态应分配逻辑相邻编码。
以上保证触发器激励函数对应的卡诺图中有较多的“1”相邻,有利于激励函数的化简。
(3) 在所有输入条件下具有相同输出的现状态应分配逻辑相邻编码。使输出函数对应的卡诺图中有较多的“1”相邻,有利于输出函数的化简。
如何分配过程中产生矛盾,按照原则相应的顺序进行分配;
例:对下列状态表进行状态分配
原则1:A、B应分配相邻编码,B、C应分配相邻编码
原则2:A、C应分配相邻编码,A、D应分配相邻编码,B、C应分配相邻编码
原则3:B、C应分配相邻编码
所以对上述状态表的一种状态分配方案是:A=00,B=01,C=11,D=10
激励方程和输出方程
根据状态图写出真值表,求特征方程(注意题目要求的触发器),最后画电路图。以下还是通过例子直观感受:
用J-K触发器和适当的逻辑门实现下列状态表
由状态图先作出真值表
根据真值表画卡诺图,写出激励方程和输出方程
先写出Q2的(同理可得Q1)
得到,JK触发器特征方程
,
所以,
输出方程:
画出电路图
检查电路的自启动
对于存在无效状态的电路需要讨论其自启动情况
检查所有无效状态能否在有限个时钟脉冲作用下进入有效状态且输出正确,或检查电路中是否存在无效循环
同步电路设计实例
一、序列检测器
试用JK触发器设计一个串行“111”序列检测器
设三个状态:S0表示未收到第一个有效输入“1",即初始状态;S1表示收到第一个有效输入“1”;
S3表示收到第二个有效输入“1";
(1)画状态图
可以先将检测序列路径(S0检测1变S1,S1检测1变S2,S2检测1仍旧是S2)画出,因为在S2状态下意味着前面至少有2个“1”了,所以再输入1一定有111,同时确定了状态数,再补充其他的.
(2)状态化简
三种状态的互相转化根据图填入表中,已经是最简形式
(3)确定触发器个数
共3个状态,故由两个触发器即可完成,但是两个触发器表示4中状态,第四种状态用11表示,但是次态和输出为d
(4)状态分配及状态转换真值表
若分配S0=00、S1=01、S2=10、S3=11
(5)求激励函数和输出函数
由于是JK触发器,所以得到的激励方程要变成的形式,再匹配J和K。
(6)检测自启动
当X=0时,无效状态Q2Q1=11,下一时刻得Q2Q1=00,Y=0;当X=1时,Q2Q1=11,得Q2Q1=10,Y=0。都可以进入有效状态,因此能自启动。
但是如果根据卡诺图写出,那么X=1就会使得输出Y=1,产生错误输出。
(7)画电路图
根据方程画出电路图
二、代码检测器
代码检测器检测的对象是依次输入的指定代码。检测时应按各代码的规定进行分组
例:试用D触发器设计一个代码检测器,它接收串行的二进制代码,输入代码每三位为一组,当连续输入的三位代码为“011”时,电路输出“1”,否则输出为“0”。每次判别后电路都返回起始状态,准备接收下一组代码。
(1)画状态图
输入有两种情况,所以图类似于二叉树,在检测完3个输入后不论是否正确都要回到最初状态A,只有经过ABE状态输出才为1,其他为0
(2)状态化简
状态D、F、G是等效的(此题和输出相同),故可以消去F和G ,得以下化简后的状态图
(3)确定触发器个数
共5个状态,故由三个触发器即可完成。
(4)状态分配及状态转换真值表
状态 A、B、C、D、E按自然二进制数分配的代码为:000、001、010、 011、100
由于3个触发器只用了5种状态,还有三种状态的次态和输出是不确定的。
(5)求激励函数和输出函数
因为D触发器方程为Q=D,所以
,Q2,Q1同理
(类似于序列检测器,这样写可能输出有错误,一会校准)
(6)检测自启动
所有无效状态在不同输入情况下都能进入有效状态,电路中没有无效循环,因此本电路能自启动
但是无效状态有错误输出,可修改输出方程,这样就只有一种情况可以输出1了
(7)画电路图
电路图较为简单,只是构图要素较多,请自行画图。
总结
设计同步电路,先分析实现怎样的功能,用状态图怎么描述,根据状态化简原则简化,熟悉触发器的公式使得激励方程变换为相应的形式,有些不确定情况可能导致自启动错误,最后画电路图。