0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

异步fifo详解

h1654155355.6033 来源:未知 作者:朱常 2022-12-12 14:17 次阅读

异步fifo详解

一. 什么是异步FIFO

FIFO即First in First out的英文简称,是一种先进先出的数据缓存器,与普通存储器的区别在于没有外部读写的地址线,缺点是只能顺序的读取和写入数据(对于大型数据存储,在性能上必然缓慢),其数据地址是由内部读写指针自动加一完成的,不能像普通的存储器一样,由地址线决定读取或者写入某个特定地址的数据,按读写是否为相同时钟域分为同步和异步FIFO,这里主要介绍异步FIFO,主要用于跨时钟域传输数据。

FIFO是一种数据缓冲器,用来实现数据先入先出的读/写方式。FIFO有一个写端口和一个读端口,外部无需使用者控制地址,使用方便。FIFO与普通的Block RAM有一个很明显的区别就是使用Block RAM来做数据缓存处理,使用者必须自己控制读和写地址的管理,必须保证写的数据不把Block RAM中未被读出的内容覆盖掉从而造成数据错误,同时保证读的时候要读出未被写入的地址。而采用FIFO时,只需要关注FIFO控制器给出的空满状态信号即可知道当前有没有错误的操作了FIFO,使FIFO的数据写溢出或读空。

异步FIFO读写分别采用相互异步的不同时钟,使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据

FIFO的常见参数

FIFO的宽度:即FIFO一次读写操作的数据位;

FIFO的深度:指的是FIFO可以存储多少个N位的数据(如果宽度为N)。

满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。

空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。

读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。

写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。

二、设计原理

2.1结构框图

如上图所示的同步模块synchronize to write clk,其作用是把读时钟域的读指针rd_ptr采集到写时钟(wr_clk)域,然后和写指针wr_ptr进行比较从而产生或撤消写满标志位wr_full;类似地,同步模块synchronize to read clk的作用是把写时钟域的写指针wr_ptr采集到读时钟域,然后和读指针rd_ptr进行比较从而产生或撤消读空标志位rd_empty。

另外还有写指针wr_ptr和写满标志位wr_full产生模块,读指针rd_ptr和读空标志位rd_empty产生模块,以及双端口存储RAM模块。

2.2 二进制计数器存在的问题

异步FIFO读写指针需要在数学上的操作和比较才能产生准确的空满标志位,但由于读写指针属于不同的时钟域及读写时钟相位关系的不确定性,同步模块采集另一时钟域的指针时,此指针有可能正处在跳变的过程中,如下图所示,那么采集到的值很有可能是不期望的值,当然,不期望的错误结果也会随之发生。

上图中,rd_ptr2sync 3和4以及4和5之间的中间态是由于到各寄存器的时钟rd_clk存在偏差而引起的。二进制的递增操作,在大多数情况下都会有两位或者两以上的bit位在同一个递增操作内发生变化,但由于实际电路中会存在时钟偏差和不同的路径延时,二进制计数器在自增时会不可避免地产生错误的中间结果,如下图。

由于rd_clk上升沿到达三寄存器的时间各不相同,这就导致了rd_ptr2sync的值从3’b011跳变3’b100的过程中经历了3’b111和3’b101,直到最后一个时钟(rd_clk0)沿的到来后rd_ptr2sync才跳变到正确结果3’b100。中间结果的持续的时间虽然相对短暂,但是这些不正确的中间结果完全有可能被其它时钟域的同步模块采集到而产生错误的动作,见上图。

由此可见,要避免中间结果的产生,其中一个可行的方案就是使被同步模块采集的数据递变时,每次只有一个bit位发生改变格雷码计数器就是一个不错的选择。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • fifo
    +关注

    关注

    3

    文章

    389

    浏览量

    43831
