我想知道在超大规模集成电路的异步域使用FIFO的原因。
基本上,为了防止x在异步域(即CDC域)中的传播,我采用了两阶段F/F方法来解决问题。
我认为我可以将同样的理念用于多深度数据路径。但是人们仍然在CDC领域使用先进先出,为什么?
我想知道在Clock Cross Domain中使用FIFO的具体原因是什么。
FIFO读和写端口可以在不同的时钟上。对于具有异步时钟的系统,这解决了基本的跨域数据传输问题,只要FIFO读写指针不交叉。
即使时钟的频率相同,使用fifo或寄存器片(即浅层fifo)在单独的时间域隔离大的区域也可以以延迟为代价简化系统时间关闭。这在大型soc中尤其有用,因为在大型芯片上保持时钟相位对齐变得非常困难,即使使用了仔细的时钟树设计。
对于那些流量控制出现的FIFO边界情况(满、几乎满、空等),标志生成通过使用特殊技术解决时钟域跨越,如灰度编码,以确保在每个时钟域可靠的满/空计算。
然而,这种跨界标志同步增加了延迟,因此设计人员必须分配额外的FIFO空间以防止溢出。这可以通过使用一个几乎满的指示器,或通过添加小的FIFO称为打滑的缓冲捕获由主机在标志延迟时间内发出的额外数据。
基本上,为了防止x在异步域(即CDC域)中的传播,我采用了两阶段F/F方法来解决问题。我认为我可以将同样的理念用于多深度数据路径。但是人们仍然在CDC领域使用先进先出,为什么?
通常会有第三个FF,但我们暂时不去管它。
你所描述的多数据路径(即多位,就像8位数据字)的问题是,不同的路径可能会解决不同的亚稳态条件。因此,如果时钟交叉电路的输入字是01010101,那么从8位同步器出来的东西可能会有所不同。
先进先出的设计者,如果他们的工作做得好,已经为你解决了这类问题。
此外,FIFO为n字节/字提供了存储/缓冲区,而您所描述的仅为1块数据(字节、字等)工作。