w11 - vhd 0.794
W11 CPU core and support modules
Loading...
Searching...
No Matches
example_top.vhd
Go to the documentation of this file.
1--*****************************************************************************
2-- (c) Copyright 2009 - 2012 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 : 4.2
53-- \ \ Application : MIG
54-- / / Filename : example_top.vhd
55-- /___/ /\ Date Last Modified : $Date: 2011/06/02 08:35:03 $
56-- \ \ / \ Date Created : Wed Feb 01 2012
57-- \___\/\___\
58--
59-- Device : 7 Series
60-- Design Name : DDR3 SDRAM
61-- Purpose :
62-- Top-level module. This module serves as an example,
63-- and allows the user to synthesize a self-contained design,
64-- which they can be used to test their hardware.
65-- In addition to the memory controller, the module instantiates:
66-- 1. Synthesizable testbench - used to model user's backend logic
67-- and generate different traffic patterns
68-- Reference :
69-- Revision History :
70--*****************************************************************************
71
72library ieee;
73use ieee.std_logic_1164.all;
74use ieee.numeric_std.all;
75
76
77entity example_top is
78 generic (
79 --***************************************************************************
80 -- Traffic Gen related parameters
81 --***************************************************************************
82 BL_WIDTH : integer := 10;
83 PORT_MODE : string := "BI_MODE";
84 DATA_MODE : std_logic_vector(3 downto 0) := "0010";
85 TST_MEM_INSTR_MODE : string := "R_W_INSTR_MODE";
86 EYE_TEST : string := "FALSE";
87 -- set EYE_TEST = "TRUE" to probe memory
88 -- signals. Traffic Generator will only
89 -- write to one single location and no
90 -- read transactions will be generated.
91 DATA_PATTERN : string := "DGEN_ALL";
92 -- For small devices, choose one only.
93 -- For large device, choose "DGEN_ALL"
94 -- "DGEN_HAMMER", "DGEN_WALKING1",
95 -- "DGEN_WALKING0","DGEN_ADDR","
96 -- "DGEN_NEIGHBOR","DGEN_PRBS","DGEN_ALL"
97 CMD_PATTERN : string := "CGEN_ALL";
98 -- "CGEN_PRBS","CGEN_FIXED","CGEN_BRAM",
99 -- "CGEN_SEQUENTIAL", "CGEN_ALL"
100 BEGIN_ADDRESS : std_logic_vector(31 downto 0) := X"00000000";
101 END_ADDRESS : std_logic_vector(31 downto 0) := X"00ffffff";
102 PRBS_EADDR_MASK_POS : std_logic_vector(31 downto 0) := X"ff000000";
103 CMD_WDT : std_logic_vector(31 downto 0) := X"000003ff";
104 WR_WDT : std_logic_vector(31 downto 0) := X"00001fff";
105 RD_WDT : std_logic_vector(31 downto 0) := X"000003ff";
106 --***************************************************************************
107 -- The following parameters refer to width of various ports
108 --***************************************************************************
109 COL_WIDTH : integer := 10;
110 -- # of memory Column Address bits.
111 CS_WIDTH : integer := 1;
112 -- # of unique CS outputs to memory.
113 DM_WIDTH : integer := 2;
114 -- # of DM (data mask)
115 DQ_WIDTH : integer := 16;
116 -- # of DQ (data)
117 DQS_CNT_WIDTH : integer := 1;
118 -- = ceil(log2(DQS_WIDTH))
119 DRAM_WIDTH : integer := 8;
120 -- # of DQ per DQS
121 ECC_TEST : string := "OFF";
122 RANKS : integer := 1;
123 -- # of Ranks.
124 ROW_WIDTH : integer := 14;
125 -- # of memory Row Address bits.
126 ADDR_WIDTH : integer := 28;
127 -- # = RANK_WIDTH + BANK_WIDTH
128 -- + ROW_WIDTH + COL_WIDTH;
129 -- Chip Select is always tied to low for
130 -- single rank devices
131 --***************************************************************************
132 -- The following parameters are mode register settings
133 --***************************************************************************
134 BURST_MODE : string := "8";
135 -- DDR3 SDRAM:
136 -- Burst Length (Mode Register 0).
137 -- # = "8", "4", "OTF".
138 -- DDR2 SDRAM:
139 -- Burst Length (Mode Register).
140 -- # = "8", "4".
141
142 --***************************************************************************
143 -- Simulation parameters
144 --***************************************************************************
145 SIMULATION : string := "FALSE";
146 -- Should be TRUE during design simulations and
147 -- FALSE during implementations
148
149 --***************************************************************************
150 -- IODELAY and PHY related parameters
151 --***************************************************************************
152 TCQ : integer := 100;
153
154 DRAM_TYPE : string := "DDR3";
155
156
157 --***************************************************************************
158 -- System clock frequency parameters
159 --***************************************************************************
160 nCK_PER_CLK : integer := 4;
161 -- # of memory CKs per fabric CLK
162
163 --***************************************************************************
164 -- Debug parameters
165 --***************************************************************************
166 DEBUG_PORT : string := "OFF";
167 -- # = "ON" Enable debug signals/controls.
168 -- = "OFF" Disable debug signals/controls.
169
170 --***************************************************************************
171 -- Temparature monitor parameter
172 --***************************************************************************
173 TEMP_MON_CONTROL : string := "EXTERNAL";
174 -- # = "INTERNAL", "EXTERNAL"
175
176 RST_ACT_LOW : integer := 0
177 -- =1 for active low reset,
178 -- =0 for active high.
179 );
180 port (
181
182 -- Inouts
183 ddr3_dq : inout std_logic_vector(15 downto 0);
184 ddr3_dqs_p : inout std_logic_vector(1 downto 0);
185 ddr3_dqs_n : inout std_logic_vector(1 downto 0);
186
187 -- Outputs
188 ddr3_addr : out std_logic_vector(13 downto 0);
189 ddr3_ba : out std_logic_vector(2 downto 0);
190 ddr3_ras_n : out std_logic;
191 ddr3_cas_n : out std_logic;
192 ddr3_we_n : out std_logic;
193 ddr3_reset_n : out std_logic;
194 ddr3_ck_p : out std_logic_vector(0 downto 0);
195 ddr3_ck_n : out std_logic_vector(0 downto 0);
196 ddr3_cke : out std_logic_vector(0 downto 0);
197 ddr3_cs_n : out std_logic_vector(0 downto 0);
198 ddr3_dm : out std_logic_vector(1 downto 0);
199 ddr3_odt : out std_logic_vector(0 downto 0);
200
201 -- Inputs
202 -- Single-ended system clock
203 sys_clk_i : in std_logic;
204 -- Single-ended iodelayctrl clk (reference clock)
205 clk_ref_i : in std_logic;
206
207 tg_compare_error : out std_logic;
208 init_calib_complete : out std_logic;
209 device_temp_i : in std_logic_vector(11 downto 0);
210 -- The 12 MSB bits of the temperature sensor transfer
211 -- function need to be connected to this port. This port
212 -- will be synchronized w.r.t. to fabric clock internally.
213
214
215 -- System reset - Default polarity of sys_rst pin is Active Low.
216 -- System reset polarity will change based on the option
217 -- selected in GUI.
218 sys_rst : in std_logic
219 );
220
221end entity example_top;
222
223architecture arch_example_top of example_top is
224
225
226 -- clogb2 function - ceiling of log base 2
227 function clogb2 (size : integer) return integer is
228 variable base : integer := 1;
229 variable inp : integer := 0;
230 begin
231 inp := size - 1;
232 while (inp > 1) loop
233 inp := inp/2 ;
234 base := base + 1;
235 end loop;
236 return base;
237 end function;function STR_TO_INT(BM : string) return integer is
238 begin
239 if(BM = "8") then
240 return 8;
241 elsif(BM = "4") then
242 return 4;
243 else
244 return 0;
245 end if;
246 end function;
247
248 constant RANK_WIDTH : integer := clogb2(RANKS);
249
250 function XWIDTH return integer is
251 begin
252 if(CS_WIDTH = 1) then
253 return 0;
254 else
255 return RANK_WIDTH;
256 end if;
257 end function;
258
259
260
261 constant CMD_PIPE_PLUS1 : string := "ON";
262 -- add pipeline stage between MC and PHY
263-- constant ECC_TEST : string := "OFF";
264
265 constant tPRDI : integer := 1000000;
266 -- memory tPRDI paramter in pS.
267 constant DATA_WIDTH : integer := 16;
268 constant PAYLOAD_WIDTH : integer := DATA_WIDTH;
269 constant BURST_LENGTH : integer := STR_TO_INT(BURST_MODE);
270 constant APP_DATA_WIDTH : integer := 2 * nCK_PER_CLK * PAYLOAD_WIDTH;
271 constant APP_MASK_WIDTH : integer := APP_DATA_WIDTH / 8;
272
273 --***************************************************************************
274 -- Traffic Gen related parameters (derived)
275 --***************************************************************************
276 constant TG_ADDR_WIDTH : integer := XWIDTH + 3 + ROW_WIDTH + COL_WIDTH;
277 constant MASK_SIZE : integer := DATA_WIDTH/8;
278
279
280-- Start of User Design wrapper top component
281
282 component migui_arty
283 port(
284 ddr3_dq : inout std_logic_vector(15 downto 0);
285 ddr3_dqs_p : inout std_logic_vector(1 downto 0);
286 ddr3_dqs_n : inout std_logic_vector(1 downto 0);
287
288 ddr3_addr : out std_logic_vector(13 downto 0);
289 ddr3_ba : out std_logic_vector(2 downto 0);
290 ddr3_ras_n : out std_logic;
291 ddr3_cas_n : out std_logic;
292 ddr3_we_n : out std_logic;
293 ddr3_reset_n : out std_logic;
294 ddr3_ck_p : out std_logic_vector(0 downto 0);
295 ddr3_ck_n : out std_logic_vector(0 downto 0);
296 ddr3_cke : out std_logic_vector(0 downto 0);
297 ddr3_cs_n : out std_logic_vector(0 downto 0);
298 ddr3_dm : out std_logic_vector(1 downto 0);
299 ddr3_odt : out std_logic_vector(0 downto 0);
300 app_addr : in std_logic_vector(27 downto 0);
301 app_cmd : in std_logic_vector(2 downto 0);
302 app_en : in std_logic;
303 app_wdf_data : in std_logic_vector(127 downto 0);
304 app_wdf_end : in std_logic;
305 app_wdf_mask : in std_logic_vector(15 downto 0);
306 app_wdf_wren : in std_logic;
307 app_rd_data : out std_logic_vector(127 downto 0);
308 app_rd_data_end : out std_logic;
309 app_rd_data_valid : out std_logic;
310 app_rdy : out std_logic;
311 app_wdf_rdy : out std_logic;
312 app_sr_req : in std_logic;
313 app_ref_req : in std_logic;
314 app_zq_req : in std_logic;
315 app_sr_active : out std_logic;
316 app_ref_ack : out std_logic;
317 app_zq_ack : out std_logic;
318 ui_clk : out std_logic;
319 ui_clk_sync_rst : out std_logic;
320 init_calib_complete : out std_logic;
321 -- System Clock Ports
322 sys_clk_i : in std_logic;
323 -- Reference Clock Ports
324 clk_ref_i : in std_logic;
325 device_temp_i : in std_logic_vector(11 downto 0);
326 device_temp : out std_logic_vector(11 downto 0);
327 sys_rst : in std_logic
328 );
329 end component migui_arty;
330
331-- End of User Design wrapper top component
332
333
334
335 component mig_7series_v4_2_traffic_gen_top
336 generic (
337 TCQ : integer;
338 SIMULATION : string;
339 FAMILY : string;
340 MEM_TYPE : string;
341 TST_MEM_INSTR_MODE : string;
342 --BL_WIDTH : integer;
343 nCK_PER_CLK : integer;
344 NUM_DQ_PINS : integer;
345 MEM_BURST_LEN : integer;
346 MEM_COL_WIDTH : integer;
347 DATA_WIDTH : integer;
348 ADDR_WIDTH : integer;
349 MASK_SIZE : integer := 8;
350 DATA_MODE : std_logic_vector(3 downto 0);
351 BEGIN_ADDRESS : std_logic_vector(31 downto 0);
352 END_ADDRESS : std_logic_vector(31 downto 0);
353 PRBS_EADDR_MASK_POS : std_logic_vector(31 downto 0);
354 CMDS_GAP_DELAY : std_logic_vector(5 downto 0) := "000000";
355 SEL_VICTIM_LINE : integer := 8;
356 CMD_WDT : std_logic_vector(31 downto 0) := X"000003ff";
357 WR_WDT : std_logic_vector(31 downto 0) := X"00001fff";
358 RD_WDT : std_logic_vector(31 downto 0) := X"000003ff";
359 EYE_TEST : string;
360 PORT_MODE : string;
361 DATA_PATTERN : string;
362 CMD_PATTERN : string
363 );
364 port (
365 clk : in std_logic;
366 rst : in std_logic;
367 tg_only_rst : in std_logic;
368 manual_clear_error : in std_logic;
369 memc_init_done : in std_logic;
370 memc_cmd_full : in std_logic;
371 memc_cmd_en : out std_logic;
372 memc_cmd_instr : out std_logic_vector(2 downto 0);
373 memc_cmd_bl : out std_logic_vector(5 downto 0);
374 memc_cmd_addr : out std_logic_vector(31 downto 0);
375 memc_wr_en : out std_logic;
376 memc_wr_end : out std_logic;
377 memc_wr_mask : out std_logic_vector((DATA_WIDTH/8)-1 downto 0);
378 memc_wr_data : out std_logic_vector(DATA_WIDTH-1 downto 0);
379 memc_wr_full : in std_logic;
380 memc_rd_en : out std_logic;
381 memc_rd_data : in std_logic_vector(DATA_WIDTH-1 downto 0);
382 memc_rd_empty : in std_logic;
383 qdr_wr_cmd_o : out std_logic;
384 qdr_rd_cmd_o : out std_logic;
385 vio_pause_traffic : in std_logic;
386 vio_modify_enable : in std_logic;
387 vio_data_mode_value : in std_logic_vector(3 downto 0);
388 vio_addr_mode_value : in std_logic_vector(2 downto 0);
389 vio_instr_mode_value : in std_logic_vector(3 downto 0);
390 vio_bl_mode_value : in std_logic_vector(1 downto 0);
391 vio_fixed_bl_value : in std_logic_vector(9 downto 0);
392 vio_fixed_instr_value : in std_logic_vector(2 downto 0);
393 vio_data_mask_gen : in std_logic;
394 fixed_addr_i : in std_logic_vector(31 downto 0);
395 fixed_data_i : in std_logic_vector(31 downto 0);
396 simple_data0 : in std_logic_vector(31 downto 0);
397 simple_data1 : in std_logic_vector(31 downto 0);
398 simple_data2 : in std_logic_vector(31 downto 0);
399 simple_data3 : in std_logic_vector(31 downto 0);
400 simple_data4 : in std_logic_vector(31 downto 0);
401 simple_data5 : in std_logic_vector(31 downto 0);
402 simple_data6 : in std_logic_vector(31 downto 0);
403 simple_data7 : in std_logic_vector(31 downto 0);
404 wdt_en_i : in std_logic;
405 bram_cmd_i : in std_logic_vector(38 downto 0);
406 bram_valid_i : in std_logic;
407 bram_rdy_o : out std_logic;
408 cmp_data : out std_logic_vector(DATA_WIDTH-1 downto 0);
409 cmp_data_valid : out std_logic;
410 cmp_error : out std_logic;
411 wr_data_counts : out std_logic_vector(47 downto 0);
412 rd_data_counts : out std_logic_vector(47 downto 0);
413 dq_error_bytelane_cmp : out std_logic_vector((NUM_DQ_PINS/8)-1 downto 0);
414 error : out std_logic;
415 error_status : out std_logic_vector((64+(2*DATA_WIDTH))-1 downto 0);
416 cumlative_dq_lane_error : out std_logic_vector((NUM_DQ_PINS/8)-1 downto 0);
417 cmd_wdt_err_o : out std_logic;
418 wr_wdt_err_o : out std_logic;
419 rd_wdt_err_o : out std_logic;
420 mem_pattern_init_done : out std_logic
421 );
422 end component mig_7series_v4_2_traffic_gen_top;
423
424
425 -- Signal declarations
426
427 signal app_ecc_multiple_err : std_logic_vector((2*nCK_PER_CLK)-1 downto 0);
428 signal app_ecc_single_err : std_logic_vector((2*nCK_PER_CLK)-1 downto 0);
429 signal app_addr : std_logic_vector(ADDR_WIDTH-1 downto 0);
430 signal app_addr_i : std_logic_vector(31 downto 0);
431 signal app_cmd : std_logic_vector(2 downto 0);
432 signal app_en : std_logic;
433 signal app_rdy : std_logic;
434 signal app_rdy_i : std_logic;
435 signal app_rd_data : std_logic_vector(APP_DATA_WIDTH-1 downto 0);
436 signal app_rd_data_end : std_logic;
437 signal app_rd_data_valid : std_logic;
438 signal app_rd_data_valid_i : std_logic;
439 signal app_wdf_data : std_logic_vector(APP_DATA_WIDTH-1 downto 0);
440 signal app_wdf_end : std_logic;
441 signal app_wdf_mask : std_logic_vector(APP_MASK_WIDTH-1 downto 0);
442 signal app_wdf_rdy : std_logic;
443 signal app_wdf_rdy_i : std_logic;
444 signal app_sr_active : std_logic;
445 signal app_ref_ack : std_logic;
446 signal app_zq_ack : std_logic;
447 signal app_wdf_wren : std_logic;
448 signal error_status : std_logic_vector((64 + (4*PAYLOAD_WIDTH*nCK_PER_CLK))-1 downto 0);
449 signal cumlative_dq_lane_error : std_logic_vector((PAYLOAD_WIDTH/8)-1 downto 0);
450 signal mem_pattern_init_done : std_logic_vector(0 downto 0);
451 signal modify_enable_sel : std_logic;
452 signal data_mode_manual_sel : std_logic_vector(2 downto 0);
453 signal addr_mode_manual_sel : std_logic_vector(2 downto 0);
454 signal cmp_data : std_logic_vector((PAYLOAD_WIDTH*2*nCK_PER_CLK)-1 downto 0);
455 signal cmp_data_r : std_logic_vector(63 downto 0);
456 signal cmp_data_valid : std_logic;
457 signal cmp_data_valid_r : std_logic;
458 signal cmp_error : std_logic;
459 signal tg_wr_data_counts : std_logic_vector(47 downto 0);
460 signal tg_rd_data_counts : std_logic_vector(47 downto 0);
461 signal dq_error_bytelane_cmp : std_logic_vector((PAYLOAD_WIDTH/8)-1 downto 0);
462 signal init_calib_complete_i : std_logic;
463 signal tg_compare_error_i : std_logic;
464 signal tg_rst : std_logic;
465 signal po_win_tg_rst : std_logic;
466 signal manual_clear_error : std_logic_vector(0 downto 0);
467
468 signal clk : std_logic;
469 signal rst : std_logic;
470
471 signal vio_modify_enable : std_logic_vector(0 downto 0);
472 signal vio_data_mode_value : std_logic_vector(3 downto 0);
473 signal vio_pause_traffic : std_logic_vector(0 downto 0);
474 signal vio_addr_mode_value : std_logic_vector(2 downto 0);
475 signal vio_instr_mode_value : std_logic_vector(3 downto 0);
476 signal vio_bl_mode_value : std_logic_vector(1 downto 0);
477 signal vio_fixed_bl_value : std_logic_vector(BL_WIDTH-1 downto 0);
478 signal vio_fixed_instr_value : std_logic_vector(2 downto 0);
479 signal vio_data_mask_gen : std_logic_vector(0 downto 0);
480 signal dbg_clear_error : std_logic_vector(0 downto 0);
481 signal vio_tg_rst : std_logic_vector(0 downto 0);
482 signal dbg_sel_pi_incdec : std_logic_vector(0 downto 0);
483 signal dbg_pi_f_inc : std_logic_vector(0 downto 0);
484 signal dbg_pi_f_dec : std_logic_vector(0 downto 0);
485 signal dbg_sel_po_incdec : std_logic_vector(0 downto 0);
486 signal dbg_po_f_inc : std_logic_vector(0 downto 0);
487 signal dbg_po_f_stg23_sel : std_logic_vector(0 downto 0);
488 signal dbg_po_f_dec : std_logic_vector(0 downto 0);
489 signal vio_dbg_sel_pi_incdec : std_logic_vector(0 downto 0);
490 signal vio_dbg_pi_f_inc : std_logic_vector(0 downto 0);
491 signal vio_dbg_pi_f_dec : std_logic_vector(0 downto 0);
492 signal vio_dbg_sel_po_incdec : std_logic_vector(0 downto 0);
493 signal vio_dbg_po_f_inc : std_logic_vector(0 downto 0);
494 signal vio_dbg_po_f_stg23_sel : std_logic_vector(0 downto 0);
495 signal vio_dbg_po_f_dec : std_logic_vector(0 downto 0);
496 signal all_zeros1 : std_logic_vector(31 downto 0):= (others => '0');
497 signal all_zeros2 : std_logic_vector(38 downto 0):= (others => '0');
498 signal wdt_en_w : std_logic_vector(0 downto 0);
499 signal cmd_wdt_err_w : std_logic;
500 signal wr_wdt_err_w : std_logic;
501 signal rd_wdt_err_w : std_logic;
502 signal device_temp : std_logic_vector(11 downto 0);
503
504
505
506begin
507
508--***************************************************************************
509
510
513
514
515 app_rdy_i <= not(app_rdy);
518 app_addr <= app_addr_i(ADDR_WIDTH-1 downto 0);
519
520
521
522
523
524
525
526-- Start of User Design top instance
527--***************************************************************************
528-- The User design is instantiated below. The memory interface ports are
529-- connected to the top-level and the application interface ports are
530-- connected to the traffic generator module. This provides a reference
531-- for connecting the memory controller to system.
532--***************************************************************************
533
535 port map (
536 -- Memory interface ports
538 ddr3_ba => ddr3_ba,
546 ddr3_dq => ddr3_dq,
552 ddr3_dm => ddr3_dm,
554-- Application interface ports
556 app_cmd => app_cmd,
557 app_en => app_en,
564 app_rdy => app_rdy,
566 app_sr_req => '0',
567 app_ref_req => '0',
568 app_zq_req => '0',
572 ui_clk => clk,
575-- System Clock Ports
577-- Reference Clock Ports
581 );
582-- End of User Design top instance
583
584
585--***************************************************************************
586-- The traffic generation module instantiated below drives traffic (patterns)
587-- on the application interface of the memory controller
588--***************************************************************************
589
591
592 u_traffic_gen_top : mig_7series_v4_2_traffic_gen_top
593 generic map (
594 TCQ => TCQ,
595 SIMULATION => SIMULATION,
596 FAMILY => "VIRTEX7",
597 MEM_TYPE => DRAM_TYPE,
598 TST_MEM_INSTR_MODE => TST_MEM_INSTR_MODE,
599 --BL_WIDTH => BL_WIDTH,
600 nCK_PER_CLK => nCK_PER_CLK,
601 NUM_DQ_PINS => PAYLOAD_WIDTH,
602 MEM_BURST_LEN => BURST_LENGTH,
603 MEM_COL_WIDTH => COL_WIDTH,
604 PORT_MODE => PORT_MODE,
605 DATA_PATTERN => DATA_PATTERN,
606 CMD_PATTERN => CMD_PATTERN,
607 ADDR_WIDTH => TG_ADDR_WIDTH,
608 DATA_WIDTH => APP_DATA_WIDTH,
609 BEGIN_ADDRESS => BEGIN_ADDRESS,
610 DATA_MODE => DATA_MODE,
611 END_ADDRESS => END_ADDRESS,
612 PRBS_EADDR_MASK_POS => PRBS_EADDR_MASK_POS,
613 CMD_WDT => CMD_WDT,
614 RD_WDT => RD_WDT,
615 WR_WDT => WR_WDT,
616 EYE_TEST => EYE_TEST
617 )
618 port map (
619 clk => clk,
620 rst => rst,
621 tg_only_rst => tg_rst,
622 manual_clear_error => manual_clear_error(0),
623 memc_init_done => init_calib_complete_i,
624 memc_cmd_full => app_rdy_i,
625 memc_cmd_en => app_en,
626 memc_cmd_instr => app_cmd,
627 memc_cmd_bl => open,
628 memc_cmd_addr => app_addr_i,
629 memc_wr_en => app_wdf_wren,
630 memc_wr_end => app_wdf_end,
631 memc_wr_mask => app_wdf_mask(((PAYLOAD_WIDTH*2*nCK_PER_CLK)/8)-1 downto 0),
632 memc_wr_data => app_wdf_data((PAYLOAD_WIDTH*2*nCK_PER_CLK)-1 downto 0),
633 memc_wr_full => app_wdf_rdy_i,
634 memc_rd_en => open,
635 memc_rd_data => app_rd_data((PAYLOAD_WIDTH*2*nCK_PER_CLK)-1 downto 0),
636 memc_rd_empty => app_rd_data_valid_i,
637 qdr_wr_cmd_o => open,
638 qdr_rd_cmd_o => open,
639 vio_pause_traffic => vio_pause_traffic(0),
640 vio_modify_enable => vio_modify_enable(0),
641 vio_data_mode_value => vio_data_mode_value,
642 vio_addr_mode_value => vio_addr_mode_value,
643 vio_instr_mode_value => vio_instr_mode_value,
644 vio_bl_mode_value => vio_bl_mode_value,
645 vio_fixed_bl_value => vio_fixed_bl_value,
646 vio_fixed_instr_value=> vio_fixed_instr_value,
647 vio_data_mask_gen => vio_data_mask_gen(0),
648 fixed_addr_i => all_zeros1,
649 fixed_data_i => all_zeros1,
650 simple_data0 => all_zeros1,
651 simple_data1 => all_zeros1,
652 simple_data2 => all_zeros1,
653 simple_data3 => all_zeros1,
654 simple_data4 => all_zeros1,
655 simple_data5 => all_zeros1,
656 simple_data6 => all_zeros1,
657 simple_data7 => all_zeros1,
658 wdt_en_i => wdt_en_w(0),
659 bram_cmd_i => all_zeros2,
660 bram_valid_i => '0',
661 bram_rdy_o => open,
662 cmp_data => cmp_data,
663 cmp_data_valid => cmp_data_valid,
664 cmp_error => cmp_error,
665 wr_data_counts => tg_wr_data_counts,
666 rd_data_counts => tg_rd_data_counts,
667 dq_error_bytelane_cmp => dq_error_bytelane_cmp,
668 error => tg_compare_error_i,
669 error_status => error_status,
670 cumlative_dq_lane_error => cumlative_dq_lane_error,
671 cmd_wdt_err_o => cmd_wdt_err_w,
672 wr_wdt_err_o => wr_wdt_err_w,
673 rd_wdt_err_o => rd_wdt_err_w,
674 mem_pattern_init_done => mem_pattern_init_done(0)
675 );
676
677
678 --*****************************************************************
679 -- Default values are assigned to the debug inputs of the traffic
680 -- generator
681 --*****************************************************************
682 vio_modify_enable(0) <= '0';
683 vio_data_mode_value <= "0010";
684 vio_addr_mode_value <= "011";
685 vio_instr_mode_value <= "0010";
686 vio_bl_mode_value <= "10";
687 vio_fixed_bl_value <= "0000010000";
688 vio_data_mask_gen(0) <= '0';
689 vio_pause_traffic(0) <= '0';
690 vio_fixed_instr_value <= "001";
691 dbg_clear_error(0) <= '0';
692 po_win_tg_rst <= '0';
693 vio_tg_rst(0) <= '0';
694 wdt_en_w(0) <= '1';
695
696 dbg_sel_pi_incdec(0) <= '0';
697 dbg_sel_po_incdec(0) <= '0';
698 dbg_pi_f_inc(0) <= '0';
699 dbg_pi_f_dec(0) <= '0';
700 dbg_po_f_inc(0) <= '0';
701 dbg_po_f_dec(0) <= '0';
702 dbg_po_f_stg23_sel(0) <= '0';
703
704
705
706end architecture arch_example_top;
707
708
std_logic_vector( APP_MASK_WIDTH- 1 downto 0) app_wdf_mask
std_logic_vector( 2 downto 0) data_mode_manual_sel
std_logic_vector( 0 downto 0) manual_clear_error
std_logic_vector( 3 downto 0) vio_instr_mode_value
integer := XWIDTH+ 3+ ROW_WIDTH+ COL_WIDTH TG_ADDR_WIDTH
std_logic_vector(( PAYLOAD_WIDTH/ 8)- 1 downto 0) cumlative_dq_lane_error
std_logic_vector( 31 downto 0) app_addr_i
std_logic_vector( 0 downto 0) vio_data_mask_gen
integer := clogb2( RANKS ) RANK_WIDTH
std_logic_vector( 0 downto 0) dbg_sel_po_incdec
std_logic_vector( 0 downto 0) vio_dbg_po_f_dec
std_logic_vector( 38 downto 0) :=( others => '0') all_zeros2
std_logic_vector( 2 downto 0) vio_fixed_instr_value
std_logic_vector( 0 downto 0) vio_dbg_po_f_stg23_sel
std_logic_vector( 11 downto 0) device_temp
std_logic_vector( BL_WIDTH- 1 downto 0) vio_fixed_bl_value
std_logic_vector(( 2* nCK_PER_CLK)- 1 downto 0) app_ecc_single_err
std_logic_vector( 0 downto 0) dbg_po_f_inc
std_logic_vector( 1 downto 0) vio_bl_mode_value
std_logic_vector(( PAYLOAD_WIDTH/ 8)- 1 downto 0) dq_error_bytelane_cmp
integer := STR_TO_INT( BURST_MODE ) BURST_LENGTH
integer := DATA_WIDTH PAYLOAD_WIDTH
std_logic_vector( 0 downto 0) vio_tg_rst
std_logic_vector( 0 downto 0) dbg_clear_error
migui_arty u_migui_artyu_migui_arty
std_logic_vector( 0 downto 0) vio_dbg_sel_po_incdec
std_logic_vector( 47 downto 0) tg_rd_data_counts
std_logic_vector( 0 downto 0) vio_dbg_pi_f_dec
std_logic_vector( 0 downto 0) vio_dbg_pi_f_inc
std_logic_vector(( 2* nCK_PER_CLK)- 1 downto 0) app_ecc_multiple_err
mig_7series_v4_2_traffic_gen_top u_traffic_gen_topu_traffic_gen_top
std_logic_vector( 0 downto 0) dbg_pi_f_dec
std_logic_vector( 47 downto 0) tg_wr_data_counts
std_logic_vector( 2 downto 0) addr_mode_manual_sel
std_logic_vector( 0 downto 0) wdt_en_w
std_logic_vector(( PAYLOAD_WIDTH* 2* nCK_PER_CLK)- 1 downto 0) cmp_data
std_logic_vector( APP_DATA_WIDTH- 1 downto 0) app_rd_data
std_logic_vector( 0 downto 0) dbg_pi_f_inc
std_logic_vector( 3 downto 0) vio_data_mode_value
std_logic_vector( 0 downto 0) vio_modify_enable
std_logic_vector( 0 downto 0) dbg_po_f_stg23_sel
integer := APP_DATA_WIDTH/ 8 APP_MASK_WIDTH
std_logic_vector( 0 downto 0) vio_dbg_po_f_inc
std_logic_vector( 31 downto 0) :=( others => '0') all_zeros1
integer := 1000000 tPRDI
integer := 2* nCK_PER_CLK* PAYLOAD_WIDTH APP_DATA_WIDTH
std_logic_vector( ADDR_WIDTH- 1 downto 0) app_addr
std_logic_vector( 0 downto 0) vio_pause_traffic
std_logic_vector( 2 downto 0) vio_addr_mode_value
std_logic_vector( 0 downto 0) dbg_po_f_dec
std_logic_vector(( 64+( 4* PAYLOAD_WIDTH* nCK_PER_CLK))- 1 downto 0) error_status
std_logic_vector( APP_DATA_WIDTH- 1 downto 0) app_wdf_data
std_logic_vector( 0 downto 0) mem_pattern_init_done
std_logic_vector( 63 downto 0) cmp_data_r
std_logic_vector( 0 downto 0) dbg_sel_pi_incdec
std_logic_vector( 2 downto 0) app_cmd
std_logic_vector( 0 downto 0) vio_dbg_sel_pi_incdec
integer := DATA_WIDTH/ 8 MASK_SIZE
BEGIN_ADDRESS std_logic_vector( 31 downto 0) := X"00000000"
in device_temp_i std_logic_vector( 11 downto 0)
inout ddr3_dqs_p std_logic_vector( 1 downto 0)
out ddr3_cas_n std_logic
TCQ integer := 100
nCK_PER_CLK integer := 4
SIMULATION string := "FALSE"
DATA_PATTERN string := "DGEN_ALL"
Definition: example_top.vhd:91
END_ADDRESS std_logic_vector( 31 downto 0) := X"00ffffff"
RST_ACT_LOW integer := 0
out ddr3_ck_n std_logic_vector( 0 downto 0)
out ddr3_cs_n std_logic_vector( 0 downto 0)
CMD_WDT std_logic_vector( 31 downto 0) := X"000003ff"
ROW_WIDTH integer := 14
WR_WDT std_logic_vector( 31 downto 0) := X"00001fff"
out ddr3_we_n std_logic
out ddr3_dm std_logic_vector( 1 downto 0)
out ddr3_cke std_logic_vector( 0 downto 0)
DRAM_WIDTH integer := 8
out ddr3_ras_n std_logic
out init_calib_complete std_logic
in sys_clk_i std_logic
CMD_PATTERN string := "CGEN_ALL"
Definition: example_top.vhd:97
PRBS_EADDR_MASK_POS std_logic_vector( 31 downto 0) := X"ff000000"
in clk_ref_i std_logic
EYE_TEST string := "FALSE"
Definition: example_top.vhd:86
DRAM_TYPE string := "DDR3"
inout ddr3_dqs_n std_logic_vector( 1 downto 0)
inout ddr3_dq std_logic_vector( 15 downto 0)
RANKS integer := 1
CS_WIDTH integer := 1
TEMP_MON_CONTROL string := "EXTERNAL"
in sys_rst std_logic
RD_WDT std_logic_vector( 31 downto 0) := X"000003ff"
DQ_WIDTH integer := 16
out ddr3_odt std_logic_vector( 0 downto 0)
ADDR_WIDTH integer := 28
out tg_compare_error std_logic
PORT_MODE string := "BI_MODE"
Definition: example_top.vhd:83
DATA_MODE std_logic_vector( 3 downto 0) := "0010"
Definition: example_top.vhd:84
ECC_TEST string := "OFF"
TST_MEM_INSTR_MODE string := "R_W_INSTR_MODE"
Definition: example_top.vhd:85
out ddr3_reset_n std_logic
out ddr3_ba std_logic_vector( 2 downto 0)
DEBUG_PORT string := "OFF"
COL_WIDTH integer := 10
out ddr3_ck_p std_logic_vector( 0 downto 0)
out ddr3_addr std_logic_vector( 13 downto 0)
BL_WIDTH integer := 10
Definition: example_top.vhd:82
DM_WIDTH integer := 2
DQS_CNT_WIDTH integer := 1
BURST_MODE string := "8"
in app_sr_req std_logic
Definition: migui_arty.vhd:102
in device_temp_i std_logic_vector( 11 downto 0)
Definition: migui_arty.vhd:115
inout ddr3_dqs_p std_logic_vector( 1 downto 0)
Definition: migui_arty.vhd:75
out ddr3_cas_n std_logic
Definition: migui_arty.vhd:81
in app_cmd std_logic_vector( 2 downto 0)
Definition: migui_arty.vhd:91
out app_zq_ack std_logic
Definition: migui_arty.vhd:107
in app_wdf_end std_logic
Definition: migui_arty.vhd:94
in app_zq_req std_logic
Definition: migui_arty.vhd:104
out device_temp std_logic_vector( 11 downto 0)
Definition: migui_arty.vhd:116
out app_wdf_rdy std_logic
Definition: migui_arty.vhd:101
out ddr3_ck_n std_logic_vector( 0 downto 0)
Definition: migui_arty.vhd:85
out ddr3_cs_n std_logic_vector( 0 downto 0)
Definition: migui_arty.vhd:87
in app_wdf_data std_logic_vector( 127 downto 0)
Definition: migui_arty.vhd:93
out app_rd_data_end std_logic
Definition: migui_arty.vhd:98
out ddr3_we_n std_logic
Definition: migui_arty.vhd:82
out ddr3_dm std_logic_vector( 1 downto 0)
Definition: migui_arty.vhd:88
out ddr3_cke std_logic_vector( 0 downto 0)
Definition: migui_arty.vhd:86
out ddr3_ras_n std_logic
Definition: migui_arty.vhd:80
out init_calib_complete std_logic
Definition: migui_arty.vhd:110
in sys_clk_i std_logic
Definition: migui_arty.vhd:112
in clk_ref_i std_logic
Definition: migui_arty.vhd:114
in app_ref_req std_logic
Definition: migui_arty.vhd:103
out app_sr_active std_logic
Definition: migui_arty.vhd:105
inout ddr3_dqs_n std_logic_vector( 1 downto 0)
Definition: migui_arty.vhd:76
out app_rd_data_valid std_logic
Definition: migui_arty.vhd:99
inout ddr3_dq std_logic_vector( 15 downto 0)
Definition: migui_arty.vhd:74
out app_rd_data std_logic_vector( 127 downto 0)
Definition: migui_arty.vhd:97
in sys_rst std_logic
Definition: migui_arty.vhd:118
out ui_clk std_logic
Definition: migui_arty.vhd:108
out ddr3_odt std_logic_vector( 0 downto 0)
Definition: migui_arty.vhd:89
in app_en std_logic
Definition: migui_arty.vhd:92
in app_addr std_logic_vector( 27 downto 0)
Definition: migui_arty.vhd:90
out app_ref_ack std_logic
Definition: migui_arty.vhd:106
in app_wdf_mask std_logic_vector( 15 downto 0)
Definition: migui_arty.vhd:95
out ddr3_reset_n std_logic
Definition: migui_arty.vhd:83
out ddr3_ba std_logic_vector( 2 downto 0)
Definition: migui_arty.vhd:79
out ddr3_ck_p std_logic_vector( 0 downto 0)
Definition: migui_arty.vhd:84
in app_wdf_wren std_logic
Definition: migui_arty.vhd:96
out ddr3_addr std_logic_vector( 13 downto 0)
Definition: migui_arty.vhd:78
out ui_clk_sync_rst std_logic
Definition: migui_arty.vhd:109
out app_rdy std_logic
Definition: migui_arty.vhd:100