-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcommand_if.v
171 lines (143 loc) · 3.3 KB
/
command_if.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*********************************************************
MODULE: Sub Level SDRAM Controller Command Interface
FILE NAME: command_if.v
VERSION: 1.0
DATE: April 8nd, 2002
AUTHOR: Hossein Amidi
COMPANY:
CODE TYPE: Register Transfer Level
DESCRIPTION: This module is the sub level RTL code of SDRAM Controller ASIC verilog
code. It will decode the uProcessor command, its a command interface block.
It will instantiate the following blocks in the ASIC:
1) Command Decoder
2) Internal Register
3) Command Acknowledge
4) Refresh Timer
Hossein Amidi
(C) April 2002
*********************************************************/
// DEFINES
`timescale 1ns / 10ps
module command_if (// Input
reset,
clk0,
paddr,
cmd,
cmack,
ref_ack,
// Output
cmdack,
caddr,
nop,
reada,
writea,
refresh,
preacharge,
load_mod,
cas_lat,
ras_cas,
ref_dur,
page_mod,
bur_len,
ref_req
);
// Parameter
`include "parameter.v"
// Input
input reset;
input clk0;
input [padd_size - 1 : 0]paddr;
input [cmd_size - 1 : 0]cmd;
input cmack;
input ref_ack;
// Output
output cmdack;
output [padd_size - 1 : 0]caddr;
output nop;
output reada;
output writea;
output refresh;
output preacharge;
output load_mod;
output [cas_size - 1 : 0]cas_lat;
output [rc_size - 1 : 0]ras_cas;
output [ref_dur_size - 1 : 0]ref_dur;
output page_mod;
output [burst_size - 1 : 0]bur_len;
output ref_req;
// Internal wire and reg signals
wire reset;
wire clk0;
wire [padd_size - 1 : 0]paddr;
wire [cmd_size - 1 : 0]cmd;
wire nop;
wire reada;
wire writea;
wire refresh;
wire preacharge;
wire load_mod;
wire load_time;
wire load_rfcnt;
wire [padd_size - 1 : 0]caddr;
wire [cas_size - 1 : 0]cas_lat;
wire [rc_size - 1 : 0]ras_cas;
wire [ref_dur_size - 1 : 0]ref_dur;
wire page_mod;
wire [burst_size - 1 : 0]bur_len;
wire [15:0]refresh_count;
wire cmack;
wire cmdack;
wire ref_ack;
wire ref_req;
// Assignment
/************************************ Sub-Level Instantiation *****************************/
cmd_decoder cmd_decoder0( // Input
.reset(reset),
.clk0(clk0),
.paddr(paddr),
.cmd(cmd),
.cmdack(cmdack),
// Output
.nop(nop),
.reada(reada),
.writea(writea),
.refresh(refresh),
.preacharge(preacharge),
.load_mod(load_mod),
.load_time(load_time),
.load_rfcnt(load_rfcnt),
.caddr(caddr)
);
internal_reg internal_reg0( // Input
.reset(reset),
.clk0(clk0),
.load_time(load_time),
.load_rfcnt(load_rfcnt),
.caddr(caddr),
// Output
.cas_lat(cas_lat),
.ras_cas(ras_cas),
.ref_dur(ref_dur),
.page_mod(page_mod),
.bur_len(bur_len),
.refresh_count(refresh_count)
);
cmd_ack cmd_ack0(// Input
.reset(reset),
.clk0(clk0),
.cmack(cmack),
.load_time(load_time),
.load_rfcnt(load_rfcnt),
// Output
.cmdack(cmdack)
);
ref_timer ref_timer0(// Input
.reset(reset),
.clk0(clk0),
.refresh_count(refresh_count),
.bur_len(bur_len),
.ref_ack(ref_ack),
// Output
.ref_req(ref_req)
);
endmodule