Reset信号如何同步?

首先来复习一个更加基础的概念:同步reset和异步reset。

同步reset(synchronous reset)是说,当reset信号为active的时候,寄存器在下一个时钟沿到来后被复位,时钟沿到来之前寄存器还是保持其之前的值。

异步reset(asynchronous reset)是说,当reset信号为active的时候,寄存器立刻被复位,与时钟沿到来与否没有关系。

注意这里作者没有说reset信号为1的时候,而是说active,因为有的时候是为1能够使寄存器复位,这个时候我们说high active,而有的时候是0能够使得寄存器复位,这个时候我们说low active。

同步reset和异步reset的区别算是数字芯片设计的入门知识点,一般第一轮面试就会考察,如果这个问题回答的不好,那么大概率会被面试官认为一般,无论是初学还是工作几年的工程师,很有可能不注意这些基本功,但是基本功在数字芯片设计中的非常重要的。

首先同步reset和异步reset最主要的区别,从定义上就可以看出来,同步reset需要时钟,而异步reset不需要时钟,如果说你的模块需要在没有时钟的时候复位,那只有异步reset能够做到,这也是绝大多数芯片的上电复位信号(Power Reset)以及一些PHY比如USB的内部需要异步reset的原因,而在一些IP中,如果你可以等到时钟开始反转之后再复位,时钟开始翻转之前内部即使没有复位也没有关系的话,那么就可以用同步reset。

其次一个差别,即同步reset信号在综合后,reset信号和其他的datapath信号一样,时一起算在两个寄存器之间的logic深度里,D寄存器本身时没有复位的pin的,而异步reset信号通常会综合出一个带有 复位pin的D寄存器,一般来说工艺厂家的standard cell library都会提供两种不同的寄存器,只要你的coding style正确,综合工具会选择适当的flop。

上图是同步reset综合出来之后的netlist,可以看出reset_n使得两级寄存器之间的组合逻辑多加了一个AND门。

always_ff @(posedge clk) beginif (!reset_n) beginq2 <= 1'b0;endelse begin// q2 <= ...end
end

对于异步reset,综合出来的flop自带reset pin,所以reset不参与中间的组合逻辑,如下图D2所示。

always_ff @(posedge clk or negedge reset_n) beginif(!reset_n) beginq2 <= 1'b0;endelse begin//q2 <= ...end
end

同步reset劣势】从综合出来的逻辑可以看出,异步reset由于对寄存器之间的datapath没有贡献,所以在timing上面能够略微比同步reset好一些,特别是reset信号作为一个负载很大的信号,如果reset tree做得不好可能使得reset path的combo delay变得很大,反而限制了performance的提高,所以在对logic depth抠得很细的设计中,可以使用异步reset来避免引入更多的combo delay。

但是同步reset还有一个优势,由于reset信号会最终起作用在寄存器的D输入端,那么通过reset的组合逻辑都会被STA所约束,也就是说reset信号和其他datapath的信号一起要满足寄存器的setup time,hold time,min pulse等一系列check,在timing close的情况下我们可以拍着胸脯保证:寄存器不会因为reset的变化产生metastable(所以同步reset信号的跨时钟域咱们就不废话了)可是对于异步reset就没有那么简单了,既然是异步,那就是在任何时候都可能变化,现在STA所以叫static timing anslysis,是因为工具是静态分析电路的:给定一个时钟沿的起始点,然后后面每一级的delay都是纯粹的累加,晚到就是violation,可是如果一个信号什么时候来都无法确定,那么就无法判断这个信号的datapath上最后能否满足required time,换句话说,纯粹的异步reset在当前STA check中是没有办法检查的。

那么怎么办呢?难道对于异步reset信号就听之任之放任不管吗?当然不是,我们做IC设计的,当然要对每一个细节都要研究清楚,我们这里要分两种情况:1:reset assertion;2:reset release。好,直接上结论!

如果使用异步reset,reset assertion是异步的,但是reset release一定是和时钟同步的 

因为对于reset assertion,reset active之后flop的值是稳定在reset value的,只要reset急促active,来多少个clcok,其他datapath上的信号怎么变,flop的值都不会变化,所以reset在什么时候assertion都没有关系,但是reset release就不一样了,一旦reset从active de-assertion,在STA里有两个专门的参数来check,叫做recovery time和removal time。

