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

    文章

    407

    浏览量

    45893
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    淘宝券后价异步数据

    淘宝 券后价异步数据 ,核心是 非阻塞、批量、延迟获取 商品券后价(原价 - 优惠券),适合大规模商品监控、比价、选品场景。淘宝官方无直接 “券后价异步接口”,需通过 官方 API 组合 + 异步
    的头像 发表于 03-25 15:39 146次阅读

    详解SRC4192和SRC4193:专业音频领域的异步采样率转换器

    详解SRC4192和SRC4193:专业音频领域的异步采样率转换器 在专业音频和广播应用的领域中,对音频信号处理的精度和灵活性要求极高。SRC4192和SRC4193这两款异步采样率转换器(ASRC
    的头像 发表于 02-03 16:00 737次阅读

    FIFO存储器的种类、IP配置及应用

    FIRST IN FIRST OUT (先入先出)。顾名思义,FIFO是一个数据具有先进先出的存储器。
    的头像 发表于 01-13 15:15 579次阅读
    <b class='flag-5'>FIFO</b>存储器的种类、IP配置及应用

    探索TL16C550D/DI:高性能异步通信元件的技术剖析

    探索TL16C550D/DI:高性能异步通信元件的技术剖析 在当今的电子通信领域,异步通信元件扮演着至关重要的角色。今天,我们将深入探讨德州仪器(TI)的TL16C550D和TL16C550DI这
    的头像 发表于 01-04 16:20 356次阅读

    详解TL16C550C:高性能异步通信芯片的卓越之选

    详解TL16C550C:高性能异步通信芯片的卓越之选 在电子工程师的日常工作中,选择合适的通信芯片对于实现稳定、高效的异步通信至关重要。今天,我们就来深入探讨一款功能强大的异步通信芯片
    的头像 发表于 01-04 16:20 548次阅读

    探索TL16C752D:具有64字节FIFO的双路UART的卓越性能与应用

    探索TL16C752D:具有64字节FIFO的双路UART的卓越性能与应用 在电子设计的广阔领域中,UART(通用异步收发器)作为实现串行通信的关键组件,一直扮演着重要角色。今天,我们将深入探讨TI
    的头像 发表于 12-19 11:50 1023次阅读

    求助,关于串口设备驱动fifo问题

    的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,buf的size设置为2048; 问题: 1、数据接收存在粘包
    发表于 09-12 08:18

    从底层解读labview的TDMS高级异步写入的工作原理

    在 LabVIEW 的 TDMS 高级异步写入中,“异步写入”指的是 写入操作的调用方式 ,而不是指允许多个线程同时直接操作同一个文件的物理内容。 理解这个概念需要区分几个层面: 异步调用 vs.
    发表于 08-14 17:05

    cy7c68013a slave fifo写数据出现异常的原因?怎么解决?

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

    cy7c68013a异步slave fifo模式,外部mcu无法读写fifo怎么解决?

    cy7c68013a 异步slave fifo 模式,外部mcu无法读写fifo 上位机发送bulk数据,flag标志是对的,SLCS也拉低了,是设置的低有效, 检测到了flag不为空的标志后
    发表于 06-03 10:49

    MAX3107SPI/I²C UART,具有128字FIFO技术手册

    MAX3107是一款高级通用异步收发器(UART),接收、发送通道具有128字长的先入/先出(FIFO)数据缓冲器,可通过I²C或高速SPI™接口控制。2倍速和4倍速模式支持最高24Mbps的数据
    的头像 发表于 05-22 11:24 1167次阅读
    MAX3107SPI/I²C UART,具有128字<b class='flag-5'>FIFO</b>技术手册

    MAX14830四通道串行UART,具有128字FIFO技术手册

    MAX14830是一款先进的四通道通用异步收发器(UART),每路UART带有128字先入/先出(FIFO)接收和发送缓存器,以及高速串行外设接口(SPI™)或I²C控制器接口。PLL和分数波特率发生器为波特率编程和参考时钟选择提供了极大灵活性。
    的头像 发表于 05-22 10:14 1201次阅读
    MAX14830四通道串行UART,具有128字<b class='flag-5'>FIFO</b>技术手册

    MAX3108 SPI/I²C UART,具有128字FIFO,WLP封装技术手册

    MAX3108为小尺寸通用异步收发器(UART),每路接收和发送FIFO具有128个字,通过串行I²C或SPI控制器接口控制。自动休眠和关断模式有助于降低待机功耗。500µA (最大)低电源电流
    的头像 发表于 05-22 10:00 1269次阅读
    MAX3108 SPI/I²C UART,具有128字<b class='flag-5'>FIFO</b>,WLP封装技术手册

    MAX3109双通道串行UART,带有128字FIFO技术手册

    MAX3109先进的双通道通用异步收发器(UART)具有128字收发先进/先出(FIFO)堆栈和高速SPI™或I²C控制器接口。2倍速和4倍速模式允许工作在最高24Mbps数据速率。锁相环(PLL)和分数波特率发生器允许灵活设置波特率、选择参考时钟。
    的头像 发表于 05-22 09:26 964次阅读
    MAX3109双通道串行UART,带有128字<b class='flag-5'>FIFO</b>技术手册

    智多晶FIFO_Generator IP介绍

    FIFO_Generator是智多晶设计的一款通用型FIFO IP。当前发布的FIFO_Generator IP是2.0版本,相比之前的1.1版本主要新增了非等比输入输出数据位宽支持和异步
    的头像 发表于 04-25 17:24 1999次阅读
    智多晶<b class='flag-5'>FIFO</b>_Generator IP介绍