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