在前面的文章中我们已经介绍了异步FIFO的设计原理 FPGA 设计之 跨时钟域 (五-异步FIFO)。我们知道为了防止FIFO overflow 或者 underflow,异步FIFO有空满信号。当满信号有效时会反压前级逻辑,不让其继续写数据到FIFO内,当空信号有效时,则通知后级逻辑,数据已经全部读出,不让其继续读取FIFO。如果我们的应用需求是数据必须不断流入然后流出FIFO呢?这意味着既不能反压前级也不能通知后级。
弹性Buffer便是应用在这种需求下的一种跨时钟域的设计方法。本文将从以下几点介绍弹性Buffer:
- 弹性Buffer的应用背景
- 弹性Buffer与普通异步FIFO的区别
- 弹性Buffer的具体设计
- 弹性Buffer有什么缺点
弹性Buffer的应用背景
在起初的PCI总线设计中,采用的是同步时序结构,即发送端和接收端使用同步时钟,发送端只需要发送数据,接收端正常采样即可。这种同步结构要求时钟到达发送端和接收端的时间精确相同,特别是对总线接口pin-to-pin的skew要求极高。随着总线频率的提升,对skew的要求也越来越高,使得时钟网络布线越来越困难。
因此,当前的很多高速接口设计,如PCIe,Ethernet都是采用了源同步(source-synchronous)时序结构