数字IC前端学习笔记:异步复位,同步释放
相关阅读
数字IC前端
https://blog.csdn.net/weixin_45791458/category_12173698.html?spm=1001.2014.3001.5482
异步复位
异步复位是一种常见的复位方式,可以使电路进入一个可知的状态。但是不正确地使用异步复位会导致出现意想不到的错误,复位释放便是其中的一个重要问题,这将在后面进行讨论。
异步复位是通过寄存器的异步复位端实现的,复位端一般是低电平有效,即当复位端为低电平时,寄存器输出被强制复位。
代码风格
下面的代码显示了如何在Verilog代码中说明带有复位的寄存器。注意到复位信号的下降沿事件被加入了敏感列表。其实,异步复位是根据电平生效的,即当复位信号为低时复位。在这里写成下降沿的形式是因为,综合工具要求敏感列表中出现的信号如果有一个是边沿事件,则其他所有事件也必须是边沿敏感的,但这对于仿真工具是可以接受的,甚至仿真工具还可以在敏感列表中存在除了复位沿和时钟沿以外的其他信号事件,这对于综合工具也是不可接受的。
//综合与仿真工具都支持
module FlipFlop(input clk, rst_n, d, output reg q);always@(posedge clk, negedge rst_n)beginif(!rst_n)q <= 1'b0;elseq <= d;end
endmodule//综合工具不支持与仿真工具支持,其实复位效果和上面的代码一致(不要使用它)
module FlipFlop(input clk, rst_n, d, output reg q);always@(posedge clk, rst_n)beginif(!rst_n)q <= 1'b0;elseq <= d;end
endmodule//一个奇怪的例子,但仿真工具确实支持(不要使用它)
module FlipFlop(input clk, rst_n, d, output reg q);always@(posedge clk, rst_n, d)beginif(!rst_n)q <= 1'b0;elseq <= d;end
endmodule
异步复位的优势
在进入这个话题前,我们先来看一下上面的第一段代码综合出的电路,如图1所示。可以看到综合工具可以直接从异步复位的Verilog描述中推断出一个带异步复位端的寄存器。

图1 异步复位综合出的寄存器
我们再来看一下同步复位综合出的电路,如图2所示。顺便一提,上面异步复位的代码可以很轻松地改变为同步复位,只要把posedge rst_n从敏感列表中去除即可,如下所示。综合结果显示,异步复位其实就是将异步复位信号当做寄存器输入的一部分,而不是综合出一个有同步复位端的寄存器。对于那些时序上比较紧张的设计,在寄存器前的组合逻辑再插入异步复位的逻辑无法承受,使用异步复位能保证不会给reg2reg的时序路径带来负面影响。异步复位的另一个优点是无需时钟存在便可复位,这使得在时钟尚未启动时复位电路成为了可能。
//同步复位
module FlipFlop(input clk, rst_n, d, output reg q);always@(posedge clk)beginif(!rst_n)q <= 1'b0;elseq <= d;end
endmodule

图2 同步复位综合出的寄存器
异步复位的问题
异步复位中也存在一定问题,因为复位信号的使能和释放都是异步的。不正确的复位释放,即复位沿过于接近时钟沿会导致寄存器输出现亚稳态(复位的生效不会导致出现亚稳态,因为复位是强制将输出拉低)。其实同步复位也有相似的问题,因为同步复位信号需要像其他输入信号一样满足建立时间、保持时间的要求,否则会在寄存器输出产生亚稳态。
Removal时间和Recovery时间
与建立时间和保持时间类似,removal时间和recovery时间被用来描述复位信号的时序要求。如图3所示,removal时间指的是复位释放不能过于靠近时钟有效沿的后方,而Recovery指的是复位释放不能过于靠近有效沿的前方。这两种条件都可能造成输出的亚稳态,因为复位相当于内部信号的改变,这种改变过于靠近时钟沿会导致电路逻辑状态不定。

图3 复位信号释放的要求
复位同步器
就像CDC(跨时钟域)问题一样,复位信号的释放同样也可以使用同步器与时钟沿进行同步,这就是“异步复位,同步释放”。

