异步FIFO设计的仿真与综合技术(2)

概述

        本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文,添加了笔者的个人理解与注释,文中蓝色部分为笔者注或意译。前文链接:异步FIFO设计的仿真与综合技术(1)icon-default.png?t=N7T8https://blog.csdn.net/apple_53311083/article/details/132852687        我们书接上文

2.3 二进制FIFO指针注意事项(Binary FIFO pointer considerations)

        试图将一个二进制计数值从一个时钟域同步到另一个时钟域是有问题的,因为n位计数器的每一点都有可能同步改变(例如二进制数中的7->8是0111->1000,所有位都改变了)。解决这个问题的一种方法是在保持寄存器中保存周期性的二进制计数值,并将同步的ready信号传递到新的时钟域。当识别ready信号时,接收时钟域向发送时钟域发送同步确认信号。在从接收时钟域接收到确认信号之前,被采样的指针不能改变。使用这种技术,可以将一个具有多个变化位的计数值安全地转移到一个新的时钟域。在接收到确认信号后,发送时钟域被允许清除ready信号并重新采样二进制计数值。

        这里笔者把他理解成一种握手信号的形式:(1)发送端将数据驱动到数据总线,并发出ready信号告知接收端数据已经被驱动到了数据总线上(2)将ready信号同步到接收端的时钟域(3)接收器在接收到同步后的ready信号后,锁存数据总线上的数据(4)接收端给出ack信号,表示已经接收到了数据(5)发送端同步ack信号(6)发送端识别ack信号,一次传输结束。但是这样会导致一个问题就是给传输引入了大量的冗余时钟周期,效率大大降低了。

        使用这种技术,二进制计数器值定期采样,并不是所有的二进制计数器值都可以传递到一个新的时钟域。问题是,我们需要关注二进制计数器可能增加溢出或下溢出FIFO的情况吗?答案是否定的。

        当写指针赶上(被同步和采样过的)读指针时,FIFO满。被同步和采样过的读指针可能不会反映实际读指针的当前值,但写指针将不会尝试进行在同步读指针值之外的计数。不会发生溢出。

        当读指针赶上(被同步和采样过的)写指针时,FIFO空。被同步和采样过的写指针可能不会反映实际写指针的当前值,但读指针将不会尝试进行在同步写指针值之外的计数。不会发生下溢出。

        这里对上面说的不会发生溢出和下溢出做一下说明:

        在我们判断FIFO满的时候,使用的是真实的写指针和同步过的读指针,由于我们的读指针是同步过的,所以它可能不能正确反映此时刻FIFO的状态(可能在进行同步期间,FIFO又进行了读操作,读指针已经更新了,但是同步的读指针还没有更新),所以此时FIFO中的数据只可能少于等于同步后读指针的指示数据,如果此时同步后的读指针与真实的写指针进行判断得出FIFO已经满的结果,那么这个结果实际上是一个“假满”(如满(bushi)),实际上FIFO可能是满或者未满(但是是不可能溢出的),我们想象一下,其实这种情况是可以接受的,毕竟最多只是有可能造成资源上的浪费,但是不会造成错误,这是完全可以接受的。

        同样的方法,我们来分析一下判断FIFO空的时候,使用的是真实的读指针和同步过的写指针,由于我们的写指针是同步过的,所以它可能不能正确反映此时刻FIFO的状态(可能在进行同步期间,FIFO又进行了写操作,写指针已经更新了,但是同步的写指针还没有更新),所以此时的FIFO中的数据只可能大于等于同步后写指针指示的数据,如果此时同步后的写指针和真实的读指针进行判断得出FIFO已经空的结果,那么这个结果实际是一个“假空”,实际上FIFO可能是空的或者还没有空(但是不可能是下溢出),这种情况一样是我们可以接受的。

        虽然还没有到FIFO的具体设计部分,但是这里的原理对于FIFO的设计至关重要,这里就解释了为什么在异步FIFO的设计过程中,我们经常能看到一种说法是:读指针同步到写时钟域,写指针同步到读时钟域。

        使用FIFO计数器指针的一种常用方法是使用格雷码计数器。格雷码只允许每个时钟转换改变一个位,消除了与试图同步同一时钟边缘的多个变化信号相关的问题。

