不定态
、
多Bit数据传输过程中出现的不定态
在实际的仿真过程中,当寄存器的输出由X变到Y时,中间会有一小段的毛刺状态。下图便展示了当8位寄存器的输出由“0111_1111”变化到“1000_0000”时,过渡部分出现的不稳定状态。如果将不稳定态部分放大,可以看到这些看似毛刺的部分实际上也有着确定的取值。
我们将变化过程中出现的不定态的数值转化为二进制,例如0x7e、0x76对应的二进制表示分别为8’b0111_1110、8’b0111_0110. 这样,我们便可以写出数据自初始的8’b0111_1111开始的变化过程:
0111_1111 -> 0111_1110 -> 0111_0110
经过观察,我们发现:在这个过程中,每次只有1 bit 的数据发生了变化!
再观察变化过程中的数据按位展开的波形图,结果佐证了我们的发现。
那么,为什么会出现这种现象呢?
实际上,电路中的存储多Bit数据的寄存器也是由多个单bit寄存器组合起来构成的。例如,一个8位的数据就需要8个单bit寄存器的组合进行储存。一个单bit寄存器,实际上就是一个DFF,它在时钟的上升沿更新内部的数据并进行储存,直到下一个时钟上升沿的到来。在理想的电路中,时钟信号源到每个DFF的时钟端的时刻应该是相同的,这样就可以保证电路中的所有DFF可以在同一时刻更新数据。然而,实际电路中并非如此。
下图展示了一个实际电路中的时钟信号连接情况。可以看到,时钟源到每个DFF之间的连线距离并非是严格等长的。这就会产生一个问题:时钟信号到每个DFF的时钟端的时间有先有后,DFF中数据的变化也有先有后。由此,便产生了我们在上文中发现的现象:由于线延迟导致多bit寄存器中每个bit的数据并非严格同时刻发生变化,也就产生了不定态。
如何消除不定态
时钟树综合
上文已经提到,这种亚稳态的产生是由于时钟信号源到每个DFF的连线并非严格等长造成的。那么,我们就可以通过人工手段进行干预