recovery time和removal time的意义请异步:

什么是寄存器的recovery time和removal time?_recover time-CSDN博客

换句话说,reset release必须在recovery time和removal time加起来这个窗口之外就保持稳定,这样才能保证寄存器不会产生metastable。

好,下面的问题就变成了,我们如何设计可以使得异步reset信号是异步assertion,同步 release呢?终于要引出本文的主题了,将一个异步的reset信号同步到一个时钟域,并且还要保证assertion是异步的,但是release是同步于这个时钟的,我们把这样的电路叫做reset synchronizer,如下图所示。

可以看到,当src_reset_n asset时,两个flop被异步reset,他们的Q会经过reset-to-q的延时之后立刻发生变化,使得dst_reset_n assert。

而当src_reset_n release 后,dst_reset_n并不是立刻发生变化,而是要等dst_clk的时钟沿,并且打两拍之后才能将1传递到dst_reset_n,因为dst_reset_n是来自flop的Q,而Q是经过dst_clk上的同步信号,那么为什么要两级flop,还是为了减小产生metastable的概率。

这里还要注意一点就是上述只是对reset_n release做了到dst_clk的同步,如果dst_clk 的频率很高,recovery time和removal time不能meet怎么办呢?

那就需要对异步reset的time constrain进行特殊的设置了。

文章前面借鉴了:Reset信号 如何同步? 

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

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

相关文章

xxl-job的原理(2)—调度中心管理注册信息

一、调度中心管理注册信息 1.JobApiController 执行器调用调度中心的url来实现注册、下线、回调等操作&#xff1b;其主要的实现类是JobApiController&#xff0c;调用/api/registry接口注册执行器信息&#xff0c;调用/api/registryRemove接口下线执行器信息&#xff0c;调用…

操作系统和进程相关的认识

目录 冯诺依曼体系结构 冯诺依曼体系结构五大组成部分 为什么数据只能通过存储器进行输入和输出 操作系统 概念一&#xff1a;访问操作系统的请求都是通过系统调用完成的 操作系统如何管理用户信息 概念二&#xff1a;先描述&#xff0c;再组织。 进程的概念 在认识进行相关的知…

二叉树的经典OJ题

判断平衡二叉树 1.题目2.分析3.时间复杂度为O(N^2)的代码4.优化时间复杂度的代码 1.题目 2.分析 3.时间复杂度为O(N^2)的代码 4.优化时间复杂度的代码

总结三:计算机网络面经

文章目录 1、简述静态路由和动态路由&#xff1f;2、说说有哪些路由协议&#xff0c;都是如何更新的&#xff1f;3、简述域名解析过程&#xff0c;本机如何干预域名解析&#xff1f;4、简述 DNS 查询服务器的基本流程是什么&#xff1f;DNS 劫持是什么&#xff1f;5、简述网关的…

Python之字符串判断

Python之字符串判断 首尾判断 endswith(suffix[, start[, end]]) -> bool 在指定的区间[start, end)&#xff0c;字符串是否是suffix结尾 startswith(prefix[, start[, end]]) -> bool 在指定的区间[start, end)&#xff0c;字符串是否是prefix开头 a 1,2,3,a,b,c #…

re学习(38)HGAME2020-re-Level-Week1-maze

题目描述 You won’t figure out anything if you give in to fear. 学习资料: https://ctf-wiki.github.io/ctf-wiki/reverse/maze/maze-zh/ 附加说明&#xff1a;请走最短路线 题解 分析题目 一看题目&#xff1a;maze 可以确定是一个迷宫题 void __fastcall __noreturn…

【java爬虫】使用vue+element-plus编写一个简单的管理页面

前言 前面我们已经将某宝联盟的数据获取下来了&#xff0c;并且编写了一个接口将数据返回&#xff0c;现在我们需要使用vueelement-plus编写一个简单的管理页面进行数据展示&#xff0c;由于第一次使用vue编写前端项目&#xff0c;所以只是编写了一个非常简单的页面。 项目结…

关于PointHeadBox类的理解

