异步FIFO的空和满是准确的吗

news/2024/10/7 16:00:10/文章来源:https://www.cnblogs.com/A1112day/p/18450182

关注公众号FPGA开源工坊获取更多FPGA相关内容
交流群:838607138

异步FIFO的空和满是准确的吗

在我们关于两级同步器电路那篇推文里面提到了异步FIFO中格雷码进行同步的时候是允许漏采的,那么这个漏采会出问题吗,这篇推文我们就来讨论一下这个问题。

首先来说明一下异步FIFO的空满信号是怎么产生的

满信号是将读指针同步到写时钟域后进行判断产生的
空信号是将写指针同步到读时钟域后进行判断产生的
既然是异步FIFO,那么读写时钟域肯定是不一样的,最常见的一种情况就是读写时钟一个快一个慢的这种情况。另外一种情况是虽然读写时钟频率一样,但是不是由同一个时钟产生的,这样两个时钟也是异步时钟域。

那么既然有一个时钟快,一个时钟慢。就会产生以下两种情况

  • 快时钟域去采样慢时钟域下的信号
  • 慢时钟域去采样快时钟域下的信号
    当快采慢的时候一般是不会出问题的,但是慢采快的时候就可能出现漏采的现象。

比如快时钟域下一个数字的变化为0,1,2,3,4,5,慢时钟域下去采样这个信号就可能只采到数字0,2,3,5等数字,也就是漏采的情况。

那么漏采会不会让异步FIFO的读写产生问题呢,下面仍然分两种情况来进行讨论。

读慢写快

进行满信号判断的时候是将慢时钟域下的读指针同步到比较快的写时钟域下,所以不会出现漏采的情况。但是由于同步是需要时间的,所以满信号可能会提前出现,不过这个不会对FIFO产生读写错误,因为满信号提前产生只会造成FIFO里面还有空间的时候,写不进去数的情况,也就是FIFO的利用率降低的情况。

进行空信号判断的时候需要将快时钟域下的写指针同步到比较满的读时钟域下,所以有可能出现漏采的情况。但是出现漏采会产生影响吗。比如FIFO的深度是10,那么写指针的循环范围就是0到9,假如说漏采了3,4,5这几个信号,读时钟域直接采到了6这个信号,这个时候还在往FIFO里面写数,写指针也在一直变化,这个时候只会让FIFO的空信号可能还是拉高的,但是FIFO还一直在进数,所以只会造成一种FIFO里面不是空的,但是空信号还拉高的情况,这种情况也不会对FIFO的读写逻辑造成任何的错误,只会造成FIFO在读的时候延迟了几个时钟周期。比如实际上第二个时钟周期就把数写进了FIFO,但是第五个时钟周期读端口才反应过来FIFO里面不是空的了。

读快写慢

进行空判断的时候需要将满时钟域下写指针同步到比较快的读时钟域下,所以不会出现漏采的情况。但是同步也是需要时间的,所以空信号可能会提前出现,也就是并不是真正的读空了,这个情况也不会造成FIFO的读写逻辑出现错误。

进行满判断的时候就需要将较快时钟域下的读指针同步到较慢时钟域下进行判断了,这个时候就可能出现漏采的情况。这个时候如果出现漏采,那么就会出现一种情况就是一个数据已经被读出去了,但是同步的时候没有被采样到,导致写时钟域下去判断满信号的时候认为这个时候FIFO满了,所以会出现假满的情况,但是这个也不会影响FIFO的读写正确性。

结论

也就是说FIFO的读写指针可能会产生漏采,但是这个漏采只可能导致FIFO的性能下降,而不会产生读写数据的错误。另外就是FIFO的空满信号可能会出现假空假满的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809474.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

咸阳液压节能柱塞泥浆泵

咸阳液压节能柱塞泥浆泵具有高效输送、稳定性好、调节性强、耐磨性好、自动化程度高等优点。高效输送能够在短时间内将大量的污水输送到处理设备,提高污水处理的效率。稳定性好通过柱塞的往复运动,提供较稳定的流量和压力,保证了压滤机的稳定运行。调节性强可以通过调节柱塞…

[UESTCPC 2024] 2 聚类算法

思路 不想打了代码 后面再打 总结 写都没写怎么搞

腾讯自研Git客户端,助力每个人都可以轻松使用Git

工具介绍 UGit是一款腾讯自研的Git客户端,为了让每个人都可以轻松使用Git,从而提高开发效率和团队协作的流畅性。支持工蜂MR/CR,工蜂议题管理,另外对于Git的原生特性有着深度支持。支持的系统 支持macOS 10.11+、Apple Silicon和Win64位系统。 核心功能介绍 便捷的大文件管…

php连接数据库的基本步骤是什么

使用 PHP 连接数据库的基本步骤如下: 1. 创建数据库配置文件创建配置文件:在项目的根目录或适当的位置创建一个配置文件,例如 config.php。编写配置信息:在 config.php 文件中编写数据库连接信息。 示例配置文件内容如下:<?php // 数据库配置文件// 数据库类型 define…

php连接数据库mysql配置

使用 PHP 连接 MySQL 数据库通常涉及以下几个步骤:创建配置文件、引入配置文件、创建数据库连接、执行 SQL 查询以及关闭连接。下面是一个详细的示例: 1. 创建数据库配置文件 (config.php)创建配置文件:在项目的根目录或适当的位置创建一个配置文件,例如 config.php。编写配…

宝塔数据库老是自动停止怎么解决

宝塔数据库经常自动停止可能是由于多种原因引起的。以下是一些常见的排查和解决方法: 1. 检查错误日志查看日志:登录宝塔面板。 进入“软件管理”,找到相应的数据库(如 MySQL)。 点击“设置” -> “错误日志”,查看具体的错误信息。2. 检查配置文件检查配置文件:找到…

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档公众号回复关键字:202410071 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个协议,还原一个简化后的网络连接场景。 在本问题中,计算机分为两大类:服务机(Server)和客户机(Client)。服务机负责…

网站403forbidden怎么解决

遇到“403 Forbidden”错误通常表示服务器拒绝了请求访问某个资源。解决这个问题可以从以下几个方面入手: 1. 检查权限设置服务器文件权限:确认服务器上的文件和目录权限是否正确。通常文件权限应为 644,目录权限应为 755。 使用命令 chmod 和 chown 调整权限:sudo chmod -…

宝塔数据库启动不了怎么办呢

如果宝塔面板中的数据库无法启动,可以按照以下步骤进行排查和解决: 1. 检查错误日志查看日志:登录宝塔面板。 进入“软件管理”,找到相应的数据库(如 MySQL)。 点击“设置” -> “错误日志”,查看具体的错误信息。2. 检查数据库配置检查配置文件:找到数据库的配置文…

公司网站出现乱码怎么解决

解决公司网站出现乱码的问题,通常可以按照以下步骤进行:检查文件编码设置确保所有网页文件(如HTML, CSS, JavaScript等)保存时使用的编码一致,推荐使用UTF-8编码。设置正确的HTTP头部信息在服务器端设置正确的Content-Type HTTP头部,确保它指定了正确的字符集,例如:Con…