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
;
56
reg
refresh_due
;
57
reg
en_refresh
;
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
ddr_refresh.4547need
reg 4547need
Definition:
ddr_refresh.v:48
ddr_refresh.4544refresh_period
[7:0] 4544refresh_period
Definition:
ddr_refresh.v:45
ddr_refresh.4554refresh_due
4554refresh_duereg
Definition:
ddr_refresh.v:56
ddr_refresh.4546want
reg 4546want
Definition:
ddr_refresh.v:47
ddr_refresh.4549pre_div
4549pre_divreg[3:0]
Definition:
ddr_refresh.v:51
ddr_refresh.4541mrst
4541mrst
Definition:
ddr_refresh.v:42
ddr_refresh.4548grant
4548grant
Definition:
ddr_refresh.v:49
ddr_refresh.4542clk
4542clk
Definition:
ddr_refresh.v:43
ddr_refresh.4545set
4545set
Definition:
ddr_refresh.v:46
ddr_refresh.4553over
4553overwire
Definition:
ddr_refresh.v:55
ddr_refresh.4543en
4543en
Definition:
ddr_refresh.v:44
ddr_refresh.4552cry
4552cryreg
Definition:
ddr_refresh.v:54
ddr_refresh
Definition:
ddr_refresh.v:41
ddr_refresh.4551period_cntr
4551period_cntrreg[7:0]
Definition:
ddr_refresh.v:53
ddr_refresh.4556en_r
4556en_rreg
Definition:
ddr_refresh.v:58
ddr_refresh.4555en_refresh
4555en_refreshreg
Definition:
ddr_refresh.v:57
ddr_refresh.4550pending_rq
4550pending_rqreg[4:0]
Definition:
ddr_refresh.v:52
memctrl
ddr_refresh.v
Generated by
1.8.12