收藏 人收藏

    评论

    相关推荐

    FIFO IP核的使用教程

    在数字设计中,利用FIFO进行数据处理是非常普遍的应用,例如,实现时钟域交叉、低延时存储器缓存、总线位宽调整等。下图给出了FIFO生成器支持的一种可能配置。
    的头像 发表于 01-03 09:36 1318次阅读
    <b class='flag-5'>FIFO</b> IP核的使用教程

    DAC3482内部的FIFO作用是什么?

    我现在正在使用DAC3482芯片,想请教一下其内部的FIFO作用是什么? FIFO读写指针分别由DATACLK和DACCLK(或其分频)来驱动,用于“缓冲”的作用,我有两种理解: 1.只能缓冲读写
    发表于 12-23 07:06

    FIFO Generator的Xilinx官方手册

    FIFO作为FPGA岗位求职过程中最常被问到的基础知识点,也是项目中最常被使用到的IP,其意义是非常重要的。本文基于对FIFO Generator的Xilinx官方手册的阅读与总结,汇总主要知识点
    的头像 发表于 11-12 10:46 674次阅读
    <b class='flag-5'>FIFO</b> Generator的Xilinx官方手册

    FIFO的深度应该怎么计算

    FIFO是FPGA/IC设计中经常使用到的模块,它经常被用在两个模块之间进行数据的缓存,以避免数据在传输过程中丢失。同时FIFO也经常被用在跨时钟域处理中。
    的头像 发表于 10-25 15:20 414次阅读
    <b class='flag-5'>FIFO</b>的深度应该怎么计算

    Efinity FIFO IP仿真问题 -v1

    Efinity目前不支持联合仿真,只能通过调用源文件仿真。 我们生成一个fifo IP命名为fifo_sim 在Deliverables中保留Testbench的选项。 在IP的生成目录下会有以下
    的头像 发表于 10-21 11:41 1112次阅读
    Efinity <b class='flag-5'>FIFO</b> IP仿真问题 -v1

    具有FIFO的双异步通信元件TL16C552A数据表

    电子发烧友网站提供《具有FIFO的双异步通信元件TL16C552A数据表.pdf》资料免费下载
    发表于 06-26 11:28 0次下载
    具有<b class='flag-5'>FIFO</b>的双<b class='flag-5'>异步</b>通信元件TL16C552A数据表

    异步永磁电机工作原理 永磁电机有异步的吗

    异步永磁电机是一种将永磁材料与异步电机技术相结合的新型电机,它具有效率高、结构简单、体积小、重量轻、维护方便等优点,在工业、农业、交通运输等领域得到了广泛应用。本文将详细介绍异步永磁电机的工作原理
    的头像 发表于 06-13 10:03 1146次阅读

    同步FIFO异步FIFO区别介绍

    ,并且间隔时间长,也就是突发写入。那么通过设置一定深度的FIFO,可以起到数据暂存的功能,且使得后续处理流程平滑。 时钟域的隔离:主要用异步FIFO。对于不同时钟域的数据传输,可以通过FIFO
    的头像 发表于 06-04 14:27 1794次阅读
    同步<b class='flag-5'>FIFO</b>和<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>区别介绍

    DMA产生FIFO error interrupt错误的原因?

    DMA用于接收采集AD转化数据,而且AD每间隔50us采集一次,DMA配置成单次模式,并收数长度50次,未启用FIFO模式,但是当外部中断非常频繁时,DMA不知怎么回事,产生了FIFO 错误,按道理
    发表于 05-15 06:34

    关于同步FIFO异步FIFO的基础知识总结

    FIFO是一种先进先出数据缓存器,它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。
    的头像 发表于 04-09 14:23 3422次阅读
    关于同步<b class='flag-5'>FIFO</b>和<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>的基础知识总结

    FIFO漫谈之异步FIFO空满信号的产生位置

    格雷码的事聊完了,后面顺理成章的就是读写通路模块的设计。不过在读写控制通路之前还要明确下另一个问题,就是空满信号的产生位置的事情。
    的头像 发表于 03-19 13:37 736次阅读
    <b class='flag-5'>FIFO</b>漫谈之<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>空满信号的产生位置

    cy7c68013a slave fifo写数据出现异常的原因有哪些?如何解决?

    我使用68013A和MCU采用Slave Fifo 异步方式进行通讯,EP2为AUTOOUT,EP6为AUTOIN,16位。现在有一个奇怪的现象出现,当通过mcu发送0x00 00 ff ff 00
    发表于 02-29 07:00

    如何清除SPI通信中的TX_FIFO和RX_FIFO

    你好, 如何清除 SPI通信中的 TX_FIFO 和 RX_FIFO?是否有任何 API 可以清除接收数据缓冲区。
    发表于 02-27 07:16

    同步级联和异步级联的区别 异步级联和同步级联分别要注意什么

    指与同步级联相对应的,异步级联是一种不同的级联方式。在异步级联中,级联模块之间不需要等待前一个模块完全执行完毕才能开始执行下一个模块。相反,每个模块都可以独立运行,并在完成之后通知下一个模块开始执行
    的头像 发表于 02-22 13:40 2059次阅读

    异步FIFO结构设计

    电子发烧友网站提供《异步FIFO结构设计.pdf》资料免费下载
    发表于 02-06 09:06 0次下载