Subversion Repositories ngs

Rev

Rev 58 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. module resetter(
  2.  
  3.         clk,
  4.  
  5.         rst_in_n,
  6.  
  7.         rst_out_n );
  8.  
  9. parameter RST_CNT_SIZE = 4;
  10.  
  11.  
  12.         input clk;
  13.  
  14.         input rst_in_n; // input of external asynchronous reset
  15.  
  16.         output rst_out_n; // output of end-synchronized reset (beginning is asynchronous to clock)
  17.         reg    rst_out_n;
  18.  
  19.  
  20.  
  21.         reg [RST_CNT_SIZE:0] rst_cnt; // one bit more for counter stopping
  22.  
  23.         reg rst1_n,rst2_n;
  24.  
  25.  
  26.         always @(posedge clk, negedge rst_in_n)
  27.         if( !rst_in_n ) // external asynchronous reset
  28.         begin
  29.                 rst_cnt <= 0;
  30.                 rst1_n <= 1'b0;
  31.                 rst2_n <= 1'b0;
  32.                 rst_out_n <= 1'b0; // this zeroing also happens after FPGA configuration, so also power-up reset happens
  33.         end
  34.         else // clocking
  35.         begin
  36.                 rst1_n <= 1'b1;
  37.                 rst2_n <= rst1_n;
  38.  
  39.                 if( rst2_n && !rst_cnt[RST_CNT_SIZE] )
  40.                 begin
  41.                         rst_cnt <= rst_cnt + 1;
  42.                 end
  43.  
  44.                 if( rst_cnt[RST_CNT_SIZE] )
  45.                 begin
  46.                         rst_out_n <= 1'b1;
  47.                 end
  48.         end
  49.  
  50.  
  51. endmodule
  52.  
  53.