forward函数 def forward(self, batch_dict):"""Args:batch_dict:batch_size:point_features: (N1 N2 N3 ..., C) or (B, N, C)point_features_before_fusion: (N1 N2 N3 ..., C)point_coords: (N1 N2 N3 ..., 4) [bs_idx, x, y, z]point_labels (opti…

【计算机组成 课程笔记】7.1 存储层次结构概况

课程链接&#xff1a; 计算机组成_北京大学_中国大学MOOC(慕课) 7 - 1 - 701-存储层次结构概况&#xff08;15-14--&#xff09;_哔哩哔哩_bilibili 这是我们已经非常熟悉的冯诺依曼计算机结构&#xff0c; 其中和存储功能相关的部件有&#xff1a;存储器和外部记录介质肯定具有…

Python---构造方法

构造方法: __init__ Python类可以使用:__init__()方法&#xff0c;称之为构造方法 可以实现: 在创建类对象(构造类)的时候&#xff0c;:会自动执行 将传入参数自动传递给__init__()方法使用 例子&#xff1a; class Student:# 可以不用写# name None# age None# tel None…

EM@等幂和差公式

文章目录 abstract等幂差等比数列性质推导二项式展开的思路 等幂和奇次方幂之和偶次方幂之和证明等幂差 ref abstract 讨论整数指数幂中等幂和差的展开 这里讨论的等幂指的是指数相等的两个幂 并且仅在整数指数幂范围内讨论,实指数幂范围内此处不讨论 两个n次方幂值差展开公…

80%测试员被骗,关于jmeter 的一个弥天大谎!

jmeter是目前大家都喜欢用的一款性能测试工具&#xff0c;因为它小巧、简单易上手&#xff0c;所以很多人都愿意用它来做接口测试或者性能测试&#xff0c;因此&#xff0c;在目前企业中&#xff0c;使用各个jmeter的版本都有&#xff0c;其中以jmeter3.x、4.x的应该居多。 但是…

Waves 14混音特效插件合集mac/win

Waves14是一款音频处理软件&#xff0c;主要用于音频编辑、混音和母带处理。该软件提供了各种插件&#xff0c;包括EQ、压缩、混响、延迟、失真等&#xff0c;以及一些专业的音频处理工具&#xff0c;如L2限幅器、Linear Phase EQ和多频道扬声器管理。 Mac软件下载&#xff1a;…

凉鞋的 Unity 笔记 106. 第二轮循环场景视图Sprite Renderer

106. 第二轮循环&场景视图&Sprite Renderer 从这一篇开始&#xff0c;我们开始进行第二轮循环。 这次我们至少能够在游戏运行窗口看到一些东西。 首先还是在场景层次窗口进行编辑&#xff0c;先创建一个 Sprite&#xff0c;操作如下: 创建后&#xff0c;会在 Scene …

华为OD机试真题-路灯照明问题(Java/C++/Go/Python)

【华为OD机试真题】路灯照明问题(Java/C++/Go/Python) 题目描述 在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。 每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。 输入描述 第一行为一个数N…

【Java互联网技术】MinIO分布式文件存储服务

应用场景 互联网海量非结构化数据的存储 基本概念 Object&#xff1a;存储的基本对象&#xff0c;如文件、字节流等 Bucket&#xff1a;存储Object的逻辑空间&#xff0c;相当于顶层文件夹 Drive&#xff1a;存储数据的磁盘&#xff0c;在MinIO启动时&#xff0c;以参数的…

Nginx与Spring Boot的错误模拟实践:探索502和504错误的原因

文章目录 前言502和504区别---都是Nginx返回的access.log和error.log介绍SpringBoot结合Nginx实战502 and 504准备工作Nginx配置host配置SpringBoot 502模拟access.logerror.log 504模拟access.logerror.log 500模拟access.logerror.log 总结 前言 刚工作那会&#xff0c;最常…

JMeter接口自动化测试(数据驱动)

之前我们的用例数据都是配置在HTTP请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开JMeter重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f;我们可以将用例的数据存放在cs…

MyBatis过时了吗?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

3263页学习资料,一本在手,python不愁!

Python3.11已经发布&#xff0c;新的版本速度提升2倍&#xff0c;以弥补与其他编程语言在速度上的缺陷。可以预见Python语言在未来的应用范围会越来越广。 python学习方向建议&#xff1a; 如果你是本科及以下学历&#xff0c;建议你学习以下两个方向 爬虫。简单的爬虫库&am…