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

news2025/3/13 0:08:46

概述

        本文主体翻译自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.coloradmin.cn/o/1007156.html

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

相关文章

模态分析的概念。C++减振器设计。

一、说明 模态分析是工程和物理学中用于研究系统或结构动态特性的技术。它涉及分析系统的振动或振荡的自然模式以及相应的频率、阻尼系数和振型。 在模态分析中,所研究的系统通常表示为一组质量、刚度和阻尼元件(在下面的文章中忽略了阻尼)。…

ARTS 打卡 第一周,初试ARTS

前言 认识三掌柜的想必都知道,我持续创作技术博客已经有6年时间了,固定每个月发布不少于6篇博文。同时,自己作为一名热爱分享的开发者,像ARTS这样的活动自然少不了我。由于我是打算挤在一起分享,之前都是做了本地文档记…

大数据Flink(七十九):SQL 的容错(Checkpoint)

文章目录 SQL 的容错(Checkpoint) 一、Checkpoint介绍

华为云云耀云服务器L实例评测|云耀云服务器L实例部署SpaceHuggers网页小游戏

华为云云耀云服务器L实例评测|云云耀云服务器L实例部署SpaceHuggers网页小游戏 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、SpaceHuggers小游戏介绍2.1 SpaceHuggers简介2.2 SpaceHuggers游戏玩法 三、实践环境介绍3.1 本次…

在UOS/Deepin下安装 Python 3.11.5 图文详解

01 先把操作系统更新一下 在开始菜单中,找到“终端”,点击启动,并依次输入以下两条命令即可: sudo apt update sudo apt upgrade 特别说明:Uos/Deepin 系统,要先进入“开发者模式”才行。“ 设置 — 通用…

如何用Polygon ID来证明你不是机器人?

1. 引言 喜剧演员约翰穆拉尼在最近的一个单口相声特辑中说:“世界是由机器人管理的,我们一天中的大部分时间都在告诉他们,我们不是一个仅仅登录并查看自己东西的机器人。” 这种经历很常见,从乏味的(“找到所有的停车…

软件设计师--考点小总结

成绩展示 在这里插入图片描述 口诀篇 普密网–【图算法,普利姆算法,适合密网,所以与边无光;另外一个图算法就是有关了】 D-AES, 56-128–【DES,AES是对称加密的,而56就是对称加密的算法位数(三重DES,是112,恰好是56倍数),128则是非对称的位数】 排序 快一样,堆占1,…

入行IC| 数字IC设计和验证选哪个好?

很多初入IC行业的新人不知道选择验证还是设计,下面IC修真院就从技能,门槛等方面来为大家分析一下。 数字前端设计工程师是什么? 集成电路设计(Integrated Circuit,简称IC)一般分为数字IC设计、模拟IC设计…

macOS - 使用VLC

文章目录 关于 VLC安装查看帮助流媒体 MRL 语法:URL 语法:主程序 (core)音频视频截图:窗口属性: 子画面屏幕显示(OSD):字幕:覆盖:轨道设置:播放控制:默认设备:高级: 输入播放列表性能选项: 热键跳跃大小: 关于 VLC VLC media player VLC 是一款自由、开…

5个鲜有人知的爬虫技巧

几点鲜有人知的爬虫技巧 技巧一 换个角度,解锁新姿势 在爬取某些 web 网站的时候,被各种反爬弄得哭天喊地。 什么几把 css 字体加密,什么几把 js 的 MD5 等,各种乱七八糟的加密,什么各种飞的验证 这时候&#xff0…

【汇编】计算机系统组成

【汇编】计算机系统组成 文章目录 【汇编】计算机系统组成冯诺依曼结构1. 总线2. 程序存储3. 存储器3.1地址线与字节3.2 读写逻辑 冯诺依曼结构 冯诺伊曼结构(Von Neumann Architecture),又称存储程序计算机结构,是计算机体系结构…

VB:二分法查找

VB:二分法查找 二分查找算法 Private Sub Command1_Click()Dim i%, m%, n%Dim x(1 To 10) As SingleFor i 1 To 10x(i) Val(InputBox("请输入"))Next iCall bubbleSort(x)For i LBound(x) To UBound(x) LBound(x)和UBound(x)是用于获取数组x的下界和上…

[移动通讯]【Carrier Aggregation-4】【LTE-3】

前言: 这里面重点讲解一下跟CA 相关的 UL UECapabilityInformation 参考: LTE附着流程详解-UECapabilityInformation_Amao_come_on的博客-CSDN博客 支持载波聚合的终端(UE) 4G | ShareTechnote CSDN CSDN LTE category New_is lte category supported in th…

厂商征集 | 2023年中国RPA市场洞察研究报告正式启动

RPA中国基于在科技行业的资源积累,以及对各领域「技术领导者」、「技术应用者」、「产品服务商」的深度调研,2023年,我们重点推出MI报告 ( Market Insight )、CI Vendor报告(Comprehensive Influence Vendor)两个系列。…

vvic API接口接入说明:解锁新一代数据可视化的无限可能

随着大数据时代的来临,数据可视化已成为我们理解、分析和呈现复杂数据的重要手段。在这个领域中,vvic以其独特的优势,引领着数据可视化的发展潮流。其强大的API接口,更是为开发者提供了无限可能,让数据可视化变得更为简…

c语言练习题54:指针(大小端字节序)

指针&#xff08;大小端字节序&#xff09; 题目代码&#xff1a; #include <stdio.h> int main() {int a[4] { 1, 2, 3, 4 };int* ptr1 (int*)(&a 1);int* ptr2 (int*)((int)a 1);printf("%x,%x", ptr1[-1], *ptr2);return 0; } 思路&#xff1a;…

rpc协议与http协议简述

http协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用于在计算机之间传输超文本的应用层协议。它是Web应用中最常用的协议&#xff0c;用于在客户端和服务器之间传输数据。 HTTP超文本传输协议教程 http由定义可以看出是传…

PC网上订货系统的定义与组成|企业手机APP订单管理软件

PC网上订货系统的定义与组成|企业手机APP订单管理软件 企业网上订货系统主要用于公司和订货商建立订货关系&#xff0c;绑定订货商 属于是 经销商订货软件、供货商订货系统。 通过企业网上订货管理系统这把利器可以帮助企业打通线上&#xff0c; 线下业务&#xff0c;实现进销…

了解抖音小店认证:提升信誉度,增加曝光率,开启更多功能

抖音小店是抖音平台推出的一个电商功能&#xff0c;旨在帮助用户将抖音上的流量转化为销售&#xff0c;实现线上线下的互通。抖音小店认证是指商家通过一系列的审核流程&#xff0c;获得官方认证的资格&#xff0c;获得更多的曝光和特权&#xff0c;提升商家的信誉度和用户的购…

一百七十六、Kettle——Kettle配置HDFS输出控件能不能加GZIP等压缩方式?

一、目的 为了尽可能减少磁盘资源的消耗&#xff0c;因此需要对从Kafka到HDFS的写入数据进行数据压缩。由于使用的ETL工具是kettle&#xff0c;因此研究一下Kettle配置HDFS输出控件时能不能加GZIP等压缩方式? kettle9.2的HDFS输出控件压缩方式包括GZip、Hadoop-snappy、None…