复位
同步复位
1 module test2 (3 input clk,4 input rst_n,5 input data_in,6 output reg out7 );8 always @ (posedge clk )9 if(!rst_n) out <= 1'b0;10 else out <= data_in;11 endmodule1234567891011
优点:
1.因为他只有在时钟有效电平到来时才有效,可以滤除高于时钟频率的毛刺。
2.降低亚稳态出现的概率。(可以对rst信号先打一拍,在输入给rst_n,这样就可以降低亚稳态。)
缺点:
1.复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。
2.倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
异步复位
1 module test2 (3 input clk,4 input rst_n,5 input data_in,6 output reg out7 );8 always @ (posedge clk or negedge rst_n)9 if(!rst_n) out <= 1'b0;10 else out <= data_in;11 endmodule 1234567891011
优点
大多数目标器件库的dff都有异步复位端口,采用异步复位可以节省资源。
缺点:
1.在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
2.复位信号容易受到毛刺的影响。
同步复位异步释放
同步复位异步释放:既解决了同步复位的资源消耗问题,也解决了异步复位的亚稳态问题。其根本思想,也是将异步信号同步化。
以两级寄存器异步复位为例说明存在的问题