2.4 FIFO测试故障

        测试一个FIFO设计的微妙的设计问题几乎是不可能做到的。这个问题源于这样一个事实:即使实现错误,RTL模拟中的FIFO指针表现理想,但是如果在实际的使用中,它们可能导致灾难性的故障。也就是说就算是有错误,测试也很可能测试不出来,但是一旦使用中出错,问题就大了

        在RTL模拟中,如果设计中包含了二进制计数的FIFO指针,那么所有的FIFO指针位都将同时发生变化;没有机会观察到同步和比较问题。在门级模拟没有注释延迟,只有一个轻微的机会观察问题如果门过渡不同上升和下降边缘信号,即使这样,必须幸运,有正确的比特序列变化之前和之后上升的时钟边缘。对于更高的速度设计,上升和下降的边缘信号之间的延迟差异减小,检测问题的概率也减小。对于具有反向注释延迟的栅极级设计,发现实际的FIFO设计问题是最大的,但即使做这种类型的模拟,发现问题也很难做,而且随着信号传播延迟的减少,观察设计问题的几率会降低。

        显然,答案是要认识到存在潜在的FIFO设计问题,并从一开始就正确地进行设计。

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

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

相关文章

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合?ArrayList和LinkedList的区别?List和Set的区别?HashMap的数据结构?把你了解的所有都讲一讲?数据结构: put流程Hashmap的resize方法的执行过程?get流…

【算法与数据结构】530、LeetCode二叉搜索树的最小绝对差

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:二叉搜索树的性质是左子树的所有节点键值小于中间节点键值,右子树的所有节点键值大于中间节…

招聘寒冬中,Python 程序员如何突出重围?

在当前的就业市场中,许多人都在感叹“招聘寒冬”。 尤其是对于 Python 程序员来说,似乎面临着更大的挑战。 然而,我要说的是,挑战与机遇并存,只要我们能够找准自己的定位,提升自己的技能,Pyth…

运用谷歌浏览器的开发者工具,模拟搜索引擎蜘蛛抓取网页

第一步:按压键盘上的F12键打开开发这工具,并点击右上角三个小黑点 第二步:选择More tools 第三步:选择Network conditions 第四步:找到User agent一列,取消复选框的勾选 第五步:选择谷歌爬虫…

Spring框架中的Resource接口是什么,以及它在加载和访问资源时的关键作用

文章目录 什么是 Resource 接口?使用 Resource 加载资源使用 Resource 访问文件系统资源总结 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:Java框架 ✨文章内…

通过小程序实现微信扫码授权登录,网站接入微信扫码登录功能(永久免费)

需求 网站如果想要实现微信扫码登录其实有很多种方案,常见的方案就是微信开放平台和微信公众号服务号。前者是目前大部分网站并且是微信认可的一种方式,后者是开发者发现服务号具备扫码关注后即可获取用户基本信息的能力后而开发的一种方式。 而这两者…

PhotoShop 基础教程-000

文章目录 前言总目录 前言 主要讲解photoshop基础知识 所有课程来源B站: PS教程 总目录 第1节-PhotoShop基础课程-版本发展 第2节-PhotoShop基础课程-基础操作 第3节-PhotoShop基础课程-PS界面认识 第4节-PhotoShop基础课程-Ps格式 第5节-PhotoShop基础课程-颜色模…

【深入解析spring cloud gateway】08 Reactor 知识扫盲

一、响应式编程概述 1.1 背景知识 为了应对高并发服务器端开发场景,在2009 年,微软提出了一个更优雅地实现异步编程的方式——Reactive Programming,我们称之为响应式编程。随后,Netflix 和LightBend 公司提供了RxJava 和Akka S…

腾讯云centos7.6安装部署备忘

