本文提供了一种基于信元FIFO设计方法以供设计者在适当时候选用。这种方法也适合于不定长包处理。本文的提供FIFO设计方法能实现很多通用FIFO所无法完成工作,而且适用范围很广。 FIFO在数字通讯芯片领域中有两个主要作用,缓冲数据和隔离时钟。对于FIFO设计,最关键问题是如何实现RAM读写双方信息交换。设计者一般都直接调用厂商为自己FPGA专门打造FIFO核。基本单元是FIFO所使用RAM一次读写操作最小单元,如一个字节,一个字或者是一个双字。所谓操作粒度,即FIFO读写双方信息交换是基于这些基本单元。 在ATM相关设计中,设计者则更多希望一个FIFO对外给出信息是“现在FIFO中还剩下几个信元”。要实现这一功能通常有两种方法:调用厂商提供以操作粒度为基本单元通用FIFO,然后在这个FIFO外面再加上一个“套子”。这个套子里面设计一些计数器,根据计数内容对外提供相应信息。设计操作粒度为信元定制FIFO。这样对外直接提供设计者最希望得到信息,即FIFO中还有多少个信元。从逻辑上说,只需要读出方把自己记分牌信息传送给写入方,同时写入方把自己记分牌信息传送给读出方就可以了,即只要构成两条逻辑通道就可以满足需求。但是,在硬件上实现却要比这种只从逻辑上思考要复杂。由于读写双方有可能处在不同时钟域,所以当读写双方交换信息时候就需要处理信号采样亚稳态情况。 在读、写入方之间建立下面四条单向数据通道:传送写入方到读出方置位信息;写入方到读出方清位信息;读出方到写入方清位信息;读出方到写入方置位信息。四条通道可以被划分为两个信息组:一个组传递清位信息,叫清位信息组;一个组传递置位信息,叫置位信息组。读出方使用清位信息组,写入方使用置位信息组。为了解决Rd2WrRst进入写入方时引起信号亚稳态,需要在写入方设置一个专门消除亚稳态电路模块。根据Rd2WrRst和Rd2WrSet特点不一样,这个模块有多种设计方法,但是其宗旨都是使用连续两次采样方式。 外部电路能够非常自由地控制FIFO读写地址变化,这是通用FIFO所不具备功能。由于FIFO给出是信元信息,设计者在做有关UTOPIA协议电路时候,可以很方便地使用这个信息。同时,如果设计需要UTOPIA查错功能,这样情况更需要外部电路能控制FIFO地址变化。从而使得写地址指针回跳以覆盖原先写入数据。
|