数字IC前端学习笔记:异步复位,同步释放

相关阅读

数字IC前端icon-default.png?t=N7T8https://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

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

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

相关文章

读像火箭科学家一样思考笔记03_第一性原理(上)

1. 思维的两种障碍 1.1. 为什么知识会成为一种缺陷而非一种美德 1.1.1. 知识是一种美德 1.1.2. 知识同样的特质也会把它变成一种缺点 1.1.3. 知识确实是个好东西&#xff0c;但知识的作用应该是给人们提供信息&#xff0c;而不是起约束作用 1.1.4. 知识应该启发智慧&#…

新版JetBrains ToolBox【Windows】修改应用安装位置

WIndows下新版的JetBrainse ToolBox 无法修改应用安装路径 关闭 ToolBox 应用修改配置文件.settings.json 路径&#xff1a;C:\Users\用户名\AppData\Local\JetBrains\Toolbox "install_location": "xxx",

多线程概述

文章目录 线程是什么线程有什么作用线程和进程的区别多线程相较于进程优势 在Java这个圈子中,多进程用的并不多,因为进程是一个重量级操作,进程是资源分配的基本单位,申请资源是一个比较消耗时间的操作. 线程是什么 线程是一个独立的执行流,可以被独立调度到CPU上执行 线程是…

计算机毕业设计选题推荐-个人健康微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入

Mesh应用的故障注入 故障注入前世今生Envoy设置故障注入-延迟类型设置故障注入-延迟类型并带有自定义状态码总结 故障注入前世今生 故障注入是一种系统测试方法&#xff0c;通过引入故障来找到系统的bug&#xff0c;验证系统的稳健性。istio支持延迟故障注入和异常故障注入。 …

黑马React18: 基础Part 1

黑马React: 基础1 Date: November 15, 2023 Sum: React介绍、JSX、事件绑定、组件、useState、B站评论 React介绍 概念: React由Meta公司研发&#xff0c;是一个用于 构建Web和原生交互界面的库 优势: 1-组件化的开发方式 2-优秀的性能 3-丰富的生态 4-跨平台开发 开发环境搭…

SpringBoot中日志的使用log4j

SpringBoot中日志的使用log4j 项目中日志系统是必不可少的&#xff0c;目前比较流行的日志框架有 log4j、logback 等&#xff0c;这两个框架的作者是同一个 人&#xff0c;Logback 旨在作为流行的 log4j 项目的后续版本&#xff0c;从而恢复 log4j 离开的位置。 另外 slf4j(…

vulhub redis-4-unacc

环境搭建 cd vulhub/redis/4-unacc docker-compose up -d 漏洞复现 检测 redis-cli -h ip 使用redis工具 工具地址&#xff1a;https://github.com/vulhub/redis-rogue-getshell 下载完成后&#xff0c;先进入RedisModulesSDK/exp/ 目录进行make操作 获得exp.so后可以进行…

【开发流程】持续集成、持续交付、持续部署

一、开发工作流程 假设把开发流程分为以下几个阶段&#xff1a; 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 如上图所示&#xff0c;持续集成、持续交付、持续部署有着不同的软件自动交付周期。 二、持续集成、持续交付、持续部署 1、持续集成 持续集成…

服务器数据恢复—热备盘同步中断导致Raid5数据丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位一台服务器上有一组raid5阵列&#xff0c;该raid5阵列有15块成员盘。上层是一个xfs裸分区&#xff0c;起始位置是0扇区。 服务器故障&检测&#xff1a; 服务器raid5阵列中有硬盘性能表现不稳定&#xff0c;但是由于管理员长时间没有关…

nodejs+vue实验室上机管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

用户&#xff1a;管理员、教师、学生 基础功能&#xff1a;管理课表、管理机房情况、预约机房预约&#xff1b;权限不同&#xff0c;预约类型不同&#xff0c;教师可选课堂预约和个人&#xff1b;课堂预约。 在实验室上机前&#xff0c;实验室管理员需要对教务处发来的上机课表…

浅析AcrelEMS-CIA机场智慧能源管平台解决方案-安科瑞 蒋静

1 概述 机场智慧能源管平台解决方案对机场范围内变电站内的高低压配电设备 、 发电机、变压器 、UPS、EPS 、广场照明 、 室内照明 、通风及排水等机电设备进行实时分布式监控和集中管理 , 实现无人值守 , 确保高速公路安全畅通 , 提高 自动化管理水平 , 降低机电设备的运行维…

SpringBoot常见注解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

程序员告诉你:人工智能是什么?

随着科技的快速发展&#xff0c;人工智能这个词汇已经逐渐融入了我们的日常生活。然而&#xff0c;对于大多数人来说&#xff0c;人工智能仍然是一个相对模糊的概念。 首先&#xff0c;让我们从人工智能的定义开始。人工智能是一种模拟人类智能的技术&#xff0c;它涵盖了多个领…

flink入门

1.安装flink&#xff0c;启动flink 文档地址&#xff1a;Apache Flink 1.3-SNAPSHOT 中文文档: Apache Flink 中文文档 代码&#xff1a;GitHub - apache/flink: Apache Flink 2. 打开端口 端口号&#xff0c; 启动jar ### 切换到flink 目录bin下 [rootlocalhost ~]# cd /…

参考文献格式

目录 期刊会议预印本&#xff08;如arxiv&#xff09; 期刊 找不到页码可以在文献中查看bibtex格式&#xff0c;其中有 外文期刊可在web of science中查找卷号、期号和所在页数&#xff1a; [1] ZHANG F, HU Z Q, FU Y K, et al. A New Identification Method for Surface …

【0到1学习Unity脚本编程】第一人称视角的角色控制器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;【0…

自动驾驶学习笔记(九)——车辆控制

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 控制器设计 比例积分微分控制 线性…

Kotlin 知识体系

Kotlin 知识体系 1、Kotlin 文档2、Kotlin 基础3、桌面应用程序4、Android 与 iOS 应用程序 1、Kotlin 文档 Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复…

『亚马逊云科技产品测评』活动征文|借助AWS EC2搭建服务器群组运维系统Zabbix+spug

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具&#xff1a; aws ec2 frp-0.52.3 zabbix 6…