复位电路设计问题

来源:互联网 发布:怎么样提高淘宝排名 编辑:程序博客网 时间:2024/05/16 03:12

前言

最近看advanced fpga 以及fpga设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输入系统复位。

流程:

1.同步复位:

优点:同步的典型优点是确保电路100%是同步电路;容易被STA;当作用于一些基于周期机制的功能模块时更易于仿真。

缺点:脉冲宽度满足一定的要求。总是需要一个时钟来完成对电路的复位。

代码:一个4bit的计数器。

1 always @(posedge clk /*or negedge sys_rst_n*/) begin2     if (~sys_rst_n) begin3         count <= 0;4     end //if5     else begin6         count <= count + 1'b1;    7     end //else8 end //always

仿真解析(下图):

时钟上升沿如果复位信号为低电平,复位开始,时钟上升沿若复位信号为高电平,复位结束。

 

2.异步复位:

优点:没有像同步复位那样插入到数据路径中;复位即刻生效。

缺点:复位信号被释放时可能出现亚稳态;对噪声的易感染性,可能导致虚假复位。

代码:

1 always @(posedge clk or negedge sys_rst_n) begin2     if (~sys_rst_n) begin3         count <= 0;4     end //if5     else begin6         count <= count + 1'b1;    7     end //else8 end //always

仿真解析(下图):

复位信号低电平时候,系统立刻进入复位态;

 

3.异步复位同步释放:(推荐使用)

优点:结合了同步复位与异步复位的优点。

缺点:容易受到噪声与宰脉冲的干扰。如果可能,最好对输入到fpga的异步复位信号先进行滤波与去抖动。

代码:

 1 module  rstn_as ( 2     //input; 3     input    wire    clk, 4     input    wire    sys_rst_n, 5     //output; 6     output   reg     rst_n 7 ); 8 reg rst_n_reg; 9 always @(posedge clk or negedge sys_rst_n) begin10     if (~sys_rst_n) begin11         rst_n <= 1'b0;12         rst_n_reg <= 1'b0;13     end //if14     else begin15         rst_n_reg <= 1'b1;16         rst_n <= rst_n_reg;    17     end //else18 end //always19 20 endmodule
wire rst_n;rstn_as  u1(    .clk                (clk),    .sys_rst_n          (sys_rst_n),    .rst_n              (rst_n)); always @(posedge clk or negedge rst_n) begin    if (~rst_n) begin        count <= 0;    end //if    else begin        count <= count + 1'b1;        end //elseend //always

仿真解析(下图):

当复位信号低电平时,系统立即复位;当时钟上升沿检测到复位信号失效后,在下一个时钟上升沿拉高rst_n。新的rst_n是已经同步化了的复位信号。

 以上。