热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

异步FIFO(一)

​一、FIFO简单讲解FIFO是英文FirstInFirstOut的缩写,是一种先进先出的数据缓存器,可分为同步FIFO和异步FIFO,

​一、FIFO简单讲解

FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,可分为同步FIFO和异步FIFO,同步FIFO是指读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写操作,常常用于交互数据缓冲。异步FIFO是指读写时钟不一致,读写时钟是互相独立的,异步FIFO常用于跨时钟域交互

重要参数

  • FIFO的深度:通俗地说,就是异步FIFO可以存多少个数据的意思!

  • FIFO的宽度:上面说FIFO的深度是表示能存放多少数据的概念,那宽度便是每个数据有多少位,也就是我们通常所说的数据有多宽!

  • FIFO空:表示FIFO里面数据被读完了;

  • FIFO满:表示FIFO里面填满了数据;

  • FIFO写指针:总是指向下一个将要被写入的单元,复位时,指向第1个单元(编号为0);

  • FIFO读指针:总是指向当前要被读出的数据,复位时,指向第1个单元(编号为0);

  • FIFO读时钟:表示读取数据使用的时钟,一般设计时钟的上升沿为有效沿,有效沿读取数据;

  • FIFO写时钟:表示写入数据时使用的时钟,一般上升沿为有效沿,当然也可以设计下降沿为有效沿。

    (同步FIFO的读写时钟一致)

先从简单的同步FIFO讲起,以和异步FIFO的设计做比较。

同步FIFO的设计根据空满信号判断的方式主要分为两种:

一:利用计数器来判断空满。

二:将FIFO的地址位拓展一位,用最高位来判断空满

一:利用计数器来判断空满

空满检测逻辑:

为产生FIFO空满标志,引入FIFO Counter计数器,FIFO Counter寄数器用于指示FIFO内部存储数据个数;

  1)当只有写操作时,FIFO Counter加1;只有读操作时,FIFO Counter减1;其他情况下,FIFO Counter不变;

  2)当FIFO Counter=0时,说明FIFO为空,fifo_empty置位;

  3)当FIFO Counter=FIFO_DEPTH时,说明FIFO已满,fifo_full置位;

读写控制逻辑

 在clk上升沿时,读使能且FIFO非空(empty=0)时,进行一次读操作,rp加1(即顺序读出),将读指针rp对应地址处的数据读出至dout;

 在clk上升沿时,写使能且FIFO不满(full=0)时,进行一次写操作,wp加1(即顺序存储);将din写入写指针wp对应地址处;

设计代码如下:

二:将FIFO的地址位拓展一位,用最高位来判断空满。

空满检测逻辑:

空:扩展位相同,有效地址位也相同。

满:扩展位不同,有效地址为不同。

如何理解?

读写指针相等时,表明FIFO为空,这种情况发生在复位操作时,或者当读指针读出FIFO中最后一个字后,追赶上了写指针。

当读写指针再次相等时,表明FIFO为满,这种情况发生在,当写指针转了一圈,折回来(wrapped around)又追上了读指针

需要注意的是:在系统正确工作的前提下,读地址不可能超前于写地址。

为了区分到底是满状态还是空状态,需要:在地址指针中添加一个额外的位。

--如果两个指针的MSB不同,说明写指针比读指针多折回了一次;如r_addr=000,而w_addr = 100,FIFO为满

--如果两个指针的MSB相同,则说明两个指针折回的次数相等。其余位相等,说明FIFO为空;

给出图以供理解:假设FIFO深度为4,有效地址为2位。

设计代码如下:

文章同步发布在微信公众号:IC码农。分享日常所学和基础知识,分享历年大厂笔试题,EDA工具和培训视频,学习交流群,欢迎关注。




推荐阅读
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 知识图谱与图神经网络在金融科技中的应用探讨
    本文详细介绍了融慧金科AI Lab负责人张凯博士在2020爱分析·中国人工智能高峰论坛上的演讲,探讨了知识图谱与图神经网络模型如何在金融科技领域发挥重要作用。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 菜鸟物流用户增长部现正大规模招聘P6及以上级别的JAVA工程师,提供年后入职选项。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文介绍了GitHub上的一些Python开源项目,特别是IM(即时通讯)技术的应用。通过Sealtalk项目,探讨了如何利用开源SDK提升开发效率。 ... [详细]
  • 深入解析Dubbo:使用与源码分析
    本文详细介绍了Dubbo的使用方法和源码分析,涵盖其架构设计、核心特性和调用流程。 ... [详细]
  • 开发笔记:empireCMS 帝国cms功能总结 ... [详细]
  • 深入解析Linux中的slabtop命令
    本文将详细介绍如何在Linux系统中使用slabtop命令,帮助读者更好地理解和监控内核slab缓存的使用情况。通过本文的学习,您将掌握slabtop命令的基本用法及其高级功能。 ... [详细]
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
author-avatar
一个不需要幸福的男人丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有