组合逻辑中的竞争与险象问题(五)
0赞上篇博文:组合逻辑中的竞争与险象问题(四)说到了险象的分类,通过险象的分类,我们同时也明白了什么样的竞争会引起什么样的险象。
这篇博文来分析,险象对数字电路的影响以及如何消除险象?
险象对数字电路的影响
如果组合逻辑是同步电路中的组合成分,那么其输入是直接由寄存器驱动的,而其输出也是直接输送给寄存器的。因此,无论该组合逻辑是否会产生险象,我们都需要在时序分析中确保延迟最大的那条路径在下一次时钟有效沿到来之前就已经给出了稳定的值。所以,只需要通过时序分析,就可以有效遏制险象对后续电路的危害。
不过对于异步电路来说,险象的危害就凸显出来了。这种危害与比寄存器输出的不稳定态影响更加恶劣,因为即使每次只改变单个输入的值,也会造成输出不稳定的现象。(寄存器输出的不稳定态可以通过每次只改变单个输入来解决)。而如果该组合逻辑的输出是用于产生其他逻辑的时钟、异步复位信号等控制信号,则必然会导致后续的电路行为出现问题。因此对于异步电路来说,险象的危害相当之大。
消除险象的方法
险象是数字电路的一个隐患,因为对于任何FPGA设计来说,组合逻辑几乎必不可少。可以说,任何一个FPGA设计中几乎都充斥着各种各样的险象,但是我们依然可以做出稳定的FPGA设计,这说明对于险象,我们还是有着一些不错的应对策略的。
消除险象的思路有两种,一种是后向消除,一种是前向消除。
所谓后向消除,其大体思路就是保持组合逻辑原有的情况不变,根据险象的特征,对组合逻辑的输出做特定的处理,从而消除其中的险象。
所谓的前向消除,其大体思路就是从组合逻辑本身出发,通过适当的修改,让其不会发生险象。
对于险象来说,前向消除难度难度大于后向消除,后向消除几乎是万能的。前向消除所能解决的问题比较有限,并且解决思路比较复杂。
下面先谈谈后向消除:
时序采样法
后向消除中最具有代表性的方法就是时序采样法,在消除险象的各种方法中,时序采样法的使用最为广泛。可以说,只要你描述的是一个时序逻辑,你就已经有意或无意的使用了时序采样法来消除险象。
时序采样法几乎是万能的,因为对于任何一个组合逻辑来说,其输入与输出之间总存在一个最大延迟的路径。设这个最大的路径延迟为T,如果其输入在0时刻变化一次后就保持不变,那么T时刻后,其输出肯定会稳定到新输入应该对应的输出上,而在0到T时刻之间,该组合逻辑的输出可能会出现一系列不稳定现象。
因此,如果该组合逻辑是同步逻辑的一部分,那么我们只需要适当选择周期大于T的信号作为时钟就可以绕过0到T这段有问题的时刻,而采样到T时刻以后的稳定且正确的输出。并且由于每次组合逻辑的输入改变后都会在接下来至少T时刻以上的时间保持不变,因此也能保证输出具有足够的时间达到稳定。
由此可见,时序采样法的最大优点就是根本不关心组合逻辑的内容,因此适用面非常广。
至于前向消除法,暂时就不提了。不过是修改逻辑电路,例如逻辑冗余法是最具有代表性的方法。