图像处理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

相关文章

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi