若在同一时钟的正跳沿(或负跳沿)下对寄存器组既进行输入又进行输出,很有可能由于门的延迟使输入条件还未确定时,就输出了下一个状态,这种情况会导致逻辑的紊乱。而利用上一个时钟为下一个时钟创造触发条件的方式是安全可靠的。但这种工作方式需要有一个前提:确定下一个状态所使用的组合电路的延迟与时钟到各触发器的差值必须小于一个时钟周期的宽度。只有满足这一前提才可以避免逻辑紊乱。在实际电路的实现中,采取了许多有效的措施来确保这一条件的成立,其中主要有以下几点:
(1)全局时钟网络布线时尽量使各分支的时钟一致;
(2)采用平衡树结构,在每一级加入缓冲器,使到达每个触发器时钟端的时钟同步。(如图 1、2 所示)
通过这些措施基本可以保证时钟的同步,在后仿真时,若逻辑与预期设计的不一样,可降低时钟频率,就有可能消除由于时钟过快引起的触发器输入端由延迟和冒险竞争造成的不稳定从而使逻辑正确。
在组合逻辑电路中,多路信号的输入使各信号在同时变化时很容易产生竞争冒险,从而结果难以预料。下面就是一个简单的组合逻辑的例子:C = a & b;
a 和 b 变化不同步使 C 产生了一个脉冲。这个结果也许与当初设计时的想法并不一致,但如果我们能过一段时间,待 C 的值稳定后再来取用组合逻辑的运算结果,就可以避免竞争冒险。同步时序逻辑由于用上一个时钟的跳变沿时刻(置寄存器作为组合逻辑的输入)来为下一个时钟的跳变沿时刻的置数(置下一级寄存器作为该组合逻辑的输出)做准备,只要时钟周期足够长,就可以在下一个时钟的跳变沿时刻得到稳定的置数条件,从而在寄存器组中存入可靠的数据。
而这一点用异步电路是做不到的,因此在实际设计中应尽量避免使用异步时序逻辑。若用弥补的方法来避免竞争冒险,所耗费的人力物力是很巨大的。也无法使所设计的 Verilog HDL代码和已通过仿真测试的电路模块结构有知识产权的可能,因为工艺的细微改变就有可能使电路无法正常工作。显而易见使用异步时序逻辑会带来设计的隐患,无法设计出能严格按同一时间节拍操作控制数据流动方向开关的状态机。而这种能按时钟节拍精确控制数据流动开关的状态机就是同步有限状态机。它是算法计算过程中数据流动控制的核心。计算结构的合理配置和运算效率的提高与算法状态机的设计有着非常密切的关系。我们只有通过阅读有关计算机体系结构的资料和通过大量的设计实践才能熟练地掌握复杂算法系统的设计。