vhdl同步复位和异步复位的比较.docx

上传人:牧羊曲112 文档编号:3168483 上传时间:2023-03-11 格式:DOCX 页数:5 大小:39.09KB
返回 下载 相关 举报
vhdl同步复位和异步复位的比较.docx_第1页
第1页 / 共5页
vhdl同步复位和异步复位的比较.docx_第2页
第2页 / 共5页
vhdl同步复位和异步复位的比较.docx_第3页
第3页 / 共5页
vhdl同步复位和异步复位的比较.docx_第4页
第4页 / 共5页
vhdl同步复位和异步复位的比较.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《vhdl同步复位和异步复位的比较.docx》由会员分享,可在线阅读,更多相关《vhdl同步复位和异步复位的比较.docx(5页珍藏版)》请在三一办公上搜索。

1、vhdl同步复位和异步复位的比较同步复位和异步复位的比较 无论同步还是异步复位,在对触发器时序进行分析的时候,都要考虑复位端与时钟的相位关系。 对于同步复位,复位信号可以理解为一个普通的数据信号,它只有在时钟的跳变沿才会起作用,一般只要复位信号持续时间大于一个时钟周期,就可以保证正确复位。 对于异步复位,复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引起Q端数据变化,如果异步复位信号跟时钟在一定时间间隔内发生变化,Q值将无法确定,即亚稳态现象。这个时候既是异步复位信号持续时间再长都没有办法,因为不定态已经传递下去。 1:

2、一、特点: 同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用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%的同步时序电路,

3、这便大大有利于时序分析,而且综合出来的fmax一般较高。 c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。他的缺点也有不少,主要有以下几条: a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。 b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。 2、对于异步复位来说,他的优点也有三条,都是相对应的 a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可

4、以节省资源。 b、设计相对简单。 c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。 缺点: a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。 b、复位信号容易受到毛刺的影响。 三、总结: 所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。 2:推荐的复位方式 所谓推荐的复位方式就是上文中所说的:“异步复位,同步释放”。这就结合了双方面的优点,很好的克服了异步复位的缺点。 其实做起来也并不难,我推荐一种我经常使用的方式吧:

5、那就是在异步复位键后加上一个所谓的“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 = 2b0; else rst_n,rff1 = rff1

6、,1b1; end endmodule 大家可以看到,这就是一个dff,异步复位信号直接接在它的异步复位端口上,然后数据输入端rff1一直为高电平1。倘若异步复位信号有效的话,触发器就会复位,输出为低,从而复位后继系统。但是,又由于这属于时钟沿触发,当复位信号释放时,触发器的输出要延迟一个时钟周期才能恢复成1,因此使得复位信号的释放与时钟沿同步化。 此外,还有一种方法更为直接,就是直接在异步复位信号后加一个D触发器,然后用D触发器的输出作为后级系统的复位信号,也能达到相同的效果。这里就不多说了。 3:多时钟系统中复位的处理方法) 这是一个很实际的问题,因为在较大型的系统中,一个时钟驱动信号显然

7、不能满足要求,一定会根据系统的要求用多个同源时钟去驱动系统的不同部分。那么在这样的多时钟系统中,复位键怎么设置?它的稳定与否直接关系到了整个系统的稳定性,因此要格外注意。下面就说一下具体的处理方法,当然所遵循的原则就仍应该是上文的“异步复位,同步释放”: 1.non-coordinated reset removal:顾名思义,就是同一个系统中的多个同源时钟域的复位信号,由彼此独立的“reset synchronizer”驱动。当异步复位信号有效时,各时钟域同时复位,但是复位释放的时间由各自的驱动时钟决定,也是就说:时钟快的先释放,时钟慢的后释放,但是各复位信号之间没有先后关系。 2.sequ

8、ence coordinated reset removal:这是相对于上述方式来说的,也就是说各时钟域的复位信号彼此相关,各个部分系统虽然也同时复位,但是却分级释放。而分级的顺序可由各个“reset synchronizer”的级联方式决定。可以先复位前级,再复位后级,也可以反过来。反正方式很灵活,需要根据实际需要而定。由于图片上传问题,我只能用程序表示了,大家凑或看吧,哈哈例子:三级复位系统,系统中的时钟分别为1M,2M,11M: 第一级Reset_Sychronizer程序: module Reset_Synchronizer (output reg rst_n, input clk,

9、asyncrst_n); reg rff1; always (posedge clk , negedge asyncrst_n) begin if (!asyncrst_n) rst_n,rff1 = 2b0; else rst_n,rff1 = rff1,1b1; end endmodule 第2,3级的Reset_Sychronizer程序: module Reset_Synchronizer2 (output reg rst_n, input clk, asyncrst_n,d); reg rff1; always (posedge clk , negedge asyncrst_n) b

10、egin if (!asyncrst_n) rst_n,rff1 = 2b0; else rst_n,rff1 = rff1,d; end endmodule 顶层模块的源程序: include Reset_Synchronizer.v include Reset_Synchronizer2.v module AsynRstTree_Trans ( input Clk1M,Clk2M,Clk11M,SysRst_n, 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(SysRst11M_n); endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号