1.Mysql 1.1 安装mysql wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 1.1.1 安装后重启 service mysqld restart 1.1.2 初次安装mysql,root账…

【Python】【Fintech】用Python和蒙特卡洛法预测投资组合未来收益

【背景】 想利用蒙特卡洛方法和yahoo,stooq等财经网站上的数据快速预测特定portfolio的收益。 【分析】 整个程序的功能包括 读取json中的portfolio组合创建蒙特卡洛模拟预测收益的算法创建从财经网站获得特定投资组合数据,并根据2的算法获得该Index或Portfolio收益预测结…

ARTS打卡第四周之删除链表倒数第几个节点、gdb start命令、扩散模型、如何学习分享

Algorithm 题目:删除链表倒数第 n 个结点 分析:可以把通过两个结点进行标记,有一个节点需要遍历得快点,简称为快结点,有个结点遍历得慢,简称为慢结点。快结点先停在正数第 n 个结点处,然后快慢…

蓝桥杯打卡Day7

文章目录 阶乘的末尾0整除问题 一、阶乘的末尾0IO链接 本题思路:由于本题需要求阶乘的末尾0,由于我们知道2*510可以得到一个0,那么我们就可以找出2的数和5的数,但是由于是阶乘,所以5的数量肯定是小于2的数量&#xf…

车载Android应用开发与分析 - 初试 SystemUI Plugin

在前面的视频、文章中我们介绍完了整个车载Android应用开发所需要的基础知识: 【视频文稿】车载Android应用开发与分析 - 走进车载操作系统 - 掘金【视频文稿】车载Android应用开发与分析 - AOSP的下载与编译 - 掘金【视频文稿】车载Android应用开发与分析 - 开发系…

Elasticsearch:为具有许多 and/or 高频术语的 top-k 查询带来加速

作者:Adrien Grand Disjunctive queries(term_1 OR term_2 OR ... OR term_n)非常常用,因此在提高查询评估效率方面它们受到了广泛关注。 Apache Lucene 对于评估 disjunctive queries 有两个主要优化:一方面用于详尽评…

[Android jni] Bitmap与Mat对象的相互转换

1.JNI实现Bitmap到Mat的转换 void bitmap2mat(JNIEnv *env, jobject bitmap,Mat &mat){//锁定画布void *pixels;AndroidBitmap_lockPixels(env,bitmap,&pixels);//获取Bitmap的信息AndroidBitmapInfo bitmapInfo;AndroidBitmap_getInfo(env,bitmap,&bitmapInfo);//…

opencv(python)视频按帧切片/cv2.VideoCapture()用法

一、介绍 cv2.VideoCapture是OpenCV中一个用于捕捉视频的类。它可以访问计算机的摄像头,或从视频文件中读取图像。通过cv2.VideoCapture,用户可以轻松地捕捉、保存、编辑和传输视频流数据。 使用cv2.VideoCapture可以实现以下功能: 1. 打开…

计算机网络第四节 数据链路层

一,引入数据链路层的目的 1.目的意义 数据链路层是体系结构中的第二层; 从发送端来讲,物理层可以将数据链路层交付下来的数据,装换成光,电信号发送到传输介质上了 从接收端来讲,物理层能将传输介质的光&…

【Vue】一文让你进入Vue的大门

Vue简介 官网 ● 英文官网 ● 中文官网 介绍与描述 Vue历史 Vue 是一套用来动态构建用户界面的渐进式JS框架 构建用户界面:把数据通过某种办法变成用户界面 渐进式:Vue可以自底向上逐层的应用,简单应用只需要一个轻量小巧的核心库&#xff0c…

python 语法入门

文章目录 前言python 语法入门1. 语句分隔符2. 注释3. pep8规范4. 变量5. 扩展5.1. 运行此行代码的过程 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会…

Promise,async,await 面试题

目录 5,面试题1234567 推荐先看Promise 相关知识点 5,面试题 1 结果 1,5,2,3,4 const promise new Promise((resolve, reject) > {console.log(1);setTimeout(() > {console.log(2);resolve();c…