状态编码

    状态编码的任务:根据化简后的状态数目确定二进制代码的位数,并选择一种合适的状态分配方案,将每个状态用一个二进制代码表示


   
一.状态编码的技术关键

  
在同步时序逻辑电路设计中,选择分配方案时 需考虑的主要问题是如何使电路结构最简单。而在电平异步时序逻辑电路设计中,确定分配方案时应考虑的主要问题是如何避免反馈回路之间的临界竞争,保证电路可靠地实现预定功能

    二.几种常用的方法

    为了消除临界竞争,在确定状态分配方案时常用以下几种方法。

    1.相邻状态,相邻分配
    由前面对电平异步时序逻辑电路中竞争现象的分析可知,仅当输入变化引起两个或两个以上状态变量发生变化时,电路中才会产生竞争。换而言之,如果能保证每次状态转移时,仅有一个状态变量变化,则不会产生竞争。据此,可通过“相邻状态,相邻分配”的方法消除竞争。

    所谓相邻状态,是指稳态下输入取值作相邻变化时,需要直接发生转换的状态。而所谓相邻分配是指分配给相 邻状态的代码为相邻代码(仅一位不同)。

    为了找出流程表中各状态的相邻关系,通常借助状态相邻图

   
画状态相邻图的方法:先将流程表中的每一个状态用一个圆圈表示,然后从流程表中每一个稳态出发,找出输入取值作相邻变化时的下一个稳态,并用有向线段将其连接起来,表示这两个状态为相邻状态。


     对表6.25所示流程表进行状态编码,求得二进制流程表
                                

表6.25 流程表
       

    根据“相邻状态,相邻分配”的法则,首先作出表6.24所示流程表的状态相邻图如图6.23所示。由相邻图可知,A和B、A和C、C和D为相邻状态,状态分配时应令其代码相邻。流程表中共有4个状态,需两位代码,设二次状态用y2、y1表示,可选择状态分配方案如图6.24所示。即用00表示A,01表示B,10表示C,11表示D。

       

图6.23 状态相邻图                         图6.24 状态分配方案


    将表6.25中的状态用相应二进制编码表示,即可得到表6.26所示二进制流程表。由该流程表可知,在任一稳态下输入信号发生允许变化时,均不会引起两个状态变量发生变化,因而从根本上消除了竞争现象。
表6.26 二进制流程表

     注意:并不是所有流程表都能直接用最少的二进制代码位数实现“相邻状态,相邻分配”。
    设状态数为n,二进制代码位数为m,n和m的关系为2m≥n>2m-1。由于一个m位代码最多只有m个相邻代码,因此,当相邻图上状态的最大相邻状态数L大于m时,则不可能用m位代码实现相邻分配。
   
通常解决的办法是增加二进制代码位数,实现相邻分配。由于代码位数对应着电路中的反馈回路数,因此 ,这将增加电路的复杂性。

    2.增加过渡状态,实现相邻分配
    对于某些流程表,尽管相邻图上状态的最大相邻状态数L不大于状态分配的最小代码位数m,但状态之间的相邻关系出现由奇数个状态构成的闭环,因而无法直接实现状态的相邻分配。一种常用的方法是通过增加过渡状态,实现相邻分配,得到一个无竞争的二进制流程表。

    对表6.27所示流程表进行状态编码,得到二进制流程表。

    根据表6.27可作出状态相邻图如图6.25所示

 表6.27 流程表


 
图6.25 状态相邻图

    尽管相邻图上每个状态只有两个相邻状态,但由于3个状态之间的相邻关系构成一个闭环,所以,用两位代码无法满足上述相邻关系。

    怎么办呢?增加过渡状态,改变相邻关系!

    如果在状态A和C之间增加过渡状态D,将A→C改为A→D→C,C→A改为C→D→A,那么,表6.27可被修改成如表6.28所示。修改后的流程表中增加了新的一行,但该行没有稳定状态,因为状态D仅在稳态A和C发生转换时完成过渡作用。
    增加过渡状态后的流程表与原流程表描述的逻辑功能相同。表6.28所示流程表的状态相邻图如图6.26所示。显然,用两位代码可以方便地满足图6.26所示的相邻关系。
 

表6.28 增加过渡状态后的流程表


 
图 6.26 增加过渡状态后的状态相邻图

    设二次状态用y2、y1表示,相应激励状态用Y2、Y1表示,令y2y1取值00表示A,01表示B,10表示D,11表示C,即可得到与表6.28对应的二进制流程表如表6.29所示,该流程表描述的电路中不存在竞争 。

表6.29 二进制流程表


    
    3.允许非临界竞争,避免临界竞争

    由于非临界竞争并不影响电路正常工作,所以,在进行状态分配时,只需避免临界竞争。对于有的流程表,虽然无法用最少位数的代码实现无竞争的状态分配,但可以通过将竞争限制在只有一个稳态的列,即允许非临界竞争,从而实现无临界竞争的状态分配。

    例 对表6.30所示流程表进行状态编码,得到二进制流程表。

表6.30 流程表


图6.27 状态相邻图

    根据表6.30所示流程表可作出状态相邻图如图6.27所示。显然,用两位二进制代码无法实现相邻状态相邻分配。如何解决呢?

    方法一:通过增加过渡状态和增加代码位数实现相邻分配,但这样处理的结果必然增加电路的复杂性。

    方法二:允许非临界竞争,避免临界竞争。在该流程表中,状态A和C之间的转换只发生在x2x1=00 和 x2x1=01 这两列,而这两列各只有一个稳定状态,这就意味着A和C发生转换时,即使产生竞争也属于非临界竞争。即在状态分配时A和C可以不相邻。排除A和C的相邻关系后,状态编码只需满足A和B、A和D、D和C、C和B相邻即可。

    设二次状态用y2、y1表示,令y2、y1取值00表示A,01表示B,10表示D,11表示C,将其代入表6.30,即可得到表6.31所示二进制流程表。该流程表描述的电路不会产生临界竞争 。

表6.31 二进制流程表 

↑返回顶部