FIFO(原理、框图、代码、深度计算)

您所在的位置:网站首页 异步fifo的工作原理 FIFO(原理、框图、代码、深度计算)

FIFO(原理、框图、代码、深度计算)

2024-07-10 07:01| 来源: 网络整理| 查看: 265

Fifo分为同步fifo和异步fifo。同步fifo是指读写时钟是同一个时钟,异步fifo是指读写时钟不是同一个时钟。不管事同步fifo还是异步fifo都能起到数据缓存的作用。Fifo有一个特征:地址是顺序+1的。 1、异步框图 在这里插入图片描述 图片来源于《FPGA深度解析》 2、原理: 异步fifo的设计思想:核心是状态信号的产生和跨时钟域的转换及同步 异步fifo如上图所示,主要包含写控制逻辑、写地址、状态产生、读控制逻辑产生、读地址、格雷码同步。其中状态产生分为空信号、将空信号、满信号、将满信号。格雷码同步分为写地址格雷码从写时钟域到读时钟域的同步、读地址格雷码从读时钟域到写时钟域的同步。 (1)格雷码同步 格雷码同步在异步fifo中的作用:用于状态产生。 格雷码实现多比特跨时钟域转换的原理:因为fifo中地址是逐次+1的,而格雷码相邻两位数据一次只有一位数据发生变化。因此,将写地址(读地址)变换成格雷码,虽然地址是多比特的,但是每次变化只有1bit发生变化。这就是将二进制的地址转换成格雷码的好处了。 如果是将写地址变成格雷码,转换完以后再进行垮时钟域到读时钟域去就能最大限度的降低垮时钟域带来的风险(亚稳态)。(敲黑板:先转换成格雷码再跨时钟域) 在这里插入图片描述 二进制到格雷码: 二进制右移一位后与原来的二进制按位异或=格雷码 格雷码转二进制: 格雷码的最高位作为二进制的最高位,然后将二进制的最高位和格雷码的次高位异或作为二进制的次高位,依次类推。 (2)空满状态的判断 要判断fifo的状态,就需要知道读写地址。通过判断读写地址的差值来判断状态。其中存在一直特殊情况:读写地址指针指向同一个地址,但是可能是满,也可能是空。 具体分析:因为fifo是回卷式的写和读,这也就是说如果fifo深度为1023,如果写地址在1023,写地址指针会重新回到0地址,如果此时读地址还在地址0,就会存在读写地址都在地址0。而空的时候,读写地址也存在都在0地址的问题。 在这里插入图片描述 这就带来了一个问题,当读地址和写地址都在0的时候,可能是空,也可能是满。怎么区分是满和空呢? 那就是将读写地址扩展一位,当读写地址的值相等时,为空;读写地址除最高位不同,其余相同为满。 3、关键部分代码 关键部分的代码也主要来源于《FPGA深度解析》,我最开始不能理解的就是gap计算部分,这部分我附图进行说明了。

//写地址使能 assign wen=wr_en&&(!full); //写地址二进制到格雷码的转换 always@(posedge wr_clk or negedge wr_reset) if(wr_reset) waddr_gray


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3