图像处理ASIC设计方法 笔记4 异步FIFO

news2025/7/19 19:14:35

在这里插入图片描述

P66 异步FIFO

这段对FIFO的描述很精彩:

理解了水位信号的含义(相当于通常所说的满/空标志,注意读时钟域的空信号,写时钟域的满信号,只能在它各自的时钟域直接使用,如果要在另一时钟域用,需要使用同步器

FIFO可以理解为一个传输数据的管道,写入一方顺序将数据压入管道的一端,读出一方从管道的另一端按照写入的顺序依次取出数据(所以叫先进先出)。

由于进行顺序读写,FIFO不需要地址线,所以减少端口引线的数量。

FIFO内部存储数据的核心模块是双端口存储器。两个端口各自访问存储器的地址,分别作为写指针和读指针。对FIFO的读/写操作在读/写时钟和读/写信号的控制下进行。

在读/写信号有效期间的每个时钟周期执行一次对存储器的读/写操作,同时将读/写地址加1,如果读/写地址已经指向存储器的最高地址空间,则再将其赋值为存储器的最低地址,如此循环往复

在读/写操作的过程中,不断对读地址和写地址进行比较,以其差值作为FIFO中数据量的指示,我们称之为水位信号。若读指针增加,追上写指针,则表明FIFO中已经没有数据可以读取,给出空信号;若写指针增加,追上读指针,则表明FIFO中已经没有空余的存储单元供写入数据,给出满信号

写入方比较关心是否还有空间可以写入,因此,满信号应生成在写入端。读出方比较关心是否还有数据可以读出,因此,空信号应生成在读出端。

为了实现上述功能,FIFO内部应包括读/写指针加1逻辑、读/写指针比较和水位信号生成逻辑。上述逻辑分属于读时钟域和写时钟域。

为了实现读/写指针比较,必须将写指针传递到读时钟域,以及将读指针传递到写时钟域,这样才能分别在写入端生成满信号,读出端生成空信号。跨时钟域传递指针必须通过级联的触发器构成的同步器实现。

格雷码:编码递增时,每次只有1bit发生变化。
由于FIFO中的读/写指针均为加1递增,采用格雷码进行跨时钟域传递时,仅发生翻转的1 bit可能导致亚稳态。

发生亚稳态的结果有两种情况:同步器锁存状态与翻转后状态相同、同步器锁存状态与翻转后状态相反。如果与翻转后状态相同,则说明同步器锁存正确;
如果与翻转后状态相反,则等于翻转前状态,即锁存值为前一个地址,这相当于指针传递滞后一个时钟周期,不会发生指针的跳变式逻辑错误。(所以无论哪种情况,都是加一级同步器,同步器的输出是正确的结果

通过同步器+格雷码编码方式,可以保证FIFO能够安全实现异步时钟域之间批量数据传输
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

顺丰科技2024届春季校园招聘常见问题解答及SHL测评题库

顺丰科技2024届春季校园招聘常见问题解答及SHL测评题库 Q:顺丰科技2024届校园招聘面向对象是? A:2024届应届毕业生,毕业时间段为2023年10月1日至2024年9月30日(不满足以上毕业时间的同学可以关注顺丰科技社会招聘或…

【无标题】vite配置代理--loadEnv

环境变量的定义是:会根据当前那代码环境产生值的变化的变量 在 Vite 项目中,使用环境变量提供了一种在不同环境下定制化应用行为的方式。通过读取环境变量,我们可以设置不同的配置信息。 开发中常见的场景有: 区分开发和生产环境 …

<网络安全>《54 概念讲解<第一课 IT和OT>》

1 基本概念 IT:Information Technology的缩写,指信息技术;主要指的是企业中的各个应用系统,包括ERP、MES、EAM、OA等,分布部署在不同的网络层级。除了应用系统,还有计算机,服务器等等&#xff…

Qt介绍以及qt_creater的安装和C++项目工程创建

最近天气严寒,同学们要注意保暖哦!学习的同时别忘了照顾好自己呀!o(* ̄▽ ̄*)ブ 目录 一、Qt 1、Qt概念 2、常见的GUI 二、安装qt_creater 方法一: 方法二: 三、Qt_creater 中C项目的创建 …

【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段

【BUG 记录】MyBatis-Plus 处理枚举字段和JSON字段 一、枚举字段(mysql环境已测、postgresql环境已测)1.1 场景1.2 定义枚举常量1.3 配置枚举处理器1.4 测试 二、JSON字段(mysql环境已测)2.1 导包2.2 使用对象接受2.3 测试 三、JS…

SpringBoot快速入门(黑马学习笔记)

需求 需求:基于SpringBoot的方式开发一个Web应用,浏览器发起请求/hello后,给浏览器返回字符串"Hello World~"。 开发步骤 第一步:创建SpringBoot工程项目 第二步:定义HelloController类,添加方…

【惠友小课堂】骨质疏松≠老年人“专利”,年轻人也不能忽视(文末附自我测试)

虽说现在大家对于骨质疏松并不陌生,许多中老年人甚至年轻人都开始认识到“维护骨骼要趁早”,但依旧有人对骨质疏松存在一些“误解”,今天就来一一解开。(PS:文末有骨质疏松自我测试哦~) 某在读大学生 “我这…

学成在线_课程计划查询_前端页面无法跳转

问题描述 在进行课程计划查询的接口开发时通过了http-client测试但点开课程修改界面后点击保存并进行下一步时无法跳转到修改课程计划查询的页面。 问题原因 课程信息修改的Controller层没有实现 QAQ(可能是老师在讲这一块的时候没有提这一点(我也记…

Netty权威指南——基础篇2(NIO编程)备份

1 概述 与Socket类和ServerSocket,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。这两种新增的通道都支持阻塞和非阻塞两种模式。阻塞模式使用简单,但性能和可靠性都不好,非阻塞模式则正好相反。一般来说&#xf…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题?比方说一个算法,它的 input 和 output 是什么?问题的条件是什么) 这篇文章提…

蚓链数字化生态系统, 高效的分钱体验!

​2024年2月24日,农历正月十五是个团圆的好日子,开利网络推出更强体验的“数据分析功能”---【订单分析】:给各位运营用户更加直接、直观的“分钱体验”! 该功能使得运营者掌握更加强有力的数字化工具!可以更高效的服务…

Qt网络编程——UDP

UDP UDP(User Datagram Protocol,用户数据报协议)是一个轻量级的、不提供可靠性保证的、面向数据报的无连接协议,用于可靠性不是非常重要的情况。例如,传感器数据传输:一些传感器数据,如温度、…

Spring6学习技术|事务

学习材料 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解) 事务 什么是事务?好像是数据库部分的词,我自己的理解是对数据库进行的操作序列,要么一起完成,要么都不完成…

./configure配置说明

./configure是用来检测你的安装平台的目标特征的。configure根据给定的参数和系统环境会生成Makefile。 在一次configure报错后记得删除生成的config.cache的相关文件再重新configure。(make distclean类似make clean,但同时会将configure生成的文件全部删除掉&…

thinkphp6定时任务

这里主要是教没有用过定时任务没有头绪的朋友, 定时任务可以处理一些定时备份数据库等一系列操作, 具体根据自己的业务逻辑进行更改 直接上代码 首先, 是先在 tp 中的 command 方法中声明, 如果没有就自己新建一个, 代码如下 然后就是写你的业务逻辑 执行定时任务 方法写好了…

代码随想录算法训练营day28

题目:78_子集(没看题解) 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums [1,2,3] 输出: [ [3], [1], [2], …

HarmonyOS—低代码开发Demo示例

接下来为大家展示一个低代码开发的JS工程的Demo示例,使用低代码开发如下华为手机介绍列表的HarmonyOS应用/服务示例。 1.删除模板页面中的控件后,选中组件栏中的List组件,将其拖至中央画布区域,松开鼠标,实现一个List组…

Mavenn编译报processing instruction can not have PITarget with reserveld xml name

在java项目中,平时我们会执行mvn clean package命令来编译我们的java项目,可是博主今天执行编译时突然报了 processing instruction can not have PITarget with reserveld xml name 这个错,网上也说法不一,但是绝大绝大部分是因…

C++:类与对象(2)

创作不易,感谢三连! 一、六大默认成员函数 C为了弥补C语言的不足,设置了6个默认成员函数 二、构造函数 2.1 概念 在我们学习数据结构的时候,我们总是要在使用一个对象前进行初始化,这似乎已经成为了一件无法改变的…

YOLOv9中的“ADown”结构!

ADown结构出炉啦,收藏起来写论文用! 论文链接: YOLOv9: Learning What You Want to Learn Using Programmable Gradient 代码链接:https://github.com/WongKinYiu/yolov9/tree/main 1.代码: 代码路径:yol…