FIFO,没有想象的那么简单!
根据一般的原则,FIFO这件事情啊,如果能用IP先别自己手写。可以通过FPGA厂家的的IP生成工具生成相应的FIFO。
FIFO中的格雷码:
格雷码应用于异步FIFO的地址操作,格雷码的生成可以当做个入门练手的小模块,然后慢慢搭一个异步FIFO,把关于FPGA的时钟、复位、管教基本上都可以涉及到,绝对有帮助。
FIFO满防溢出的问题也被讨论的挺多了,加个可编程满作为保护时应有之意。
空信号就没必要搞什么即将空,一般注意读使能需要跟非空信号做个与运算,这是基本操作。
FIFO好好做,还是很值得深入研究的。
例如:
异步FIFO,如何做到适配不同时钟域。简单例子,10m工作时钟写数20m时钟读,与10m时钟写数100m时钟读数的区别是什么。
读写地址使用格雷码,格雷码编码解码,如果不用格雷码可能出现的问题,以及原因。
如果该异步FIFO是用来作为存储以包为单位的数据,是否可以添加一些逻辑,控制错包,或者是如何处理,将错包抛弃。
如果异步FIFO有数据位转换功能,32b的数据入16b数据出,该怎么处理。
异步FIFO一些要点:
格雷码的轴对称问题。
为何用格雷码而非二进制码做CDC。
异步FIFO的大致框图。
满空信号产生。尤其是满。
RDCLK和WRCLK差距较大时,是否会造成multi-bit的问题。
是否会造成跳过了full而full+1的状态漏过满。
异步fifo的时序约束也是非常麻烦的,不要认为整个格雷码跨时钟域就可搞定,而且是可靠的,那是理想情况,实际的情况每bit延时都是不一样的,会给时序造成很大困扰。
版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处
作者:杭州卿萃科技ALIFPGA
原文地址:杭州卿萃科技FPGA极客空间 微信公众号
扫描二维码关注杭州卿萃科技FPGA极客空间