5.38(b)中脉冲同步器的应用场景是为了同步一个比时钟周期短的窄脉冲,原理是展宽短脉冲到满足下一个时钟的setup&hold time之后,最终目的是同步出正确结果,但是异步FIFO并不关心同没同步出正确结果,只要不空读满写就行:比如现在是要写,需要同步读指针后和当前写指针对比是不是差一圈得出满信号,
举例子:
读指针从0110变为0111,0位的0跳变成1出现了一个上升沿,但是也就仅有一个上升沿而已,并不是一个短脉冲。作者的意思是想用5.38(b)同步出这个1的跳变,怕同步丢了,所以要先展宽后再巴拉巴拉,但是按几种情况分析:
情况A:此跳变满足当前读时钟的setup&hold time,直接打两拍不用解释。5.38(b)多余。
情况B:此跳变不满足当前读时钟的setup time,如果此后一段时间(本质上是指满足下一个读时钟的setup&hold time需求)没有变化,那么下一个读时钟直接采用打两拍就同步出正确结果了,5.38(b)多余;这种情况下无论当前读时钟同步出的是0110还是0111都可以,前者最差的情况可能会导致虚满,后者是正确读指针。
情况C:此跳变不满足当前读时钟的setup time,一直维持到下个读时钟前却又发生了一个跳变而且超级倒霉,这个新的跳变又不满足下个读时钟的setup time,对于下个读时钟重新回到情况B分析,至于当前读时钟同步出的的结果也与情况B分析一致。
情况D: