其他参考资料:
FPGA中复位信号的设计
FPGA同步复位异步复位
异步复位同步释放---关于复位的问题
FPGA同步复位,异步复位以及异步复位同步释放实例分析
一、特点:
同步复位:
顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下:
always @ (posedge clk) begin
if (!Rst_n)
...
end
异步复位:
它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下:
always @ (posedge clk or negedge Rst_n) begin
if (!Rst_n)
...
end
二、各自的优缺点:
1、同步复位:
优点:
有利于仿真器的仿真。
可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。
缺点:
复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
2、异步复位:
优点:
大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
设计相对简单。
异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
缺点:
在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
复位信号容易受到毛刺的影响。
三、总结:
所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。
所谓异步复位,同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。
异步复位同步释放的方法以及多时钟系统的复位设计
1、异步复位,同步释放
input rst_n,clk;
output rst_syn_n;//系统的复位信号
reg reg1,reg2;
always@(posedge clk or negedge rst_n )begin
if(!rst_n)begin
reg1<=1'b0;
reg2<=1'b0;
end
else begin
reg1<=1'b1;
reg2<=reg1;
end
end
assign rst_syn_n = reg2;
复位是异步的,但是释放确实同步的;用两级寄存器,是消除复位释放中可能存在的亚稳态。
异步复位,同步释放的好处是:
1.不要求复位信号必须大于一个时钟周期;
2.因为释放过程和时钟同步,所以避免了亚稳态。
兼具同步复位和异步复位的优点。
不使用reg1的原因是消除毛刺的影响,如果受到毛刺的影响,reg1会产生一个很短的复位信号,这样可能会导致复位不完全,系统出现混乱。
2、多时钟系统中复位的处理方法
这是一个很实际的问题,因为在较大型的系统中,一个时钟驱动信号显然不能满足要求,一定会根据系统的要求用多个同源时钟(当然也可以是非同源了)去驱动系统的不同部分。那么在这样的多时钟系统中,复位键怎么设置?它的稳定与否直接关系到了整个系统的稳定性,因此要格外注意(在我看来,复位信号在同步时序系统中的地位和时钟信号一样重要)。下面就说一下具体的处理方法,当然所遵循的原则就仍应该是上文的“异步复位,同步释放”:
1.non-coordinated reset removal:
顾名思义,就是同一个系统中的多个同源时钟域的复位信号,由彼此独立的“reset synchronizer”驱动。当异步复位信号有效时,各时钟域同时复位,但是复位释放的时间由各自的驱动时钟决定,也是就说:时钟快的先释放,时钟慢的后释放,但是各复位信号之间没有先后关系。
2.sequence coordinated reset removal:
这是相对于上述方式来说的,也就是说各时钟域的复位信号彼此相关,各个部分系统虽然也同时复位,但是却分级释放。而分级的顺序可由各个“reset synchronizer”的级联方式决定。可以先复位前级,再复位后级,也可以反过来。反正方式很灵活,需要根据实际需要而定。