AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
Main Page
Design Unit List
Files
File List
All
Classes
Variables
src
common
DDR
ddr3_1_9_a
ui
mig_7series_v1_9_ui_cmd.v
1
//*****************************************************************************
2
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
3
//
4
// This file contains confidential and proprietary information
5
// of Xilinx, Inc. and is protected under U.S. and
6
// international copyright and other intellectual property
7
// laws.
8
//
9
// DISCLAIMER
10
// This disclaimer is not a license and does not grant any
11
// rights to the materials distributed herewith. Except as
12
// otherwise provided in a valid license issued to you by
13
// Xilinx, and to the maximum extent permitted by applicable
14
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
15
// WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
16
// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
17
// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
18
// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
19
// (2) Xilinx shall not be liable (whether in contract or tort,
20
// including negligence, or under any other theory of
21
// liability) for any loss or damage of any kind or nature
22
// related to, arising under or in connection with these
23
// materials, including for any direct, or any indirect,
24
// special, incidental, or consequential loss or damage
25
// (including loss of data, profits, goodwill, or any type of
26
// loss or damage suffered as a result of any action brought
27
// by a third party) even if such damage or loss was
28
// reasonably foreseeable or Xilinx had been advised of the
29
// possibility of the same.
30
//
31
// CRITICAL APPLICATIONS
32
// Xilinx products are not designed or intended to be fail-
33
// safe, or for use in any application requiring fail-safe
34
// performance, such as life-support or safety devices or
35
// systems, Class III medical devices, nuclear facilities,
36
// applications related to the deployment of airbags, or any
37
// other applications that could lead to death, personal
38
// injury, or severe property or environmental damage
39
// (individually and collectively, "Critical
40
// Applications"). Customer assumes the sole risk and
41
// liability of any use of Xilinx products in Critical
42
// Applications, subject only to applicable laws and
43
// regulations governing limitations on product liability.
44
//
45
// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
46
// PART OF THIS FILE AT ALL TIMES.
47
//
48
//*****************************************************************************
49
// ____ ____
50
// / /\/ /
51
// /___/ \ / Vendor : Xilinx
52
// \ \ \/ Version : %version
53
// \ \ Application : MIG
54
// / / Filename : ui_cmd.v
55
// /___/ /\ Date Last Modified : $date$
56
// \ \ / \ Date Created : Tue Jun 30 2009
57
// \___\/\___\
58
//
59
//Device : 7-Series
60
//Design Name : DDR3 SDRAM
61
//Purpose :
62
//Reference :
63
//Revision History :
64
//*****************************************************************************
65
66
`timescale
1
ps /
1
ps
67
68
// User interface command port.
69
70
module
mig_7series_v1_9_ui_cmd
#
71
(
72
parameter
TCQ
=
100
,
73
parameter
ADDR_WIDTH
=
33
,
74
parameter
BANK_WIDTH
=
3
,
75
parameter
COL_WIDTH
=
12
,
76
parameter
DATA_BUF_ADDR_WIDTH
=
5
,
77
parameter
RANK_WIDTH
=
2
,
78
parameter
ROW_WIDTH
=
16
,
79
parameter
RANKS
=
4
,
80
parameter
MEM_ADDR_ORDER
=
"BANK_ROW_COLUMN"
81
)
82
(
/*AUTOARG**/
83
// Outputs
84
app_rdy
,
use_addr
,
rank
,
bank
,
row
,
col
,
size
,
cmd
,
hi_priority
,
85
rd_accepted
,
wr_accepted
,
data_buf_addr
,
86
// Inputs
87
rst
,
clk
,
accept_ns
,
rd_buf_full
,
wr_req_16
,
app_addr
,
app_cmd
,
88
app_sz
,
app_hi_pri
,
app_en
,
wr_data_buf_addr
,
rd_data_buf_addr_r
89
);
90
91
input
rst
;
92
input
clk
;
93
94
input
accept_ns
;
95
input
rd_buf_full
;
96
input
wr_req_16
;
97
wire
app_rdy_ns
=
accept_ns
&& ~
rd_buf_full
&& ~
wr_req_16
;
98
(*
keep
=
"true"
,
max_fanout
=
10
*)
reg
app_rdy_r
=
1'b0
/* synthesis syn_maxfan = 10 **/
;
99
always
@(
posedge
clk
)
app_rdy_r
<= #TCQ
app_rdy_ns
;
100
output
wire
app_rdy
;
101
assign
app_rdy
=
app_rdy_r
;
102
103
input
[
ADDR_WIDTH
-
1
:
0
]
app_addr
;
104
input
[
2
:
0
]
app_cmd
;
105
input
app_sz
;
106
input
app_hi_pri
;
107
input
app_en
;
108
109
reg
[
ADDR_WIDTH
-
1
:
0
]
app_addr_r1
= {
ADDR_WIDTH
{
1'b0
}};
110
reg
[
ADDR_WIDTH
-
1
:
0
]
app_addr_r2
= {
ADDR_WIDTH
{
1'b0
}};
111
reg
[
2
:
0
]
app_cmd_r1
;
112
reg
[
2
:
0
]
app_cmd_r2
;
113
reg
app_sz_r1
;
114
reg
app_sz_r2
;
115
reg
app_hi_pri_r1
;
116
reg
app_hi_pri_r2
;
117
reg
app_en_r1
;
118
reg
app_en_r2
;
119
120
wire
[
ADDR_WIDTH
-
1
:
0
]
app_addr_ns1
=
app_rdy_r
&&
app_en
?
app_addr
:
app_addr_r1
;
121
wire
[
ADDR_WIDTH
-
1
:
0
]
app_addr_ns2
=
app_rdy_r
?
app_addr_r1
:
app_addr_r2
;
122
wire
[
2
:
0
]
app_cmd_ns1
=
app_rdy_r
?
app_cmd
:
app_cmd_r1
;
123
wire
[
2
:
0
]
app_cmd_ns2
=
app_rdy_r
?
app_cmd_r1
:
app_cmd_r2
;
124
wire
app_sz_ns1
=
app_rdy_r
?
app_sz
:
app_sz_r1
;
125
wire
app_sz_ns2
=
app_rdy_r
?
app_sz_r1
:
app_sz_r2
;
126
wire
app_hi_pri_ns1
=
app_rdy_r
?
app_hi_pri
:
app_hi_pri_r1
;
127
wire
app_hi_pri_ns2
=
app_rdy_r
?
app_hi_pri_r1
:
app_hi_pri_r2
;
128
wire
app_en_ns1
= ~
rst
&& (
app_rdy_r
?
app_en
:
app_en_r1
);
129
wire
app_en_ns2
= ~
rst
&& (
app_rdy_r
?
app_en_r1
:
app_en_r2
);
130
131
always
@(
posedge
clk
)
begin
132
if
(
rst
)
begin
133
app_addr_r1
<= #TCQ {
ADDR_WIDTH
{
1'b0
}};
134
app_addr_r2
<= #TCQ {
ADDR_WIDTH
{
1'b0
}};
135
end
else
begin
136
app_addr_r1
<= #TCQ
app_addr_ns1
;
137
app_addr_r2
<= #TCQ
app_addr_ns2
;
138
end
139
app_cmd_r1
<= #TCQ
app_cmd_ns1
;
140
app_cmd_r2
<= #TCQ
app_cmd_ns2
;
141
app_sz_r1
<= #TCQ
app_sz_ns1
;
142
app_sz_r2
<= #TCQ
app_sz_ns2
;
143
app_hi_pri_r1
<= #TCQ
app_hi_pri_ns1
;
144
app_hi_pri_r2
<= #TCQ
app_hi_pri_ns2
;
145
app_en_r1
<= #TCQ
app_en_ns1
;
146
app_en_r2
<= #TCQ
app_en_ns2
;
147
end
// always @ (posedge clk)
148
149
wire
use_addr_lcl
=
app_en_r2
&&
app_rdy_r
;
150
output
wire
use_addr
;
151
assign
use_addr
=
use_addr_lcl
;
152
153
output
wire
[
RANK_WIDTH
-
1
:
0
]
rank
;
154
output
wire
[
BANK_WIDTH
-
1
:
0
]
bank
;
155
output
wire
[
ROW_WIDTH
-
1
:
0
]
row
;
156
output
wire
[
COL_WIDTH
-
1
:
0
]
col
;
157
output
wire
size
;
158
output
wire
[
2
:
0
]
cmd
;
159
output
wire
hi_priority
;
160
161
/* assign col = app_rdy_r
162
? app_addr_r1[0+:COL_WIDTH]
163
: app_addr_r2[0+:COL_WIDTH];**/
164
generate
165
begin
166
if
(
MEM_ADDR_ORDER
==
"TG_TEST"
)
167
begin
168
assign
col
[
4
:
0
] =
app_rdy_r
169
?
app_addr_r1
[
0
+:
5
]
170
:
app_addr_r2
[
0
+:
5
];
171
172
if
(
RANKS
==
1
)
173
begin
174
assign
col
[
COL_WIDTH
-
1
:
COL_WIDTH
-
2
] =
app_rdy_r
175
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+:
2
]
176
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+:
2
];
177
assign
col
[
COL_WIDTH
-
3
:
5
] =
app_rdy_r
178
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+
2
+
2
+:
COL_WIDTH
-
7
]
179
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+
2
+
2
+:
COL_WIDTH
-
7
];
180
end
181
else
182
begin
183
assign
col
[
COL_WIDTH
-
1
:
COL_WIDTH
-
2
] =
app_rdy_r
184
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+:
2
]
185
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+:
2
];
186
assign
col
[
COL_WIDTH
-
3
:
5
] =
app_rdy_r
187
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+
2
+
2
+:
COL_WIDTH
-
7
]
188
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+
2
+
2
+:
COL_WIDTH
-
7
];
189
end
190
assign
row
[
2
:
0
] =
app_rdy_r
191
?
app_addr_r1
[
5
+:
3
]
192
:
app_addr_r2
[
5
+:
3
];
193
if
(
RANKS
==
1
)
194
begin
195
assign
row
[
ROW_WIDTH
-
1
:
ROW_WIDTH
-
2
] =
app_rdy_r
196
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+
2
+:
2
]
197
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+
2
+:
2
];
198
assign
row
[
ROW_WIDTH
-
3
:
3
] =
app_rdy_r
199
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+
2
+
2
+
COL_WIDTH
-
7
+:
ROW_WIDTH
-
5
]
200
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+
2
+
2
+
COL_WIDTH
-
7
+:
ROW_WIDTH
-
5
];
201
end
202
else
203
begin
204
assign
row
[
ROW_WIDTH
-
1
:
ROW_WIDTH
-
2
] =
app_rdy_r
205
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+
2
+:
2
]
206
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+
2
+:
2
];
207
assign
row
[
ROW_WIDTH
-
3
:
3
] =
app_rdy_r
208
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+
2
+
2
+
COL_WIDTH
-
7
+:
ROW_WIDTH
-
5
]
209
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+
RANK_WIDTH
+
2
+
2
+
COL_WIDTH
-
7
+:
ROW_WIDTH
-
5
];
210
end
211
assign
bank
=
app_rdy_r
212
?
app_addr_r1
[
5
+
3
+:
BANK_WIDTH
]
213
:
app_addr_r2
[
5
+
3
+:
BANK_WIDTH
];
214
assign
rank
= (
RANKS
==
1
)
215
?
1'b0
216
:
app_rdy_r
217
?
app_addr_r1
[
5
+
3
+
BANK_WIDTH
+:
RANK_WIDTH
]
218
:
app_addr_r2
[
5
+
3
+
BANK_WIDTH
+:
RANK_WIDTH
];
219
end
220
else
if
(
MEM_ADDR_ORDER
==
"ROW_BANK_COLUMN"
)
221
begin
222
assign
col
=
app_rdy_r
223
?
app_addr_r1
[
0
+:
COL_WIDTH
]
224
:
app_addr_r2
[
0
+:
COL_WIDTH
];
225
assign
row
=
app_rdy_r
226
?
app_addr_r1
[
COL_WIDTH
+
BANK_WIDTH
+:
ROW_WIDTH
]
227
:
app_addr_r2
[
COL_WIDTH
+
BANK_WIDTH
+:
ROW_WIDTH
];
228
assign
bank
=
app_rdy_r
229
?
app_addr_r1
[
COL_WIDTH
+:
BANK_WIDTH
]
230
:
app_addr_r2
[
COL_WIDTH
+:
BANK_WIDTH
];
231
assign
rank
= (
RANKS
==
1
)
232
?
1'b0
233
:
app_rdy_r
234
?
app_addr_r1
[
COL_WIDTH
+
ROW_WIDTH
+
BANK_WIDTH
+:
RANK_WIDTH
]
235
:
app_addr_r2
[
COL_WIDTH
+
ROW_WIDTH
+
BANK_WIDTH
+:
RANK_WIDTH
];
236
end
237
else
238
begin
239
assign
col
=
app_rdy_r
240
?
app_addr_r1
[
0
+:
COL_WIDTH
]
241
:
app_addr_r2
[
0
+:
COL_WIDTH
];
242
assign
row
=
app_rdy_r
243
?
app_addr_r1
[
COL_WIDTH
+:
ROW_WIDTH
]
244
:
app_addr_r2
[
COL_WIDTH
+:
ROW_WIDTH
];
245
assign
bank
=
app_rdy_r
246
?
app_addr_r1
[
COL_WIDTH
+
ROW_WIDTH
+:
BANK_WIDTH
]
247
:
app_addr_r2
[
COL_WIDTH
+
ROW_WIDTH
+:
BANK_WIDTH
];
248
assign
rank
= (
RANKS
==
1
)
249
?
1'b0
250
:
app_rdy_r
251
?
app_addr_r1
[
COL_WIDTH
+
ROW_WIDTH
+
BANK_WIDTH
+:
RANK_WIDTH
]
252
:
app_addr_r2
[
COL_WIDTH
+
ROW_WIDTH
+
BANK_WIDTH
+:
RANK_WIDTH
];
253
end
254
end
255
endgenerate
256
257
/* assign rank = (RANKS == 1)
258
? 1'b0
259
: app_rdy_r
260
? app_addr_r1[COL_WIDTH+ROW_WIDTH+BANK_WIDTH+:RANK_WIDTH]
261
: app_addr_r2[COL_WIDTH+ROW_WIDTH+BANK_WIDTH+:RANK_WIDTH];**/
262
assign
size
=
app_rdy_r
263
?
app_sz_r1
264
:
app_sz_r2
;
265
assign
cmd
=
app_rdy_r
266
?
app_cmd_r1
267
:
app_cmd_r2
;
268
assign
hi_priority
=
app_rdy_r
269
?
app_hi_pri_r1
270
:
app_hi_pri_r2
;
271
272
wire
request_accepted
=
use_addr_lcl
&&
app_rdy_r
;
273
wire
rd
=
app_cmd_r2
[
1
:
0
] ==
2'b01
;
274
wire
wr
=
app_cmd_r2
[
1
:
0
] ==
2'b00
;
275
wire
wr_bytes
=
app_cmd_r2
[
1
:
0
] ==
2'b11
;
276
wire
write
=
wr
||
wr_bytes
;
277
output
wire
rd_accepted
;
278
assign
rd_accepted
=
request_accepted
&&
rd
;
279
output
wire
wr_accepted
;
280
assign
wr_accepted
=
request_accepted
&&
write
;
281
282
input
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
wr_data_buf_addr
;
283
input
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
rd_data_buf_addr_r
;
284
output
wire
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
data_buf_addr
;
285
286
assign
data_buf_addr
= ~
write
?
rd_data_buf_addr_r
:
wr_data_buf_addr
;
287
288
endmodule
// ui_cmd
289
290
// Local Variables:
291
// verilog-library-directories:(".")
292
// End:
Generated on Wed Apr 18 2018 10:55:28 for AMC13 by
1.8.1