OpenCores
URL https://opencores.org/ocsvn/genesys_ddr2/genesys_ddr2/trunk

Subversion Repositories genesys_ddr2

[/] [genesys_ddr2/] [trunk/] [rtl/] [ipcore_dir/] [MEMCtrl/] [user_design/] [rtl/] [MEMCtrl.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 oana.bonca
//*****************************************************************************
2
// DISCLAIMER OF LIABILITY
3
//
4
// This file contains proprietary and confidential information of
5
// Xilinx, Inc. ("Xilinx"), that is distributed under a license
6
// from Xilinx, and may be used, copied and/or disclosed only
7
// pursuant to the terms of a valid license agreement with Xilinx.
8
//
9
// XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION
10
// ("MATERIALS") "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
11
// EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING WITHOUT
12
// LIMITATION, ANY WARRANTY WITH RESPECT TO NONINFRINGEMENT,
13
// MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. Xilinx
14
// does not warrant that functions included in the Materials will
15
// meet the requirements of Licensee, or that the operation of the
16
// Materials will be uninterrupted or error-free, or that defects
17
// in the Materials will be corrected. Furthermore, Xilinx does
18
// not warrant or make any representations regarding use, or the
19
// results of the use, of the Materials in terms of correctness,
20
// accuracy, reliability or otherwise.
21
//
22
// Xilinx products are not designed or intended to be fail-safe,
23
// or for use in any application requiring fail-safe performance,
24
// such as life-support or safety devices or systems, Class III
25
// medical devices, nuclear facilities, applications related to
26
// the deployment of airbags, or any other applications that could
27
// lead to death, personal injury or severe property or
28
// environmental damage (individually and collectively, "critical
29
// applications"). Customer assumes the sole risk and liability
30
// of any use of Xilinx products in critical applications,
31
// subject only to applicable laws and regulations governing
32
// limitations on product liability.
33
//
34
// Copyright 2006, 2007, 2008 Xilinx, Inc.
35
// All rights reserved.
36
//
37
// This disclaimer and copyright notice must be retained as part
38
// of this file at all times.
39
//*****************************************************************************
40
//   ____  ____
41
//  /   /\/   /
42
// /___/  \  /    Vendor: Xilinx
43
// \   \   \/     Version: 3.6.1
44
//  \   \         Application: MIG
45
//  /   /         Filename: MEMCtrl.v
46
// /___/   /\     Date Last Modified: $Date: 2010/11/26 18:26:02 $
47
// \   \  /  \    Date Created: Wed Aug 16 2006
48
//  \___\/\___\
49
//
50
//Device: Virtex-5
51
//Design Name: DDR2
52
//Purpose:
53
//   Top-level  module. Simple model for what the user might use
54
//   Typically, the user will only instantiate MEM_INTERFACE_TOP in their
55
//   code, and generate all backend logic (test bench) and all the other infrastructure logic
56
//    separately.
57
//   In addition to the memory controller, the module instantiates:
58
//     1. Reset logic based on user clocks
59
//     2. IDELAY control block
60
//Reference:
61
//Revision History:
62
//   Rev 1.1 - Parameter USE_DM_PORT added. PK. 6/25/08
63
//   Rev 1.2 - Parameter HIGH_PERFORMANCE_MODE added. PK. 7/10/08
64
//   Rev 1.3 - Parameter IODELAY_GRP added. PK. 11/27/08
65
//*****************************************************************************
66
 
67
`timescale 1ns/1ps
68
 
69
(* X_CORE_INFO = "mig_v3_61_ddr2_v5, Coregen 12.4" , CORE_GENERATION_INFO = "ddr2_v5,mig_v3_61,{component_name=MEMCtrl, BANK_WIDTH=2, CKE_WIDTH=1, CLK_WIDTH=2, COL_WIDTH=10, CS_NUM=1, CS_WIDTH=1, DM_WIDTH=8, DQ_WIDTH=64, DQ_PER_DQS=8, DQS_WIDTH=8, ODT_WIDTH=1, ROW_WIDTH=13, ADDITIVE_LAT=0, BURST_LEN=4, BURST_TYPE=0, CAS_LAT=3, ECC_ENABLE=0, MULTI_BANK_EN=1, TWO_T_TIME_EN=1, ODT_TYPE=1, REDUCE_DRV=0, REG_ENABLE=0, TREFI_NS=7800, TRAS=40000, TRCD=15000, TRFC=105000, TRP=15000, TRTP=7500, TWR=15000, TWTR=7500, CLK_PERIOD=8000, RST_ACT_LOW=1, INTERFACE_TYPE=DDR2_SDRAM, LANGUAGE=Verilog, SYNTHESIS_TOOL=ISE, NO_OF_CONTROLLERS=1}" *)
70
module MEMCtrl #
71
  (
72
   parameter BANK_WIDTH              = 2,
73
                                       // # of memory bank addr bits.
74
   parameter CKE_WIDTH               = 1,
75
                                       // # of memory clock enable outputs.
76
   parameter CLK_WIDTH               = 2,
77
                                       // # of clock outputs.
78
   parameter COL_WIDTH               = 10,
79
                                       // # of memory column bits.
80
   parameter CS_NUM                  = 1,
81
                                       // # of separate memory chip selects.
82
   parameter CS_WIDTH                = 1,
83
                                       // # of total memory chip selects.
84
   parameter CS_BITS                 = 0,
85
                                       // set to log2(CS_NUM) (rounded up).
86
   parameter DM_WIDTH                = 8,
87
                                       // # of data mask bits.
88
   parameter DQ_WIDTH                = 64,
89
                                       // # of data width.
90
   parameter DQ_PER_DQS              = 8,
91
                                       // # of DQ data bits per strobe.
92
   parameter DQS_WIDTH               = 8,
93
                                       // # of DQS strobes.
94
   parameter DQ_BITS                 = 6,
95
                                       // set to log2(DQS_WIDTH*DQ_PER_DQS).
96
   parameter DQS_BITS                = 3,
97
                                       // set to log2(DQS_WIDTH).
98
   parameter ODT_WIDTH               = 1,
99
                                       // # of memory on-die term enables.
100
   parameter ROW_WIDTH               = 13,
101
                                       // # of memory row and # of addr bits.
102
   parameter ADDITIVE_LAT            = 0,
103
                                       // additive write latency.
104
   parameter BURST_LEN               = 4,
105
                                       // burst length (in double words).
106
   parameter BURST_TYPE              = 0,
107
                                       // burst type (=0 seq; =1 interleaved).
108
   parameter CAS_LAT                 = 3,
109
                                       // CAS latency.
110
   parameter ECC_ENABLE              = 0,
111
                                       // enable ECC (=1 enable).
112
   parameter APPDATA_WIDTH           = 128,
113
                                       // # of usr read/write data bus bits.
114
   parameter MULTI_BANK_EN           = 1,
115
                                       // Keeps multiple banks open. (= 1 enable).
116
   parameter TWO_T_TIME_EN           = 1,
117
                                       // 2t timing for unbuffered dimms.
118
   parameter ODT_TYPE                = 1,
119
                                       // ODT (=0(none),=1(75),=2(150),=3(50)).
120
   parameter REDUCE_DRV              = 0,
121
                                       // reduced strength mem I/O (=1 yes).
122
   parameter REG_ENABLE              = 0,
123
                                       // registered addr/ctrl (=1 yes).
124
   parameter TREFI_NS                = 7800,
125
                                       // auto refresh interval (ns).
126
   parameter TRAS                    = 40000,
127
                                       // active->precharge delay.
128
   parameter TRCD                    = 15000,
129
                                       // active->read/write delay.
130
   parameter TRFC                    = 105000,
131
                                       // refresh->refresh, refresh->active delay.
132
   parameter TRP                     = 15000,
133
                                       // precharge->command delay.
134
   parameter TRTP                    = 7500,
135
                                       // read->precharge delay.
136
   parameter TWR                     = 15000,
137
                                       // used to determine write->precharge.
138
   parameter TWTR                    = 7500,
139
                                       // write->read delay.
140
   parameter HIGH_PERFORMANCE_MODE   = "TRUE",
141
                              // # = TRUE, the IODELAY performance mode is set
142
                              // to high.
143
                              // # = FALSE, the IODELAY performance mode is set
144
                              // to low.
145
   parameter SIM_ONLY                = 0,
146
                                       // = 1 to skip SDRAM power up delay.
147
   parameter DEBUG_EN                = 0,
148
                                       // Enable debug signals/controls.
149
                                       // When this parameter is changed from 0 to 1,
150
                                       // make sure to uncomment the coregen commands
151
                                       // in ise_flow.bat or create_ise.bat files in
152
                                       // par folder.
153
   parameter CLK_PERIOD              = 8000,
154
                                       // Core/Memory clock period (in ps).
155
   parameter RST_ACT_LOW             = 1
156
                                       // =1 for active low reset, =0 for active high.
157
   )
158
  (
159
   inout  [DQ_WIDTH-1:0]              ddr2_dq,
160
   output [ROW_WIDTH-1:0]             ddr2_a,
161
   output [BANK_WIDTH-1:0]            ddr2_ba,
162
   output                             ddr2_ras_n,
163
   output                             ddr2_cas_n,
164
   output                             ddr2_we_n,
165
   output [CS_WIDTH-1:0]              ddr2_cs_n,
166
   output [ODT_WIDTH-1:0]             ddr2_odt,
167
   output [CKE_WIDTH-1:0]             ddr2_cke,
168
   output [DM_WIDTH-1:0]              ddr2_dm,
169
   input                              sys_rst_n,
170
   output                             phy_init_done,
171
   input                              locked,
172
   output                             rst0_tb,
173
   input                              clk0,
174
   output                             clk0_tb,
175
   input                              clk90,
176
   input                              clkdiv0,
177
   input                              clk200,
178
   output                             app_wdf_afull,
179
   output                             app_af_afull,
180
   output                             rd_data_valid,
181
   input                              app_wdf_wren,
182
   input                              app_af_wren,
183
   input  [30:0]                      app_af_addr,
184
   input  [2:0]                       app_af_cmd,
185
   output [(APPDATA_WIDTH)-1:0]                rd_data_fifo_out,
186
   input  [(APPDATA_WIDTH)-1:0]                app_wdf_data,
187
   input  [(APPDATA_WIDTH/8)-1:0]              app_wdf_mask_data,
188
   inout  [DQS_WIDTH-1:0]             ddr2_dqs,
189
   inout  [DQS_WIDTH-1:0]             ddr2_dqs_n,
190
   output [CLK_WIDTH-1:0]             ddr2_ck,
191
   output [CLK_WIDTH-1:0]             ddr2_ck_n//,
192
        //ADAUGAT PT LEDURI
193
        //output error_o, error_cmp_o
194
   );
195
 
196
  //***************************************************************************
197
  // IODELAY Group Name: Replication and placement of IDELAYCTRLs will be
198
  // handled automatically by software tools if IDELAYCTRLs have same refclk,
199
  // reset and rdy nets. Designs with a unique RESET will commonly create a
200
  // unique RDY. Constraint IODELAY_GROUP is associated to a set of IODELAYs
201
  // with an IDELAYCTRL. The parameter IODELAY_GRP value can be any string.
202
  //***************************************************************************
203
 
204
  localparam IODELAY_GRP = "IODELAY_MIG";
205
 
206
 
207
 
208
 
209
 
210
  wire                              rst0;
211
  wire                              rst90;
212
  wire                              rstdiv0;
213
  wire                              rst200;
214
  wire                              idelay_ctrl_rdy;
215
 
216
  wire error;
217
  wire error_cmp;
218
  wire [35:0] control;
219
  wire [71:0] data;
220
  wire [7:0] trig0;
221
 
222
  //Debug signals
223
 
224
 
225
  wire [3:0]                        dbg_calib_done;
226
  wire [3:0]                        dbg_calib_err;
227
  wire [(6*DQ_WIDTH)-1:0]           dbg_calib_dq_tap_cnt;
228
  wire [(6*DQS_WIDTH)-1:0]          dbg_calib_dqs_tap_cnt;
229
  wire [(6*DQS_WIDTH)-1:0]          dbg_calib_gate_tap_cnt;
230
  wire [DQS_WIDTH-1:0]              dbg_calib_rd_data_sel;
231
  wire [(5*DQS_WIDTH)-1:0]          dbg_calib_rden_dly;
232
  wire [(5*DQS_WIDTH)-1:0]          dbg_calib_gate_dly;
233
  wire                              dbg_idel_up_all;
234
  wire                              dbg_idel_down_all;
235
  wire                              dbg_idel_up_dq;
236
  wire                              dbg_idel_down_dq;
237
  wire                              dbg_idel_up_dqs;
238
  wire                              dbg_idel_down_dqs;
239
  wire                              dbg_idel_up_gate;
240
  wire                              dbg_idel_down_gate;
241
  wire [DQ_BITS-1:0]                dbg_sel_idel_dq;
242
  wire                              dbg_sel_all_idel_dq;
243
  wire [DQS_BITS:0]                 dbg_sel_idel_dqs;
244
  wire                              dbg_sel_all_idel_dqs;
245
  wire [DQS_BITS:0]                 dbg_sel_idel_gate;
246
  wire                              dbg_sel_all_idel_gate;
247
 
248
 
249
    // Debug signals (optional use)
250
 
251
  //***********************************
252
  // PHY Debug Port demo
253
  //***********************************
254
  wire [35:0]                        cs_control0;
255
  wire [35:0]                        cs_control1;
256
  wire [35:0]                        cs_control2;
257
  wire [35:0]                        cs_control3;
258
  wire [191:0]                       vio0_in;
259
  wire [95:0]                        vio1_in;
260
  wire [99:0]                        vio2_in;
261
  wire [31:0]                        vio3_out;
262
 
263
 
264
 
265
 
266
  //***************************************************************************
267
 
268
  assign  rst0_tb = rst0;
269
  assign  clk0_tb = clk0;
270
 
271
 
272
ddr2_idelay_ctrl #
273
   (
274
    .IODELAY_GRP         (IODELAY_GRP)
275
   )
276
   u_ddr2_idelay_ctrl
277
   (
278
   .rst200                 (rst200),
279
   .clk200                 (clk200),
280
   .idelay_ctrl_rdy        (idelay_ctrl_rdy)
281
   );
282
 
283
 ddr2_infrastructure #
284
 (
285
   .RST_ACT_LOW            (RST_ACT_LOW)
286
   )
287
u_ddr2_infrastructure
288
 (
289
   .sys_rst_n              (sys_rst_n),
290
   .locked                 (locked),
291
   .rst0                   (rst0),
292
   .rst90                  (rst90),
293
   .rstdiv0                (rstdiv0),
294
   .rst200                 (rst200),
295
   .clk0                   (clk0),
296
   .clk90                  (clk90),
297
   .clkdiv0                (clkdiv0),
298
   .clk200                 (clk200),
299
   .idelay_ctrl_rdy        (idelay_ctrl_rdy)
300
   );
301
 
302
 ddr2_top #
303
 (
304
   .BANK_WIDTH             (BANK_WIDTH),
305
   .CKE_WIDTH              (CKE_WIDTH),
306
   .CLK_WIDTH              (CLK_WIDTH),
307
   .COL_WIDTH              (COL_WIDTH),
308
   .CS_NUM                 (CS_NUM),
309
   .CS_WIDTH               (CS_WIDTH),
310
   .CS_BITS                (CS_BITS),
311
   .DM_WIDTH               (DM_WIDTH),
312
   .DQ_WIDTH               (DQ_WIDTH),
313
   .DQ_PER_DQS             (DQ_PER_DQS),
314
   .DQS_WIDTH              (DQS_WIDTH),
315
   .DQ_BITS                (DQ_BITS),
316
   .DQS_BITS               (DQS_BITS),
317
   .ODT_WIDTH              (ODT_WIDTH),
318
   .ROW_WIDTH              (ROW_WIDTH),
319
   .ADDITIVE_LAT           (ADDITIVE_LAT),
320
   .BURST_LEN              (BURST_LEN),
321
   .BURST_TYPE             (BURST_TYPE),
322
   .CAS_LAT                (CAS_LAT),
323
   .ECC_ENABLE             (ECC_ENABLE),
324
   .APPDATA_WIDTH          (APPDATA_WIDTH),
325
   .MULTI_BANK_EN          (MULTI_BANK_EN),
326
   .TWO_T_TIME_EN          (TWO_T_TIME_EN),
327
   .ODT_TYPE               (ODT_TYPE),
328
   .REDUCE_DRV             (REDUCE_DRV),
329
   .REG_ENABLE             (REG_ENABLE),
330
   .TREFI_NS               (TREFI_NS),
331
   .TRAS                   (TRAS),
332
   .TRCD                   (TRCD),
333
   .TRFC                   (TRFC),
334
   .TRP                    (TRP),
335
   .TRTP                   (TRTP),
336
   .TWR                    (TWR),
337
   .TWTR                   (TWTR),
338
   .HIGH_PERFORMANCE_MODE  (HIGH_PERFORMANCE_MODE),
339
   .IODELAY_GRP            (IODELAY_GRP),
340
   .SIM_ONLY               (SIM_ONLY),
341
   .DEBUG_EN               (DEBUG_EN),
342
   .FPGA_SPEED_GRADE       (3),
343
   .USE_DM_PORT            (1),
344
   .CLK_PERIOD             (CLK_PERIOD)
345
   )
346
u_ddr2_top_0
347
(
348
   .ddr2_dq                (ddr2_dq),
349
   .ddr2_a                 (ddr2_a),
350
   .ddr2_ba                (ddr2_ba),
351
   .ddr2_ras_n             (ddr2_ras_n),
352
   .ddr2_cas_n             (ddr2_cas_n),
353
   .ddr2_we_n              (ddr2_we_n),
354
   .ddr2_cs_n              (ddr2_cs_n),
355
   .ddr2_odt               (ddr2_odt),
356
   .ddr2_cke               (ddr2_cke),
357
   .ddr2_dm                (ddr2_dm),
358
   .phy_init_done          (phy_init_done),
359
   .rst0                   (rst0),
360
   .rst90                  (rst90),
361
   .rstdiv0                (rstdiv0),
362
   .clk0                   (clk0),
363
   .clk90                  (clk90),
364
   .clkdiv0                (clkdiv0),
365
   .app_wdf_afull          (app_wdf_afull),
366
   .app_af_afull           (app_af_afull),
367
   .rd_data_valid          (rd_data_valid),
368
   .app_wdf_wren           (app_wdf_wren),
369
   .app_af_wren            (app_af_wren),
370
   .app_af_addr            (app_af_addr),
371
   .app_af_cmd             (app_af_cmd),
372
   .rd_data_fifo_out       (rd_data_fifo_out),
373
   .app_wdf_data           (app_wdf_data),
374
   .app_wdf_mask_data      (app_wdf_mask_data),
375
   .ddr2_dqs               (ddr2_dqs),
376
   .ddr2_dqs_n             (ddr2_dqs_n),
377
   .ddr2_ck                (ddr2_ck),
378
   .rd_ecc_error           (),
379
   .ddr2_ck_n              (ddr2_ck_n),
380
 
381
   .dbg_calib_done         (dbg_calib_done),
382
   .dbg_calib_err          (dbg_calib_err),
383
   .dbg_calib_dq_tap_cnt   (dbg_calib_dq_tap_cnt),
384
   .dbg_calib_dqs_tap_cnt  (dbg_calib_dqs_tap_cnt),
385
   .dbg_calib_gate_tap_cnt  (dbg_calib_gate_tap_cnt),
386
   .dbg_calib_rd_data_sel  (dbg_calib_rd_data_sel),
387
   .dbg_calib_rden_dly     (dbg_calib_rden_dly),
388
   .dbg_calib_gate_dly     (dbg_calib_gate_dly),
389
   .dbg_idel_up_all        (dbg_idel_up_all),
390
   .dbg_idel_down_all      (dbg_idel_down_all),
391
   .dbg_idel_up_dq         (dbg_idel_up_dq),
392
   .dbg_idel_down_dq       (dbg_idel_down_dq),
393
   .dbg_idel_up_dqs        (dbg_idel_up_dqs),
394
   .dbg_idel_down_dqs      (dbg_idel_down_dqs),
395
   .dbg_idel_up_gate       (dbg_idel_up_gate),
396
   .dbg_idel_down_gate     (dbg_idel_down_gate),
397
   .dbg_sel_idel_dq        (dbg_sel_idel_dq),
398
   .dbg_sel_all_idel_dq    (dbg_sel_all_idel_dq),
399
   .dbg_sel_idel_dqs       (dbg_sel_idel_dqs),
400
   .dbg_sel_all_idel_dqs   (dbg_sel_all_idel_dqs),
401
   .dbg_sel_idel_gate      (dbg_sel_idel_gate),
402
   .dbg_sel_all_idel_gate  (dbg_sel_all_idel_gate)
403
   );
404
 
405
 
406
   //*****************************************************************
407
  // Hooks to prevent sim/syn compilation errors (mainly for VHDL - but
408
  // keep it also in Verilog version of code) w/ floating inputs if
409
  // DEBUG_EN = 0.
410
  //*****************************************************************
411
 
412
  generate
413
    if (DEBUG_EN == 0) begin: gen_dbg_tie_off
414
      assign dbg_idel_up_all       = 'b0;
415
      assign dbg_idel_down_all     = 'b0;
416
      assign dbg_idel_up_dq        = 'b0;
417
      assign dbg_idel_down_dq      = 'b0;
418
      assign dbg_idel_up_dqs       = 'b0;
419
      assign dbg_idel_down_dqs     = 'b0;
420
      assign dbg_idel_up_gate      = 'b0;
421
      assign dbg_idel_down_gate    = 'b0;
422
      assign dbg_sel_idel_dq       = 'b0;
423
      assign dbg_sel_all_idel_dq   = 'b0;
424
      assign dbg_sel_idel_dqs      = 'b0;
425
      assign dbg_sel_all_idel_dqs  = 'b0;
426
      assign dbg_sel_idel_gate     = 'b0;
427
      assign dbg_sel_all_idel_gate = 'b0;
428
    end else begin: gen_dbg_enable
429
 
430
      //*****************************************************************
431
      // PHY Debug Port example - see MIG User's Guide, XAPP858 or 
432
      // Answer Record 29443
433
      // This logic supports up to 32 DQ and 8 DQS I/O
434
      // NOTES:
435
      //   1. PHY Debug Port demo connects to 4 VIO modules:
436
      //     - 3 VIO modules with only asynchronous inputs
437
      //      * Monitor IDELAY taps for DQ, DQS, DQS Gate
438
      //      * Calibration status
439
      //     - 1 VIO module with synchronous outputs
440
      //      * Allow dynamic adjustment o f IDELAY taps
441
      //   2. User may need to modify this code to incorporate other
442
      //      chipscope-related modules in their larger design (e.g.
443
      //      if they have other ILA/VIO modules, they will need to
444
      //      for example instantiate a larger ICON module). In addition
445
      //      user may want to instantiate more VIO modules to control
446
      //      IDELAY for more DQ, DQS than is shown here
447
      //*****************************************************************
448
 
449
      icon4 u_icon
450
        (
451
         .control0 (cs_control0),
452
         .control1 (cs_control1),
453
         .control2 (cs_control2),
454
         .control3 (cs_control3)
455
         );
456
 
457
      //*****************************************************************
458
      // VIO ASYNC input: Display current IDELAY setting for up to 32
459
      // DQ taps (32x6) = 192
460
      //*****************************************************************
461
 
462
      vio_async_in192 u_vio0
463
        (
464
         .control  (cs_control0),
465
         .async_in (vio0_in)
466
         );
467
 
468
      //*****************************************************************
469
      // VIO ASYNC input: Display current IDELAY setting for up to 8 DQS
470
      // and DQS Gate taps (8x6x2) = 96
471
      //*****************************************************************
472
 
473
      vio_async_in96 u_vio1
474
        (
475
         .control  (cs_control1),
476
         .async_in (vio1_in)
477
         );
478
 
479
      //*****************************************************************
480
      // VIO ASYNC input: Display other calibration results
481
      //*****************************************************************
482
 
483
      vio_async_in100 u_vio2
484
        (
485
         .control  (cs_control2),
486
         .async_in (vio2_in)
487
         );
488
 
489
      //*****************************************************************
490
      // VIO SYNC output: Dynamically change IDELAY taps
491
      //*****************************************************************
492
 
493
      vio_sync_out32 u_vio3
494
        (
495
         .control  (cs_control3),
496
         .clk      (clkdiv0),
497
         .sync_out (vio3_out)
498
         );
499
 
500
      //*****************************************************************
501
      // Bit assignments:
502
      // NOTE: Not all VIO, ILA inputs/outputs may be used - these will
503
      //       be dependent on the user's particular bit width
504
      //*****************************************************************
505
 
506
      if (DQ_WIDTH <= 32) begin: gen_dq_le_32
507
        assign vio0_in[(6*DQ_WIDTH)-1:0]
508
                 = dbg_calib_dq_tap_cnt[(6*DQ_WIDTH)-1:0];
509
      end else begin: gen_dq_gt_32
510
        assign vio0_in = dbg_calib_dq_tap_cnt[191:0];
511
      end
512
 
513
      if (DQS_WIDTH <= 8) begin: gen_dqs_le_8
514
        assign vio1_in[(6*DQS_WIDTH)-1:0]
515
                 = dbg_calib_dqs_tap_cnt[(6*DQS_WIDTH)-1:0];
516
        assign vio1_in[(12*DQS_WIDTH)-1:(6*DQS_WIDTH)]
517
                 =  dbg_calib_gate_tap_cnt[(6*DQS_WIDTH)-1:0];
518
      end else begin: gen_dqs_gt_32
519
        assign vio1_in[47:0]  = dbg_calib_dqs_tap_cnt[47:0];
520
        assign vio1_in[95:48] = dbg_calib_gate_tap_cnt[47:0];
521
      end
522
 
523
//dbg_calib_rd_data_sel
524
 
525
     if (DQS_WIDTH <= 8) begin: gen_rdsel_le_8
526
        assign vio2_in[(DQS_WIDTH)+7:8]
527
                 = dbg_calib_rd_data_sel[(DQS_WIDTH)-1:0];
528
     end else begin: gen_rdsel_gt_32
529
      assign vio2_in[15:8]
530
                 = dbg_calib_rd_data_sel[7:0];
531
     end
532
 
533
//dbg_calib_rden_dly
534
 
535
     if (DQS_WIDTH <= 8) begin: gen_calrd_le_8
536
       assign vio2_in[(5*DQS_WIDTH)+19:20]
537
                 = dbg_calib_rden_dly[(5*DQS_WIDTH)-1:0];
538
     end else begin: gen_calrd_gt_32
539
       assign vio2_in[59:20]
540
                 = dbg_calib_rden_dly[39:0];
541
     end
542
 
543
//dbg_calib_gate_dly
544
 
545
     if (DQS_WIDTH <= 8) begin: gen_calgt_le_8
546
       assign vio2_in[(5*DQS_WIDTH)+59:60]
547
                 = dbg_calib_gate_dly[(5*DQS_WIDTH)-1:0];
548
     end else begin: gen_calgt_gt_32
549
       assign vio2_in[99:60]
550
                 = dbg_calib_gate_dly[39:0];
551
     end
552
 
553
//dbg_sel_idel_dq
554
 
555
     if (DQ_BITS <= 5) begin: gen_selid_le_5
556
       assign dbg_sel_idel_dq[DQ_BITS-1:0]
557
                 = vio3_out[DQ_BITS+7:8];
558
     end else begin: gen_selid_gt_32
559
       assign dbg_sel_idel_dq[4:0]
560
                 = vio3_out[12:8];
561
     end
562
 
563
//dbg_sel_idel_dqs
564
 
565
     if (DQS_BITS <= 3) begin: gen_seldqs_le_3
566
       assign dbg_sel_idel_dqs[DQS_BITS:0]
567
                 = vio3_out[(DQS_BITS+16):16];
568
     end else begin: gen_seldqs_gt_32
569
       assign dbg_sel_idel_dqs[3:0]
570
                 = vio3_out[19:16];
571
     end
572
 
573
//dbg_sel_idel_gate
574
 
575
     if (DQS_BITS <= 3) begin: gen_gtdqs_le_3
576
       assign dbg_sel_idel_gate[DQS_BITS:0]
577
                 = vio3_out[(DQS_BITS+21):21];
578
     end else begin: gen_gtdqs_gt_32
579
       assign dbg_sel_idel_gate[3:0]
580
                 = vio3_out[24:21];
581
     end
582
 
583
 
584
      assign vio2_in[3:0]              = dbg_calib_done;
585
      assign vio2_in[7:4]              = dbg_calib_err;
586
 
587
      assign dbg_idel_up_all           = vio3_out[0];
588
      assign dbg_idel_down_all         = vio3_out[1];
589
      assign dbg_idel_up_dq            = vio3_out[2];
590
      assign dbg_idel_down_dq          = vio3_out[3];
591
      assign dbg_idel_up_dqs           = vio3_out[4];
592
      assign dbg_idel_down_dqs         = vio3_out[5];
593
      assign dbg_idel_up_gate          = vio3_out[6];
594
      assign dbg_idel_down_gate        = vio3_out[7];
595
      assign dbg_sel_all_idel_dq       = vio3_out[15];
596
      assign dbg_sel_all_idel_dqs      = vio3_out[20];
597
      assign dbg_sel_all_idel_gate     = vio3_out[25];
598
    end
599
  endgenerate
600
 
601
 
602
endmodule
603
 
604
 
605
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.