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

2024-02-27 04:44

本文主要是介绍图像处理ASIC设计方法 笔记4 异步FIFO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

P66 异步FIFO

这段对FIFO的描述很精彩:

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

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

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

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

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

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

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

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

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

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

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

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

这篇关于图像处理ASIC设计方法 笔记4 异步FIFO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751259

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用