1.FPGA设计中的复位方式是同步复位与异步复位。接下来将看看两者的概念和在实际设计中的区别以及各自的优缺点。
1.1 异步复位: 它指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位
下面给出一个异步复位的例子
module test( input sys_clk, input rst_n, input din, outputreg dout );
always@(posedge sys_clk ornegedge rst_n) begin if(!rst_n) dout <=1'b0; else dout <= din; end endmodule |
|
从RTL图中我们可以看出FPGA的寄存器有一个异步清零端(CLR)。在异步复位设计中,这个端口是将低电平有效的复位信号rst_n。即使设计中高电平复位,实际综合后的电路也是将复位信号反相后接入CLR端。
1.2.同步复位: 同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。
下面给出一个同步复位的例子
module test( input sys_clk, input rst_n, input din, outputreg dout );
always@(posedge sys_clk ) begin if(!rst_n) dout <=1'h0; else dout <= din; end endmodule |
|
从RTL图中,复位信号没有使用寄存器的CLR端,还是将复位信号作为逻辑输入的使能信号,那么这样同步复位将会额外增加FPGA的内部资源消耗。
那么同步复位与异步复位到底有那些优缺点了?(优缺点摘取网上)
2.1.总的来说,同步复位的优点大概有3条:
a、有利于仿真器的仿真。
b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。
缺点:
a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
2.2.对于异步复位来说,他的优点也有三条,都是相对应的
a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
b、设计相对简单。
c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
缺点:
a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
b、复位信号容易受到毛刺的影响。
3.在同步复位与异步复位的优缺点中可以看出,单纯的使用异步复位或者同步复位都有可能给我们的设计带来不少的问题。笔者通过在网上查找,和自己这一两年写代码的习惯,一直采用异步复位,同步释放的方式。可以减少亚稳态带来的危害以及避免大量使用同步复位逻辑资源的浪费。将在下一篇博文中将讲述异步复位,同步释放的操作。