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_top.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_top.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
// Top level of simple user interface.
67
68
69
`timescale
1
ps /
1
ps
70
71
module
mig_7series_v1_9_ui_top
#
72
(
73
parameter
TCQ
=
100
,
74
parameter
APP_DATA_WIDTH
=
256
,
75
parameter
APP_MASK_WIDTH
=
32
,
76
parameter
BANK_WIDTH
=
3
,
77
parameter
COL_WIDTH
=
12
,
78
parameter
CWL
=
5
,
79
parameter
DATA_BUF_ADDR_WIDTH
=
5
,
80
parameter
ECC
=
"OFF"
,
81
parameter
ECC_TEST
=
"OFF"
,
82
parameter
ORDERING
=
"NORM"
,
83
parameter
nCK_PER_CLK
=
2
,
84
parameter
RANKS
=
4
,
85
parameter
REG_CTRL
=
"ON"
,
// "ON" for registered DIMM
86
parameter
RANK_WIDTH
=
2
,
87
parameter
ROW_WIDTH
=
16
,
88
parameter
MEM_ADDR_ORDER
=
"BANK_ROW_COLUMN"
89
)
90
(
/*AUTOARG**/
91
// Outputs
92
wr_data_mask
,
wr_data
,
use_addr
,
size
,
row
,
raw_not_ecc
,
rank
,
93
hi_priority
,
data_buf_addr
,
col
,
cmd
,
bank
,
app_wdf_rdy
,
app_rdy
,
94
app_rd_data_valid
,
app_rd_data_end
,
app_rd_data
,
95
app_ecc_multiple_err
,
correct_en
,
sr_req
,
app_sr_active
,
ref_req
,
app_ref_ack
,
96
zq_req
,
app_zq_ack
,
97
// Inputs
98
wr_data_offset
,
wr_data_en
,
wr_data_addr
,
rst
,
rd_data_offset
,
99
rd_data_end
,
rd_data_en
,
rd_data_addr
,
rd_data
,
ecc_multiple
,
clk
,
100
app_wdf_wren
,
app_wdf_mask
,
app_wdf_end
,
app_wdf_data
,
app_sz
,
101
app_raw_not_ecc
,
app_hi_pri
,
app_en
,
app_cmd
,
app_addr
,
accept_ns
,
102
accept
,
app_correct_en
,
app_sr_req
,
sr_active
,
app_ref_req
,
ref_ack
,
103
app_zq_req
,
zq_ack
104
);
105
106
input
accept
;
107
localparam
ADDR_WIDTH
=
RANK_WIDTH
+
BANK_WIDTH
+
ROW_WIDTH
+
COL_WIDTH
;
108
109
// Add a cycle to CWL for the register in RDIMM devices
110
localparam
CWL_M
= (
REG_CTRL
==
"ON"
) ?
CWL
+
1
:
CWL
;
111
112
input
app_correct_en
;
113
output
wire
correct_en
;
114
assign
correct_en
=
app_correct_en
;
115
116
input
app_sr_req
;
117
output
wire
sr_req
;
118
assign
sr_req
=
app_sr_req
;
119
120
input
sr_active
;
121
output
wire
app_sr_active
;
122
assign
app_sr_active
=
sr_active
;
123
124
input
app_ref_req
;
125
output
wire
ref_req
;
126
assign
ref_req
=
app_ref_req
;
127
128
input
ref_ack
;
129
output
wire
app_ref_ack
;
130
assign
app_ref_ack
=
ref_ack
;
131
132
input
app_zq_req
;
133
output
wire
zq_req
;
134
assign
zq_req
=
app_zq_req
;
135
136
input
zq_ack
;
137
output
wire
app_zq_ack
;
138
assign
app_zq_ack
=
zq_ack
;
139
140
/*AUTOINPUT**/
141
// Beginning of automatic inputs (from unused autoinst inputs)
142
input
accept_ns
;
// To ui_cmd0 of ui_cmd.v
143
input
[
ADDR_WIDTH
-
1
:
0
]
app_addr
;
// To ui_cmd0 of ui_cmd.v
144
input
[
2
:
0
]
app_cmd
;
// To ui_cmd0 of ui_cmd.v
145
input
app_en
;
// To ui_cmd0 of ui_cmd.v
146
input
app_hi_pri
;
// To ui_cmd0 of ui_cmd.v
147
input
[
2
*
nCK_PER_CLK
-
1
:
0
]
app_raw_not_ecc
;
// To ui_wr_data0 of ui_wr_data.v
148
input
app_sz
;
// To ui_cmd0 of ui_cmd.v
149
input
[
APP_DATA_WIDTH
-
1
:
0
]
app_wdf_data
;
// To ui_wr_data0 of ui_wr_data.v
150
input
app_wdf_end
;
// To ui_wr_data0 of ui_wr_data.v
151
input
[
APP_MASK_WIDTH
-
1
:
0
]
app_wdf_mask
;
// To ui_wr_data0 of ui_wr_data.v
152
input
app_wdf_wren
;
// To ui_wr_data0 of ui_wr_data.v
153
input
clk
;
// To ui_cmd0 of ui_cmd.v, ...
154
input
[
2
*
nCK_PER_CLK
-
1
:
0
]
ecc_multiple
;
// To ui_rd_data0 of ui_rd_data.v
155
input
[
APP_DATA_WIDTH
-
1
:
0
]
rd_data
;
// To ui_rd_data0 of ui_rd_data.v
156
input
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
rd_data_addr
;
// To ui_rd_data0 of ui_rd_data.v
157
input
rd_data_en
;
// To ui_rd_data0 of ui_rd_data.v
158
input
rd_data_end
;
// To ui_rd_data0 of ui_rd_data.v
159
input
rd_data_offset
;
// To ui_rd_data0 of ui_rd_data.v
160
input
rst
;
// To ui_cmd0 of ui_cmd.v, ...
161
input
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
wr_data_addr
;
// To ui_wr_data0 of ui_wr_data.v
162
input
wr_data_en
;
// To ui_wr_data0 of ui_wr_data.v
163
input
wr_data_offset
;
// To ui_wr_data0 of ui_wr_data.v
164
// End of automatics
165
166
/*AUTOOUTPUT**/
167
// Beginning of automatic outputs (from unused autoinst outputs)
168
output
[
2
*
nCK_PER_CLK
-
1
:
0
]
app_ecc_multiple_err
;
// From ui_rd_data0 of ui_rd_data.v
169
output
[
APP_DATA_WIDTH
-
1
:
0
]
app_rd_data
;
// From ui_rd_data0 of ui_rd_data.v
170
output
app_rd_data_end
;
// From ui_rd_data0 of ui_rd_data.v
171
output
app_rd_data_valid
;
// From ui_rd_data0 of ui_rd_data.v
172
output
app_rdy
;
// From ui_cmd0 of ui_cmd.v
173
output
app_wdf_rdy
;
// From ui_wr_data0 of ui_wr_data.v
174
output
[
BANK_WIDTH
-
1
:
0
]
bank
;
// From ui_cmd0 of ui_cmd.v
175
output
[
2
:
0
]
cmd
;
// From ui_cmd0 of ui_cmd.v
176
output
[
COL_WIDTH
-
1
:
0
]
col
;
// From ui_cmd0 of ui_cmd.v
177
output
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
data_buf_addr
;
// From ui_cmd0 of ui_cmd.v
178
output
hi_priority
;
// From ui_cmd0 of ui_cmd.v
179
output
[
RANK_WIDTH
-
1
:
0
]
rank
;
// From ui_cmd0 of ui_cmd.v
180
output
[
2
*
nCK_PER_CLK
-
1
:
0
]
raw_not_ecc
;
// From ui_wr_data0 of ui_wr_data.v
181
output
[
ROW_WIDTH
-
1
:
0
]
row
;
// From ui_cmd0 of ui_cmd.v
182
output
size
;
// From ui_cmd0 of ui_cmd.v
183
output
use_addr
;
// From ui_cmd0 of ui_cmd.v
184
output
[
APP_DATA_WIDTH
-
1
:
0
]
wr_data
;
// From ui_wr_data0 of ui_wr_data.v
185
output
[
APP_MASK_WIDTH
-
1
:
0
]
wr_data_mask
;
// From ui_wr_data0 of ui_wr_data.v
186
// End of automatics
187
188
/*AUTOWIRE**/
189
// Beginning of automatic wires (for undeclared instantiated-module outputs)
190
wire
[
3
:
0
]
ram_init_addr
;
// From ui_rd_data0 of ui_rd_data.v
191
wire
ram_init_done_r
;
// From ui_rd_data0 of ui_rd_data.v
192
wire
rd_accepted
;
// From ui_cmd0 of ui_cmd.v
193
wire
rd_buf_full
;
// From ui_rd_data0 of ui_rd_data.v
194
wire
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
rd_data_buf_addr_r
;
// From ui_rd_data0 of ui_rd_data.v
195
wire
wr_accepted
;
// From ui_cmd0 of ui_cmd.v
196
wire
[
DATA_BUF_ADDR_WIDTH
-
1
:
0
]
wr_data_buf_addr
;
// From ui_wr_data0 of ui_wr_data.v
197
wire
wr_req_16
;
// From ui_wr_data0 of ui_wr_data.v
198
// End of automatics
199
200
// In the UI, the read and write buffers are allowed to be asymmetric to
201
// to maximize read performance, but the MC's native interface requires
202
// symmetry, so we zero-fill the write pointer
203
generate
204
if
(
DATA_BUF_ADDR_WIDTH
>
4
)
begin
205
assign
wr_data_buf_addr
[
DATA_BUF_ADDR_WIDTH
-
1
:
4
] =
0
;
206
end
207
endgenerate
208
209
mig_7series_v1_9_ui_cmd
#
210
(
/*AUTOINSTPARAM**/
211
// Parameters
212
.
TCQ
(
TCQ
),
213
.
ADDR_WIDTH
(
ADDR_WIDTH
),
214
.
BANK_WIDTH
(
BANK_WIDTH
),
215
.
COL_WIDTH
(
COL_WIDTH
),
216
.
DATA_BUF_ADDR_WIDTH
(
DATA_BUF_ADDR_WIDTH
),
217
.
RANK_WIDTH
(
RANK_WIDTH
),
218
.
ROW_WIDTH
(
ROW_WIDTH
),
219
.
RANKS
(
RANKS
),
220
.
MEM_ADDR_ORDER
(
MEM_ADDR_ORDER
))
221
ui_cmd0
222
(
/*AUTOINST**/
223
// Outputs
224
.
app_rdy
(
app_rdy
),
225
.
use_addr
(
use_addr
),
226
.
rank
(
rank
[
RANK_WIDTH
-
1
:
0
]),
227
.
bank
(
bank
[
BANK_WIDTH
-
1
:
0
]),
228
.
row
(
row
[
ROW_WIDTH
-
1
:
0
]),
229
.
col
(
col
[
COL_WIDTH
-
1
:
0
]),
230
.
size
(
size
),
231
.
cmd
(
cmd
[
2
:
0
]),
232
.
hi_priority
(
hi_priority
),
233
.
rd_accepted
(
rd_accepted
),
234
.
wr_accepted
(
wr_accepted
),
235
.
data_buf_addr
(
data_buf_addr
),
236
// Inputs
237
.
rst
(
rst
),
238
.
clk
(
clk
),
239
.
accept_ns
(
accept_ns
),
240
.
rd_buf_full
(
rd_buf_full
),
241
.
wr_req_16
(
wr_req_16
),
242
.
app_addr
(
app_addr
[
ADDR_WIDTH
-
1
:
0
]),
243
.
app_cmd
(
app_cmd
[
2
:
0
]),
244
.
app_sz
(
app_sz
),
245
.
app_hi_pri
(
app_hi_pri
),
246
.
app_en
(
app_en
),
247
.
wr_data_buf_addr
(
wr_data_buf_addr
),
248
.
rd_data_buf_addr_r
(
rd_data_buf_addr_r
));
249
250
mig_7series_v1_9_ui_wr_data
#
251
(
/*AUTOINSTPARAM**/
252
// Parameters
253
.
TCQ
(
TCQ
),
254
.
APP_DATA_WIDTH
(
APP_DATA_WIDTH
),
255
.
APP_MASK_WIDTH
(
APP_MASK_WIDTH
),
256
.
nCK_PER_CLK
(
nCK_PER_CLK
),
257
.
ECC
(
ECC
),
258
.
ECC_TEST
(
ECC_TEST
),
259
.
CWL
(
CWL_M
))
260
ui_wr_data0
261
(
/*AUTOINST**/
262
// Outputs
263
.
app_wdf_rdy
(
app_wdf_rdy
),
264
.
wr_req_16
(
wr_req_16
),
265
.
wr_data_buf_addr
(
wr_data_buf_addr
[
3
:
0
]),
266
.
wr_data
(
wr_data
[
APP_DATA_WIDTH
-
1
:
0
]),
267
.
wr_data_mask
(
wr_data_mask
[
APP_MASK_WIDTH
-
1
:
0
]),
268
.
raw_not_ecc
(
raw_not_ecc
[
2
*
nCK_PER_CLK
-
1
:
0
]),
269
// Inputs
270
.
rst
(
rst
),
271
.
clk
(
clk
),
272
.
app_wdf_data
(
app_wdf_data
[
APP_DATA_WIDTH
-
1
:
0
]),
273
.
app_wdf_mask
(
app_wdf_mask
[
APP_MASK_WIDTH
-
1
:
0
]),
274
.
app_raw_not_ecc
(
app_raw_not_ecc
[
2
*
nCK_PER_CLK
-
1
:
0
]),
275
.
app_wdf_wren
(
app_wdf_wren
),
276
.
app_wdf_end
(
app_wdf_end
),
277
.
wr_data_offset
(
wr_data_offset
),
278
.
wr_data_addr
(
wr_data_addr
[
3
:
0
]),
279
.
wr_data_en
(
wr_data_en
),
280
.
wr_accepted
(
wr_accepted
),
281
.
ram_init_done_r
(
ram_init_done_r
),
282
.
ram_init_addr
(
ram_init_addr
));
283
284
mig_7series_v1_9_ui_rd_data
#
285
(
/*AUTOINSTPARAM**/
286
// Parameters
287
.
TCQ
(
TCQ
),
288
.
APP_DATA_WIDTH
(
APP_DATA_WIDTH
),
289
.
DATA_BUF_ADDR_WIDTH
(
DATA_BUF_ADDR_WIDTH
),
290
.
nCK_PER_CLK
(
nCK_PER_CLK
),
291
.
ECC
(
ECC
),
292
.
ORDERING
(
ORDERING
))
293
ui_rd_data0
294
(
/*AUTOINST**/
295
// Outputs
296
.
ram_init_done_r
(
ram_init_done_r
),
297
.
ram_init_addr
(
ram_init_addr
),
298
.
app_rd_data_valid
(
app_rd_data_valid
),
299
.
app_rd_data_end
(
app_rd_data_end
),
300
.
app_rd_data
(
app_rd_data
[
APP_DATA_WIDTH
-
1
:
0
]),
301
.
app_ecc_multiple_err
(
app_ecc_multiple_err
[
2
*
nCK_PER_CLK
-
1
:
0
]),
302
.
rd_buf_full
(
rd_buf_full
),
303
.
rd_data_buf_addr_r
(
rd_data_buf_addr_r
),
304
// Inputs
305
.
rst
(
rst
),
306
.
clk
(
clk
),
307
.
rd_data_en
(
rd_data_en
),
308
.
rd_data_addr
(
rd_data_addr
),
309
.
rd_data_offset
(
rd_data_offset
),
310
.
rd_data_end
(
rd_data_end
),
311
.
rd_data
(
rd_data
[
APP_DATA_WIDTH
-
1
:
0
]),
312
.
ecc_multiple
(
ecc_multiple
[
3
:
0
]),
313
.
rd_accepted
(
rd_accepted
));
314
315
316
endmodule
// ui_top
317
318
// Local Variables:
319
// verilog-library-directories:("." "../mc")
320
// End:
Generated on Wed Apr 18 2018 10:55:28 for AMC13 by
1.8.1