




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、异步复位,同步释放一、特点:同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下: always (posedge clk) begin if (!Rst_n) . end异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下: always (posedge clk or negedge Rst_n) begin if (!Rst_n) . end二、各自的优缺点:1、总的来说,同步复位的优点大概有3条:a、有利于仿真器的仿真。b、可以使所设计的系统成为100%的同步时序
2、电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。他的缺点也有不少,主要有以下几条:a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。 2、对于异步复位来说,他的优点也有三条,都是相对应的a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以
3、节省资源。b、设计相对简单。c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。缺点:a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。b、复位信号容易受到毛刺的影响。 三、总结:所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。 2:推荐的复位方式所谓推荐的复位方式就是上文中所说的:“异步复位,同步释放”。这就结合了双方面的优点,很好的克服了异步复位的缺点(因为异步复位的问题主要出现在复位信号释放的时候,具体原因可见上文)。
4、其实做起来也并不难,我推荐一种我经常使用的方式吧:那就是在异步复位键后加上一个所谓的“reset synchronizer”,这样就可以使异步复位信号同步化,然后,再用经过处理的复位信号去作用系统,就可以保证比较稳定了。reset sychronizer的Verilog代码如下: module Reset_Synchronizer(output reg rst_n,input clk, asyncrst_n);reg rff1; always (posedge clk , negedge asyncrst_n) begin if (!asyncrst_n) rst_n,rff1 <= 2
5、'b0;else rst_n,rff1 <= rff1,1'b1;endendmodule 大家可以看到,这就是一个dff,异步复位信号直接接在它的异步复位端口上(低电平有效),然后数据输入端rff1一直为高电平1。倘若异步复位信号有效的话,触发器就会复位,输出为低,从而复位后继系统。但是,又由于这属于时钟沿触发,当复位信号释放时,触发器的输出要延迟一个时钟周期才能恢复成 1,因此使得复位信号的释放与时钟沿同步化。此外,还有一种方法更为直接,就是直接在异步复位信号后加一个D触发器,然后用D触发器的输出作为后级系统的复位信号,也能达到相同的效果。这里就不多说了。 3:多时钟
6、系统中复位的处理方法这是一个很实际的问题,因为在较大型的系统中,一个时钟驱动信号显然不能满足要求,一定会根据系统的要求用多个同源时钟(当然也可以是非同源了)去驱动系统的不同部分。那么在这样的多时钟系统中,复位键怎么设置?它的稳定与否直接关系到了整个系统的稳定性,因此要格外注意(在我看来,复位信号在同步时序系统中的地位和时钟信号一样重要)。下面就说一下具体的处理方法,当然所遵循的原则就仍应该是上文的“异步复位,同步释放”:1.non-coordinated reset removal:顾名思义,就是同一个系统中的多个同源时钟域的复位信号,由彼此独立的“reset synchronizer”驱动。
7、当异步复位信号有效时,各时钟域同时复位,但是复位释放的时间由各自的驱动时钟决定,也是就说:时钟快的先释放,时钟慢的后释放,但是各复位信号之间没有先后关系。2.sequence coordinated reset removal:这是相对于上述方式来说的,也就是说各时钟域的复位信号彼此相关,各个部分系统虽然也同时复位,但是却分级释放。而分级的顺序可由各个 “reset synchronizer”的级联方式决定。可以先复位前级,再复位后级,也可以反过来。反正方式很灵活,需要根据实际需要而定。 例子:三级复位系统,系统中的时钟分别为1M,2M,11M:第一级Reset_Sychronizer程序:m
8、odule Reset_Synchronizer(output reg rst_n,input clk, asyncrst_n);reg rff1;always (posedge clk , negedge asyncrst_n)begin if (!asyncrst_n) rst_n,rff1 <= 2'b0;else rst_n,rff1 <= rff1,1'b1;endendmodule第2,3级的Reset_Sychronizer程序:module Reset_Synchronizer2(output reg rst_n,input clk, asyncrs
9、t_n,d);reg rff1;always (posedge clk , negedge asyncrst_n) beginif (!asyncrst_n) rst_n,rff1 <= 2'b0; else rst_n,rff1 <= rff1,d;endendmodule 顶层模块的源程序:include "Reset_Synchronizer.v"include "Reset_Synchronizer2.v" module AsynRstTree_Trans( input Clk1M,Clk2M,Clk11M,SysRst_n,
10、output SysRst1M_n,SysRst2M_n,SysRst11M_n);Reset_Synchronizer Rst1M(.clk(Clk1M),. asyncrst_n(SysRst_n),.rst_n(SysRst1M_n);Reset_Synchronizer2Rst2M(.clk(Clk2M),.d(SysRst1M_n),. asyncrst_n(SysRst_n),.rst_n(SysRst2M_n);Reset_Synchronizer2Rst11M(.clk(Clk11M),.d(SysRst2M_n),. asyncrst_n(SysRst_n),.rst_n(S
11、ysRst11M_n); endmodule异步复位、同步释放 FPGA设计中常见的复位方式即同步复位和异步复位。在深入探讨亚稳态这个概念之前,特权同学也并没有对所谓的同步复位和异步复位有太多的注意,而在实践中充分感受了亚稳态的危害之后,回过头来细细品味Verilog HDL设计与验证一书中关于复位的章节,可谓受益匪浅。 在特权同学以前的代码里大多使用的是异步复位。 一个简单的异步复位的例子always (posedge clk or negedge rst_n) if(!rst_n) b <= 1'b0; else b <= a; 我们可以看到FPGA的寄存器都有一个异步
12、的清零端(CLR),在异步复位的设计中这个端口一般就是接低电平有效的复位信号rst_n。即使说你的设计中是高电平复位,那么实际综合后会把你的复位信号反向后接这个CLR端。 一个简单的同步复位的例子always (posedge clk) if(!rst_n) b <= 1'b0; else b <= a; 和异步复位相比,同步复位没有用上寄存器的CLR端口,综合出来的实际电路只是把复位信号rst_n作为了输入逻辑的使能信号。那么,这样的同步复位势必会额外增加FPGA内部的资源消耗。 那么同步复位和异步复位到底孰优孰劣呢? 只能说,各有优缺点。同步复位的好在于它只在时钟信号c
13、lk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率;它的不好上面也说了,在于它需要消耗更多的器件资源,这是我们不希望看到的。FPGA的寄存器有支持异步复位专用的端口,采用异步复位的端口无需额外增加器件资源的消耗,但是异步复位也存在着隐患,特权同学过去从没有意识到也没有见识过。异步时钟域的亚稳态问题同样的存在与异步复位信号和系统时钟信号之间。 再看下面一个两级寄存器异步复位的例子 always (posedge clk or negedge rst_n) if(!rst_n) b <= 1'b0; else b <= a; always (posedge clk
14、 or negedge rst_n) if(!rst_n) c <= 1'b0; else c <= b; 正常情况下,clk的上升沿c更新为b,b更新为a。一旦进入复位,b,c都清零;但是我们不能确定复位信号rst_n会在什么时候结束。如果结束于b_reg0和c_reg0的launch edge stup,launch edge+hold时间只外,那么一切都会正常。但如果恰恰相反,会出现什么情况呢?rst_n的上升变化出现在了clk上升的建立保持时间上,此时clk检测到的rst_n的状态就会是一个亚稳态(是0是1不确定)。从代码里我们看到如果此时b_reg0和c_reg0
15、认为rst_n为0,那么依然保持复位清零,而如果认为rst_n为1,那么就跳出复位。因为此时的rst_n的不确定性,就可能出现4种情况,即b_reg0和c_reg0都复位或者都跳出复位,再或者一个复位一个跳出复位。那么后者就会造成了系统工作不同步的问题,在这个简单的两级异步复位实例中这种危害表现的并不明显,但是我们试想一个大的工程项目里众多的寄存器出现如此情况又会是如何一番景象呢? 上面的分析似乎都让人意识到同步复位和异步复位都不可靠,那么如何将两者结合,取长补短呢。 异步复位、同步释放 always (posedge clk) rst_nr <= rst_n; /现将异步复位信号用同步时钟打一拍 always (posedge clk or negedge rst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学科研课题申报书
- 2025年注册会计师备考的资源利用与试题及答案
- 银行从业资格证考试切入点分析试题及答案
- 精心准备2025年特许金融分析师考试试题及答案
- 项目管理考试的心理素质要求试题及答案
- 财务与审计的关联与差异试题及答案
- 项目目标验证与跟踪机制的构建试题及答案
- 注册会计师计算题试题及答案解析
- 教师课题研申报书
- 理财师与投资者的信任关系2025年国际金融理财师考试试题及答案
- 第十一单元课题1化学与人体健康-2024-2025学年九年级化学人教版(2024)下册
- 《子宫内膜异位》课件
- 文旅场所安全培训课件
- 《商标侵权案例分析》课件
- 脑梗死的护理查房
- 导游讲解的常用技巧教案
- 算法设计与分析 课件 6.3-贪心法应用-活动安排问题
- 车位租赁协议
- 肺结节诊治中国专家共识(2024年版)解读
- 地震监测设备使用安全检查表
- 行知学院《学生手册》知识学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论