以上结构的Verilog描述如下所示。
module reset_syn(input clk, rst_in, output reg rst_out);reg rst_r;always@(posedge clk, negedge rst_in)beginif(!rst_n){rst_out, rst_r} <= 2'b0;else{rst_out, rst_r} <= {rst_r, 1'b1};end
endmodule
在同步了复位释放信号后,第一个寄存器的输出依然可能出现亚稳态,但这个不确定状态在传播到第二个寄存器输入前已经稳定(可能是1,也可能是0),即下一个时钟边沿在第二个寄存器输出不会出现亚稳态,这也意味着同步后复位释放信号会延迟输入的复位释放信号1至2个周期。
甚至为了保险起见还可以使复位再延迟一段时间再释放,这样可以在最大程度上确保复位正常释放,如下所示。
`define count 16'hffff
module reset_syn(input clk, rst_in, output reg rst_out);reg rst_r, rst_cnt, rst_pre;always@(posedge clk, negedge rst_in)beginif(!rst_in){rst_pre, rst_r} <= 2'b0;else{rst_pre, rst_r} <= {rst_r, 1'b1};endalways@(posedge clk, negedge rst_pre)beginif(!rst_pre) rst_cnt <= 0;else if(rst_cnt < `count)rst_cnt = rst_cnt + 1;endalways@(posedge clk, negedge rst_pre)beginif(!rst_pre) rst_out <= 0;else if(rst_cnt == `count)rst_out <= 1'b1;elserst_out <= 1'b0;end endmodule
相关文章:
数字IC前端学习笔记:异步复位,同步释放
相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 异步复位 异步复位是一种常见的复位方式,可以使电路进入一个可知的状态。但是不正确地使用异步复位会导致出现意想不到的错误,复位释放便是…...
Linux内核移植之网络驱动更改说明一
一. 简介 本文学习 NXP官方Linux内核移植网络驱动的更改。 为了方便后面 Linux驱动的开发调试,所以,必须要把网络驱动调试好。 如果在做 Linux驱动开发时,写了一个 app或驱动,就需要将系统全部文件(即 uboot&#…...
邮件|gitpushgithub报错|Lombok注解
基于 Spring Boot 搭建一个定时发送邮件的项目可以按照以下步骤进行: 创建一个新的 Spring Boot 项目,并添加所需的依赖。在 pom.xml 文件中添加以下依赖项(根据你的需要进行调整): xml org.springframework.boot sp…...
【前端知识】Node——events模块的相关方法
一、events模块的常用方法 // 事件总线 const EventsEmitter require(events);const emitter new EventsEmitter();function HLog(msg){console.log(msg); }// 监听 emitter.on(hlog, HLog);setTimeout(() > {// 触发,打印emitter.emit(hlog, hello emitter!)…...
广州华锐互动VRAR | VR课件内容编辑器解决院校实践教学难题
VR课件内容编辑器由VR制作公司广州华锐互动开发,是一款专为虚拟现实教育领域设计的应用,它能够将传统的教学内容转化为沉浸式的三维体验。通过这款软件,教师可以轻松创建和编辑各种虚拟场景、模型和动画,以更生动、直观的方式展示…...
Wireshark抓包:理解TCP三次握手和四次挥手过程
TCP是一种面向连接、端到端可靠的协议,它被设计用于在互联网上传输数据和确保成功传递数据和消息。本节来介绍一下TCP中的三次握手和四次挥手。 文章目录 1 TCP头部格式2 wireshark抓包分析2.1 SEQ和ACK2.2 三次握手2.3 四次挥手 3 程序 1 TCP头部格式 TCP头部占据…...
网络工程师-HCIA网课视频学习
这里是速成的,只积累下,自己未曾学习到的东西。通过书本补充知识点。 视频:hcia17-链路聚合_哔哩哔哩_bilibili hcia16-路由高级特性: hcia17-链路聚合: 由于如果根据视频来学习的话,感觉视频的总结并不…...
【每日刷题——语音信号篇】
思考与练习 练习2.1 语音信号在产生的过程中,以及被感知的过程中,分别要经过人体的哪些器官? 1.产生过程: 肺部空气 → \rightarrow →冲击声带 → \rightarrow →通过声道(可以调节) → \rightarrow →…...
Linux进程通信——IPC、管道、FIFO的引入
进程间的通信——IPC 进程间通信 (IPC,InterProcess Communication) 是指在不同进程之间传播或交换信息。 IPC的方式通常有管道 (包括无名管道和命名管道) 、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 …...
数理统计的基本概念(一)
文章目录 总体、样本与统计量总体及其分布样本及其分布统计量统计量概念样本矩顺序统计量及其分布样本中位数与样本极差经验分布函数 参考文献 总体、样本与统计量 总体及其分布 在数理统计中,称所研究的对象的全体为总体,总体中的元素称为个体。若总体…...
clickhouse分布式之弹性扩缩容的故事
现状 社区不支持喔,以后也不会有了。曾经尝试过,难道是是太难了,无法实现吗?因为他们企业版支持了,可能是利益相关吧,谁知道呢,毕竟开源也要赚钱,谁乐意一直付出没有回报呢。 社区…...
数据结构--串的基本概念
目录 串的基本概念 串的定义 串与线性表对比 串的基本操作 串的比较 字符集编码 乱码问题编辑 总结 串的存储结构 串的顺序存储编辑 串的链式存储 串的基本操作 1、求字串 2、比较 3、定位操作 总结 串的基本概念 串的定义 串与线性表对比 串的…...
音视频流媒体之 IJKPlayer FFmpeg Android 编译
FIJK dockerfile 编译环境 FROM --platformlinux/amd64 ubuntu:18.04RUN apt-get update && apt-get install -y \wget \unzip \git \gcc \g \make \python \yasm \pkg-config \protobuf-compiler \sudoRUN apt-get install -y openjdk-8-jdkENV ANDROID_HOME…...
记录一次较为完整的Jenkins发布流程
文章目录 1. Jenkins安装1.1 Jenkins Docker安装1.2 Jenkins apt-get install安装 2. 关联github/gitee服务与webhook2.1 配置ssh2.2 Jenkins关联2.3 WebHook 3. 前后端关联发布 1. Jenkins安装 1.1 Jenkins Docker安装 Docker很好,但是我没有玩明白如何使用Docke…...
Virtual安装centos后,xshell连接centos 测试及遇到的坑
首先来一张官方的图--各种网络模式对应的连接状况: 1. 网络使用Host-Only模式动态分配IP,点确定后,centos 上运行 system restart network ,使用ifconfig查看新的ip,XShell可以直接连上centos, 但是由于使用…...
【算法】最优乘车——bfs(stringsteam的实际应用,getline实际应用)
题目 H 城是一个旅游胜地,每年都有成千上万的人前来观光。 为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。 每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,…...
『亚马逊云科技产品测评』活动征文|通过lightsail一键搭建Drupal VS 手动部署
『亚马逊云科技产品测评』活动征文|通过lightsail一键搭建Drupal 提示:授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚…...
使用 VuePress 和 Vercel 打造个人技术博客:实现自动化部署
什么是VuePress? 以下是VuePress官方文档的介绍:VuePress 是一个以 Markdown 为中心的静态网站生成器。你可以使用 Markdown 来书写内容(如文档、博客等),然后 VuePress 会帮助你生成一个静态网站来展示它们。VuePress 诞生的初…...
Re50:读论文 Large Language Models Struggle to Learn Long-Tail Knowledge
诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:Large Language Models Struggle to Learn Long-Tail Knowledge ArXiv网址:https://arxiv.org/abs/2211.08411 官方GitHub项目(代码和实体)…...
Spring IOC - Bean的生命周期之依赖注入
在Spring启动流程中,创建的factoryBean是DefaultListableBeanFactory,其类图如下所示: 可以看到其直接父类是AbstractAutoireCapableBeanFactory,他主要负责完成Bean的自动装配和创建工作。 具体来说,AbstractAutowire…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
