简谈同步复位和异步复位

大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊数字电路设计中的同步复位和异步复位。

谈到同步复位和异步复位,那咱们就不得不来聊一聊复位这个词了。在数字逻辑电路设计中,电路通过复位来启动,复位犹如数字电路的“起搏器”。那在设计中,主要会出现以下三种类型的,一是无复位:天生就强壮着,上电就启动;二是异步复位:好心人路过,随便踢了一脚,起搏了,这完全没有心理准备,随时都有可能复活啊;三是同步复位:专业救援队,手按住胸口,不起搏按住不放啊。直到听到“砰砰”声才离开,非常关键,必须要按住一会会。

那下面咱们就来详细聊聊这三种类型。

一、无复位

没见过这样写代码的,竟然没有复位,老师都说数字电路离不开复位的,没有复位,寄存器怎么赋初值啊?没有确定的初值,这电路怎么工作呢?其实,不用担心,FPGA上电之后,寄存器初始值默认为“0”,当然,也可以人为的赋初值。下面为无复位的代码举例:

如果没有复位信号,省了很多资源,编译和布线时间也缩短不少,如果规模很大,对提高设计整体性能也是有帮助的。但是在数字电路设计中,我们很少不用复位电路。倒是我们经常利用FPGA这个特性,自己产生内部复位电路。

二、异步复位

异步复位电路描述:在always语句中添加复位信号在敏感量列表中,即可实现异步复位。下面为异步复位的代码举例以及电路图举例:

异步复位的缺点:

异步复位对复位信号要求很严格的,不然随便一个毛刺就会把电路给复位掉的。另外,异步复位信号依赖于FPGA内部的传导延时,因此,在微小的电压或温度差异下,设计都有可能输出错误,设计的可移植性也很差。上面不是说了嘛,这随便一脚提过来,有时候能感觉到,有时候感觉不到啊。冬天穿个大棉袄,就得使个大劲才能有感觉。

正因为对不同寄存器延迟是不同的,所以容易引发间断性设计问题。怎么理解呢?

如图所示,2 bit的移位寄存器组成一个环,复位后,左边寄存器清零,右边寄存器置位,而且都在同一上升沿触发,所以,如果左边寄存器上升沿来的时候,复位信号已经释放掉了,但是右边寄存器还处于复位状态,这个时候数据就错误。

异步复位的优点:

异步复位不依赖于时钟。所以如果时钟是外部输入的,而且时钟有可能丢失,例如处于省电模式时,只能使用异步复位。

另外一个优势是设计更快的物理实现。相对于同步复位,异步复位有更宽松的时序约束。从而布局布线工具使用更少的时间便可达到约束条件。

三、同步复位

同步复位就是非常专业,不留一点马虎,和他的名字一样,只在时钟的有效沿发生,所以一个有效的同步信号,至少要维持一个时钟周期(把你叫不醒,是不会停的)。由于仅仅在时钟的有效沿有效,所以可以滤除复位信号上的毛刺,电路可靠性好很多。下面为同步复位的代码举例:

所以,总结一下。其优点是“弥补了异步复位的所有缺点”,其缺点是“没有异步复位的优点“。这个总结够简单吧。

总结

我们熟悉了3种复位方式,了解了他们的脾气,那就总结一下,在我们平时设计中如何使用他们。

尽量用同步复位,如果你的规模不是特别大,虽然占有布线资源多一点,但是对系统可靠性还是有帮助的。

规模很大的时候,可以考虑混合复位方式,在什么场合呢?比如说设计中有多个IP核和功能模块,要求有不同的复位方式,这个时候就要求混合复位方式,另外,还有电路延迟,大型电路中两个模块之间信号延迟可能超过10ns,如果时钟周期为3ns,需要3个时钟周期才能通过,所以,大型设计中完全同步是非常不容易的。如图所示为一个复杂的混合复位树。各种复位都用上了。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

