x393  1.0
FPGAcodeforElphelNC393camera
ddr_refresh.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
41 module ddr_refresh(
42  input mrst,
43  input clk,
44  input en,
45  input [7:0] refresh_period, // in 16*clk, 0 - disable refresh, turn off requests
46  input set, // and reset counters
47  output reg want, // turns off next cycle after grant (or stays on if more are needed)
48  output reg need,
49  input grant // 1 cycle
50 );
51  reg [3:0] pre_div;
52  reg [4:0] pending_rq; // can accumulate up to 31 requests, datasheet allows up to 16
53  reg [7:0] period_cntr;
54  reg cry;
55  wire over=(period_cntr == 0) && cry;
58  reg en_r;
59 
60  always @ (posedge clk) begin
61  if (mrst) en_r <= 0;
62  else en_r <= en;
63 
64  if (mrst) en_refresh <= 0;
65  else if (set) en_refresh <= (refresh_period != 0);
66 
67  if (mrst) pre_div <= 0;
68  else if (set || !en_refresh) pre_div <= 0;
69  else pre_div <= pre_div +1;
70 
71  if (mrst) cry <= 0;
72  else if (set) cry <= 0;
73  else cry <= (pre_div == 4'hf);
74 
75  if (mrst) period_cntr <= 0;
76  else if (set) period_cntr <= 0;
77  else if (over) period_cntr <= refresh_period;
78  else if (cry) period_cntr <= period_cntr -1;
79 
80  if (mrst) refresh_due <= 0;
81  else refresh_due <= over;
82 
83  if (mrst) pending_rq <= 0;
84  else if (set) pending_rq <= 0;
85  else if ( refresh_due && !grant) pending_rq <= pending_rq+1;
86  else if (!refresh_due && grant) pending_rq <= pending_rq-1;
87 
88  if (mrst) want <= 0;
89  else want<= en_refresh && en_r && (pending_rq != 0);
90 
91  if (mrst) need <= 0;
92  else need <= en_refresh && en_r && (pending_rq[4:3] != 0);
93  end
94 endmodule
95 
reg 4547need
Definition: ddr_refresh.v:48
[7:0] 4544refresh_period
Definition: ddr_refresh.v:45
4554refresh_duereg
Definition: ddr_refresh.v:56
reg 4546want
Definition: ddr_refresh.v:47
4549pre_divreg[3:0]
Definition: ddr_refresh.v:51
4553overwire
Definition: ddr_refresh.v:55
4551period_cntrreg[7:0]
Definition: ddr_refresh.v:53
4555en_refreshreg
Definition: ddr_refresh.v:57
4550pending_rqreg[4:0]
Definition: ddr_refresh.v:52