Subversion Repositories pentevo

Rev

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

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