异步复位同步释放_简谈同步复位和异步复位相关推荐

  1. .NET简谈组件程序设计之(异步委托)

    说到委托我想大家基本上都用过的,今天这篇文章就来讲解关于委托的异步奥秘. 在我们正常使用的时候很少会去用异步委托技术来提高代码效率.委托的好处就是能对方法进行面向对象的封装,随意传递.在任何组件客户代 ...

  2. python nonlocal的用法_简谈Python3关键字nonlocal使用场景

    下面是之前提过的有待提升效率的计算移动平均的方法: def make_averager(): series = [] def averager(new_value): series.append(ne ...

  3. 第三方数据库同步工具_数据库实时同步和复制_mysql数据库同步工具

    SyncNavigator v8.6.2 SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据.无人值守.故障自动恢复.同构/异构 ...

  4. python兼容性怎么样_简谈python的向下兼容性问题

    前两天在写python代码的时候,发现了一个问题.因为要使用email模块,使用 了其中一项导入语句:from email.mime.text import MIMEText,在python2.5下 ...

  5. java数据同步处理_[java数据库同步解决方案]系统间通讯实现数据信息实时同步解决方案...

    项目开发阶段遇到一个需求,描述大致就是同一个用户在A系统数据库保存的数据信息与在B系统数据库保存的数据信息要保持同步.当A系统用户修改了个人信息,A系统后台在将用户修改后的信息入库的同时也会向B系统发 ...

  6. rsync 同步优化_可以优化同步吗?

    rsync 同步优化 总览 有一个常见的误解,因为JIT很智能,并且可以消除对象的同步,而该对象仅存在于不影响性能的方法中. 比较StringBuffer和StringBuilder的测试 这两个类基 ...

  7. python变量标识符_简谈-Python的注释、变量类型、标识符及关键字

    在Python程序中,要想支持中文输出,则要在代码前面添加 标识符:开发人员在程序中自定义的一些符号和名称 标示符是自己定义的,如变量名 .函数名等 标识符的规则: 标示符由字目.下划线和数字组成,且 ...

  8. mysql 半同步 插件_编写半同步复制插件

    编写半同步复制插件 本节介绍如何使用plugin/semisyncMySQL源代码分发目录中的示例插件编写服务器端半同步复制插件.该目录包含名为rpl_semi_sync_master和的主插件和从插 ...

  9. dblink 同步数据_使用DBLINK同步TC数据库

    TC系统通常会有三种环境,PRD环境.QA环境和DEV环境.这三种环境的数据往往是不同步的,甚至存在QA和DEV数据与PRD是完全不一致的情况.导致在QA环境进行测试还需要重新搭建数据模拟用户真实场景 ...

最新文章

  1. php 7月世界排名2017,TIOBE2017榜单公布,PHP还会是世界上最好的语言吗?
  2. 如何设计一个牛逼的API接口
  3. 2019\Province_C_C++_B\试题C-数列求值
  4. unity3d 地面印花_unity怎么实现挖掘泥土?
  5. plc控制可调节阀流程图_PLC五大主流编程语言你会几种?
  6. 【LeetCode笔记】221. 最大正方形(Java、动态规划、思路题)
  7. freemarker结合springMVC配置
  8. DOM疑惑点整理(三)
  9. 五月花计算机cD专业,成都五月花计算机专业学校的学费是多少?
  10. 小甲鱼C语言单链表通讯录作业
  11. 搭建微商城平台,新商云提供源码部署只需3分钟
  12. 微信小程序官方界面UI设计秘籍
  13. html用百度网盘怎么看,百度网盘怎么使用?别人给了我一串字母
  14. 第二周练习 委派任务
  15. linux的标准输入输出
  16. 12345,教你画好线框图
  17. 强悍的局域网(内网)免费即时通讯(IM)工具-飞秋feiq
  18. 基于KNN的电影题材分类
  19. 借助国内ChatGPT平替+剪映/百度AIGC平台快速制作短视频
  20. 如何实现微信分享的链接可以自定义标题(缩略图、内容)

热门文章

  1. 系统操作日志设计(二)
  2. s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用)
  3. 遍历二维数组_Java编程基础阶段笔记 day06 二维数组
  4. 电信业务分类目录2019_2019年1月国内增值电信业务许可情况分析报告,市场区域发展不均衡...
  5. mysql2012更改表名_SQL修改数据库名字、表名字、字段名字 | 学步园
  6. Cube 技术解读 | 详解「支付宝」全新的卡片技术栈
  7. CodeDay 北京站报名倒计时
  8. 数据库自治服务DAS年度新版本:”数据库自动驾驶“进入规模化时代
  9. 自然语言处理在开放搜索中的应用
  10. 【UE灯光•简介】UE4光照类型和灯光参数