设计节拍发生器,首要的问题,是确定应使用的触发器的位数,通常是依据如下关系计算出来的:这些触发器的输出能组合出的状态数,应等于、大于为指令系统全部指令所分配的执行状态的数目。如图3.8所示,为29条指令构成的指令系统设计了11个不同的执行状态,故节拍发生器至少要由4位触发器组成,例如从高位向低位分别命名为T3、T2、T1、T0。为指令系统的全部指令分配节拍状态的数目,与设计时序控制信号形成部件的复杂程度直接有关的,不能以减少这一数目为主要目标,当然也不能轻易增加这一数目,一个好的设计,是设计经验与技巧的结合。在我们的例子中,是以更容易表明每一类指令的执行流程(时序关系)、有利于简化时序控制信号形成部件的设计为主要目标来安排的。
其次,要合理地为这些节拍状态分配编码。节拍发生器是一个时序逻辑部件,完成对时序逻辑状态的表示、化简的有关知识,在各种教材中有详细讲解,请有兴趣者自行查阅,我们这里只从实用的角度,指出如下两个原则:
一是从一个状态变到另一个状态时,状态发生变化的触发器数目应尽量少,就是说,上述例子中,最好4个二进制位中只变一个,这有利于简化节拍发生器的逻辑线路,也有利于改善节拍发生器输出信号的译码波形,仅在无法实现时,才会有几个触发器同时翻转。
二是安排的状态编码,应有利于简化时序控制信号形成部件的设计,即有利于化简时序控制信号的逻辑表达式,这里不做更多说明,到下一小节有关内容处顺便指出。
我们已把例子中的状态编码结果写在图3.8每个状态(用一个方框表示)框的左上角。可以看到,大部分状态转换过程中,4位编码中都只有1位的状态发生变化。状态0000→0010→0110,状态0100→0000,状态0111→0011→0001,状态1111→1011→1001,状态0101→0100,都不受任何条件限制;而其它状态之间的转换,都要受一些条件的限制,主要是指令或指令类(组)的限制,以确保不同指令有自己所要求的执行步骤序列。
接下来则是写出每位触发器状态转换的逻辑表达式,即把每位触发器在状态图中全部的状态变化,用一个由与-或两记逻辑组成的表达式完整地表示出来。具体办法是:
· 用一个与项,表示该触发器从"0状态"进入"1"状态的一次状态变化,或保持"1"状态不变的一种局面。
当节拍发生器从一个状态(原状态,用节拍状态的4位编码表示)转换到另一个状态(下一状态,用状态的4位编码标识)时,若该触发器状态是由0变1、或为1仍保持为1,这一状态变化要以一个"与"项形式写进表达式中;当这一状态变化不受任何条件限制(一定发生)时,该与项仅由原状态的4位编码组成,当状态变化是在某些条件成立时才会出现,该与项应由原状态的4位编码再"与"上这些条件共同组成。
相反的情形,若触发器的状态维持为0或变化为0,即为0仍保持为0、或由1变0,该情形要就不要写入表达式中,因为这一功能已隐含在表示前一功能的表达式中。这一情形是前一情形的反向变化,若触发器不具备进入或保持"1"状态的条件,它必然进入到"0"状态或仍保持为"0"
状态。
· 把该触发器进入或保持"1"状态的全部情况用"或"关系组合在同一个逻辑表达式中。
在TEC-3教学计算机系统中,节拍发生器是用一片GAL20V8器件实现的。GAL20V8器件本身可以运行在组合逻辑方式,也可以运行于触发器逻辑方式,并且实现的正好是与?或两级逻辑关系。表3.1给出了对节拍发生器的设计结果。在表达式中,T0、T1、T2、T3是4位的节拍状态,B表示B、C两类指令,JRTU表示相对转移条件为真,REST是RESET按键给出的信号,INT表示中断请求信号。
表达式中的符号: "*" 代表"与"运算, "+" 代表"或"运算,
"/" 表示取反码, ":=" 表示相应输出是触发器逻辑
"=" 表示相应输出是组合逻辑
|