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

Subversion Repositories usb_fpga_2_14

[/] [usb_fpga_2_14/] [trunk/] [examples/] [memfifo/] [fpga-2.04b/] [ipcore_dir/] [mem0/] [user_design/] [rtl/] [mcb_controller/] [mcb_raw_wrapper.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 ZTEX
//*****************************************************************************
2
// (c) Copyright 2009 Xilinx, Inc. All rights reserved.
3
//
4
// This file contains confidential and proprietary information
5
// of Xilinx, Inc. and is protected under U.S. and
6
// international copyright and other intellectual property
7
// laws.
8
//
9
// DISCLAIMER
10
// This disclaimer is not a license and does not grant any
11
// rights to the materials distributed herewith. Except as
12
// otherwise provided in a valid license issued to you by
13
// Xilinx, and to the maximum extent permitted by applicable
14
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
15
// WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
16
// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
17
// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
18
// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
19
// (2) Xilinx shall not be liable (whether in contract or tort,
20
// including negligence, or under any other theory of
21
// liability) for any loss or damage of any kind or nature
22
// related to, arising under or in connection with these
23
// materials, including for any direct, or any indirect,
24
// special, incidental, or consequential loss or damage
25
// (including loss of data, profits, goodwill, or any type of
26
// loss or damage suffered as a result of any action brought
27
// by a third party) even if such damage or loss was
28
// reasonably foreseeable or Xilinx had been advised of the
29
// possibility of the same.
30
//
31
// CRITICAL APPLICATIONS
32
// Xilinx products are not designed or intended to be fail-
33
// safe, or for use in any application requiring fail-safe
34
// performance, such as life-support or safety devices or
35
// systems, Class III medical devices, nuclear facilities,
36
// applications related to the deployment of airbags, or any
37
// other applications that could lead to death, personal
38
// injury, or severe property or environmental damage
39
// (individually and collectively, "Critical
40
// Applications"). Customer assumes the sole risk and
41
// liability of any use of Xilinx products in Critical
42
// Applications, subject only to applicable laws and
43
// regulations governing limitations on product liability.
44
//
45
// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
46
// PART OF THIS FILE AT ALL TIMES.
47
//
48
//*****************************************************************************
49
//   ____  ____
50
//  /   /\/   /
51
// /___/  \  /    Vendor: Xilinx
52
// \   \   \/     Version: %version
53
//  \   \         Application: MIG
54
//  /   /         Filename: mcb_raw_wrapper.v
55
// /___/   /\     Date Last Modified: $Date: 2011/06/02 07:17:24 $
56
// \   \  /  \    Date Created: Thu June 24 2008
57
//  \___\/\___\
58
//
59
//Device: Spartan6
60
//Design Name: DDR/DDR2/DDR3/LPDDR 
61
//Purpose:
62
//Reference:
63
//   This module is the intialization control logic of the memory interface.
64
//   All commands are issued from here acoording to the burst, CAS Latency and
65
//   the user commands.
66
//   
67
// Revised History:  
68
//    Rev 1.1 - added port_enable assignment for all configurations  and rearrange 
69
//              assignment siganls according to port number
70
//            - added timescale directive  -SN 7-28-08
71
//            - added C_ARB_NUM_TIME_SLOTS and removed the slot 12 through 
72
//              15 -SN 7-28-08
73
//            - changed C_MEM_DDR2_WRT_RECOVERY = (C_MEM_TWR /C_MEMCLK_PERIOD) -SN 7-28-08
74
//            - removed ghighb, gpwrdnb, gsr, gwe in port declaration. 
75
//              For now tb need to force the signals inside the MCB and Wrapper
76
//              until a glbl.v is ready.  Not sure how to do this in NCVerilog 
77
//              flow. -SN 7-28-08
78
//
79
//    Rev 1.2 -- removed p*_cmd_error signals -SN 8-05-08
80
//    Rev 1.3 -- Added gate logic for data port rd_en and wr_en in Config 3,4,5   - SN 8-8-08
81
//    Rev 1.4 -- update changes that required by MCB core.  - SN 9-11-09
82
//    Rev 1.5 -- update. CMD delays has been removed in Sept 26 database. -- SN 9-28-08
83
//               delay_cas_90,delay_ras_90,delay_cke_90,delay_odt_90,delay_rst_90 
84
//               delay_we_90 ,delay_address,delay_ba_90 =
85
//               --removed :assign #50 delay_dqnum = dqnum;
86
//               --removed :assign #50 delay_dqpum = dqpum;
87
//               --removed :assign #50 delay_dqnlm = dqnlm;
88
//               --removed :assign #50 delay_dqplm = dqplm;
89
//               --removed : delay_dqsIO_w_en_90_n
90
//               --removed : delay_dqsIO_w_en_90_p              
91
//               --removed : delay_dqsIO_w_en_0     
92
//               -- corrected spelling error: C_MEM_RTRAS
93
//    Rev 1.6 -- update IODRP2 and OSERDES connection and was updated by Chip.  1-12-09              
94
//                 -- rename the memc_wrapper.v to mcb_raw_wrapper.v
95
//    Rev 1.7   -- .READEN    is removed in IODRP2_MCB 1-28-09
96
//              -- connection has been updated                            
97
//    Rev 1.8   -- update memory parameter equations.    1-30_2009
98
//              -- added portion of Soft IP               
99
//              -- CAL_CLK_DIV is not used but MCB still has it
100
//    Rev  1.9  -- added Error checking for Invalid command to unidirectional port   
101
//    Rev  1.10 -- changed the backend connection so that Simulation will work while
102
//                 sw tools try to fix the model issues.                  2-3-2009      
103
//                 sysclk_2x_90 name is changed to sysclk_2x_180 . It created confusions.
104
//                 It is acutally 180 degree difference.
105
//    Rev  1.11 -- Added soft_calibration_top. 
106
//    Rev  1.12 -- fixed ui_clk connection to MCB when soft_calib_ip is on. 5-14-2009   
107
//    Rev  1.13 -- Added PULLUP/PULLDN for DQS/DQSN, UDQS/UDQSN lines.
108
//    Rev  1.14 -- Added minium condition for tRTP valud/                        
109
//    REv  1.15 -- Bring the SKIP_IN_TERM_CAL and SKIP_DYNAMIC_CAL from calib_ip to top.  6-16-2009
110
//    Rev  1.16 -- Fixed the WTR for DDR. 6-23-2009
111
//    Rev  1.17 -- Fixed width mismatch for px_cmd_ra,px_cmd_ca,px_cmd_ba 7-02-2009
112
//    Rev  1.18 -- Added lumpdelay parameters for 1.0 silicon support to bypass Calibration 7-10-2010
113
//    Rev  1.19 -- Added soft fix to support refresh command. 7-15-2009.
114
//    Rev  1.20 -- Turned on the CALIB_SOFT_IP and C_MC_CALIBRATION_MODE is used to enable/disable
115
//                 Dynamic DQS calibration in Soft Calibration module.
116
//    Rev  1.21 -- Added extra generate mcbx_dram_odt pin condition. It will not be generated if
117
//                 RTT value is set to "disabled"
118
//              -- Corrected the UIUDQSDEC connection between soft_calib and MCB.
119
//              -- PLL_LOCK pin to MCB tie high. Soft Calib module asserts MCB_RST when pll_lock is deasserted. 1-19-2010                
120
//    Rev  1.22 -- Added DDR2 Initialization fix to meet 400 ns wait as outlined in step d) of JEDEC DDR2 spec .
121
//    Rev  1.23 -- Added DDR2 Initialization fix when C_CALIB_SOFT_IP set to "FALSE" 
122
//    Rev  1.24 -- Fixed reset problem when MCB exits from SUSPEND SELFREFRESH mode.
123
//    Rev  1.25 -- Added a new parameter C_USR_INTERFACE_MODE for AXI interface application. Axi DDRx controller
124
//                 never assert wr_en  or rd_en when wr_full or rd_empty is asserted. 
125
//    Rev  1.26 -- Synchronize sys_rst before connecting to mcb_soft_calibration module to fix
126
//                 CDC static timing issue.
127
//*************************************************************************************************************************
128
`define DEBUG
129
`timescale 1ps / 1ps
130
 
131
module mcb_raw_wrapper #
132
 
133
 (
134
 
135
parameter  C_MEMCLK_PERIOD          = 2500,       // /Mem clk period (in ps)
136
parameter  C_PORT_ENABLE            = 6'b111111,    //  config1 : 6b'111111,  config2: 4'b1111. config3 : 3'b111, config4: 2'b11, config5 1'b1
137
                                                  //  C_PORT_ENABLE[5] => User port 5,  ...,C_PORT_ENABLE[0] => User port 0
138
// Should the C_MEM_ADDR_ORDER made available to user ??
139
parameter  C_MEM_ADDR_ORDER             = "BANK_ROW_COLUMN" , //RowBankCol//ADDR_ORDER_MC : 0: Bank Row Col 1: Row Bank Col. User Address mapping oreder
140
 
141
 
142
parameter C_USR_INTERFACE_MODE       = "NATIVE", // Option is "NATIVE", "AXI"
143
                                               // This should default to "NATIVE" and only AXI interface
144
                                               // can set to "AXI"
145
////////////////////////////////////////////////////////////////////////////////////////////////
146
//  The parameter belows are not exposed to non-embedded users.
147
 
148
// for now this arb_time_slot_x attributes will not exposed to user and will be generated from MIG tool 
149
// to translate the logical port to physical port. For advance user, translate the logical port
150
// to physical port before passing them to this wrapper.
151
// MIG need to save the user setting in project file.
152
parameter  C_ARB_NUM_TIME_SLOTS     = 12,                      // For advance mode, allow user to either choose 10 or 12
153
parameter  C_ARB_TIME_SLOT_0        = 18'o012345,               // Config 1: "B32_B32_X32_X32_X32_X32"
154
parameter  C_ARB_TIME_SLOT_1        = 18'o123450,               //            User port 0 --->MCB port 0,User port 1 --->MCB port 1 
155
parameter  C_ARB_TIME_SLOT_2        = 18'o234501,               //            User port 2 --->MCB port 2,User port 3 --->MCB port 3
156
parameter  C_ARB_TIME_SLOT_3        = 18'o345012,               //            User port 4 --->MCB port 4,User port 5 --->MCB port 5
157
parameter  C_ARB_TIME_SLOT_4        = 18'o450123,               // Config 2: "B32_B32_B32_B32"  
158
parameter  C_ARB_TIME_SLOT_5        = 18'o501234,             //            User port 0     --->  MCB port 0
159
parameter  C_ARB_TIME_SLOT_6        = 18'o012345,             //            User port 1     --->  MCB port 1
160
parameter  C_ARB_TIME_SLOT_7        = 18'o123450,             //            User port 2     --->  MCB port 2
161
parameter  C_ARB_TIME_SLOT_8        = 18'o234501,             //            User port 3     --->  MCB port 4
162
parameter  C_ARB_TIME_SLOT_9        = 18'o345012,             // Config 3: "B64_B32_B3"   
163
parameter  C_ARB_TIME_SLOT_10       = 18'o450123,             //            User port 0     --->  MCB port 0
164
parameter  C_ARB_TIME_SLOT_11       = 18'o501234,             //            User port 1     --->  MCB port 2
165
                                                               //            User port 2     --->  MCB port 4
166
                                                               // Config 4: "B64_B64"              
167
                                                               //            User port 0     --->  MCB port 0
168
                                                               //            User port 1     --->  MCB port 2
169
                                                               // Config 5  "B128"              
170
                                                               //            User port 0     --->  MCB port 0
171
parameter  C_PORT_CONFIG               =  "B128",
172
 
173
 
174
 
175
// Memory Timings
176
parameter  C_MEM_TRAS              =   45000,            //CEIL (tRAS/tCK)
177
parameter  C_MEM_TRCD               =   12500,            //CEIL (tRCD/tCK)
178
parameter  C_MEM_TREFI              =   7800,             //CEIL (tREFI/tCK) number of clocks
179
parameter  C_MEM_TRFC               =   127500,           //CEIL (tRFC/tCK)
180
parameter  C_MEM_TRP                =   12500,            //CEIL (tRP/tCK)
181
parameter  C_MEM_TWR                =   15000,            //CEIL (tWR/tCK)
182
parameter  C_MEM_TRTP               =   7500,             //CEIL (tRTP/tCK)
183
parameter  C_MEM_TWTR               =   7500,
184
 
185
parameter  C_NUM_DQ_PINS               =  8,
186
parameter  C_MEM_TYPE                  =  "DDR3",
187
parameter  C_MEM_DENSITY               =  "512M",
188
parameter  C_MEM_BURST_LEN             =  8,       // MIG Rules for setting this parameter
189
                                                   // For DDR3  this one always set to 8; 
190
                                                   // For DDR2  Config 1 : MemWidth x8,x16:=> 4; MemWidth  x4     => 8
191
                                                   //           Config 2 : MemWidth x8,x16:=> 4; MemWidth  x4     => 8
192
                                                   //           Config 3 : Data Port Width: 32   MemWidth x8,x16:=> 4; MemWidth  x4     => 8
193
                                                   //                      Data Port Width: 64   MemWidth x16   :=> 4; MemWidth  x8,x4     => 8
194
                                                   //           Config 4 : Data Port Width: 64   MemWidth x16   :=> 4; MemWidth  x4,x8, => 8    
195
                                                   //           Config 5 : Data Port Width: 128  MemWidth x4, x8,x16: => 8
196
 
197
 
198
 
199
parameter  C_MEM_CAS_LATENCY           =  4,
200
parameter  C_MEM_ADDR_WIDTH            =  13,    // extracted from selected Memory part
201
parameter  C_MEM_BANKADDR_WIDTH        =  3,     // extracted from selected Memory part
202
parameter  C_MEM_NUM_COL_BITS          =  11,    // extracted from selected Memory part
203
 
204
parameter  C_MEM_DDR3_CAS_LATENCY      = 7,
205
parameter  C_MEM_MOBILE_PA_SR          = "FULL",  //"FULL", "HALF" Mobile DDR Partial Array Self-Refresh 
206
parameter  C_MEM_DDR1_2_ODS            = "FULL",  //"FULL"  :REDUCED" 
207
parameter  C_MEM_DDR3_ODS              = "DIV6",
208
parameter  C_MEM_DDR2_RTT              = "50OHMS",
209
parameter  C_MEM_DDR3_RTT              =  "DIV2",
210
parameter  C_MEM_MDDR_ODS              =  "FULL",
211
 
212
parameter  C_MEM_DDR2_DIFF_DQS_EN      =  "YES",
213
parameter  C_MEM_DDR2_3_PA_SR          =  "OFF",
214
parameter  C_MEM_DDR3_CAS_WR_LATENCY   =   5,        // this parameter is hardcoded  by MIG tool which depends on the memory clock frequency
215
                                                     //C_MEMCLK_PERIOD ave = 2.5ns to < 3.3 ns, CWL = 5 
216
                                                     //C_MEMCLK_PERIOD ave = 1.875ns to < 2.5 ns, CWL = 6 
217
                                                     //C_MEMCLK_PERIOD ave = 1.5ns to <1.875ns, CSL = 7 
218
                                                     //C_MEMCLK_PERIOD avg = 1.25ns to < 1.5ns , CWL = 8
219
 
220
parameter  C_MEM_DDR3_AUTO_SR         =  "ENABLED",
221
parameter  C_MEM_DDR2_3_HIGH_TEMP_SR  =  "NORMAL",
222
parameter  C_MEM_DDR3_DYN_WRT_ODT     =  "OFF",
223
parameter  C_MEM_TZQINIT_MAXCNT       = 10'd512,  // DDR3 Minimum delay between resets
224
 
225
//Calibration 
226
parameter  C_MC_CALIB_BYPASS        = "NO",
227
parameter  C_MC_CALIBRATION_RA      = 15'h0000,
228
parameter  C_MC_CALIBRATION_BA      = 3'h0,
229
 
230
parameter C_CALIB_SOFT_IP           = "TRUE",
231
parameter C_SKIP_IN_TERM_CAL = 1'b0,     //provides option to skip the input termination calibration
232
parameter C_SKIP_DYNAMIC_CAL = 1'b0,     //provides option to skip the dynamic delay calibration
233
parameter C_SKIP_DYN_IN_TERM = 1'b1,     // provides option to skip the input termination calibration
234
parameter C_SIMULATION       = "FALSE",  // Tells us whether the design is being simulated or implemented
235
 
236
////////////////LUMP DELAY Params ////////////////////////////
237
/// ADDED for 1.0 silicon support to bypass Calibration //////
238
/// 07-10-09 chipl
239
//////////////////////////////////////////////////////////////
240
parameter LDQSP_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
241
parameter UDQSP_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
242
parameter LDQSN_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
243
parameter UDQSN_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
244
parameter DQ0_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
245
parameter DQ1_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
246
parameter DQ2_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
247
parameter DQ3_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
248
parameter DQ4_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
249
parameter DQ5_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
250
parameter DQ6_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
251
parameter DQ7_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
252
parameter DQ8_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
253
parameter DQ9_TAP_DELAY_VAL  = 0,  // 0 to 255 inclusive
254
parameter DQ10_TAP_DELAY_VAL = 0,  // 0 to 255 inclusive
255
parameter DQ11_TAP_DELAY_VAL = 0,  // 0 to 255 inclusive
256
parameter DQ12_TAP_DELAY_VAL = 0,  // 0 to 255 inclusive
257
parameter DQ13_TAP_DELAY_VAL = 0,  // 0 to 255 inclusive
258
parameter DQ14_TAP_DELAY_VAL = 0,  // 0 to 255 inclusive
259
parameter DQ15_TAP_DELAY_VAL = 0,  // 0 to 255 inclusive
260
//*************
261
// MIG tool need to do DRC on this parameter to make sure this is valid Column address to avoid boundary crossing for the current Burst Size setting.
262
parameter  C_MC_CALIBRATION_CA      = 12'h000,
263
parameter  C_MC_CALIBRATION_CLK_DIV     = 1,
264
parameter  C_MC_CALIBRATION_MODE    = "CALIBRATION"     ,   // "CALIBRATION", "NOCALIBRATION"
265
parameter  C_MC_CALIBRATION_DELAY   = "HALF",   // "QUARTER", "HALF","THREEQUARTER", "FULL"
266
 
267
parameter C_P0_MASK_SIZE           = 4,
268
parameter C_P0_DATA_PORT_SIZE      = 32,
269
parameter C_P1_MASK_SIZE           = 4,
270
parameter C_P1_DATA_PORT_SIZE         = 32
271
 
272
    )
273
  (
274
 
275
      // high-speed PLL clock interface
276
 
277
      input sysclk_2x,
278
      input sysclk_2x_180,
279
      input pll_ce_0,
280
      input pll_ce_90,
281
      input pll_lock,
282
      input sys_rst,
283
      // Not needed as ioi netlist are not used
284
//***********************************************************************************
285
//  Below User Port siganls needs to be customized when generating codes from MIG tool
286
//  The corresponding internal codes that directly use the commented out port signals 
287
//  needs to be removed when gernerating wrapper outputs.
288
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
289
 
290
      //User Port0 Interface Signals
291
      // p0_xxxx signals  shows up in Config 1 , Config 2 , Config 3, Config4 and Config 5
292
      // cmd port 0 signals
293
 
294
      input             p0_arb_en,
295
      input             p0_cmd_clk,
296
      input             p0_cmd_en,
297
      input [2:0]       p0_cmd_instr,
298
      input [5:0]       p0_cmd_bl,
299
      input [29:0]      p0_cmd_byte_addr,
300
      output            p0_cmd_empty,
301
      output            p0_cmd_full,
302
 
303
      // Data Wr Port signals
304
      // p0_wr_xx signals  shows up in Config 1 
305
      // p0_wr_xx signals  shows up in Config 2
306
      // p0_wr_xx signals  shows up in Config 3
307
      // p0_wr_xx signals  shows up in Config 4
308
      // p0_wr_xx signals  shows up in Config 5
309
 
310
      input             p0_wr_clk,
311
      input             p0_wr_en,
312
      input [C_P0_MASK_SIZE - 1:0]      p0_wr_mask,
313
      input [C_P0_DATA_PORT_SIZE - 1:0] p0_wr_data,
314
      output            p0_wr_full,        //
315
      output            p0_wr_empty,//
316
      output [6:0]      p0_wr_count,//
317
      output            p0_wr_underrun,//
318
      output            p0_wr_error,//
319
 
320
      //Data Rd Port signals
321
      // p0_rd_xx signals  shows up in Config 1 
322
      // p0_rd_xx signals  shows up in Config 2
323
      // p0_rd_xx signals  shows up in Config 3
324
      // p0_rd_xx signals  shows up in Config 4
325
      // p0_rd_xx signals  shows up in Config 5
326
 
327
      input             p0_rd_clk,
328
      input             p0_rd_en,
329
      output [C_P0_DATA_PORT_SIZE - 1:0]        p0_rd_data,
330
      output            p0_rd_full,//
331
      output            p0_rd_empty,//
332
      output [6:0]      p0_rd_count,
333
      output            p0_rd_overflow,//
334
      output            p0_rd_error,//
335
 
336
 
337
      //****************************
338
      //User Port1 Interface Signals
339
      // This group of signals only appear on Config 1,2,3,4 when generated from MIG tool
340
 
341
      input             p1_arb_en,
342
      input             p1_cmd_clk,
343
      input             p1_cmd_en,
344
      input [2:0]       p1_cmd_instr,
345
      input [5:0]       p1_cmd_bl,
346
      input [29:0]      p1_cmd_byte_addr,
347
      output            p1_cmd_empty,
348
      output            p1_cmd_full,
349
 
350
      // Data Wr Port signals
351
      input             p1_wr_clk,
352
      input             p1_wr_en,
353
      input [C_P1_MASK_SIZE - 1:0]      p1_wr_mask,
354
      input [C_P1_DATA_PORT_SIZE - 1:0] p1_wr_data,
355
      output            p1_wr_full,
356
      output            p1_wr_empty,
357
      output [6:0]      p1_wr_count,
358
      output            p1_wr_underrun,
359
      output            p1_wr_error,
360
 
361
      //Data Rd Port signals
362
      input             p1_rd_clk,
363
      input             p1_rd_en,
364
      output [C_P1_DATA_PORT_SIZE - 1:0]        p1_rd_data,
365
      output            p1_rd_full,
366
      output            p1_rd_empty,
367
      output [6:0]      p1_rd_count,
368
      output            p1_rd_overflow,
369
      output            p1_rd_error,
370
 
371
 
372
      //****************************
373
      //User Port2 Interface Signals
374
      // This group of signals only appear on Config 1,2,3 when generated from MIG tool
375
      // p2_xxxx signals  shows up in Config 1 , Config 2 and Config 3
376
      // p_cmd port 2 signals
377
 
378
      input             p2_arb_en,
379
      input             p2_cmd_clk,
380
      input             p2_cmd_en,
381
      input [2:0]       p2_cmd_instr,
382
      input [5:0]       p2_cmd_bl,
383
      input [29:0]      p2_cmd_byte_addr,
384
      output            p2_cmd_empty,
385
      output            p2_cmd_full,
386
 
387
      // Data Wr Port signals
388
      // p2_wr_xx signals  shows up in Config 1 and Wr Dir  
389
      // p2_wr_xx signals  shows up in Config 2
390
      // p2_wr_xx signals  shows up in Config 3
391
 
392
      input             p2_wr_clk,
393
      input             p2_wr_en,
394
      input [3:0]       p2_wr_mask,
395
      input [31:0]      p2_wr_data,
396
      output            p2_wr_full,
397
      output            p2_wr_empty,
398
      output [6:0]      p2_wr_count,
399
      output            p2_wr_underrun,
400
      output            p2_wr_error,
401
 
402
      //Data Rd Port signals
403
      // p2_rd_xx signals  shows up in Config 1 and Rd Dir
404
      // p2_rd_xx signals  shows up in Config 2
405
      // p2_rd_xx signals  shows up in Config 3
406
 
407
      input             p2_rd_clk,
408
      input             p2_rd_en,
409
      output [31:0]     p2_rd_data,
410
      output            p2_rd_full,
411
      output            p2_rd_empty,
412
      output [6:0]      p2_rd_count,
413
      output            p2_rd_overflow,
414
      output            p2_rd_error,
415
 
416
 
417
      //****************************
418
      //User Port3 Interface Signals
419
      // This group of signals only appear on Config 1,2 when generated from MIG tool
420
 
421
      input             p3_arb_en,
422
      input             p3_cmd_clk,
423
      input             p3_cmd_en,
424
      input [2:0]       p3_cmd_instr,
425
      input [5:0]       p3_cmd_bl,
426
      input [29:0]      p3_cmd_byte_addr,
427
      output            p3_cmd_empty,
428
      output            p3_cmd_full,
429
 
430
      // Data Wr Port signals
431
      // p3_wr_xx signals  shows up in Config 1 and Wr Dir
432
      // p3_wr_xx signals  shows up in Config 2
433
 
434
      input             p3_wr_clk,
435
      input             p3_wr_en,
436
      input [3:0]       p3_wr_mask,
437
      input [31:0]      p3_wr_data,
438
      output            p3_wr_full,
439
      output            p3_wr_empty,
440
      output [6:0]      p3_wr_count,
441
      output            p3_wr_underrun,
442
      output            p3_wr_error,
443
 
444
      //Data Rd Port signals
445
      // p3_rd_xx signals  shows up in Config 1 and Rd Dir when generated from MIG ttols
446
      // p3_rd_xx signals  shows up in Config 2 
447
 
448
      input             p3_rd_clk,
449
      input             p3_rd_en,
450
      output [31:0]     p3_rd_data,
451
      output            p3_rd_full,
452
      output            p3_rd_empty,
453
      output [6:0]      p3_rd_count,
454
      output            p3_rd_overflow,
455
      output            p3_rd_error,
456
      //****************************
457
      //User Port4 Interface Signals
458
      // This group of signals only appear on Config 1,2,3,4 when generated from MIG tool
459
      // p4_xxxx signals only shows up in Config 1
460
 
461
      input             p4_arb_en,
462
      input             p4_cmd_clk,
463
      input             p4_cmd_en,
464
      input [2:0]       p4_cmd_instr,
465
      input [5:0]       p4_cmd_bl,
466
      input [29:0]      p4_cmd_byte_addr,
467
      output            p4_cmd_empty,
468
      output            p4_cmd_full,
469
 
470
      // Data Wr Port signals
471
      // p4_wr_xx signals only shows up in Config 1 and Wr Dir
472
 
473
      input             p4_wr_clk,
474
      input             p4_wr_en,
475
      input [3:0]       p4_wr_mask,
476
      input [31:0]      p4_wr_data,
477
      output            p4_wr_full,
478
      output            p4_wr_empty,
479
      output [6:0]      p4_wr_count,
480
      output            p4_wr_underrun,
481
      output            p4_wr_error,
482
 
483
      //Data Rd Port signals
484
      // p4_rd_xx signals only shows up in Config 1 and Rd Dir
485
 
486
      input             p4_rd_clk,
487
      input             p4_rd_en,
488
      output [31:0]     p4_rd_data,
489
      output            p4_rd_full,
490
      output            p4_rd_empty,
491
      output [6:0]      p4_rd_count,
492
      output            p4_rd_overflow,
493
      output            p4_rd_error,
494
 
495
 
496
      //****************************
497
      //User Port5 Interface Signals
498
      // p5_xxxx signals only shows up in Config 1; p5_wr_xx or p5_rd_xx depends on the user port settings
499
 
500
      input             p5_arb_en,
501
      input             p5_cmd_clk,
502
      input             p5_cmd_en,
503
      input [2:0]       p5_cmd_instr,
504
      input [5:0]       p5_cmd_bl,
505
      input [29:0]      p5_cmd_byte_addr,
506
      output            p5_cmd_empty,
507
      output            p5_cmd_full,
508
 
509
      // Data Wr Port signals
510
      input             p5_wr_clk,
511
      input             p5_wr_en,
512
      input [3:0]       p5_wr_mask,
513
      input [31:0]      p5_wr_data,
514
      output            p5_wr_full,
515
      output            p5_wr_empty,
516
      output [6:0]      p5_wr_count,
517
      output            p5_wr_underrun,
518
      output            p5_wr_error,
519
 
520
      //Data Rd Port signals
521
      input             p5_rd_clk,
522
      input             p5_rd_en,
523
      output [31:0]     p5_rd_data,
524
      output            p5_rd_full,
525
      output            p5_rd_empty,
526
      output [6:0]      p5_rd_count,
527
      output            p5_rd_overflow,
528
      output            p5_rd_error,
529
 
530
//*****************************************************
531
      // memory interface signals    
532
      output [C_MEM_ADDR_WIDTH-1:0]     mcbx_dram_addr,
533
      output [C_MEM_BANKADDR_WIDTH-1:0] mcbx_dram_ba,
534
      output                            mcbx_dram_ras_n,
535
      output                            mcbx_dram_cas_n,
536
      output                            mcbx_dram_we_n,
537
 
538
      output                            mcbx_dram_cke,
539
      output                            mcbx_dram_clk,
540
      output                            mcbx_dram_clk_n,
541
      inout [C_NUM_DQ_PINS-1:0]         mcbx_dram_dq,
542
      inout                             mcbx_dram_dqs,
543
      inout                             mcbx_dram_dqs_n,
544
      inout                             mcbx_dram_udqs,
545
      inout                             mcbx_dram_udqs_n,
546
 
547
      output                            mcbx_dram_udm,
548
      output                            mcbx_dram_ldm,
549
      output                            mcbx_dram_odt,
550
      output                            mcbx_dram_ddr3_rst,
551
      // Calibration signals
552
      input calib_recal,              // Input signal to trigger calibration
553
     // output calib_done,        // 0=calibration not done or is in progress.  
554
                                // 1=calibration is complete.  Also a MEM_READY indicator
555
 
556
   //Input - RZQ pin from board - expected to have a 2*R resistor to ground
557
   //Input - Z-stated IO pin - either unbonded IO, or IO garanteed not to be driven externally
558
 
559
      inout                             rzq,           // RZQ pin from board - expected to have a 2*R resistor to ground
560
      inout                             zio,           // Z-stated IO pin - either unbonded IO, or IO garanteed not to be driven externally
561
      // new added signals *********************************
562
      // these signals are for dynamic Calibration IP
563
      input                             ui_read,
564
      input                             ui_add,
565
      input                             ui_cs,
566
      input                             ui_clk,
567
      input                             ui_sdi,
568
      input     [4:0]                   ui_addr,
569
      input                             ui_broadcast,
570
      input                             ui_drp_update,
571
      input                             ui_done_cal,
572
      input                             ui_cmd,
573
      input                             ui_cmd_in,
574
      input                             ui_cmd_en,
575
      input     [3:0]                   ui_dqcount,
576
      input                             ui_dq_lower_dec,
577
      input                             ui_dq_lower_inc,
578
      input                             ui_dq_upper_dec,
579
      input                             ui_dq_upper_inc,
580
      input                             ui_udqs_inc,
581
      input                             ui_udqs_dec,
582
      input                             ui_ldqs_inc,
583
      input                             ui_ldqs_dec,
584
      output     [7:0]                  uo_data,
585
      output                            uo_data_valid,
586
      output                            uo_done_cal,
587
      output                            uo_cmd_ready_in,
588
      output                            uo_refrsh_flag,
589
      output                            uo_cal_start,
590
      output                            uo_sdo,
591
      output   [31:0]                   status,
592
      input                             selfrefresh_enter,
593
      output                            selfrefresh_mode
594
         );
595
  function integer cdiv (input integer num,
596
                         input integer div); // ceiling divide
597
    begin
598
      cdiv = (num/div) + (((num%div)>0) ? 1 : 0);
599
    end
600
  endfunction // cdiv
601
 
602
// parameters added by AM for OSERDES2 12/09/2008, these parameters may not have to change 
603
localparam C_OSERDES2_DATA_RATE_OQ = "SDR";           //SDR, DDR
604
localparam C_OSERDES2_DATA_RATE_OT = "SDR";           //SDR, DDR
605
localparam C_OSERDES2_SERDES_MODE_MASTER  = "MASTER";        //MASTER, SLAVE
606
localparam C_OSERDES2_SERDES_MODE_SLAVE   = "SLAVE";        //MASTER, SLAVE
607
localparam C_OSERDES2_OUTPUT_MODE_SE      = "SINGLE_ENDED";   //SINGLE_ENDED, DIFFERENTIAL
608
localparam C_OSERDES2_OUTPUT_MODE_DIFF    = "DIFFERENTIAL";
609
 
610
localparam C_BUFPLL_0_LOCK_SRC       = "LOCK_TO_0";
611
 
612
localparam C_DQ_IODRP2_DATA_RATE             = "SDR";
613
localparam C_DQ_IODRP2_SERDES_MODE_MASTER    = "MASTER";
614
localparam C_DQ_IODRP2_SERDES_MODE_SLAVE     = "SLAVE";
615
 
616
localparam C_DQS_IODRP2_DATA_RATE             = "SDR";
617
localparam C_DQS_IODRP2_SERDES_MODE_MASTER    = "MASTER";
618
localparam C_DQS_IODRP2_SERDES_MODE_SLAVE     = "SLAVE";
619
 
620
 
621
 
622
 
623
 
624
 
625
// MIG always set the below ADD_LATENCY to zero
626
localparam  C_MEM_DDR3_ADD_LATENCY      =  "OFF";
627
localparam  C_MEM_DDR2_ADD_LATENCY      =  0;
628
localparam  C_MEM_MOBILE_TC_SR          =  0; // not supported
629
 
630
 
631
//////////////////////////////////////////////////////////////////////////////////
632
                                              // Attribute Declarations
633
                                              // Attributes set from GUI
634
                                              //
635
                                         //
636
   // the local param for the time slot varis according to User Port Configuration  
637
   // This section also needs to be customized when gernerating wrapper outputs.
638
   //*****************************************************************************
639
 
640
 
641
// For Configuration 1  and this section will be used in RAW file
642
localparam arbtimeslot0   = {C_ARB_TIME_SLOT_0   };
643
localparam arbtimeslot1   = {C_ARB_TIME_SLOT_1   };
644
localparam arbtimeslot2   = {C_ARB_TIME_SLOT_2   };
645
localparam arbtimeslot3   = {C_ARB_TIME_SLOT_3   };
646
localparam arbtimeslot4   = {C_ARB_TIME_SLOT_4   };
647
localparam arbtimeslot5   = {C_ARB_TIME_SLOT_5   };
648
localparam arbtimeslot6   = {C_ARB_TIME_SLOT_6   };
649
localparam arbtimeslot7   = {C_ARB_TIME_SLOT_7   };
650
localparam arbtimeslot8   = {C_ARB_TIME_SLOT_8   };
651
localparam arbtimeslot9   = {C_ARB_TIME_SLOT_9   };
652
localparam arbtimeslot10  = {C_ARB_TIME_SLOT_10  };
653
localparam arbtimeslot11  = {C_ARB_TIME_SLOT_11  };
654
 
655
 
656
// convert the memory timing to memory clock units. I
657
localparam MEM_RAS_VAL  = ((C_MEM_TRAS + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD);
658
localparam MEM_RCD_VAL  = ((C_MEM_TRCD  + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD);
659
localparam MEM_REFI_VAL = ((C_MEM_TREFI + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD) - 25;
660
localparam MEM_RFC_VAL  = ((C_MEM_TRFC  + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD);
661
localparam MEM_RP_VAL   = ((C_MEM_TRP   + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD);
662
localparam MEM_WR_VAL   = ((C_MEM_TWR   + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD);
663
localparam MEM_RTP_CK    = cdiv(C_MEM_TRTP,C_MEMCLK_PERIOD);
664
localparam MEM_RTP_VAL = (C_MEM_TYPE == "DDR3") ? (MEM_RTP_CK < 4) ? 4 : MEM_RTP_CK
665
                                               : (MEM_RTP_CK < 2) ? 2 : MEM_RTP_CK;
666
localparam MEM_WTR_VAL  = (C_MEM_TYPE == "DDR")   ? 2 :
667
                          (C_MEM_TYPE == "DDR3")  ? 4 :
668
                          (C_MEM_TYPE == "MDDR")  ? C_MEM_TWTR :
669
                          (C_MEM_TYPE == "LPDDR")  ? C_MEM_TWTR :
670
                          ((C_MEM_TYPE == "DDR2") && (((C_MEM_TWTR  + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD) > 2)) ? ((C_MEM_TWTR  + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD) :
671
                          (C_MEM_TYPE == "DDR2")  ? 2
672
                                                  : 3 ;
673
localparam  C_MEM_DDR2_WRT_RECOVERY = (C_MEM_TYPE != "DDR2") ? 5: ((C_MEM_TWR   + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD);
674
localparam  C_MEM_DDR3_WRT_RECOVERY = (C_MEM_TYPE != "DDR3") ? 5: ((C_MEM_TWR   + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD);
675
//localparam MEM_TYPE = (C_MEM_TYPE == "LPDDR") ? "MDDR": C_MEM_TYPE;
676
 
677
 
678
 
679
////////////////////////////////////////////////////////////////////////////
680
// wire Declarations
681
////////////////////////////////////////////////////////////////////////////
682
 
683
 
684
 
685
 
686
 
687
wire [31:0]  addr_in0;
688
reg [127:0]  allzero = 0;
689
 
690
 
691
// UNISIM Model <-> IOI
692
//dqs clock network interface
693
wire       dqs_out_p;
694
wire       dqs_out_n;
695
 
696
wire       dqs_sys_p;              //from dqs_gen to IOclk network
697
wire       dqs_sys_n;              //from dqs_gen to IOclk network
698
wire       udqs_sys_p;
699
wire       udqs_sys_n;
700
 
701
wire       dqs_p;                  // open net now ?
702
wire       dqs_n;                  // open net now ?
703
 
704
 
705
 
706
// IOI and IOB enable/tristate interface
707
wire dqIO_w_en_0;                //enable DQ pads
708
wire dqsIO_w_en_90_p;            //enable p side of DQS
709
wire dqsIO_w_en_90_n;            //enable n side of DQS
710
 
711
 
712
//memory chip control interface
713
wire [14:0]   address_90;
714
wire [2:0]    ba_90;
715
wire          ras_90;
716
wire          cas_90;
717
wire          we_90 ;
718
wire          cke_90;
719
wire          odt_90;
720
wire          rst_90;
721
 
722
// calibration IDELAY control  signals
723
wire          ioi_drp_clk;          //DRP interface - synchronous clock output
724
wire  [4:0]   ioi_drp_addr;         //DRP interface - IOI selection
725
wire          ioi_drp_sdo;          //DRP interface - serial output for commmands
726
wire          ioi_drp_sdi;          //DRP interface - serial input for commands
727
wire          ioi_drp_cs;           //DRP interface - chip select doubles as DONE signal
728
wire          ioi_drp_add;          //DRP interface - serial address signal
729
wire          ioi_drp_broadcast;
730
wire          ioi_drp_train;
731
 
732
 
733
   // Calibration datacapture siganls
734
 
735
wire  [3:0]dqdonecount; //select signal for the datacapture 16 to 1 mux
736
wire  dq_in_p;          //positive signal sent to calibration logic
737
wire  dq_in_n;          //negative signal sent to calibration logic
738
wire  cal_done;
739
 
740
 
741
//DQS calibration interface
742
wire       udqs_n;
743
wire       udqs_p;
744
 
745
 
746
wire            udqs_dqocal_p;
747
wire            udqs_dqocal_n;
748
 
749
 
750
// MUI enable interface
751
wire df_en_n90  ;
752
 
753
//INTERNAL SIGNAL FOR DRP chain
754
// IOI <-> MUI
755
wire ioi_int_tmp;
756
 
757
wire [15:0]dqo_n;
758
wire [15:0]dqo_p;
759
wire dqnlm;
760
wire dqplm;
761
wire dqnum;
762
wire dqpum;
763
 
764
 
765
// IOI <-> IOB   routes
766
wire  [C_MEM_ADDR_WIDTH-1:0]ioi_addr;
767
wire  [C_MEM_BANKADDR_WIDTH-1:0]ioi_ba;
768
wire  ioi_cas;
769
wire  ioi_ck;
770
wire  ioi_ckn;
771
wire  ioi_cke;
772
wire  [C_NUM_DQ_PINS-1:0]ioi_dq;
773
wire  ioi_dqs;
774
wire  ioi_dqsn;
775
wire  ioi_udqs;
776
wire  ioi_udqsn;
777
wire  ioi_odt;
778
wire  ioi_ras;
779
wire  ioi_rst;
780
wire  ioi_we;
781
wire  ioi_udm;
782
wire  ioi_ldm;
783
 
784
wire  [15:0] in_dq;
785
wire  [C_NUM_DQ_PINS-1:0] in_pre_dq;
786
 
787
 
788
 
789
wire            in_dqs;
790
wire            in_pre_dqsp;
791
wire            in_pre_dqsn;
792
wire            in_pre_udqsp;
793
wire            in_pre_udqsn;
794
wire            in_udqs;
795
     // Memory tri-state control signals
796
wire  [C_MEM_ADDR_WIDTH-1:0]t_addr;
797
wire  [C_MEM_BANKADDR_WIDTH-1:0]t_ba;
798
wire  t_cas;
799
wire  t_ck ;
800
wire  t_ckn;
801
wire  t_cke;
802
wire  [C_NUM_DQ_PINS-1:0]t_dq;
803
wire  t_dqs;
804
wire  t_dqsn;
805
wire  t_udqs;
806
wire  t_udqsn;
807
wire  t_odt;
808
wire  t_ras;
809
wire  t_rst;
810
wire  t_we ;
811
 
812
 
813
wire  t_udm  ;
814
wire  t_ldm  ;
815
 
816
 
817
 
818
wire             idelay_dqs_ioi_s;
819
wire             idelay_dqs_ioi_m;
820
wire             idelay_udqs_ioi_s;
821
wire             idelay_udqs_ioi_m;
822
 
823
 
824
wire  dqs_pin;
825
wire  udqs_pin;
826
 
827
// USER Interface signals
828
 
829
 
830
// translated memory addresses
831
wire [14:0]p0_cmd_ra;
832
wire [2:0]p0_cmd_ba;
833
wire [11:0]p0_cmd_ca;
834
wire [14:0]p1_cmd_ra;
835
wire [2:0]p1_cmd_ba;
836
wire [11:0]p1_cmd_ca;
837
wire [14:0]p2_cmd_ra;
838
wire [2:0]p2_cmd_ba;
839
wire [11:0]p2_cmd_ca;
840
wire [14:0]p3_cmd_ra;
841
wire [2:0]p3_cmd_ba;
842
wire [11:0]p3_cmd_ca;
843
wire [14:0]p4_cmd_ra;
844
wire [2:0]p4_cmd_ba;
845
wire [11:0]p4_cmd_ca;
846
wire [14:0]p5_cmd_ra;
847
wire [2:0]p5_cmd_ba;
848
wire [11:0]p5_cmd_ca;
849
 
850
   // user command wires mapped from logical ports to physical ports
851
wire        mig_p0_arb_en;
852
wire        mig_p0_cmd_clk;
853
wire        mig_p0_cmd_en;
854
wire [14:0] mig_p0_cmd_ra;
855
wire [2:0]  mig_p0_cmd_ba;
856
wire [11:0] mig_p0_cmd_ca;
857
 
858
wire [2:0]  mig_p0_cmd_instr;
859
wire [5:0]  mig_p0_cmd_bl;
860
wire        mig_p0_cmd_empty;
861
wire        mig_p0_cmd_full;
862
 
863
 
864
wire        mig_p1_arb_en;
865
wire        mig_p1_cmd_clk;
866
wire        mig_p1_cmd_en;
867
wire [14:0] mig_p1_cmd_ra;
868
wire [2:0] mig_p1_cmd_ba;
869
wire [11:0] mig_p1_cmd_ca;
870
 
871
wire [2:0]  mig_p1_cmd_instr;
872
wire [5:0]  mig_p1_cmd_bl;
873
wire        mig_p1_cmd_empty;
874
wire        mig_p1_cmd_full;
875
 
876
wire        mig_p2_arb_en;
877
wire        mig_p2_cmd_clk;
878
wire        mig_p2_cmd_en;
879
wire [14:0] mig_p2_cmd_ra;
880
wire [2:0] mig_p2_cmd_ba;
881
wire [11:0] mig_p2_cmd_ca;
882
 
883
wire [2:0]  mig_p2_cmd_instr;
884
wire [5:0]  mig_p2_cmd_bl;
885
wire        mig_p2_cmd_empty;
886
wire        mig_p2_cmd_full;
887
 
888
wire        mig_p3_arb_en;
889
wire        mig_p3_cmd_clk;
890
wire        mig_p3_cmd_en;
891
wire [14:0] mig_p3_cmd_ra;
892
wire [2:0] mig_p3_cmd_ba;
893
wire [11:0] mig_p3_cmd_ca;
894
 
895
wire [2:0]  mig_p3_cmd_instr;
896
wire [5:0]  mig_p3_cmd_bl;
897
wire        mig_p3_cmd_empty;
898
wire        mig_p3_cmd_full;
899
 
900
wire        mig_p4_arb_en;
901
wire        mig_p4_cmd_clk;
902
wire        mig_p4_cmd_en;
903
wire [14:0] mig_p4_cmd_ra;
904
wire [2:0] mig_p4_cmd_ba;
905
wire [11:0] mig_p4_cmd_ca;
906
 
907
wire [2:0]  mig_p4_cmd_instr;
908
wire [5:0]  mig_p4_cmd_bl;
909
wire        mig_p4_cmd_empty;
910
wire        mig_p4_cmd_full;
911
 
912
wire        mig_p5_arb_en;
913
wire        mig_p5_cmd_clk;
914
wire        mig_p5_cmd_en;
915
wire [14:0] mig_p5_cmd_ra;
916
wire [2:0] mig_p5_cmd_ba;
917
wire [11:0] mig_p5_cmd_ca;
918
 
919
wire [2:0]  mig_p5_cmd_instr;
920
wire [5:0]  mig_p5_cmd_bl;
921
wire        mig_p5_cmd_empty;
922
wire        mig_p5_cmd_full;
923
 
924
wire        mig_p0_wr_clk;
925
wire        mig_p0_rd_clk;
926
wire        mig_p1_wr_clk;
927
wire        mig_p1_rd_clk;
928
wire        mig_p2_clk;
929
wire        mig_p3_clk;
930
wire        mig_p4_clk;
931
wire        mig_p5_clk;
932
 
933
wire       mig_p0_wr_en;
934
wire       mig_p0_rd_en;
935
wire       mig_p1_wr_en;
936
wire       mig_p1_rd_en;
937
wire       mig_p2_en;
938
wire       mig_p3_en;
939
wire       mig_p4_en;
940
wire       mig_p5_en;
941
 
942
 
943
wire [31:0]mig_p0_wr_data;
944
wire [31:0]mig_p1_wr_data;
945
wire [31:0]mig_p2_wr_data;
946
wire [31:0]mig_p3_wr_data;
947
wire [31:0]mig_p4_wr_data;
948
wire [31:0]mig_p5_wr_data;
949
 
950
 
951
wire  [C_P0_MASK_SIZE-1:0]mig_p0_wr_mask;
952
wire  [C_P1_MASK_SIZE-1:0]mig_p1_wr_mask;
953
wire  [3:0]mig_p2_wr_mask;
954
wire  [3:0]mig_p3_wr_mask;
955
wire  [3:0]mig_p4_wr_mask;
956
wire  [3:0]mig_p5_wr_mask;
957
 
958
 
959
wire  [31:0]mig_p0_rd_data;
960
wire  [31:0]mig_p1_rd_data;
961
wire  [31:0]mig_p2_rd_data;
962
wire  [31:0]mig_p3_rd_data;
963
wire  [31:0]mig_p4_rd_data;
964
wire  [31:0]mig_p5_rd_data;
965
 
966
wire  mig_p0_rd_overflow;
967
wire  mig_p1_rd_overflow;
968
wire  mig_p2_overflow;
969
wire  mig_p3_overflow;
970
 
971
wire  mig_p4_overflow;
972
wire  mig_p5_overflow;
973
 
974
wire  mig_p0_wr_underrun;
975
wire  mig_p1_wr_underrun;
976
wire  mig_p2_underrun;
977
wire  mig_p3_underrun;
978
wire  mig_p4_underrun;
979
wire  mig_p5_underrun;
980
 
981
wire       mig_p0_rd_error;
982
wire       mig_p0_wr_error;
983
wire       mig_p1_rd_error;
984
wire       mig_p1_wr_error;
985
wire       mig_p2_error;
986
wire       mig_p3_error;
987
wire       mig_p4_error;
988
wire       mig_p5_error;
989
 
990
 
991
wire  [6:0]mig_p0_wr_count;
992
wire  [6:0]mig_p1_wr_count;
993
wire  [6:0]mig_p0_rd_count;
994
wire  [6:0]mig_p1_rd_count;
995
 
996
wire  [6:0]mig_p2_count;
997
wire  [6:0]mig_p3_count;
998
wire  [6:0]mig_p4_count;
999
wire  [6:0]mig_p5_count;
1000
 
1001
wire  mig_p0_wr_full;
1002
wire  mig_p1_wr_full;
1003
 
1004
wire mig_p0_rd_empty;
1005
wire mig_p1_rd_empty;
1006
wire mig_p0_wr_empty;
1007
wire mig_p1_wr_empty;
1008
wire mig_p0_rd_full;
1009
wire mig_p1_rd_full;
1010
wire mig_p2_full;
1011
wire mig_p3_full;
1012
wire mig_p4_full;
1013
wire mig_p5_full;
1014
wire mig_p2_empty;
1015
wire mig_p3_empty;
1016
wire mig_p4_empty;
1017
wire mig_p5_empty;
1018
 
1019
// SELFREESH control signal for suspend feature
1020
wire selfrefresh_mcb_enter;
1021
wire selfrefresh_mcb_mode ;
1022
// Testing Interface signals
1023
wire           tst_cmd_test_en;
1024
wire   [7:0]   tst_sel;
1025
wire   [15:0]  tst_in;
1026
wire           tst_scan_clk;
1027
wire           tst_scan_rst;
1028
wire           tst_scan_set;
1029
wire           tst_scan_en;
1030
wire           tst_scan_in;
1031
wire           tst_scan_mode;
1032
 
1033
wire           p0w_tst_en;
1034
wire           p0r_tst_en;
1035
wire           p1w_tst_en;
1036
wire           p1r_tst_en;
1037
wire           p2_tst_en;
1038
wire           p3_tst_en;
1039
wire           p4_tst_en;
1040
wire           p5_tst_en;
1041
 
1042
wire           p0_tst_wr_clk_en;
1043
wire           p0_tst_rd_clk_en;
1044
wire           p1_tst_wr_clk_en;
1045
wire           p1_tst_rd_clk_en;
1046
wire           p2_tst_clk_en;
1047
wire           p3_tst_clk_en;
1048
wire           p4_tst_clk_en;
1049
wire           p5_tst_clk_en;
1050
 
1051
wire   [3:0]   p0w_tst_wr_mode;
1052
wire   [3:0]   p0r_tst_mode;
1053
wire   [3:0]   p1w_tst_wr_mode;
1054
wire   [3:0]   p1r_tst_mode;
1055
wire   [3:0]   p2_tst_mode;
1056
wire   [3:0]   p3_tst_mode;
1057
wire   [3:0]   p4_tst_mode;
1058
wire   [3:0]   p5_tst_mode;
1059
 
1060
wire           p0r_tst_pin_en;
1061
wire           p0w_tst_pin_en;
1062
wire           p1r_tst_pin_en;
1063
wire           p1w_tst_pin_en;
1064
wire           p2_tst_pin_en;
1065
wire           p3_tst_pin_en;
1066
wire           p4_tst_pin_en;
1067
wire           p5_tst_pin_en;
1068
wire           p0w_tst_overflow;
1069
wire           p1w_tst_overflow;
1070
 
1071
wire  [3:0]   p0r_tst_mask_o;
1072
wire  [3:0]   p0w_tst_mask_o;
1073
wire  [3:0]   p1r_tst_mask_o;
1074
wire  [3:0]   p1w_tst_mask_o;
1075
wire  [3:0]   p2_tst_mask_o;
1076
wire  [3:0]   p3_tst_mask_o;
1077
wire  [3:0]   p4_tst_mask_o;
1078
wire  [3:0]   p5_tst_mask_o;
1079
wire  [3:0]   p0r_tst_wr_mask;
1080
 
1081
wire  [3:0]   p1r_tst_wr_mask;
1082
wire [31:0]  p1r_tst_wr_data;
1083
wire [31:0]  p0r_tst_wr_data;
1084
wire [31:0]   p0w_tst_rd_data;
1085
wire [31:0]   p1w_tst_rd_data;
1086
 
1087
wire  [38:0]  tst_cmd_out;
1088
wire           MCB_SYSRST;
1089
wire ioclk0;
1090
wire ioclk90;
1091
wire mcb_ui_clk;
1092
wire hard_done_cal;
1093
wire cke_train;
1094
//testing
1095
wire       ioi_drp_update;
1096
wire [7:0] aux_sdi_sdo;
1097
 
1098
wire [4:0] mcb_ui_addr;
1099
wire [3:0] mcb_ui_dqcount;
1100
reg  syn_uiclk_pll_lock;
1101
reg syn1_sys_rst, syn2_sys_rst;
1102
 
1103
wire int_sys_rst /* synthesis syn_maxfan = 1 */;
1104
// synthesis attribute max_fanout of int_sys_rst is 1
1105
 
1106
reg selfrefresh_enter_r1,selfrefresh_enter_r2,selfrefresh_enter_r3;
1107
reg gated_pll_lock;
1108
reg soft_cal_selfrefresh_req;
1109
reg [15:0]    wait_200us_counter;
1110
reg           cke_train_reg;
1111
reg           wait_200us_done_r1,wait_200us_done_r2;
1112
reg normal_operation_window;
1113
 
1114
assign ioclk0 = sysclk_2x;
1115
assign ioclk90 = sysclk_2x_180;
1116
 
1117
 
1118
 
1119
// logic to determine if Memory  is SELFREFRESH mode operation or NORMAL  mode.
1120
always @ (posedge ui_clk)
1121
begin
1122
if (sys_rst)
1123
   normal_operation_window <= 1'b1;
1124
else if (selfrefresh_enter_r2 || selfrefresh_mode)
1125
   normal_operation_window <= 1'b0;
1126
else if (~selfrefresh_enter_r2 && ~selfrefresh_mode)
1127
   normal_operation_window <= 1'b1;
1128
else
1129
   normal_operation_window <= normal_operation_window;
1130
 
1131
end
1132
 
1133
 
1134
always @ (*)
1135
begin
1136
if (normal_operation_window)
1137
   gated_pll_lock = pll_lock;
1138
else
1139
   gated_pll_lock = syn_uiclk_pll_lock;
1140
end
1141
 
1142
 
1143
//assign int_sys_rst =  sys_rst | ~gated_pll_lock;
1144
always @ (posedge ui_clk)
1145
begin
1146
  if (~selfrefresh_enter && ~selfrefresh_mode)
1147
   syn_uiclk_pll_lock <= pll_lock;
1148
 
1149
end
1150
 
1151
// int_sys_rst will be asserted if pll lose lock during normal operation.
1152
// It uses the syn_uiclk_pll_lock version when it is entering suspend window , hence
1153
// reset will not be generated.   
1154
assign int_sys_rst =  sys_rst | ~gated_pll_lock;
1155
 
1156
 
1157
 
1158
// synchronize the selfrefresh_enter 
1159
always @ (posedge ui_clk)
1160
if (sys_rst)
1161
   begin
1162
      selfrefresh_enter_r1 <= 1'b0;
1163
      selfrefresh_enter_r2 <= 1'b0;
1164
      selfrefresh_enter_r3 <= 1'b0;
1165
   end
1166
else
1167
   begin
1168
      selfrefresh_enter_r1 <= selfrefresh_enter;
1169
      selfrefresh_enter_r2 <= selfrefresh_enter_r1;
1170
      selfrefresh_enter_r3 <= selfrefresh_enter_r2;
1171
   end
1172
 
1173
 
1174
 
1175
// The soft_cal_selfrefresh siganl is conditioned before connect to mcb_soft_calibration module.
1176
// It will not deassert selfrefresh_mcb_enter to MCB until input pll_lock reestablished in system.
1177
// This is to ensure the IOI stables before issued a selfrefresh exit command to dram.
1178
always @ (posedge ui_clk)
1179
begin
1180
  if (sys_rst)
1181
   soft_cal_selfrefresh_req <= 1'b0;
1182
  else if (selfrefresh_enter_r3)
1183
     soft_cal_selfrefresh_req <= 1'b1;
1184
  else if (~selfrefresh_enter_r3 && pll_lock)
1185
     soft_cal_selfrefresh_req <= 1'b0;
1186
  else
1187
     soft_cal_selfrefresh_req <= soft_cal_selfrefresh_req;
1188
 
1189
end
1190
 
1191
 
1192
//Address Remapping
1193
// Byte Address remapping
1194
// 
1195
// Bank Address[x:0] & Row Address[x:0]  & Column Address[x:0]
1196
// column address remap for port 0
1197
 generate //  port bus remapping sections for CONFIG 2   15,3,12
1198
 
1199
if(C_NUM_DQ_PINS == 16) begin : x16_Addr
1200
           if (C_MEM_ADDR_ORDER == "ROW_BANK_COLUMN") begin  // C_MEM_ADDR_ORDER = 0 : Bank Row  Column
1201
                 // port 0 address remapping
1202
 
1203
 
1204
                if (C_MEM_ADDR_WIDTH == 15)   //Row        
1205
                       assign p0_cmd_ra = p0_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1206
                else
1207
                       assign p0_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p0_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   :C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS + 1]};
1208
 
1209
 
1210
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1211
                       assign p0_cmd_ba = p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1];
1212
                else
1213
                       assign p0_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +   C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1]};
1214
 
1215
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1216
                       assign p0_cmd_ca = p0_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1217
                else
1218
                       assign p0_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p0_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1219
 
1220
 
1221
                 // port 1 address remapping
1222
 
1223
 
1224
                if (C_MEM_ADDR_WIDTH == 15)   //Row        
1225
                       assign p1_cmd_ra = p1_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1226
                else
1227
                       assign p1_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p1_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   :C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS + 1]};
1228
 
1229
 
1230
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1231
                       assign p1_cmd_ba = p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1];
1232
                else
1233
                       assign p1_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +   C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1]};
1234
 
1235
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1236
                       assign p1_cmd_ca = p1_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1237
                else
1238
                       assign p1_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS  + 1], p1_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1239
 
1240
                 // port 2 address remapping
1241
 
1242
 
1243
                if (C_MEM_ADDR_WIDTH == 15)   //Row        
1244
                       assign p2_cmd_ra = p2_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1245
                else
1246
                       assign p2_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p2_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   :C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS + 1]};
1247
 
1248
 
1249
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1250
                       assign p2_cmd_ba = p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1];
1251
                else
1252
                       assign p2_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +   C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1]};
1253
 
1254
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1255
                       assign p2_cmd_ca = p2_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1256
                else
1257
                       assign p2_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p2_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1258
 
1259
                 // port 3 address remapping
1260
 
1261
 
1262
                if (C_MEM_ADDR_WIDTH == 15)   //Row        
1263
                       assign p3_cmd_ra = p3_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1264
                else
1265
                       assign p3_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p3_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   :C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS + 1]};
1266
 
1267
 
1268
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1269
                       assign p3_cmd_ba = p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1];
1270
                else
1271
                       assign p3_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +   C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1]};
1272
 
1273
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1274
                       assign p3_cmd_ca = p3_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1275
                else
1276
                       assign p3_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p3_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1277
 
1278
                 // port 4 address remapping
1279
 
1280
 
1281
                if (C_MEM_ADDR_WIDTH == 15)   //Row        
1282
                       assign p4_cmd_ra = p4_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1283
                else
1284
                       assign p4_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p4_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   :C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS + 1]};
1285
 
1286
 
1287
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1288
                       assign p4_cmd_ba = p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1];
1289
                else
1290
                       assign p4_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +   C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1]};
1291
 
1292
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1293
                       assign p4_cmd_ca = p4_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1294
                else
1295
                       assign p4_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p4_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1296
 
1297
                 // port 5 address remapping
1298
 
1299
 
1300
                if (C_MEM_ADDR_WIDTH == 15)   //Row        
1301
                       assign p5_cmd_ra = p5_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1302
                else
1303
                       assign p5_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p5_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS   :C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS + 1]};
1304
 
1305
 
1306
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1307
                       assign p5_cmd_ba = p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1];
1308
                else
1309
                       assign p5_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +   C_MEM_NUM_COL_BITS   :  C_MEM_NUM_COL_BITS + 1]};
1310
 
1311
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1312
                       assign p5_cmd_ca = p5_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1313
                else
1314
                       assign p5_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p5_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1315
 
1316
 
1317
 
1318
 
1319
                end
1320
 
1321
          else  // ***************C_MEM_ADDR_ORDER = 1 :  Row Bank Column
1322
              begin
1323
                 // port 0 address remapping
1324
 
1325
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1326
                       assign p0_cmd_ba = p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1327
                else
1328
                       assign p0_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1]};
1329
 
1330
 
1331
                if (C_MEM_ADDR_WIDTH == 15)
1332
                       assign p0_cmd_ra = p0_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1];
1333
                else
1334
                       assign p0_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p0_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1]};
1335
 
1336
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1337
                       assign p0_cmd_ca = p0_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1338
                else
1339
                       assign p0_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p0_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1340
 
1341
 
1342
                 // port 1 address remapping
1343
 
1344
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1345
                       assign p1_cmd_ba = p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1346
                else
1347
                       assign p1_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1]};
1348
 
1349
 
1350
                if (C_MEM_ADDR_WIDTH == 15)
1351
                       assign p1_cmd_ra = p1_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1];
1352
                else
1353
                       assign p1_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p1_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1]};
1354
 
1355
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1356
                       assign p1_cmd_ca = p1_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1357
                else
1358
                       assign p1_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p1_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1359
 
1360
                 // port 2 address remapping
1361
 
1362
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1363
                       assign p2_cmd_ba = p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1364
                else
1365
                       assign p2_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1]};
1366
 
1367
 
1368
                if (C_MEM_ADDR_WIDTH == 15)
1369
                       assign p2_cmd_ra = p2_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1];
1370
                else
1371
                       assign p2_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p2_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1]};
1372
 
1373
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1374
                       assign p2_cmd_ca = p2_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1375
                else
1376
                       assign p2_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p2_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1377
 
1378
                 // port 3 address remapping
1379
 
1380
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1381
                       assign p3_cmd_ba = p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1382
                else
1383
                       assign p3_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1]};
1384
 
1385
 
1386
                if (C_MEM_ADDR_WIDTH == 15)
1387
                       assign p3_cmd_ra = p3_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1];
1388
                else
1389
                       assign p3_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p3_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1]};
1390
 
1391
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1392
                       assign p3_cmd_ca = p3_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1393
                else
1394
                       assign p3_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p3_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1395
 
1396
                 // port 4 address remapping
1397
 
1398
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1399
                       assign p4_cmd_ba = p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1400
                else
1401
                       assign p4_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1]};
1402
 
1403
 
1404
                if (C_MEM_ADDR_WIDTH == 15)
1405
                       assign p4_cmd_ra = p4_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1];
1406
                else
1407
                       assign p4_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p4_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1]};
1408
 
1409
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1410
                       assign p4_cmd_ca = p4_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1411
                else
1412
                       assign p4_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p4_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1413
 
1414
                 // port 5 address remapping
1415
 
1416
                if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1417
                       assign p5_cmd_ba = p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1];
1418
                else
1419
                       assign p5_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH] , p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS  : C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1]};
1420
 
1421
 
1422
                if (C_MEM_ADDR_WIDTH == 15)
1423
                       assign p5_cmd_ra = p5_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1];
1424
                else
1425
                       assign p5_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] ,  p5_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS   : C_MEM_NUM_COL_BITS + 1]};
1426
 
1427
                if (C_MEM_NUM_COL_BITS == 12)  //Column
1428
                       assign p5_cmd_ca = p5_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1];
1429
                else
1430
                       assign p5_cmd_ca = {allzero[12:C_MEM_NUM_COL_BITS + 1], p5_cmd_byte_addr[C_MEM_NUM_COL_BITS : 1]};
1431
 
1432
 
1433
              end
1434
 
1435
end else if(C_NUM_DQ_PINS == 8) begin : x8_Addr
1436
           if (C_MEM_ADDR_ORDER == "ROW_BANK_COLUMN") begin  // C_MEM_ADDR_ORDER = 1 : Bank Row Column
1437
                 // port 0 address remapping
1438
 
1439
                 if (C_MEM_ADDR_WIDTH == 15)  //Row
1440
                          assign p0_cmd_ra = p0_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ];
1441
                 else
1442
                          assign p0_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p0_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ]};
1443
 
1444
 
1445
                 if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1446
                          assign p0_cmd_ba = p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 :  C_MEM_NUM_COL_BITS ];  //14,3,10
1447
                 else
1448
                          assign p0_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1449
                                   p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_NUM_COL_BITS ]};  //14,3,10
1450
 
1451
 
1452
                 if (C_MEM_NUM_COL_BITS == 12)  //Column
1453
                          assign p0_cmd_ca[11:0] = p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1454
                 else
1455
                          assign p0_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1456
 
1457
 
1458
                // port 1 address remapping
1459
                 if (C_MEM_ADDR_WIDTH == 15)  //Row
1460
                          assign p1_cmd_ra = p1_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ];
1461
                 else
1462
                          assign p1_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p1_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ]};
1463
 
1464
 
1465
                 if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1466
                          assign p1_cmd_ba = p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 :  C_MEM_NUM_COL_BITS ];  //14,3,10
1467
                 else
1468
                          assign p1_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1469
                                   p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_NUM_COL_BITS ]};  //14,3,10
1470
 
1471
 
1472
                 if (C_MEM_NUM_COL_BITS == 12)  //Column
1473
                          assign p1_cmd_ca[11:0] = p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1474
                 else
1475
                          assign p1_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1476
 
1477
 
1478
                // port 2 address remapping
1479
                 if (C_MEM_ADDR_WIDTH == 15)  //Row
1480
                          assign p2_cmd_ra = p2_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ];
1481
                 else
1482
                          assign p2_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p2_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ]};
1483
 
1484
 
1485
                 if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1486
                          assign p2_cmd_ba = p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 :  C_MEM_NUM_COL_BITS ];  //14,3,10
1487
                 else
1488
                          assign p2_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1489
                                   p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_NUM_COL_BITS ]};  //14,2,10  ***
1490
 
1491
 
1492
                 if (C_MEM_NUM_COL_BITS == 12)  //Column
1493
                          assign p2_cmd_ca[11:0] = p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1494
                 else
1495
                          assign p2_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1496
 
1497
 
1498
 
1499
              //   port 3 address remapping
1500
                 if (C_MEM_ADDR_WIDTH == 15)  //Row
1501
                          assign p3_cmd_ra = p3_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ];
1502
                 else
1503
                          assign p3_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p3_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ]};
1504
 
1505
 
1506
                 if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1507
                          assign p3_cmd_ba = p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 :  C_MEM_NUM_COL_BITS ];  //14,3,10
1508
                 else
1509
                          assign p3_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1510
                                   p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_NUM_COL_BITS ]};  //14,3,10
1511
 
1512
 
1513
                 if (C_MEM_NUM_COL_BITS == 12)  //Column
1514
                          assign p3_cmd_ca[11:0] = p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1515
                 else
1516
                          assign p3_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1517
 
1518
 
1519
              //   port 4 address remapping
1520
                 if (C_MEM_ADDR_WIDTH == 15)  //Row
1521
                          assign p4_cmd_ra = p4_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ];
1522
                 else
1523
                          assign p4_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p4_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ]};
1524
 
1525
 
1526
                 if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1527
                          assign p4_cmd_ba = p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 :  C_MEM_NUM_COL_BITS ];  //14,3,10
1528
                 else
1529
                          assign p4_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1530
                                   p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_NUM_COL_BITS ]};  //14,3,10
1531
 
1532
 
1533
                 if (C_MEM_NUM_COL_BITS == 12)  //Column
1534
                          assign p4_cmd_ca[11:0] = p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1535
                 else
1536
                          assign p4_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1537
 
1538
 
1539
              //   port 5 address remapping
1540
 
1541
                 if (C_MEM_ADDR_WIDTH == 15)  //Row
1542
                          assign p5_cmd_ra = p5_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ];
1543
                 else
1544
                          assign p5_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p5_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1  : C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS ]};
1545
 
1546
 
1547
                 if (C_MEM_BANKADDR_WIDTH  == 3 )  //Bank
1548
                          assign p5_cmd_ba = p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 :  C_MEM_NUM_COL_BITS ];  //14,3,10
1549
                 else
1550
                          assign p5_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1551
                                   p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_NUM_COL_BITS ]};  //14,3,10
1552
 
1553
 
1554
                 if (C_MEM_NUM_COL_BITS == 12)  //Column
1555
                          assign p5_cmd_ca[11:0] = p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1556
                 else
1557
                          assign p5_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1558
 
1559
                end
1560
 
1561
            else  //  x8 ***************C_MEM_ADDR_ORDER = 0 : Bank Row Column
1562
              begin
1563
                 // port 0 address remapping
1564
                 if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1565
                          assign p0_cmd_ba = p0_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ];
1566
                 else
1567
                          assign p0_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1568
                                   p0_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ]};
1569
 
1570
 
1571
                 if (C_MEM_ADDR_WIDTH == 15) //Row
1572
                          assign p0_cmd_ra = p0_cmd_byte_addr[C_MEM_ADDR_WIDTH  + C_MEM_NUM_COL_BITS - 1  :  C_MEM_NUM_COL_BITS ];
1573
                 else
1574
                          assign p0_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p0_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS - 1  : C_MEM_NUM_COL_BITS ]};
1575
 
1576
 
1577
                 if (C_MEM_NUM_COL_BITS == 12) //Column
1578
                          assign p0_cmd_ca[11:0] = p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1579
                 else
1580
                          assign p0_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1581
 
1582
 
1583
                // port 1 address remapping
1584
                 if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1585
                          assign p1_cmd_ba = p1_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ];
1586
                 else
1587
                          assign p1_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1588
                                   p1_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ]};
1589
 
1590
                 if (C_MEM_ADDR_WIDTH == 15) //Row
1591
                          assign p1_cmd_ra = p1_cmd_byte_addr[C_MEM_ADDR_WIDTH  + C_MEM_NUM_COL_BITS - 1  :  C_MEM_NUM_COL_BITS ];
1592
                 else
1593
                          assign p1_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p1_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS - 1  : C_MEM_NUM_COL_BITS ]};
1594
 
1595
                 if (C_MEM_NUM_COL_BITS == 12) //Column
1596
                          assign p1_cmd_ca[11:0] = p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1597
                 else
1598
                          assign p1_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1599
 
1600
               //port 2 address remapping
1601
                if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank    2,13,10    24,23
1602
                       assign p2_cmd_ba = p2_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ];
1603
                else
1604
                       assign p2_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1605
                                        p2_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS  ]};
1606
 
1607
                 if (C_MEM_ADDR_WIDTH == 15) //Row
1608
                          assign p2_cmd_ra = p2_cmd_byte_addr[C_MEM_ADDR_WIDTH  + C_MEM_NUM_COL_BITS - 1  :  C_MEM_NUM_COL_BITS ];
1609
                 else
1610
                          assign p2_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p2_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS - 1  : C_MEM_NUM_COL_BITS ]};
1611
 
1612
                 if (C_MEM_NUM_COL_BITS == 12) //Column
1613
                          assign p2_cmd_ca[11:0] = p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1614
                 else
1615
                          assign p2_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1616
 
1617
              // port 3 address remapping
1618
                 if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1619
                          assign p3_cmd_ba = p3_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ];
1620
                 else
1621
                          assign p3_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1622
                                   p3_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ]};
1623
 
1624
                 if (C_MEM_ADDR_WIDTH == 15) //Row
1625
                          assign p3_cmd_ra = p3_cmd_byte_addr[C_MEM_ADDR_WIDTH  + C_MEM_NUM_COL_BITS - 1  :  C_MEM_NUM_COL_BITS ];
1626
                 else
1627
                          assign p3_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p3_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS - 1  : C_MEM_NUM_COL_BITS ]};
1628
 
1629
                 if (C_MEM_NUM_COL_BITS == 12) //Column
1630
                          assign p3_cmd_ca[11:0] = p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1631
                 else
1632
                          assign p3_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1633
 
1634
 
1635
                 //   port 4 address remapping
1636
                 if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1637
                          assign p4_cmd_ba = p4_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ];
1638
                 else
1639
                          assign p4_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1640
                                   p4_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ]};
1641
 
1642
                 if (C_MEM_ADDR_WIDTH == 15) //Row
1643
                          assign p4_cmd_ra = p4_cmd_byte_addr[C_MEM_ADDR_WIDTH  + C_MEM_NUM_COL_BITS - 1  :  C_MEM_NUM_COL_BITS ];
1644
                 else
1645
                          assign p4_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p4_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS - 1  : C_MEM_NUM_COL_BITS ]};
1646
 
1647
                 if (C_MEM_NUM_COL_BITS == 12) //Column
1648
                          assign p4_cmd_ca[11:0] = p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1649
                 else
1650
                          assign p4_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1651
 
1652
                 //   port 5 address remapping
1653
 
1654
                 if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1655
                          assign p5_cmd_ba = p5_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ];
1656
                 else
1657
                          assign p5_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH],
1658
                                   p5_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1 : C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS ]};
1659
 
1660
                 if (C_MEM_ADDR_WIDTH == 15) //Row
1661
                          assign p5_cmd_ra = p5_cmd_byte_addr[C_MEM_ADDR_WIDTH  + C_MEM_NUM_COL_BITS - 1  :  C_MEM_NUM_COL_BITS ];
1662
                 else
1663
                          assign p5_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH] , p5_cmd_byte_addr[C_MEM_ADDR_WIDTH  +  C_MEM_NUM_COL_BITS - 1  : C_MEM_NUM_COL_BITS ]};
1664
 
1665
                 if (C_MEM_NUM_COL_BITS == 12) //Column
1666
                          assign p5_cmd_ca[11:0] = p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0];
1667
                 else
1668
                          assign p5_cmd_ca[11:0] = {allzero[11 : C_MEM_NUM_COL_BITS] , p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 1 : 0]};
1669
 
1670
            end
1671
 
1672
              //
1673
 
1674
end else if(C_NUM_DQ_PINS == 4) begin : x4_Addr
1675
 
1676
           if (C_MEM_ADDR_ORDER == "ROW_BANK_COLUMN") begin  // C_MEM_ADDR_ORDER = 1 :  Row Bank Column
1677
 
1678
               //   port 0 address remapping
1679
 
1680
 
1681
               if (C_MEM_ADDR_WIDTH == 15) //Row
1682
                     assign p0_cmd_ra = p0_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1];
1683
               else
1684
                     assign p0_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p0_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1]};
1685
 
1686
 
1687
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1688
                      assign p0_cmd_ba =  p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1];
1689
               else
1690
                      assign p0_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1]};
1691
 
1692
 
1693
               if (C_MEM_NUM_COL_BITS == 12) //Column
1694
                     assign p0_cmd_ca = {p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};                                //14,3,11
1695
               else
1696
                     assign p0_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1697
 
1698
 
1699
              //   port 1 address remapping
1700
               if (C_MEM_ADDR_WIDTH == 15) //Row
1701
                     assign p1_cmd_ra = p1_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1];
1702
               else
1703
                     assign p1_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p1_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1]};
1704
 
1705
 
1706
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1707
                      assign p1_cmd_ba =  p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1];
1708
               else
1709
                      assign p1_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1]};
1710
 
1711
 
1712
               if (C_MEM_NUM_COL_BITS == 12) //Column
1713
                     assign p1_cmd_ca = {p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};                                //14,3,11
1714
               else
1715
                     assign p1_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1716
 
1717
               //   port 2 address remapping
1718
               if (C_MEM_ADDR_WIDTH == 15) //Row
1719
                     assign p2_cmd_ra = p2_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1];
1720
               else
1721
                     assign p2_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p2_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1]};
1722
 
1723
 
1724
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1725
                      assign p2_cmd_ba =  p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1];
1726
               else
1727
                      assign p2_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1]};
1728
 
1729
 
1730
               if (C_MEM_NUM_COL_BITS == 12) //Column
1731
                     assign p2_cmd_ca = {p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};                                //14,3,11
1732
               else
1733
                     assign p2_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1734
 
1735
              //   port 3 address remapping
1736
 
1737
               if (C_MEM_ADDR_WIDTH == 15) //Row
1738
                     assign p3_cmd_ra = p3_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1];
1739
               else
1740
                     assign p3_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p3_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1]};
1741
 
1742
 
1743
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1744
                      assign p3_cmd_ba =  p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1];
1745
               else
1746
                      assign p3_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1]};
1747
 
1748
 
1749
               if (C_MEM_NUM_COL_BITS == 12) //Column
1750
                     assign p3_cmd_ca = {p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};                                //14,3,11
1751
               else
1752
                     assign p3_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1753
 
1754
 
1755
 
1756
          if(C_PORT_CONFIG == "B32_B32_R32_R32_R32_R32" ||
1757
             C_PORT_CONFIG == "B32_B32_R32_R32_R32_W32" ||
1758
             C_PORT_CONFIG == "B32_B32_R32_R32_W32_R32" ||
1759
             C_PORT_CONFIG == "B32_B32_R32_R32_W32_W32" ||
1760
             C_PORT_CONFIG == "B32_B32_R32_W32_R32_R32" ||
1761
             C_PORT_CONFIG == "B32_B32_R32_W32_R32_W32" ||
1762
             C_PORT_CONFIG == "B32_B32_R32_W32_W32_R32" ||
1763
             C_PORT_CONFIG == "B32_B32_R32_W32_W32_W32" ||
1764
             C_PORT_CONFIG == "B32_B32_W32_R32_R32_R32" ||
1765
             C_PORT_CONFIG == "B32_B32_W32_R32_R32_W32" ||
1766
             C_PORT_CONFIG == "B32_B32_W32_R32_W32_R32" ||
1767
             C_PORT_CONFIG == "B32_B32_W32_R32_W32_W32" ||
1768
             C_PORT_CONFIG == "B32_B32_W32_W32_R32_R32" ||
1769
             C_PORT_CONFIG == "B32_B32_W32_W32_R32_W32" ||
1770
             C_PORT_CONFIG == "B32_B32_W32_W32_W32_R32" ||
1771
             C_PORT_CONFIG == "B32_B32_W32_W32_W32_W32"
1772
             ) //begin : x4_Addr_CFG1_OR_CFG2
1773
               begin
1774
               if (C_MEM_ADDR_WIDTH == 15) //Row
1775
                     assign p4_cmd_ra = p4_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1];
1776
               else
1777
                     assign p4_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p4_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1]};
1778
 
1779
 
1780
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1781
                      assign p4_cmd_ba =  p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1];
1782
               else
1783
                      assign p4_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1]};
1784
 
1785
 
1786
               if (C_MEM_NUM_COL_BITS == 12) //Column
1787
                     assign p4_cmd_ca = {p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};                                //14,3,11
1788
               else
1789
                     assign p4_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1790
 
1791
 
1792
 
1793
               if (C_MEM_ADDR_WIDTH == 15) //Row
1794
                     assign p5_cmd_ra = p5_cmd_byte_addr[C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1];
1795
               else
1796
                     assign p5_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p5_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 : C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1]};
1797
 
1798
 
1799
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1800
                      assign p5_cmd_ba =  p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1];
1801
               else
1802
                      assign p5_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 :  C_MEM_NUM_COL_BITS - 1]};
1803
 
1804
 
1805
               if (C_MEM_NUM_COL_BITS == 12) //Column
1806
                     assign p5_cmd_ca = {p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};                                //14,3,11
1807
               else
1808
                     assign p5_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1809
 
1810
              end
1811
 
1812
 
1813
           end
1814
         else   // C_MEM_ADDR_ORDER = 1 :  Row Bank Column
1815
            begin
1816
 
1817
               //   port 0 address remapping
1818
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1819
                      assign p0_cmd_ba =  p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1];
1820
               else
1821
                      assign p0_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p0_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1]};
1822
 
1823
 
1824
               if (C_MEM_ADDR_WIDTH == 15) //Row
1825
                     assign p0_cmd_ra = p0_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1];
1826
               else
1827
                     assign p0_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p0_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1]};
1828
 
1829
 
1830
               if (C_MEM_NUM_COL_BITS == 12) //Column
1831
                     assign p0_cmd_ca = {p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1832
               else
1833
                     assign p0_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p0_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1834
 
1835
 
1836
              //   port 1 address remapping
1837
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1838
                      assign p1_cmd_ba =  p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1];
1839
               else
1840
                      assign p1_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p1_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1]};
1841
 
1842
 
1843
               if (C_MEM_ADDR_WIDTH == 15) //Row
1844
                     assign p1_cmd_ra = p1_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1];
1845
               else
1846
                     assign p1_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p1_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1]};
1847
 
1848
 
1849
               if (C_MEM_NUM_COL_BITS == 12) //Column
1850
                     assign p1_cmd_ca = {p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1851
               else
1852
                     assign p1_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p1_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1853
               //   port 2 address remapping
1854
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1855
                      assign p2_cmd_ba =  p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1];
1856
               else
1857
                      assign p2_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p2_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1]};
1858
 
1859
             //***  
1860
               if (C_MEM_ADDR_WIDTH == 15) //Row
1861
                     assign p2_cmd_ra = p2_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1];
1862
               else
1863
                     assign p2_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p2_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1]};
1864
 
1865
 
1866
               if (C_MEM_NUM_COL_BITS == 12) //Column
1867
                     assign p2_cmd_ca = {p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1868
               else
1869
                     assign p2_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p2_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1870
              //   port 3 address remapping
1871
 
1872
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1873
                      assign p3_cmd_ba =  p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1];
1874
               else
1875
                      assign p3_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p3_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1]};
1876
 
1877
 
1878
               if (C_MEM_ADDR_WIDTH == 15) //Row
1879
                     assign p3_cmd_ra = p3_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1];
1880
               else
1881
                     assign p3_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p3_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1]};
1882
 
1883
 
1884
               if (C_MEM_NUM_COL_BITS == 12) //Column
1885
                     assign p3_cmd_ca = {p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1886
               else
1887
                     assign p3_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p3_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1888
 
1889
 
1890
          if(C_PORT_CONFIG == "B32_B32_R32_R32_R32_R32" ||
1891
             C_PORT_CONFIG == "B32_B32_R32_R32_R32_W32" ||
1892
             C_PORT_CONFIG == "B32_B32_R32_R32_W32_R32" ||
1893
             C_PORT_CONFIG == "B32_B32_R32_R32_W32_W32" ||
1894
             C_PORT_CONFIG == "B32_B32_R32_W32_R32_R32" ||
1895
             C_PORT_CONFIG == "B32_B32_R32_W32_R32_W32" ||
1896
             C_PORT_CONFIG == "B32_B32_R32_W32_W32_R32" ||
1897
             C_PORT_CONFIG == "B32_B32_R32_W32_W32_W32" ||
1898
             C_PORT_CONFIG == "B32_B32_W32_R32_R32_R32" ||
1899
             C_PORT_CONFIG == "B32_B32_W32_R32_R32_W32" ||
1900
             C_PORT_CONFIG == "B32_B32_W32_R32_W32_R32" ||
1901
             C_PORT_CONFIG == "B32_B32_W32_R32_W32_W32" ||
1902
             C_PORT_CONFIG == "B32_B32_W32_W32_R32_R32" ||
1903
             C_PORT_CONFIG == "B32_B32_W32_W32_R32_W32" ||
1904
             C_PORT_CONFIG == "B32_B32_W32_W32_W32_R32" ||
1905
             C_PORT_CONFIG == "B32_B32_W32_W32_W32_W32"
1906
             ) //begin : x4_Addr_CFG1_OR_CFG2
1907
               begin
1908
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1909
                      assign p4_cmd_ba =  p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1];
1910
               else
1911
                      assign p4_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p4_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1]};
1912
 
1913
 
1914
               if (C_MEM_ADDR_WIDTH == 15) //Row
1915
                     assign p4_cmd_ra = p4_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1];
1916
               else
1917
                     assign p4_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p4_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1]};
1918
 
1919
 
1920
               if (C_MEM_NUM_COL_BITS == 12) //Column
1921
                     assign p4_cmd_ca = {p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1922
               else
1923
                     assign p4_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p4_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1924
 
1925
 
1926
               if (C_MEM_BANKADDR_WIDTH  == 3 ) //Bank
1927
                      assign p5_cmd_ba =  p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1];
1928
               else
1929
                      assign p5_cmd_ba = {allzero[2 : C_MEM_BANKADDR_WIDTH ] , p5_cmd_byte_addr[C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 1]};
1930
 
1931
 
1932
               if (C_MEM_ADDR_WIDTH == 15) //Row
1933
                     assign p5_cmd_ra = p5_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1];
1934
               else
1935
                     assign p5_cmd_ra = {allzero[14 : C_MEM_ADDR_WIDTH ] , p5_cmd_byte_addr[C_MEM_ADDR_WIDTH +  C_MEM_NUM_COL_BITS - 2 : C_MEM_NUM_COL_BITS - 1]};
1936
 
1937
 
1938
               if (C_MEM_NUM_COL_BITS == 12) //Column
1939
                     assign p5_cmd_ca = {p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1940
               else
1941
                     assign p5_cmd_ca = {allzero[11 : C_MEM_NUM_COL_BITS ] ,  p5_cmd_byte_addr[C_MEM_NUM_COL_BITS - 2 : 0] , 1'b0};
1942
              end
1943
 
1944
 
1945
 
1946
            end
1947
 
1948
end // block: x4_Addr
1949
 
1950
 
1951
endgenerate
1952
 
1953
 
1954
 
1955
generate
1956
   //   if(C_PORT_CONFIG[183:160] == "B32") begin : u_config1_0
1957
   if(C_PORT_CONFIG == "B32_B32_R32_R32_R32_R32" ||
1958
      C_PORT_CONFIG == "B32_B32_R32_R32_R32_W32" ||
1959
      C_PORT_CONFIG == "B32_B32_R32_R32_W32_R32" ||
1960
      C_PORT_CONFIG == "B32_B32_R32_R32_W32_W32" ||
1961
      C_PORT_CONFIG == "B32_B32_R32_W32_R32_R32" ||
1962
      C_PORT_CONFIG == "B32_B32_R32_W32_R32_W32" ||
1963
      C_PORT_CONFIG == "B32_B32_R32_W32_W32_R32" ||
1964
      C_PORT_CONFIG == "B32_B32_R32_W32_W32_W32" ||
1965
      C_PORT_CONFIG == "B32_B32_W32_R32_R32_R32" ||
1966
      C_PORT_CONFIG == "B32_B32_W32_R32_R32_W32" ||
1967
      C_PORT_CONFIG == "B32_B32_W32_R32_W32_R32" ||
1968
      C_PORT_CONFIG == "B32_B32_W32_R32_W32_W32" ||
1969
      C_PORT_CONFIG == "B32_B32_W32_W32_R32_R32" ||
1970
      C_PORT_CONFIG == "B32_B32_W32_W32_R32_W32" ||
1971
      C_PORT_CONFIG == "B32_B32_W32_W32_W32_R32" ||
1972
      C_PORT_CONFIG == "B32_B32_W32_W32_W32_W32"
1973
      ) begin : u_config1_0
1974
 
1975
  //synthesis translate_off 
1976
  always @(*)
1977
  begin
1978
    if ( C_PORT_CONFIG[119:96]  == "W32" && p2_cmd_en == 1'b1
1979
         && p2_cmd_instr[2] == 1'b0 && p2_cmd_instr[0] == 1'b1 )
1980
          begin
1981
           $display("ERROR - Invalid Command for write only port 2");
1982
           $finish;
1983
          end
1984
  end
1985
 
1986
  always @(*)
1987
  begin
1988
    if ( C_PORT_CONFIG[119:96]  == "R32" && p2_cmd_en == 1'b1
1989
         && p2_cmd_instr[2] == 1'b0 && p2_cmd_instr[0] == 1'b0 )
1990
          begin
1991
           $display("ERROR - Invalid Command for read only port 2");
1992
           $finish;
1993
          end
1994
  end
1995
// Catch Invalid command during simulation for Port 3              
1996
  always @(*)
1997
  begin
1998
    if ( C_PORT_CONFIG[87:64]  == "W32" && p3_cmd_en == 1'b1
1999
         && p3_cmd_instr[2] == 1'b0 && p3_cmd_instr[0] == 1'b1 )
2000
          begin
2001
           $display("ERROR - Invalid Command for write only port 3");
2002
           $finish;
2003
          end
2004
  end
2005
 
2006
  always @(*)
2007
  begin
2008
    if ( C_PORT_CONFIG[87:64]  == "R32" && p3_cmd_en == 1'b1
2009
         && p3_cmd_instr[2] == 1'b0  && p3_cmd_instr[0] == 1'b0 )
2010
          begin
2011
           $display("ERROR - Invalid Command for read only port 3");
2012
           $finish;
2013
          end
2014
  end
2015
 
2016
// Catch Invalid command during simulation for Port 4              
2017
  always @(*)
2018
  begin
2019
    if ( C_PORT_CONFIG[55:32]  == "W32" && p4_cmd_en == 1'b1
2020
         && p4_cmd_instr[2] == 1'b0 && p4_cmd_instr[0] == 1'b1 )
2021
          begin
2022
           $display("ERROR - Invalid Command for write only port 4");
2023
           $finish;
2024
          end
2025
  end
2026
 
2027
  always @(*)
2028
  begin
2029
    if ( C_PORT_CONFIG[55:32]  == "R32" && p4_cmd_en == 1'b1
2030
         && p4_cmd_instr[2] == 1'b0 && p4_cmd_instr[0] == 1'b0 )
2031
          begin
2032
           $display("ERROR - Invalid Command for read only port 4");
2033
           $finish;
2034
          end
2035
  end
2036
// Catch Invalid command during simulation for Port 5              
2037
  always @(*)
2038
  begin
2039
    if ( C_PORT_CONFIG[23:0]  == "W32" && p5_cmd_en == 1'b1
2040
         && p5_cmd_instr[2] == 1'b0 && p5_cmd_instr[0] == 1'b1 )
2041
          begin
2042
           $display("ERROR - Invalid Command for write only port 5");
2043
           $finish;
2044
          end
2045
  end
2046
 
2047
  always @(*)
2048
  begin
2049
    if ( C_PORT_CONFIG[23:0]  == "R32" && p5_cmd_en == 1'b1
2050
         && p5_cmd_instr[2] == 1'b0  && p5_cmd_instr[0] == 1'b0 )
2051
          begin
2052
           $display("ERROR - Invalid Command for read only port 5");
2053
           $finish;
2054
          end
2055
  end
2056
   //synthesis translate_on 
2057
 
2058
 
2059
  // the local declaration of input port signals doesn't work.  The mig_p1_xxx through mig_p5_xxx always ends up
2060
  // high Z even though there are signals on p1_cmd_xxx through p5_cmd_xxxx.
2061
  // The only solutions that I have is to have MIG tool remove the entire internal codes that doesn't belongs to the Configuration..
2062
  //
2063
 
2064
               // Inputs from Application CMD Port
2065
 
2066
               if (C_PORT_ENABLE[0] == 1'b1)
2067
               begin
2068
 
2069
                   assign mig_p0_arb_en      =      p0_arb_en ;
2070
                   assign mig_p0_cmd_clk     =      p0_cmd_clk  ;
2071
                   assign mig_p0_cmd_en      =      p0_cmd_en   ;
2072
                   assign mig_p0_cmd_ra      =      p0_cmd_ra  ;
2073
                   assign mig_p0_cmd_ba      =      p0_cmd_ba   ;
2074
                   assign mig_p0_cmd_ca      =      p0_cmd_ca  ;
2075
                   assign mig_p0_cmd_instr   =      p0_cmd_instr;
2076
                   assign mig_p0_cmd_bl      =      {(p0_cmd_instr[2] | p0_cmd_bl[5]),p0_cmd_bl[4:0]}  ;
2077
                   assign p0_cmd_empty       =      mig_p0_cmd_empty;
2078
                   assign p0_cmd_full        =      mig_p0_cmd_full ;
2079
 
2080
               end else
2081
               begin
2082
 
2083
                   assign mig_p0_arb_en      =     'b0;
2084
                   assign mig_p0_cmd_clk     =     'b0;
2085
                   assign mig_p0_cmd_en      =     'b0;
2086
                   assign mig_p0_cmd_ra      =     'b0;
2087
                   assign mig_p0_cmd_ba      =     'b0;
2088
                   assign mig_p0_cmd_ca      =     'b0;
2089
                   assign mig_p0_cmd_instr   =     'b0;
2090
                   assign mig_p0_cmd_bl      =     'b0;
2091
                   assign p0_cmd_empty       =     'b0;
2092
                   assign p0_cmd_full        =     'b0;
2093
 
2094
               end
2095
 
2096
 
2097
               if (C_PORT_ENABLE[1] == 1'b1)
2098
               begin
2099
 
2100
 
2101
                   assign mig_p1_arb_en      =      p1_arb_en ;
2102
                   assign mig_p1_cmd_clk     =      p1_cmd_clk  ;
2103
                   assign mig_p1_cmd_en      =      p1_cmd_en   ;
2104
                   assign mig_p1_cmd_ra      =      p1_cmd_ra  ;
2105
                   assign mig_p1_cmd_ba      =      p1_cmd_ba   ;
2106
                   assign mig_p1_cmd_ca      =      p1_cmd_ca  ;
2107
                   assign mig_p1_cmd_instr   =      p1_cmd_instr;
2108
                   assign mig_p1_cmd_bl      =      {(p1_cmd_instr[2] | p1_cmd_bl[5]),p1_cmd_bl[4:0]}  ;
2109
                   assign p1_cmd_empty       =      mig_p1_cmd_empty;
2110
                   assign p1_cmd_full        =      mig_p1_cmd_full ;
2111
 
2112
               end else
2113
               begin
2114
                   assign mig_p1_arb_en      =     'b0;
2115
                   assign mig_p1_cmd_clk     =     'b0;
2116
                   assign mig_p1_cmd_en      =     'b0;
2117
                   assign mig_p1_cmd_ra      =     'b0;
2118
                   assign mig_p1_cmd_ba      =     'b0;
2119
                   assign mig_p1_cmd_ca      =     'b0;
2120
                   assign mig_p1_cmd_instr   =     'b0;
2121
                   assign mig_p1_cmd_bl      =     'b0;
2122
                   assign p1_cmd_empty       =      'b0;
2123
                   assign p1_cmd_full        =      'b0;
2124
 
2125
 
2126
               end
2127
 
2128
 
2129
               if (C_PORT_ENABLE[2] == 1'b1)
2130
               begin
2131
 
2132
                   assign mig_p2_arb_en      =      p2_arb_en ;
2133
                   assign mig_p2_cmd_clk     =      p2_cmd_clk  ;
2134
                   assign mig_p2_cmd_en      =      p2_cmd_en   ;
2135
                   assign mig_p2_cmd_ra      =      p2_cmd_ra  ;
2136
                   assign mig_p2_cmd_ba      =      p2_cmd_ba   ;
2137
                   assign mig_p2_cmd_ca      =      p2_cmd_ca  ;
2138
                   assign mig_p2_cmd_instr   =      p2_cmd_instr;
2139
                   assign mig_p2_cmd_bl      =      {(p2_cmd_instr[2] | p2_cmd_bl[5]),p2_cmd_bl[4:0]}  ;
2140
                   assign p2_cmd_empty   =      mig_p2_cmd_empty;
2141
                   assign p2_cmd_full    =      mig_p2_cmd_full ;
2142
 
2143
               end else
2144
               begin
2145
 
2146
                   assign mig_p2_arb_en      =      'b0;
2147
                   assign mig_p2_cmd_clk     =      'b0;
2148
                   assign mig_p2_cmd_en      =      'b0;
2149
                   assign mig_p2_cmd_ra      =      'b0;
2150
                   assign mig_p2_cmd_ba      =      'b0;
2151
                   assign mig_p2_cmd_ca      =      'b0;
2152
                   assign mig_p2_cmd_instr   =      'b0;
2153
                   assign mig_p2_cmd_bl      =      'b0;
2154
                   assign p2_cmd_empty   =       'b0;
2155
                   assign p2_cmd_full    =       'b0;
2156
 
2157
               end
2158
 
2159
 
2160
 
2161
               if (C_PORT_ENABLE[3] == 1'b1)
2162
               begin
2163
 
2164
                   assign mig_p3_arb_en    =        p3_arb_en ;
2165
                   assign mig_p3_cmd_clk     =      p3_cmd_clk  ;
2166
                   assign mig_p3_cmd_en      =      p3_cmd_en   ;
2167
                   assign mig_p3_cmd_ra      =      p3_cmd_ra  ;
2168
                   assign mig_p3_cmd_ba      =      p3_cmd_ba   ;
2169
                   assign mig_p3_cmd_ca      =      p3_cmd_ca  ;
2170
                   assign mig_p3_cmd_instr   =      p3_cmd_instr;
2171
                   assign mig_p3_cmd_bl      =      {(p3_cmd_instr[2] | p3_cmd_bl[5]),p3_cmd_bl[4:0]}  ;
2172
                   assign p3_cmd_empty   =      mig_p3_cmd_empty;
2173
                   assign p3_cmd_full    =      mig_p3_cmd_full ;
2174
 
2175
               end else
2176
               begin
2177
                   assign mig_p3_arb_en    =       'b0;
2178
                   assign mig_p3_cmd_clk     =     'b0;
2179
                   assign mig_p3_cmd_en      =     'b0;
2180
                   assign mig_p3_cmd_ra      =     'b0;
2181
                   assign mig_p3_cmd_ba      =     'b0;
2182
                   assign mig_p3_cmd_ca      =     'b0;
2183
                   assign mig_p3_cmd_instr   =     'b0;
2184
                   assign mig_p3_cmd_bl      =     'b0;
2185
                   assign p3_cmd_empty   =     'b0;
2186
                   assign p3_cmd_full    =     'b0;
2187
 
2188
               end
2189
 
2190
               if (C_PORT_ENABLE[4] == 1'b1)
2191
               begin
2192
 
2193
                   assign mig_p4_arb_en    =        p4_arb_en ;
2194
                   assign mig_p4_cmd_clk     =      p4_cmd_clk  ;
2195
                   assign mig_p4_cmd_en      =      p4_cmd_en   ;
2196
                   assign mig_p4_cmd_ra      =      p4_cmd_ra  ;
2197
                   assign mig_p4_cmd_ba      =      p4_cmd_ba   ;
2198
                   assign mig_p4_cmd_ca      =      p4_cmd_ca  ;
2199
                   assign mig_p4_cmd_instr   =      p4_cmd_instr;
2200
                   assign mig_p4_cmd_bl      =      {(p4_cmd_instr[2] | p4_cmd_bl[5]),p4_cmd_bl[4:0]}  ;
2201
                   assign p4_cmd_empty   =      mig_p4_cmd_empty;
2202
                   assign p4_cmd_full    =      mig_p4_cmd_full ;
2203
 
2204
               end else
2205
               begin
2206
                   assign mig_p4_arb_en      =      'b0;
2207
                   assign mig_p4_cmd_clk     =      'b0;
2208
                   assign mig_p4_cmd_en      =      'b0;
2209
                   assign mig_p4_cmd_ra      =      'b0;
2210
                   assign mig_p4_cmd_ba      =      'b0;
2211
                   assign mig_p4_cmd_ca      =      'b0;
2212
                   assign mig_p4_cmd_instr   =      'b0;
2213
                   assign mig_p4_cmd_bl      =      'b0;
2214
                   assign p4_cmd_empty   =      'b0;
2215
                   assign p4_cmd_full    =      'b0;
2216
 
2217
 
2218
 
2219
               end
2220
 
2221
               if (C_PORT_ENABLE[5] == 1'b1)
2222
               begin
2223
 
2224
                   assign  mig_p5_arb_en    =     p5_arb_en ;
2225
                   assign  mig_p5_cmd_clk   =     p5_cmd_clk  ;
2226
                   assign  mig_p5_cmd_en    =     p5_cmd_en   ;
2227
                   assign  mig_p5_cmd_ra    =     p5_cmd_ra  ;
2228
                   assign  mig_p5_cmd_ba    =     p5_cmd_ba   ;
2229
                   assign  mig_p5_cmd_ca    =     p5_cmd_ca  ;
2230
                   assign mig_p5_cmd_instr  =     p5_cmd_instr;
2231
                   assign mig_p5_cmd_bl     =     {(p5_cmd_instr[2] | p5_cmd_bl[5]),p5_cmd_bl[4:0]}  ;
2232
                   assign p5_cmd_empty   =     mig_p5_cmd_empty;
2233
                   assign p5_cmd_full    =     mig_p5_cmd_full ;
2234
 
2235
               end else
2236
               begin
2237
                   assign  mig_p5_arb_en     =   'b0;
2238
                   assign  mig_p5_cmd_clk    =   'b0;
2239
                   assign  mig_p5_cmd_en     =   'b0;
2240
                   assign  mig_p5_cmd_ra     =   'b0;
2241
                   assign  mig_p5_cmd_ba     =   'b0;
2242
                   assign  mig_p5_cmd_ca     =   'b0;
2243
                   assign mig_p5_cmd_instr   =   'b0;
2244
                   assign mig_p5_cmd_bl      =   'b0;
2245
                   assign p5_cmd_empty   =     'b0;
2246
                   assign p5_cmd_full    =     'b0;
2247
 
2248
 
2249
               end
2250
 
2251
 
2252
 
2253
 
2254
              // Inputs from Application User Port
2255
 
2256
              // Port 0
2257
               if (C_PORT_ENABLE[0] == 1'b1)
2258
               begin
2259
                assign mig_p0_wr_clk   = p0_wr_clk;
2260
                assign mig_p0_rd_clk   = p0_rd_clk;
2261
                assign mig_p0_wr_en    = p0_wr_en;
2262
                assign mig_p0_rd_en    = p0_rd_en;
2263
                assign mig_p0_wr_mask  = p0_wr_mask[3:0];
2264
                assign mig_p0_wr_data  = p0_wr_data[31:0];
2265
                assign p0_rd_data        = mig_p0_rd_data;
2266
                assign p0_rd_full        = mig_p0_rd_full;
2267
                assign p0_rd_empty       = mig_p0_rd_empty;
2268
                assign p0_rd_error       = mig_p0_rd_error;
2269
                assign p0_wr_error       = mig_p0_wr_error;
2270
                assign p0_rd_overflow    = mig_p0_rd_overflow;
2271
                assign p0_wr_underrun    = mig_p0_wr_underrun;
2272
                assign p0_wr_empty       = mig_p0_wr_empty;
2273
                assign p0_wr_full        = mig_p0_wr_full;
2274
                assign p0_wr_count       = mig_p0_wr_count;
2275
                assign p0_rd_count       = mig_p0_rd_count  ;
2276
 
2277
 
2278
               end
2279
               else
2280
               begin
2281
                assign mig_p0_wr_clk     = 'b0;
2282
                assign mig_p0_rd_clk     = 'b0;
2283
                assign mig_p0_wr_en      = 'b0;
2284
                assign mig_p0_rd_en      = 'b0;
2285
                assign mig_p0_wr_mask    = 'b0;
2286
                assign mig_p0_wr_data    = 'b0;
2287
                assign p0_rd_data        = 'b0;
2288
                assign p0_rd_full        = 'b0;
2289
                assign p0_rd_empty       = 'b0;
2290
                assign p0_rd_error       = 'b0;
2291
                assign p0_wr_error       = 'b0;
2292
                assign p0_rd_overflow    = 'b0;
2293
                assign p0_wr_underrun    = 'b0;
2294
                assign p0_wr_empty       = 'b0;
2295
                assign p0_wr_full        = 'b0;
2296
                assign p0_wr_count       = 'b0;
2297
                assign p0_rd_count       = 'b0;
2298
 
2299
 
2300
               end
2301
 
2302
 
2303
              // Port 1
2304
               if (C_PORT_ENABLE[1] == 1'b1)
2305
               begin
2306
 
2307
                assign mig_p1_wr_clk   = p1_wr_clk;
2308
                assign mig_p1_rd_clk   = p1_rd_clk;
2309
                assign mig_p1_wr_en    = p1_wr_en;
2310
                assign mig_p1_wr_mask  = p1_wr_mask[3:0];
2311
                assign mig_p1_wr_data  = p1_wr_data[31:0];
2312
                assign mig_p1_rd_en    = p1_rd_en;
2313
                assign p1_rd_data     = mig_p1_rd_data;
2314
                assign p1_rd_empty    = mig_p1_rd_empty;
2315
                assign p1_rd_full     = mig_p1_rd_full;
2316
                assign p1_rd_error    = mig_p1_rd_error;
2317
                assign p1_wr_error    = mig_p1_wr_error;
2318
                assign p1_rd_overflow = mig_p1_rd_overflow;
2319
                assign p1_wr_underrun    = mig_p1_wr_underrun;
2320
                assign p1_wr_empty    = mig_p1_wr_empty;
2321
                assign p1_wr_full    = mig_p1_wr_full;
2322
                assign p1_wr_count  = mig_p1_wr_count;
2323
                assign p1_rd_count  = mig_p1_rd_count  ;
2324
 
2325
               end else
2326
               begin
2327
 
2328
                assign mig_p1_wr_clk   = 'b0;
2329
                assign mig_p1_rd_clk   = 'b0;
2330
                assign mig_p1_wr_en    = 'b0;
2331
                assign mig_p1_wr_mask  = 'b0;
2332
                assign mig_p1_wr_data  = 'b0;
2333
                assign mig_p1_rd_en    = 'b0;
2334
                assign p1_rd_data     =  'b0;
2335
                assign p1_rd_empty    =  'b0;
2336
                assign p1_rd_full     =  'b0;
2337
                assign p1_rd_error    =  'b0;
2338
                assign p1_wr_error    =  'b0;
2339
                assign p1_rd_overflow =  'b0;
2340
                assign p1_wr_underrun =  'b0;
2341
                assign p1_wr_empty    =  'b0;
2342
                assign p1_wr_full     =  'b0;
2343
                assign p1_wr_count    =  'b0;
2344
                assign p1_rd_count    =  'b0;
2345
 
2346
 
2347
               end
2348
 
2349
 
2350
 
2351
 
2352
 
2353
// whenever PORT 2 is in Write mode           
2354
         if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[119:96] == "W32") begin : u_config1_2W
2355
                  if (C_PORT_ENABLE[2] == 1'b1)
2356
                  begin
2357
                       assign mig_p2_clk      = p2_wr_clk;
2358
                       assign mig_p2_wr_data  = p2_wr_data[31:0];
2359
                       assign mig_p2_wr_mask  = p2_wr_mask[3:0];
2360
                       assign mig_p2_en       = p2_wr_en; // this signal will not shown up if the port 5 is for read dir
2361
                       assign p2_wr_error     = mig_p2_error;
2362
                       assign p2_wr_full      = mig_p2_full;
2363
                       assign p2_wr_empty     = mig_p2_empty;
2364
                       assign p2_wr_underrun  = mig_p2_underrun;
2365
                       assign p2_wr_count     = mig_p2_count  ; // wr port
2366
 
2367
 
2368
                  end else
2369
                  begin
2370
                       assign mig_p2_clk      = 'b0;
2371
                       assign mig_p2_wr_data  = 'b0;
2372
                       assign mig_p2_wr_mask  = 'b0;
2373
                       assign mig_p2_en       = 'b0;
2374
                       assign p2_wr_error     = 'b0;
2375
                       assign p2_wr_full      = 'b0;
2376
                       assign p2_wr_empty     = 'b0;
2377
                       assign p2_wr_underrun  = 'b0;
2378
                       assign p2_wr_count     = 'b0;
2379
 
2380
                  end
2381
                   assign p2_rd_data        = 'b0;
2382
                   assign p2_rd_overflow    = 'b0;
2383
                   assign p2_rd_error       = 'b0;
2384
                   assign p2_rd_full        = 'b0;
2385
                   assign p2_rd_empty       = 'b0;
2386
                   assign p2_rd_count       = 'b0;
2387
//                   assign p2_rd_error       = 'b0;
2388
 
2389
 
2390
 
2391
         end else if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[119:96] == "R32") begin : u_config1_2R
2392
 
2393
                  if (C_PORT_ENABLE[2] == 1'b1)
2394
                  begin
2395
                       assign mig_p2_clk        = p2_rd_clk;
2396
                       assign p2_rd_data        = mig_p2_rd_data;
2397
                       assign mig_p2_en         = p2_rd_en;
2398
                       assign p2_rd_overflow    = mig_p2_overflow;
2399
                       assign p2_rd_error       = mig_p2_error;
2400
                       assign p2_rd_full        = mig_p2_full;
2401
                       assign p2_rd_empty       = mig_p2_empty;
2402
                       assign p2_rd_count       = mig_p2_count  ; // wr port
2403
 
2404
                  end else
2405
                  begin
2406
                       assign mig_p2_clk        = 'b0;
2407
                       assign p2_rd_data        = 'b0;
2408
                       assign mig_p2_en         = 'b0;
2409
 
2410
                       assign p2_rd_overflow    = 'b0;
2411
                       assign p2_rd_error       = 'b0;
2412
                       assign p2_rd_full        = 'b0;
2413
                       assign p2_rd_empty       = 'b0;
2414
                       assign p2_rd_count       = 'b0;
2415
 
2416
                  end
2417
                  assign mig_p2_wr_data  = 'b0;
2418
                  assign mig_p2_wr_mask  = 'b0;
2419
                  assign p2_wr_error     = 'b0;
2420
                  assign p2_wr_full      = 'b0;
2421
                  assign p2_wr_empty     = 'b0;
2422
                  assign p2_wr_underrun  = 'b0;
2423
                  assign p2_wr_count     = 'b0;
2424
 
2425
          end
2426
          if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[87:64]  == "W32") begin : u_config1_3W
2427
// whenever PORT 3 is in Write mode         
2428
 
2429
                  if (C_PORT_ENABLE[3] == 1'b1)
2430
                  begin
2431
 
2432
                       assign mig_p3_clk   = p3_wr_clk;
2433
                       assign mig_p3_wr_data  = p3_wr_data[31:0];
2434
                       assign mig_p3_wr_mask  = p3_wr_mask[3:0];
2435
                       assign mig_p3_en       = p3_wr_en;
2436
                       assign p3_wr_full      = mig_p3_full;
2437
                       assign p3_wr_empty     = mig_p3_empty;
2438
                       assign p3_wr_underrun  = mig_p3_underrun;
2439
                       assign p3_wr_count     = mig_p3_count  ; // wr port
2440
                       assign p3_wr_error     = mig_p3_error;
2441
 
2442
                  end else
2443
                  begin
2444
                       assign mig_p3_clk      = 'b0;
2445
                       assign mig_p3_wr_data  = 'b0;
2446
                       assign mig_p3_wr_mask  = 'b0;
2447
                       assign mig_p3_en       = 'b0;
2448
                       assign p3_wr_full      = 'b0;
2449
                       assign p3_wr_empty     = 'b0;
2450
                       assign p3_wr_underrun  = 'b0;
2451
                       assign p3_wr_count     = 'b0;
2452
                       assign p3_wr_error     = 'b0;
2453
 
2454
                  end
2455
                   assign p3_rd_overflow = 'b0;
2456
                   assign p3_rd_error    = 'b0;
2457
                   assign p3_rd_full     = 'b0;
2458
                   assign p3_rd_empty    = 'b0;
2459
                   assign p3_rd_count    = 'b0;
2460
                   assign p3_rd_data     = 'b0;
2461
 
2462
 
2463
         end else if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[87:64]  == "R32") begin : u_config1_3R
2464
 
2465
                  if (C_PORT_ENABLE[3] == 1'b1)
2466
                  begin
2467
 
2468
                       assign mig_p3_clk     = p3_rd_clk;
2469
                       assign p3_rd_data     = mig_p3_rd_data;
2470
                       assign mig_p3_en      = p3_rd_en;  // this signal will not shown up if the port 5 is for write dir
2471
                       assign p3_rd_overflow = mig_p3_overflow;
2472
                       assign p3_rd_error    = mig_p3_error;
2473
                       assign p3_rd_full     = mig_p3_full;
2474
                       assign p3_rd_empty    = mig_p3_empty;
2475
                       assign p3_rd_count    = mig_p3_count  ; // wr port
2476
                  end else
2477
                  begin
2478
                       assign mig_p3_clk     = 'b0;
2479
                       assign mig_p3_en      = 'b0;
2480
                       assign p3_rd_overflow = 'b0;
2481
                       assign p3_rd_full     = 'b0;
2482
                       assign p3_rd_empty    = 'b0;
2483
                       assign p3_rd_count    = 'b0;
2484
                       assign p3_rd_error    = 'b0;
2485
                       assign p3_rd_data     = 'b0;
2486
                  end
2487
                  assign p3_wr_full      = 'b0;
2488
                  assign p3_wr_empty     = 'b0;
2489
                  assign p3_wr_underrun  = 'b0;
2490
                  assign p3_wr_count     = 'b0;
2491
                  assign p3_wr_error     = 'b0;
2492
                  assign mig_p3_wr_data  = 'b0;
2493
                  assign mig_p3_wr_mask  = 'b0;
2494
         end
2495
         if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[55:32]  == "W32") begin : u_config1_4W
2496
       // whenever PORT 4 is in Write mode       
2497
 
2498
                  if (C_PORT_ENABLE[4] == 1'b1)
2499
                  begin
2500
 
2501
                       assign mig_p4_clk      = p4_wr_clk;
2502
                       assign mig_p4_wr_data  = p4_wr_data[31:0];
2503
                       assign mig_p4_wr_mask  = p4_wr_mask[3:0];
2504
                       assign mig_p4_en       = p4_wr_en; // this signal will not shown up if the port 5 is for read dir
2505
                       assign p4_wr_full      = mig_p4_full;
2506
                       assign p4_wr_empty     = mig_p4_empty;
2507
                       assign p4_wr_underrun  = mig_p4_underrun;
2508
                       assign p4_wr_count     = mig_p4_count  ; // wr port
2509
                       assign p4_wr_error     = mig_p4_error;
2510
 
2511
                  end else
2512
                  begin
2513
                       assign mig_p4_clk      = 'b0;
2514
                       assign mig_p4_wr_data  = 'b0;
2515
                       assign mig_p4_wr_mask  = 'b0;
2516
                       assign mig_p4_en       = 'b0;
2517
                       assign p4_wr_full      = 'b0;
2518
                       assign p4_wr_empty     = 'b0;
2519
                       assign p4_wr_underrun  = 'b0;
2520
                       assign p4_wr_count     = 'b0;
2521
                       assign p4_wr_error     = 'b0;
2522
                  end
2523
                   assign p4_rd_overflow    = 'b0;
2524
                   assign p4_rd_error       = 'b0;
2525
                   assign p4_rd_full        = 'b0;
2526
                   assign p4_rd_empty       = 'b0;
2527
                   assign p4_rd_count       = 'b0;
2528
                   assign p4_rd_data        = 'b0;
2529
 
2530
         end else if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[55:32]  == "R32") begin : u_config1_4R
2531
 
2532
                  if (C_PORT_ENABLE[4] == 1'b1)
2533
                  begin
2534
                       assign mig_p4_clk        = p4_rd_clk;
2535
                       assign p4_rd_data        = mig_p4_rd_data;
2536
                       assign mig_p4_en         = p4_rd_en;  // this signal will not shown up if the port 5 is for write dir
2537
                       assign p4_rd_overflow    = mig_p4_overflow;
2538
                       assign p4_rd_error       = mig_p4_error;
2539
                       assign p4_rd_full        = mig_p4_full;
2540
                       assign p4_rd_empty       = mig_p4_empty;
2541
                       assign p4_rd_count       = mig_p4_count  ; // wr port
2542
 
2543
                  end else
2544
                  begin
2545
                       assign mig_p4_clk        = 'b0;
2546
                       assign p4_rd_data        = 'b0;
2547
                       assign mig_p4_en         = 'b0;
2548
                       assign p4_rd_overflow    = 'b0;
2549
                       assign p4_rd_error       = 'b0;
2550
                       assign p4_rd_full        = 'b0;
2551
                       assign p4_rd_empty       = 'b0;
2552
                       assign p4_rd_count       = 'b0;
2553
                  end
2554
                  assign p4_wr_full      = 'b0;
2555
                  assign p4_wr_empty     = 'b0;
2556
                  assign p4_wr_underrun  = 'b0;
2557
                  assign p4_wr_count     = 'b0;
2558
                  assign p4_wr_error     = 'b0;
2559
                  assign mig_p4_wr_data  = 'b0;
2560
                  assign mig_p4_wr_mask  = 'b0;
2561
 
2562
 
2563
 
2564
 
2565
         end
2566
 
2567
         if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[23:0] == "W32") begin : u_config1_5W
2568
       // whenever PORT 5 is in Write mode           
2569
 
2570
 
2571
                  if (C_PORT_ENABLE[5] == 1'b1)
2572
                  begin
2573
                       assign mig_p5_clk   = p5_wr_clk;
2574
                       assign mig_p5_wr_data  = p5_wr_data[31:0];
2575
                       assign mig_p5_wr_mask  = p5_wr_mask[3:0];
2576
                       assign mig_p5_en       = p5_wr_en;
2577
                       assign p5_wr_full      = mig_p5_full;
2578
                       assign p5_wr_empty     = mig_p5_empty;
2579
                       assign p5_wr_underrun  = mig_p5_underrun;
2580
                       assign p5_wr_count     = mig_p5_count  ;
2581
                       assign p5_wr_error     = mig_p5_error;
2582
 
2583
                  end else
2584
                  begin
2585
                       assign mig_p5_clk      = 'b0;
2586
                       assign mig_p5_wr_data  = 'b0;
2587
                       assign mig_p5_wr_mask  = 'b0;
2588
                       assign mig_p5_en       = 'b0;
2589
                       assign p5_wr_full      = 'b0;
2590
                       assign p5_wr_empty     = 'b0;
2591
                       assign p5_wr_underrun  = 'b0;
2592
                       assign p5_wr_count     = 'b0;
2593
                       assign p5_wr_error     = 'b0;
2594
                  end
2595
                   assign p5_rd_data        = 'b0;
2596
                   assign p5_rd_overflow    = 'b0;
2597
                   assign p5_rd_error       = 'b0;
2598
                   assign p5_rd_full        = 'b0;
2599
                   assign p5_rd_empty       = 'b0;
2600
                   assign p5_rd_count       = 'b0;
2601
 
2602
 
2603
 
2604
 
2605
         end else if(C_PORT_CONFIG[183:160] == "B32" && C_PORT_CONFIG[23:0] == "R32") begin : u_config1_5R
2606
 
2607
                  if (C_PORT_ENABLE[5] == 1'b1)
2608
                  begin
2609
 
2610
                       assign mig_p5_clk        = p5_rd_clk;
2611
                       assign p5_rd_data        = mig_p5_rd_data;
2612
                       assign mig_p5_en         = p5_rd_en;
2613
                       assign p5_rd_overflow    = mig_p5_overflow;
2614
                       assign p5_rd_error       = mig_p5_error;
2615
                       assign p5_rd_full        = mig_p5_full;
2616
                       assign p5_rd_empty       = mig_p5_empty;
2617
                       assign p5_rd_count       = mig_p5_count  ;
2618
 
2619
                 end else
2620
                 begin
2621
                       assign mig_p5_clk        = 'b0;
2622
                       assign p5_rd_data        = 'b0;
2623
                       assign mig_p5_en         = 'b0;
2624
                       assign p5_rd_overflow    = 'b0;
2625
                       assign p5_rd_error       = 'b0;
2626
                       assign p5_rd_full        = 'b0;
2627
                       assign p5_rd_empty       = 'b0;
2628
                       assign p5_rd_count       = 'b0;
2629
 
2630
                 end
2631
                 assign p5_wr_full      = 'b0;
2632
                 assign p5_wr_empty     = 'b0;
2633
                 assign p5_wr_underrun  = 'b0;
2634
                 assign p5_wr_count     = 'b0;
2635
                 assign p5_wr_error     = 'b0;
2636
                 assign mig_p5_wr_data  = 'b0;
2637
                 assign mig_p5_wr_mask  = 'b0;
2638
 
2639
         end
2640
 
2641
  end else if(C_PORT_CONFIG == "B32_B32_B32_B32" ) begin : u_config_2
2642
 
2643
 
2644
               // Inputs from Application CMD Port
2645
               // *************  need to hook up rd /wr error outputs
2646
 
2647
                  if (C_PORT_ENABLE[0] == 1'b1)
2648
                  begin
2649
                           // command port signals
2650
                           assign mig_p0_arb_en      =      p0_arb_en ;
2651
                           assign mig_p0_cmd_clk     =      p0_cmd_clk  ;
2652
                           assign mig_p0_cmd_en      =      p0_cmd_en   ;
2653
                           assign mig_p0_cmd_ra      =      p0_cmd_ra  ;
2654
                           assign mig_p0_cmd_ba      =      p0_cmd_ba   ;
2655
                           assign mig_p0_cmd_ca      =      p0_cmd_ca  ;
2656
                           assign mig_p0_cmd_instr   =      p0_cmd_instr;
2657
                           assign mig_p0_cmd_bl      =       {(p0_cmd_instr[2] | p0_cmd_bl[5]),p0_cmd_bl[4:0]}   ;
2658
 
2659
                           // Data port signals
2660
                           assign mig_p0_rd_en    = p0_rd_en;
2661
                           assign mig_p0_wr_clk   = p0_wr_clk;
2662
                           assign mig_p0_rd_clk   = p0_rd_clk;
2663
                           assign mig_p0_wr_en    = p0_wr_en;
2664
                           assign mig_p0_wr_data  = p0_wr_data[31:0];
2665
                           assign mig_p0_wr_mask  = p0_wr_mask[3:0];
2666
                           assign p0_wr_count     = mig_p0_wr_count;
2667
                           assign p0_rd_count  = mig_p0_rd_count  ;
2668
 
2669
 
2670
 
2671
                 end else
2672
                 begin
2673
                           assign mig_p0_arb_en      =       'b0;
2674
                           assign mig_p0_cmd_clk     =       'b0;
2675
                           assign mig_p0_cmd_en      =       'b0;
2676
                           assign mig_p0_cmd_ra      =       'b0;
2677
                           assign mig_p0_cmd_ba      =       'b0;
2678
                           assign mig_p0_cmd_ca      =       'b0;
2679
                           assign mig_p0_cmd_instr   =       'b0;
2680
                           assign mig_p0_cmd_bl      =       'b0;
2681
 
2682
                           assign mig_p0_rd_en    = 'b0;
2683
                           assign mig_p0_wr_clk   = 'b0;
2684
                           assign mig_p0_rd_clk   = 'b0;
2685
                           assign mig_p0_wr_en    = 'b0;
2686
                           assign mig_p0_wr_data  = 'b0;
2687
                           assign mig_p0_wr_mask  = 'b0;
2688
                           assign p0_wr_count     = 'b0;
2689
                           assign p0_rd_count     = 'b0;
2690
 
2691
 
2692
                 end
2693
 
2694
                           assign p0_cmd_empty       =      mig_p0_cmd_empty ;
2695
                           assign p0_cmd_full        =      mig_p0_cmd_full  ;
2696
 
2697
 
2698
                  if (C_PORT_ENABLE[1] == 1'b1)
2699
                  begin
2700
                           // command port signals
2701
 
2702
                           assign mig_p1_arb_en      =      p1_arb_en ;
2703
                           assign mig_p1_cmd_clk     =      p1_cmd_clk  ;
2704
                           assign mig_p1_cmd_en      =      p1_cmd_en   ;
2705
                           assign mig_p1_cmd_ra      =      p1_cmd_ra  ;
2706
                           assign mig_p1_cmd_ba      =      p1_cmd_ba   ;
2707
                           assign mig_p1_cmd_ca      =      p1_cmd_ca  ;
2708
                           assign mig_p1_cmd_instr   =      p1_cmd_instr;
2709
                           assign mig_p1_cmd_bl      =      {(p1_cmd_instr[2] | p1_cmd_bl[5]),p1_cmd_bl[4:0]}  ;
2710
                           // Data port signals
2711
 
2712
                            assign mig_p1_wr_en    = p1_wr_en;
2713
                            assign mig_p1_wr_clk   = p1_wr_clk;
2714
                            assign mig_p1_rd_en    = p1_rd_en;
2715
                            assign mig_p1_wr_data  = p1_wr_data[31:0];
2716
                            assign mig_p1_wr_mask  = p1_wr_mask[3:0];
2717
                            assign mig_p1_rd_clk   = p1_rd_clk;
2718
                            assign p1_wr_count     = mig_p1_wr_count;
2719
                            assign p1_rd_count     = mig_p1_rd_count;
2720
 
2721
                  end else
2722
                  begin
2723
 
2724
                           assign mig_p1_arb_en      =       'b0;
2725
                           assign mig_p1_cmd_clk     =       'b0;
2726
                           assign mig_p1_cmd_en      =       'b0;
2727
                           assign mig_p1_cmd_ra      =       'b0;
2728
                           assign mig_p1_cmd_ba      =       'b0;
2729
                           assign mig_p1_cmd_ca      =       'b0;
2730
                           assign mig_p1_cmd_instr   =       'b0;
2731
                           assign mig_p1_cmd_bl      =       'b0;
2732
                           // Data port signals
2733
                           assign mig_p1_wr_en    = 'b0;
2734
                           assign mig_p1_wr_clk   = 'b0;
2735
                           assign mig_p1_rd_en    = 'b0;
2736
                           assign mig_p1_wr_data  = 'b0;
2737
                           assign mig_p1_wr_mask  = 'b0;
2738
                           assign mig_p1_rd_clk   = 'b0;
2739
                            assign p1_wr_count     = 'b0;
2740
                            assign p1_rd_count     = 'b0;
2741
 
2742
                  end
2743
 
2744
 
2745
                           assign p1_cmd_empty       =      mig_p1_cmd_empty ;
2746
                           assign p1_cmd_full        =      mig_p1_cmd_full  ;
2747
 
2748
                  if (C_PORT_ENABLE[2] == 1'b1)
2749
                  begin   //MCB Physical port               Logical Port
2750
                           assign mig_p2_arb_en      =      p2_arb_en ;
2751
                           assign mig_p2_cmd_clk     =      p2_cmd_clk  ;
2752
                           assign mig_p2_cmd_en      =      p2_cmd_en   ;
2753
                           assign mig_p2_cmd_ra      =      p2_cmd_ra  ;
2754
                           assign mig_p2_cmd_ba      =      p2_cmd_ba   ;
2755
                           assign mig_p2_cmd_ca      =      p2_cmd_ca  ;
2756
                           assign mig_p2_cmd_instr   =      p2_cmd_instr;
2757
                           assign mig_p2_cmd_bl      =      {(p2_cmd_instr[2] | p2_cmd_bl[5]),p2_cmd_bl[4:0]}   ;
2758
 
2759
                            assign mig_p2_en       = p2_rd_en;
2760
                            assign mig_p2_clk      = p2_rd_clk;
2761
                            assign mig_p3_en       = p2_wr_en;
2762
                            assign mig_p3_clk      = p2_wr_clk;
2763
                            assign mig_p3_wr_data  = p2_wr_data[31:0];
2764
                            assign mig_p3_wr_mask  = p2_wr_mask[3:0];
2765
                            assign p2_wr_count     = mig_p3_count;
2766
                            assign p2_rd_count     = mig_p2_count;
2767
 
2768
                  end else
2769
                  begin
2770
 
2771
                           assign mig_p2_arb_en      =      'b0;
2772
                           assign mig_p2_cmd_clk     =      'b0;
2773
                           assign mig_p2_cmd_en      =      'b0;
2774
                           assign mig_p2_cmd_ra      =      'b0;
2775
                           assign mig_p2_cmd_ba      =      'b0;
2776
                           assign mig_p2_cmd_ca      =      'b0;
2777
                           assign mig_p2_cmd_instr   =      'b0;
2778
                           assign mig_p2_cmd_bl      =      'b0;
2779
 
2780
                            assign mig_p2_en       = 'b0;
2781
                            assign mig_p2_clk      = 'b0;
2782
                            assign mig_p3_en       = 'b0;
2783
                            assign mig_p3_clk      = 'b0;
2784
                            assign mig_p3_wr_data  = 'b0;
2785
                            assign mig_p3_wr_mask  = 'b0;
2786
                            assign p2_rd_count     = 'b0;
2787
                            assign p2_wr_count     = 'b0;
2788
 
2789
                 end
2790
 
2791
                           assign p2_cmd_empty       =      mig_p2_cmd_empty ;
2792
                           assign p2_cmd_full        =      mig_p2_cmd_full  ;
2793
 
2794
                 if (C_PORT_ENABLE[3] == 1'b1)
2795
                  begin   //MCB Physical port               Logical Port
2796
                           assign mig_p4_arb_en      =      p3_arb_en ;
2797
                           assign mig_p4_cmd_clk     =      p3_cmd_clk  ;
2798
                           assign mig_p4_cmd_en      =      p3_cmd_en   ;
2799
                           assign mig_p4_cmd_ra      =      p3_cmd_ra  ;
2800
                           assign mig_p4_cmd_ba      =      p3_cmd_ba   ;
2801
                           assign mig_p4_cmd_ca      =      p3_cmd_ca  ;
2802
                           assign mig_p4_cmd_instr   =      p3_cmd_instr;
2803
                           assign mig_p4_cmd_bl      =      {(p3_cmd_instr[2] | p3_cmd_bl[5]),p3_cmd_bl[4:0]}  ;
2804
 
2805
                           assign mig_p4_clk      = p3_rd_clk;
2806
                           assign mig_p4_en       = p3_rd_en;
2807
                           assign mig_p5_clk      = p3_wr_clk;
2808
                           assign mig_p5_en       = p3_wr_en;
2809
                           assign mig_p5_wr_data  = p3_wr_data[31:0];
2810
                           assign mig_p5_wr_mask  = p3_wr_mask[3:0];
2811
                           assign p3_rd_count     = mig_p4_count;
2812
                           assign p3_wr_count     = mig_p5_count;
2813
 
2814
 
2815
                  end else
2816
                  begin
2817
                           assign mig_p4_arb_en      =     'b0;
2818
                           assign mig_p4_cmd_clk     =     'b0;
2819
                           assign mig_p4_cmd_en      =     'b0;
2820
                           assign mig_p4_cmd_ra      =     'b0;
2821
                           assign mig_p4_cmd_ba      =     'b0;
2822
                           assign mig_p4_cmd_ca      =     'b0;
2823
                           assign mig_p4_cmd_instr   =     'b0;
2824
                           assign mig_p4_cmd_bl      =     'b0;
2825
 
2826
                            assign mig_p4_clk      = 'b0;
2827
                            assign mig_p4_en       = 'b0;
2828
                            assign mig_p5_clk      = 'b0;
2829
                            assign mig_p5_en       = 'b0;
2830
                            assign mig_p5_wr_data  = 'b0;
2831
                            assign mig_p5_wr_mask  = 'b0;
2832
                            assign p3_rd_count     = 'b0;
2833
                            assign p3_wr_count     = 'b0;
2834
 
2835
 
2836
 
2837
                  end
2838
 
2839
                           assign p3_cmd_empty       =      mig_p4_cmd_empty ;
2840
                           assign p3_cmd_full        =      mig_p4_cmd_full  ;
2841
 
2842
 
2843
                            // outputs to Applications User Port
2844
                            assign p0_rd_data     = mig_p0_rd_data;
2845
                            assign p1_rd_data     = mig_p1_rd_data;
2846
                            assign p2_rd_data     = mig_p2_rd_data;
2847
                            assign p3_rd_data     = mig_p4_rd_data;
2848
 
2849
                            assign p0_rd_empty    = mig_p0_rd_empty;
2850
                            assign p1_rd_empty    = mig_p1_rd_empty;
2851
                            assign p2_rd_empty    = mig_p2_empty;
2852
                            assign p3_rd_empty    = mig_p4_empty;
2853
 
2854
                            assign p0_rd_full     = mig_p0_rd_full;
2855
                            assign p1_rd_full     = mig_p1_rd_full;
2856
                            assign p2_rd_full     = mig_p2_full;
2857
                            assign p3_rd_full     = mig_p4_full;
2858
 
2859
                            assign p0_rd_error    = mig_p0_rd_error;
2860
                            assign p1_rd_error    = mig_p1_rd_error;
2861
                            assign p2_rd_error    = mig_p2_error;
2862
                            assign p3_rd_error    = mig_p4_error;
2863
 
2864
                            assign p0_rd_overflow = mig_p0_rd_overflow;
2865
                            assign p1_rd_overflow = mig_p1_rd_overflow;
2866
                            assign p2_rd_overflow = mig_p2_overflow;
2867
                            assign p3_rd_overflow = mig_p4_overflow;
2868
 
2869
                            assign p0_wr_underrun = mig_p0_wr_underrun;
2870
                            assign p1_wr_underrun = mig_p1_wr_underrun;
2871
                            assign p2_wr_underrun = mig_p3_underrun;
2872
                            assign p3_wr_underrun = mig_p5_underrun;
2873
 
2874
                            assign p0_wr_empty    = mig_p0_wr_empty;
2875
                            assign p1_wr_empty    = mig_p1_wr_empty;
2876
                            assign p2_wr_empty    = mig_p3_empty;
2877
                            assign p3_wr_empty    = mig_p5_empty;
2878
 
2879
                            assign p0_wr_full    = mig_p0_wr_full;
2880
                            assign p1_wr_full    = mig_p1_wr_full;
2881
                            assign p2_wr_full    = mig_p3_full;
2882
                            assign p3_wr_full    = mig_p5_full;
2883
 
2884
                            assign p0_wr_error    = mig_p0_wr_error;
2885
                            assign p1_wr_error    = mig_p1_wr_error;
2886
                            assign p2_wr_error    = mig_p3_error;
2887
                            assign p3_wr_error    = mig_p5_error;
2888
 
2889
     // unused ports signals
2890
                           assign p4_cmd_empty        =     1'b0;
2891
                           assign p4_cmd_full         =     1'b0;
2892
                           assign mig_p2_wr_mask  = 'b0;
2893
                           assign mig_p4_wr_mask  = 'b0;
2894
 
2895
                           assign mig_p2_wr_data     = 'b0;
2896
                           assign mig_p4_wr_data     = 'b0;
2897
 
2898
                           assign p5_cmd_empty        =     1'b0;
2899
                           assign p5_cmd_full         =     1'b0;
2900
 
2901
 
2902
                            assign mig_p3_cmd_clk     =      1'b0;
2903
                            assign mig_p3_cmd_en      =      1'b0;
2904
                            assign mig_p3_cmd_ra      =      15'd0;
2905
                            assign mig_p3_cmd_ba      =      3'd0;
2906
                            assign mig_p3_cmd_ca      =      12'd0;
2907
                            assign mig_p3_cmd_instr   =      3'd0;
2908
                            assign mig_p3_cmd_bl      =      6'd0;
2909
                            assign mig_p3_arb_en      =      1'b0;  // physical cmd port 3 is not used in this config
2910
 
2911
 
2912
 
2913
 
2914
                            assign mig_p5_arb_en      =      1'b0;  // physical cmd port 3 is not used in this config
2915
                            assign mig_p5_cmd_clk     =      1'b0;
2916
                            assign mig_p5_cmd_en      =      1'b0;
2917
                            assign mig_p5_cmd_ra      =      15'd0;
2918
                            assign mig_p5_cmd_ba      =      3'd0;
2919
                            assign mig_p5_cmd_ca      =      12'd0;
2920
                            assign mig_p5_cmd_instr   =      3'd0;
2921
                            assign mig_p5_cmd_bl      =      6'd0;
2922
 
2923
 
2924
 
2925
      ////////////////////////////////////////////////////////////////////////////
2926
      /////////////////////////////////////////////////////////////////////////////
2927
      ////     
2928
      ////                         B64_B32_B32
2929
      ////     
2930
      /////////////////////////////////////////////////////////////////////////////
2931
      ////////////////////////////////////////////////////////////////////////////
2932
 
2933
 
2934
 
2935
  end else if(C_PORT_CONFIG == "B64_B32_B32" ) begin : u_config_3
2936
 
2937
               // Inputs from Application CMD Port
2938
 
2939
 
2940
       if (C_PORT_ENABLE[0] == 1'b1)
2941
       begin
2942
               assign mig_p0_arb_en      =  p0_arb_en ;
2943
               assign mig_p0_cmd_clk     =  p0_cmd_clk  ;
2944
               assign mig_p0_cmd_en      =  p0_cmd_en   ;
2945
               assign mig_p0_cmd_ra      =  p0_cmd_ra  ;
2946
               assign mig_p0_cmd_ba      =  p0_cmd_ba   ;
2947
               assign mig_p0_cmd_ca      =  p0_cmd_ca  ;
2948
               assign mig_p0_cmd_instr   =  p0_cmd_instr;
2949
               assign mig_p0_cmd_bl      =   {(p0_cmd_instr[2] | p0_cmd_bl[5]),p0_cmd_bl[4:0]}   ;
2950
               assign p0_cmd_empty       =  mig_p0_cmd_empty ;
2951
               assign p0_cmd_full        =  mig_p0_cmd_full  ;
2952
 
2953
               assign mig_p0_wr_clk   = p0_wr_clk;
2954
               assign mig_p0_rd_clk   = p0_rd_clk;
2955
               assign mig_p1_wr_clk   = p0_wr_clk;
2956
               assign mig_p1_rd_clk   = p0_rd_clk;
2957
 
2958
               if (C_USR_INTERFACE_MODE == "AXI")
2959
                   assign mig_p0_wr_en    = p0_wr_en ;
2960
               else
2961
                   assign mig_p0_wr_en    = p0_wr_en & !p0_wr_full;
2962
 
2963
               if (C_USR_INTERFACE_MODE == "AXI")
2964
                   assign mig_p1_wr_en    = p0_wr_en ;
2965
               else
2966
                   assign mig_p1_wr_en    = p0_wr_en & !p0_wr_full;
2967
 
2968
               assign mig_p0_wr_data  = p0_wr_data[31:0];
2969
               assign mig_p0_wr_mask  = p0_wr_mask[3:0];
2970
               assign mig_p1_wr_data  = p0_wr_data[63 : 32];
2971
               assign mig_p1_wr_mask  = p0_wr_mask[7 : 4];
2972
 
2973
               assign p0_rd_empty       = mig_p1_rd_empty;
2974
               assign p0_rd_data        = {mig_p1_rd_data , mig_p0_rd_data};
2975
               if (C_USR_INTERFACE_MODE == "AXI")
2976
                   assign mig_p0_rd_en    = p0_rd_en ;
2977
               else
2978
                   assign mig_p0_rd_en    = p0_rd_en & !p0_rd_empty;
2979
 
2980
               if (C_USR_INTERFACE_MODE == "AXI")
2981
                   assign mig_p1_rd_en    = p0_rd_en ;
2982
                else
2983
                   assign mig_p1_rd_en    = p0_rd_en & !p0_rd_empty;
2984
 
2985
                assign p0_wr_count       = mig_p1_wr_count;  // B64 for port 0, map most significant port to output
2986
                assign p0_rd_count       = mig_p1_rd_count;
2987
                assign p0_wr_empty       = mig_p1_wr_empty;
2988
                assign p0_wr_error       = mig_p1_wr_error | mig_p0_wr_error;
2989
                assign p0_wr_full        = mig_p1_wr_full;
2990
                assign p0_wr_underrun    = mig_p1_wr_underrun | mig_p0_wr_underrun;
2991
                assign p0_rd_overflow    = mig_p1_rd_overflow | mig_p0_rd_overflow;
2992
                assign p0_rd_error       = mig_p1_rd_error | mig_p0_rd_error;
2993
                assign p0_rd_full        = mig_p1_rd_full;
2994
 
2995
 
2996
       end else
2997
       begin
2998
 
2999
               assign mig_p0_arb_en      = 'b0;
3000
               assign mig_p0_cmd_clk     = 'b0;
3001
               assign mig_p0_cmd_en      = 'b0;
3002
               assign mig_p0_cmd_ra      = 'b0;
3003
               assign mig_p0_cmd_ba      = 'b0;
3004
               assign mig_p0_cmd_ca      = 'b0;
3005
               assign mig_p0_cmd_instr   = 'b0;
3006
               assign mig_p0_cmd_bl      = 'b0;
3007
               assign p0_cmd_empty       =  'b0;
3008
               assign p0_cmd_full        =  'b0;
3009
 
3010
 
3011
               assign mig_p0_wr_clk   = 'b0;
3012
               assign mig_p0_rd_clk   = 'b0;
3013
               assign mig_p1_wr_clk   = 'b0;
3014
               assign mig_p1_rd_clk   = 'b0;
3015
 
3016
               assign mig_p0_wr_en    = 'b0;
3017
               assign mig_p1_wr_en    = 'b0;
3018
               assign mig_p0_wr_data  = 'b0;
3019
               assign mig_p0_wr_mask  = 'b0;
3020
               assign mig_p1_wr_data  = 'b0;
3021
               assign mig_p1_wr_mask  = 'b0;
3022
 
3023
               assign p0_rd_empty       = 'b0;
3024
               assign p0_rd_data        = 'b0;
3025
               assign mig_p0_rd_en      = 'b0;
3026
               assign mig_p1_rd_en      = 'b0;
3027
 
3028
 
3029
               assign p0_wr_count       =  'b0;
3030
               assign p0_rd_count       =  'b0;
3031
               assign p0_wr_empty       =  'b0;
3032
               assign p0_wr_error       =  'b0;
3033
               assign p0_wr_full        =  'b0;
3034
               assign p0_wr_underrun    =  'b0;
3035
               assign p0_rd_overflow    =  'b0;
3036
               assign p0_rd_error       =  'b0;
3037
               assign p0_rd_full        =  'b0;
3038
 
3039
 
3040
       end
3041
 
3042
 
3043
 
3044
       if (C_PORT_ENABLE[1] == 1'b1)
3045
       begin
3046
 
3047
               assign mig_p2_arb_en      =      p1_arb_en ;
3048
               assign mig_p2_cmd_clk     =      p1_cmd_clk  ;
3049
               assign mig_p2_cmd_en      =      p1_cmd_en   ;
3050
               assign mig_p2_cmd_ra      =      p1_cmd_ra  ;
3051
               assign mig_p2_cmd_ba      =      p1_cmd_ba   ;
3052
               assign mig_p2_cmd_ca      =      p1_cmd_ca  ;
3053
               assign mig_p2_cmd_instr   =      p1_cmd_instr;
3054
               assign mig_p2_cmd_bl      =      {(p1_cmd_instr[2] | p1_cmd_bl[5]),p1_cmd_bl[4:0]}  ;
3055
               assign p1_cmd_empty       =      mig_p2_cmd_empty;
3056
               assign p1_cmd_full        =      mig_p2_cmd_full;
3057
 
3058
               assign mig_p2_clk         = p1_rd_clk;
3059
               assign mig_p3_clk         = p1_wr_clk;
3060
 
3061
               assign mig_p3_en       = p1_wr_en;
3062
               assign mig_p3_wr_data  = p1_wr_data[31:0];
3063
               assign mig_p3_wr_mask  = p1_wr_mask[3:0];
3064
               assign mig_p2_en       = p1_rd_en;
3065
 
3066
               assign p1_rd_data        = mig_p2_rd_data;
3067
               assign p1_wr_count       = mig_p3_count;
3068
               assign p1_rd_count       = mig_p2_count;
3069
               assign p1_wr_empty       = mig_p3_empty;
3070
               assign p1_wr_error       = mig_p3_error;
3071
               assign p1_wr_full        = mig_p3_full;
3072
               assign p1_wr_underrun    = mig_p3_underrun;
3073
               assign p1_rd_overflow    = mig_p2_overflow;
3074
               assign p1_rd_error       = mig_p2_error;
3075
               assign p1_rd_full        = mig_p2_full;
3076
               assign p1_rd_empty       = mig_p2_empty;
3077
 
3078
       end else
3079
       begin
3080
 
3081
               assign mig_p2_arb_en      =     'b0;
3082
               assign mig_p2_cmd_clk     =     'b0;
3083
               assign mig_p2_cmd_en      =     'b0;
3084
               assign mig_p2_cmd_ra      =     'b0;
3085
               assign mig_p2_cmd_ba      =     'b0;
3086
               assign mig_p2_cmd_ca      =     'b0;
3087
               assign mig_p2_cmd_instr   =     'b0;
3088
               assign mig_p2_cmd_bl      =     'b0;
3089
               assign p1_cmd_empty       =     'b0;
3090
               assign p1_cmd_full        =     'b0;
3091
               assign mig_p3_en       = 'b0;
3092
               assign mig_p3_wr_data  = 'b0;
3093
               assign mig_p3_wr_mask  = 'b0;
3094
               assign mig_p2_en       = 'b0;
3095
 
3096
               assign mig_p2_clk   = 'b0;
3097
               assign mig_p3_clk   = 'b0;
3098
 
3099
               assign p1_rd_data        = 'b0;
3100
               assign p1_wr_count       = 'b0;
3101
               assign p1_rd_count       = 'b0;
3102
               assign p1_wr_empty       = 'b0;
3103
               assign p1_wr_error       = 'b0;
3104
               assign p1_wr_full        = 'b0;
3105
               assign p1_wr_underrun    = 'b0;
3106
               assign p1_rd_overflow    = 'b0;
3107
               assign p1_rd_error       = 'b0;
3108
               assign p1_rd_full        = 'b0;
3109
               assign p1_rd_empty       = 'b0;
3110
 
3111
       end
3112
 
3113
       if (C_PORT_ENABLE[2] == 1'b1)
3114
       begin
3115
               assign mig_p4_arb_en      = p2_arb_en ;
3116
               assign mig_p4_cmd_clk     = p2_cmd_clk  ;
3117
               assign mig_p4_cmd_en      = p2_cmd_en   ;
3118
               assign mig_p4_cmd_ra      = p2_cmd_ra  ;
3119
               assign mig_p4_cmd_ba      = p2_cmd_ba   ;
3120
               assign mig_p4_cmd_ca      = p2_cmd_ca  ;
3121
               assign mig_p4_cmd_instr   = p2_cmd_instr;
3122
               assign mig_p4_cmd_bl      = {(p2_cmd_instr[2] | p2_cmd_bl[5]),p2_cmd_bl[4:0]}   ;
3123
               assign p2_cmd_empty       = mig_p4_cmd_empty ;
3124
               assign p2_cmd_full        = mig_p4_cmd_full  ;
3125
               assign mig_p5_en          = p2_wr_en;
3126
               assign mig_p5_wr_data     = p2_wr_data[31:0];
3127
               assign mig_p5_wr_mask     = p2_wr_mask[3:0];
3128
               assign mig_p4_en          = p2_rd_en;
3129
 
3130
                assign mig_p4_clk        = p2_rd_clk;
3131
                assign mig_p5_clk        = p2_wr_clk;
3132
 
3133
                assign p2_rd_data        = mig_p4_rd_data;
3134
                assign p2_wr_count       = mig_p5_count;
3135
                assign p2_rd_count       = mig_p4_count;
3136
                assign p2_wr_empty       = mig_p5_empty;
3137
                assign p2_wr_full        = mig_p5_full;
3138
                assign p2_wr_error       = mig_p5_error;
3139
                assign p2_wr_underrun    = mig_p5_underrun;
3140
                assign p2_rd_overflow    = mig_p4_overflow;
3141
                assign p2_rd_error       = mig_p4_error;
3142
                assign p2_rd_full        = mig_p4_full;
3143
                assign p2_rd_empty       = mig_p4_empty;
3144
 
3145
       end else
3146
       begin
3147
               assign mig_p4_arb_en      = 'b0;
3148
               assign mig_p4_cmd_clk     = 'b0;
3149
               assign mig_p4_cmd_en      = 'b0;
3150
               assign mig_p4_cmd_ra      = 'b0;
3151
               assign mig_p4_cmd_ba      = 'b0;
3152
               assign mig_p4_cmd_ca      = 'b0;
3153
               assign mig_p4_cmd_instr   = 'b0;
3154
               assign mig_p4_cmd_bl      = 'b0;
3155
               assign p2_cmd_empty       = 'b0;
3156
               assign p2_cmd_full        = 'b0;
3157
               assign mig_p5_en          = 'b0;
3158
               assign mig_p5_wr_data     = 'b0;
3159
               assign mig_p5_wr_mask     = 'b0;
3160
               assign mig_p4_en          = 'b0;
3161
 
3162
                assign mig_p4_clk        = 'b0;
3163
                assign mig_p5_clk        = 'b0;
3164
 
3165
                assign p2_rd_data        =   'b0;
3166
                assign p2_wr_count       =   'b0;
3167
                assign p2_rd_count       =   'b0;
3168
                assign p2_wr_empty       =   'b0;
3169
                assign p2_wr_full        =   'b0;
3170
                assign p2_wr_error       =   'b0;
3171
                assign p2_wr_underrun    =   'b0;
3172
                assign p2_rd_overflow    =   'b0;
3173
                assign p2_rd_error       =   'b0;
3174
                assign p2_rd_full        =   'b0;
3175
                assign p2_rd_empty       =   'b0;
3176
 
3177
       end
3178
 
3179
 
3180
              // MCB's port 1,3,5 is not used in this Config mode
3181
               assign mig_p1_arb_en      =      1'b0;
3182
               assign mig_p1_cmd_clk     =      1'b0;
3183
               assign mig_p1_cmd_en      =      1'b0;
3184
               assign mig_p1_cmd_ra      =      15'd0;
3185
               assign mig_p1_cmd_ba      =      3'd0;
3186
               assign mig_p1_cmd_ca      =      12'd0;
3187
 
3188
               assign mig_p1_cmd_instr   =      3'd0;
3189
               assign mig_p1_cmd_bl      =      6'd0;
3190
 
3191
               assign mig_p3_arb_en    =      1'b0;
3192
               assign mig_p3_cmd_clk     =      1'b0;
3193
               assign mig_p3_cmd_en      =      1'b0;
3194
               assign mig_p3_cmd_ra      =      15'd0;
3195
               assign mig_p3_cmd_ba      =      3'd0;
3196
               assign mig_p3_cmd_ca      =      12'd0;
3197
 
3198
               assign mig_p3_cmd_instr   =      3'd0;
3199
               assign mig_p3_cmd_bl      =      6'd0;
3200
 
3201
               assign mig_p5_arb_en    =      1'b0;
3202
               assign mig_p5_cmd_clk     =      1'b0;
3203
               assign mig_p5_cmd_en      =      1'b0;
3204
               assign mig_p5_cmd_ra      =      15'd0;
3205
               assign mig_p5_cmd_ba      =      3'd0;
3206
               assign mig_p5_cmd_ca      =      12'd0;
3207
 
3208
               assign mig_p5_cmd_instr   =      3'd0;
3209
               assign mig_p5_cmd_bl      =      6'd0;
3210
 
3211
 
3212
 
3213
end else if(C_PORT_CONFIG == "B64_B64" ) begin : u_config_4
3214
 
3215
               // Inputs from Application CMD Port
3216
 
3217
                 if (C_PORT_ENABLE[0] == 1'b1)
3218
                  begin
3219
 
3220
                       assign mig_p0_arb_en      =      p0_arb_en ;
3221
                       assign mig_p1_arb_en      =      p0_arb_en ;
3222
 
3223
                       assign mig_p0_cmd_clk     =      p0_cmd_clk  ;
3224
                       assign mig_p0_cmd_en      =      p0_cmd_en   ;
3225
                       assign mig_p0_cmd_ra      =      p0_cmd_ra  ;
3226
                       assign mig_p0_cmd_ba      =      p0_cmd_ba   ;
3227
                       assign mig_p0_cmd_ca      =      p0_cmd_ca  ;
3228
                       assign mig_p0_cmd_instr   =      p0_cmd_instr;
3229
                       assign mig_p0_cmd_bl      =       {(p0_cmd_instr[2] | p0_cmd_bl[5]),p0_cmd_bl[4:0]}   ;
3230
 
3231
 
3232
                        assign mig_p0_wr_clk   = p0_wr_clk;
3233
                        assign mig_p0_rd_clk   = p0_rd_clk;
3234
                        assign mig_p1_wr_clk   = p0_wr_clk;
3235
                        assign mig_p1_rd_clk   = p0_rd_clk;
3236
 
3237
                        if (C_USR_INTERFACE_MODE == "AXI")
3238
                           assign mig_p0_wr_en    = p0_wr_en ;
3239
                        else
3240
                           assign mig_p0_wr_en    = p0_wr_en & !p0_wr_full;
3241
 
3242
                        if (C_USR_INTERFACE_MODE == "AXI")
3243
                           assign mig_p1_wr_en    = p0_wr_en ;
3244
                        else
3245
                           assign mig_p1_wr_en    = p0_wr_en & !p0_wr_full;
3246
 
3247
 
3248
                        assign mig_p0_wr_data  = p0_wr_data[31:0];
3249
                        assign mig_p0_wr_mask  = p0_wr_mask[3:0];
3250
                        assign mig_p1_wr_data  = p0_wr_data[63 : 32];
3251
                        assign mig_p1_wr_mask  = p0_wr_mask[7 : 4];
3252
 
3253
 
3254
                        if (C_USR_INTERFACE_MODE == "AXI")
3255
                           assign mig_p0_rd_en    = p0_rd_en ;
3256
                        else
3257
                           assign mig_p0_rd_en    = p0_rd_en & !p0_rd_empty;
3258
 
3259
                        if (C_USR_INTERFACE_MODE == "AXI")
3260
                           assign mig_p1_rd_en    = p0_rd_en ;
3261
                        else
3262
                           assign mig_p1_rd_en    = p0_rd_en & !p0_rd_empty;
3263
 
3264
                        assign p0_rd_data     = {mig_p1_rd_data , mig_p0_rd_data};
3265
 
3266
                        assign p0_cmd_empty   =     mig_p0_cmd_empty ;
3267
                        assign p0_cmd_full    =     mig_p0_cmd_full  ;
3268
                        assign p0_wr_empty    = mig_p1_wr_empty;
3269
                        assign p0_wr_full    = mig_p1_wr_full;
3270
                        assign p0_wr_error    = mig_p1_wr_error | mig_p0_wr_error;
3271
                        assign p0_wr_count    = mig_p1_wr_count;
3272
                        assign p0_rd_count    = mig_p1_rd_count;
3273
                        assign p0_wr_underrun = mig_p1_wr_underrun | mig_p0_wr_underrun;
3274
                        assign p0_rd_overflow = mig_p1_rd_overflow | mig_p0_rd_overflow;
3275
                        assign p0_rd_error    = mig_p1_rd_error | mig_p0_rd_error;
3276
                        assign p0_rd_full     = mig_p1_rd_full;
3277
                        assign p0_rd_empty    = mig_p1_rd_empty;
3278
 
3279
 
3280
                 end else
3281
                 begin
3282
                       assign mig_p0_arb_en      =      'b0;
3283
                       assign mig_p0_cmd_clk     =      'b0;
3284
                       assign mig_p0_cmd_en      =      'b0;
3285
                       assign mig_p0_cmd_ra      =      'b0;
3286
                       assign mig_p0_cmd_ba      =      'b0;
3287
                       assign mig_p0_cmd_ca      =      'b0;
3288
                       assign mig_p0_cmd_instr   =      'b0;
3289
                       assign mig_p0_cmd_bl      =      'b0;
3290
 
3291
                        assign mig_p0_wr_clk   = 'b0;
3292
                        assign mig_p0_rd_clk   = 'b0;
3293
                        assign mig_p1_wr_clk   = 'b0;
3294
                        assign mig_p1_rd_clk   = 'b0;
3295
                        assign mig_p0_wr_en    = 'b0;
3296
                        assign mig_p1_wr_en    = 'b0;
3297
                        assign mig_p0_wr_data  = 'b0;
3298
                        assign mig_p0_wr_mask  = 'b0;
3299
                        assign mig_p1_wr_data  = 'b0;
3300
                        assign mig_p1_wr_mask  = 'b0;
3301
                   //     assign mig_p1_wr_en    = 'b0;
3302
                        assign mig_p0_rd_en    = 'b0;
3303
                        assign mig_p1_rd_en    = 'b0;
3304
                        assign p0_rd_data     = 'b0;
3305
 
3306
 
3307
                        assign p0_cmd_empty   = 'b0;
3308
                        assign p0_cmd_full    = 'b0;
3309
                        assign p0_wr_empty    = 'b0;
3310
                        assign p0_wr_full     = 'b0;
3311
                        assign p0_wr_error    = 'b0;
3312
                        assign p0_wr_count    = 'b0;
3313
                        assign p0_rd_count    = 'b0;
3314
                        assign p0_wr_underrun = 'b0;
3315
                        assign p0_rd_overflow = 'b0;
3316
                        assign p0_rd_error    = 'b0;
3317
                        assign p0_rd_full     = 'b0;
3318
                        assign p0_rd_empty    = 'b0;
3319
 
3320
 
3321
                 end
3322
 
3323
 
3324
 
3325
                 if (C_PORT_ENABLE[1] == 1'b1)
3326
                 begin
3327
 
3328
                       assign mig_p2_arb_en      =      p1_arb_en ;
3329
 
3330
                       assign mig_p2_cmd_clk     =      p1_cmd_clk  ;
3331
                       assign mig_p2_cmd_en      =      p1_cmd_en   ;
3332
                       assign mig_p2_cmd_ra      =      p1_cmd_ra  ;
3333
                       assign mig_p2_cmd_ba      =      p1_cmd_ba   ;
3334
                       assign mig_p2_cmd_ca      =      p1_cmd_ca  ;
3335
                       assign mig_p2_cmd_instr   =      p1_cmd_instr;
3336
                       assign mig_p2_cmd_bl      =      {(p1_cmd_instr[2] | p1_cmd_bl[5]),p1_cmd_bl[4:0]}  ;
3337
 
3338
 
3339
                        assign mig_p2_clk     = p1_rd_clk;
3340
                        assign mig_p3_clk     = p1_wr_clk;
3341
                        assign mig_p4_clk     = p1_rd_clk;
3342
                        assign mig_p5_clk     = p1_wr_clk;
3343
 
3344
 
3345
                        if (C_USR_INTERFACE_MODE == "AXI")
3346
                           assign mig_p3_en    = p1_wr_en ;
3347
                        else
3348
                           assign mig_p3_en    = p1_wr_en & !p1_wr_full;
3349
 
3350
                        if (C_USR_INTERFACE_MODE == "AXI")
3351
                           assign mig_p5_en    = p1_wr_en ;
3352
                        else
3353
                           assign mig_p5_en    = p1_wr_en & !p1_wr_full;
3354
 
3355
 
3356
 
3357
 
3358
 
3359
                        assign mig_p3_wr_data  = p1_wr_data[31:0];
3360
                        assign mig_p3_wr_mask  = p1_wr_mask[3:0];
3361
                        assign mig_p5_wr_data  = p1_wr_data[63 : 32];
3362
                        assign mig_p5_wr_mask  = p1_wr_mask[7 : 4];
3363
 
3364
                        if (C_USR_INTERFACE_MODE == "AXI")
3365
                           assign mig_p2_en    = p1_rd_en ;
3366
                        else
3367
                           assign mig_p2_en    = p1_rd_en & !p1_rd_empty;
3368
 
3369
                        if (C_USR_INTERFACE_MODE == "AXI")
3370
                           assign mig_p4_en    = p1_rd_en ;
3371
                        else
3372
                           assign mig_p4_en    = p1_rd_en & !p1_rd_empty;
3373
 
3374
 
3375
                        assign p1_cmd_empty       =      mig_p2_cmd_empty ;
3376
                        assign p1_cmd_full        =      mig_p2_cmd_full  ;
3377
 
3378
                        assign p1_wr_count    = mig_p5_count;
3379
                        assign p1_rd_count    = mig_p4_count;
3380
                        assign p1_wr_full    = mig_p5_full;
3381
                        assign p1_wr_error    = mig_p5_error | mig_p5_error;
3382
                        assign p1_wr_empty    = mig_p5_empty;
3383
                        assign p1_wr_underrun = mig_p3_underrun | mig_p5_underrun;
3384
                        assign p1_rd_overflow = mig_p4_overflow;
3385
                        assign p1_rd_error    = mig_p4_error;
3386
                        assign p1_rd_full     = mig_p4_full;
3387
                        assign p1_rd_empty    = mig_p4_empty;
3388
 
3389
                        assign p1_rd_data     = {mig_p4_rd_data , mig_p2_rd_data};
3390
 
3391
 
3392
                 end else
3393
                 begin
3394
                       assign mig_p2_arb_en      = 'b0;
3395
                   //    assign mig_p3_arb_en      = 'b0;
3396
                  //     assign mig_p4_arb_en      = 'b0;
3397
                  //     assign mig_p5_arb_en      = 'b0;
3398
 
3399
                       assign mig_p2_cmd_clk     = 'b0;
3400
                       assign mig_p2_cmd_en      = 'b0;
3401
                       assign mig_p2_cmd_ra      = 'b0;
3402
                       assign mig_p2_cmd_ba      = 'b0;
3403
                       assign mig_p2_cmd_ca      = 'b0;
3404
                       assign mig_p2_cmd_instr   = 'b0;
3405
                       assign mig_p2_cmd_bl      = 'b0;
3406
                       assign mig_p2_clk      = 'b0;
3407
                       assign mig_p3_clk      = 'b0;
3408
                       assign mig_p4_clk      = 'b0;
3409
                       assign mig_p5_clk      = 'b0;
3410
                       assign mig_p3_en       = 'b0;
3411
                       assign mig_p5_en       = 'b0;
3412
                       assign mig_p3_wr_data  = 'b0;
3413
                       assign mig_p3_wr_mask  = 'b0;
3414
                       assign mig_p5_wr_data  = 'b0;
3415
                       assign mig_p5_wr_mask  = 'b0;
3416
                       assign mig_p2_en    = 'b0;
3417
                       assign mig_p4_en    = 'b0;
3418
                       assign p1_cmd_empty    = 'b0;
3419
                       assign p1_cmd_full     = 'b0;
3420
 
3421
                       assign p1_wr_count    = 'b0;
3422
                       assign p1_rd_count    = 'b0;
3423
                       assign p1_wr_full     = 'b0;
3424
                       assign p1_wr_error    = 'b0;
3425
                       assign p1_wr_empty    = 'b0;
3426
                       assign p1_wr_underrun = 'b0;
3427
                       assign p1_rd_overflow = 'b0;
3428
                       assign p1_rd_error    = 'b0;
3429
                       assign p1_rd_full     = 'b0;
3430
                       assign p1_rd_empty    = 'b0;
3431
                       assign p1_rd_data     = 'b0;
3432
 
3433
                 end
3434
 
3435
                  // unused MCB's signals in this configuration
3436
                       assign mig_p3_arb_en      =      1'b0;
3437
                       assign mig_p4_arb_en      =      1'b0;
3438
                       assign mig_p5_arb_en      =      1'b0;
3439
 
3440
                       assign mig_p3_cmd_clk     =      1'b0;
3441
                       assign mig_p3_cmd_en      =      1'b0;
3442
                       assign mig_p3_cmd_ra      =      15'd0;
3443
                       assign mig_p3_cmd_ba      =      3'd0;
3444
                       assign mig_p3_cmd_ca      =      12'd0;
3445
                       assign mig_p3_cmd_instr   =      3'd0;
3446
 
3447
                       assign mig_p4_cmd_clk     =      1'b0;
3448
                       assign mig_p4_cmd_en      =      1'b0;
3449
                       assign mig_p4_cmd_ra      =      15'd0;
3450
                       assign mig_p4_cmd_ba      =      3'd0;
3451
                       assign mig_p4_cmd_ca      =      12'd0;
3452
                       assign mig_p4_cmd_instr   =      3'd0;
3453
                       assign mig_p4_cmd_bl      =      6'd0;
3454
 
3455
                       assign mig_p5_cmd_clk     =      1'b0;
3456
                       assign mig_p5_cmd_en      =      1'b0;
3457
                       assign mig_p5_cmd_ra      =      15'd0;
3458
                       assign mig_p5_cmd_ba      =      3'd0;
3459
                       assign mig_p5_cmd_ca      =      12'd0;
3460
                       assign mig_p5_cmd_instr   =      3'd0;
3461
                       assign mig_p5_cmd_bl      =      6'd0;
3462
 
3463
 
3464
 
3465
 
3466
  end else if(C_PORT_CONFIG == "B128" ) begin : u_config_5
3467
//*******************************BEGIN OF CONFIG 5 SIGNALS ********************************     
3468
 
3469
               // Inputs from Application CMD Port
3470
 
3471
               assign mig_p0_arb_en      =  p0_arb_en ;
3472
               assign mig_p0_cmd_clk     =  p0_cmd_clk  ;
3473
               assign mig_p0_cmd_en      =  p0_cmd_en   ;
3474
               assign mig_p0_cmd_ra      =  p0_cmd_ra  ;
3475
               assign mig_p0_cmd_ba      =  p0_cmd_ba   ;
3476
               assign mig_p0_cmd_ca      =  p0_cmd_ca  ;
3477
               assign mig_p0_cmd_instr   =  p0_cmd_instr;
3478
               assign mig_p0_cmd_bl      =   {(p0_cmd_instr[2] | p0_cmd_bl[5]),p0_cmd_bl[4:0]}   ;
3479
 
3480
               assign p0_cmd_empty       =      mig_p0_cmd_empty ;
3481
               assign p0_cmd_full        =      mig_p0_cmd_full  ;
3482
 
3483
 
3484
 
3485
                // Inputs from Application User Port
3486
 
3487
                assign mig_p0_wr_clk   = p0_wr_clk;
3488
                assign mig_p0_rd_clk   = p0_rd_clk;
3489
                assign mig_p1_wr_clk   = p0_wr_clk;
3490
                assign mig_p1_rd_clk   = p0_rd_clk;
3491
 
3492
                assign mig_p2_clk   = p0_rd_clk;
3493
                assign mig_p3_clk   = p0_wr_clk;
3494
                assign mig_p4_clk   = p0_rd_clk;
3495
                assign mig_p5_clk   = p0_wr_clk;
3496
 
3497
 
3498
                if (C_USR_INTERFACE_MODE == "AXI") begin
3499
 
3500
                   assign mig_p0_wr_en    = p0_wr_en ;
3501
                   assign mig_p1_wr_en    = p0_wr_en ;
3502
                   assign mig_p3_en       = p0_wr_en ;
3503
                   assign mig_p5_en       = p0_wr_en ;
3504
                   end
3505
                else begin
3506
 
3507
                   assign mig_p0_wr_en    = p0_wr_en & !p0_wr_full;
3508
                   assign mig_p1_wr_en    = p0_wr_en & !p0_wr_full;
3509
                   assign mig_p3_en       = p0_wr_en & !p0_wr_full;
3510
                   assign mig_p5_en       = p0_wr_en & !p0_wr_full;
3511
                end
3512
 
3513
 
3514
 
3515
 
3516
                assign mig_p0_wr_data = p0_wr_data[31:0];
3517
                assign mig_p0_wr_mask = p0_wr_mask[3:0];
3518
                assign mig_p1_wr_data = p0_wr_data[63 : 32];
3519
                assign mig_p1_wr_mask = p0_wr_mask[7 : 4];
3520
                assign mig_p3_wr_data = p0_wr_data[95 : 64];
3521
                assign mig_p3_wr_mask = p0_wr_mask[11 : 8];
3522
                assign mig_p5_wr_data = p0_wr_data[127 : 96];
3523
                assign mig_p5_wr_mask = p0_wr_mask[15 : 12];
3524
 
3525
                if (C_USR_INTERFACE_MODE == "AXI") begin
3526
                    assign mig_p0_rd_en    = p0_rd_en;
3527
                    assign mig_p1_rd_en    = p0_rd_en;
3528
                    assign mig_p2_en       = p0_rd_en;
3529
                    assign mig_p4_en       = p0_rd_en;
3530
                    end
3531
                else begin
3532
                    assign mig_p0_rd_en    = p0_rd_en & !p0_rd_empty;
3533
                    assign mig_p1_rd_en    = p0_rd_en & !p0_rd_empty;
3534
                    assign mig_p2_en       = p0_rd_en & !p0_rd_empty;
3535
                    assign mig_p4_en       = p0_rd_en & !p0_rd_empty;
3536
                end
3537
 
3538
                // outputs to Applications User Port
3539
                assign p0_rd_data     = {mig_p4_rd_data , mig_p2_rd_data , mig_p1_rd_data , mig_p0_rd_data};
3540
                assign p0_rd_empty    = mig_p4_empty;
3541
                assign p0_rd_full     = mig_p4_full;
3542
                assign p0_rd_error    = mig_p0_rd_error | mig_p1_rd_error | mig_p2_error | mig_p4_error;
3543
                assign p0_rd_overflow    = mig_p0_rd_overflow | mig_p1_rd_overflow | mig_p2_overflow | mig_p4_overflow;
3544
 
3545
                assign p0_wr_underrun    = mig_p0_wr_underrun | mig_p1_wr_underrun | mig_p3_underrun | mig_p5_underrun;
3546
                assign p0_wr_empty    = mig_p5_empty;
3547
                assign p0_wr_full     = mig_p5_full;
3548
                assign p0_wr_error    = mig_p0_wr_error | mig_p1_wr_error | mig_p3_error | mig_p5_error;
3549
 
3550
                assign p0_wr_count    = mig_p5_count;
3551
                assign p0_rd_count    = mig_p4_count;
3552
 
3553
 
3554
               // unused MCB's siganls in this configuration
3555
 
3556
               assign mig_p1_arb_en      =      1'b0;
3557
               assign mig_p1_cmd_clk     =      1'b0;
3558
               assign mig_p1_cmd_en      =      1'b0;
3559
               assign mig_p1_cmd_ra      =      15'd0;
3560
               assign mig_p1_cmd_ba      =      3'd0;
3561
               assign mig_p1_cmd_ca      =      12'd0;
3562
 
3563
               assign mig_p1_cmd_instr   =      3'd0;
3564
               assign mig_p1_cmd_bl      =      6'd0;
3565
 
3566
               assign mig_p2_arb_en    =      1'b0;
3567
               assign mig_p2_cmd_clk     =      1'b0;
3568
               assign mig_p2_cmd_en      =      1'b0;
3569
               assign mig_p2_cmd_ra      =      15'd0;
3570
               assign mig_p2_cmd_ba      =      3'd0;
3571
               assign mig_p2_cmd_ca      =      12'd0;
3572
 
3573
               assign mig_p2_cmd_instr   =      3'd0;
3574
               assign mig_p2_cmd_bl      =      6'd0;
3575
 
3576
               assign mig_p3_arb_en    =      1'b0;
3577
               assign mig_p3_cmd_clk     =      1'b0;
3578
               assign mig_p3_cmd_en      =      1'b0;
3579
               assign mig_p3_cmd_ra      =      15'd0;
3580
               assign mig_p3_cmd_ba      =      3'd0;
3581
               assign mig_p3_cmd_ca      =      12'd0;
3582
 
3583
               assign mig_p3_cmd_instr   =      3'd0;
3584
               assign mig_p3_cmd_bl      =      6'd0;
3585
 
3586
               assign mig_p4_arb_en    =      1'b0;
3587
               assign mig_p4_cmd_clk     =      1'b0;
3588
               assign mig_p4_cmd_en      =      1'b0;
3589
               assign mig_p4_cmd_ra      =      15'd0;
3590
               assign mig_p4_cmd_ba      =      3'd0;
3591
               assign mig_p4_cmd_ca      =      12'd0;
3592
 
3593
               assign mig_p4_cmd_instr   =      3'd0;
3594
               assign mig_p4_cmd_bl      =      6'd0;
3595
 
3596
               assign mig_p5_arb_en    =      1'b0;
3597
               assign mig_p5_cmd_clk     =      1'b0;
3598
               assign mig_p5_cmd_en      =      1'b0;
3599
               assign mig_p5_cmd_ra      =      15'd0;
3600
               assign mig_p5_cmd_ba      =      3'd0;
3601
               assign mig_p5_cmd_ca      =      12'd0;
3602
 
3603
               assign mig_p5_cmd_instr   =      3'd0;
3604
               assign mig_p5_cmd_bl      =      6'd0;
3605
 
3606
//*******************************END OF CONFIG 5 SIGNALS ********************************     
3607
 
3608
end
3609
endgenerate
3610
 
3611
   MCB
3612
   # (         .PORT_CONFIG             (C_PORT_CONFIG),
3613
               .MEM_WIDTH              (C_NUM_DQ_PINS    ),
3614
               .MEM_TYPE                (C_MEM_TYPE       ),
3615
               .MEM_BURST_LEN            (C_MEM_BURST_LEN  ),
3616
               .MEM_ADDR_ORDER           (C_MEM_ADDR_ORDER),
3617
               .MEM_CAS_LATENCY          (C_MEM_CAS_LATENCY),
3618
               .MEM_DDR3_CAS_LATENCY      (C_MEM_DDR3_CAS_LATENCY   ),
3619
               .MEM_DDR2_WRT_RECOVERY     (C_MEM_DDR2_WRT_RECOVERY  ),
3620
               .MEM_DDR3_WRT_RECOVERY     (C_MEM_DDR3_WRT_RECOVERY  ),
3621
               .MEM_MOBILE_PA_SR          (C_MEM_MOBILE_PA_SR       ),
3622
               .MEM_DDR1_2_ODS              (C_MEM_DDR1_2_ODS         ),
3623
               .MEM_DDR3_ODS                (C_MEM_DDR3_ODS           ),
3624
               .MEM_DDR2_RTT                (C_MEM_DDR2_RTT           ),
3625
               .MEM_DDR3_RTT                (C_MEM_DDR3_RTT           ),
3626
               .MEM_DDR3_ADD_LATENCY        (C_MEM_DDR3_ADD_LATENCY   ),
3627
               .MEM_DDR2_ADD_LATENCY        (C_MEM_DDR2_ADD_LATENCY   ),
3628
               .MEM_MOBILE_TC_SR            (C_MEM_MOBILE_TC_SR       ),
3629
               .MEM_MDDR_ODS                (C_MEM_MDDR_ODS           ),
3630
               .MEM_DDR2_DIFF_DQS_EN        (C_MEM_DDR2_DIFF_DQS_EN   ),
3631
               .MEM_DDR2_3_PA_SR            (C_MEM_DDR2_3_PA_SR       ),
3632
               .MEM_DDR3_CAS_WR_LATENCY    (C_MEM_DDR3_CAS_WR_LATENCY),
3633
               .MEM_DDR3_AUTO_SR           (C_MEM_DDR3_AUTO_SR       ),
3634
               .MEM_DDR2_3_HIGH_TEMP_SR    (C_MEM_DDR2_3_HIGH_TEMP_SR),
3635
               .MEM_DDR3_DYN_WRT_ODT       (C_MEM_DDR3_DYN_WRT_ODT   ),
3636
               .MEM_RA_SIZE               (C_MEM_ADDR_WIDTH            ),
3637
               .MEM_BA_SIZE               (C_MEM_BANKADDR_WIDTH            ),
3638
               .MEM_CA_SIZE               (C_MEM_NUM_COL_BITS            ),
3639
               .MEM_RAS_VAL               (MEM_RAS_VAL            ),
3640
               .MEM_RCD_VAL               (MEM_RCD_VAL            ),
3641
               .MEM_REFI_VAL               (MEM_REFI_VAL           ),
3642
               .MEM_RFC_VAL               (MEM_RFC_VAL            ),
3643
               .MEM_RP_VAL                (MEM_RP_VAL             ),
3644
               .MEM_WR_VAL                (MEM_WR_VAL             ),
3645
               .MEM_RTP_VAL               (MEM_RTP_VAL            ),
3646
               .MEM_WTR_VAL               (MEM_WTR_VAL            ),
3647
               .CAL_BYPASS        (C_MC_CALIB_BYPASS),
3648
               .CAL_RA            (C_MC_CALIBRATION_RA),
3649
               .CAL_BA            (C_MC_CALIBRATION_BA ),
3650
               .CAL_CA            (C_MC_CALIBRATION_CA),
3651
               .CAL_CLK_DIV        (C_MC_CALIBRATION_CLK_DIV),
3652
               .CAL_DELAY         (C_MC_CALIBRATION_DELAY),
3653
               .ARB_NUM_TIME_SLOTS         (C_ARB_NUM_TIME_SLOTS),
3654
               .ARB_TIME_SLOT_0            (arbtimeslot0 )     ,
3655
               .ARB_TIME_SLOT_1            (arbtimeslot1 )     ,
3656
               .ARB_TIME_SLOT_2            (arbtimeslot2 )     ,
3657
               .ARB_TIME_SLOT_3            (arbtimeslot3 )     ,
3658
               .ARB_TIME_SLOT_4            (arbtimeslot4 )     ,
3659
               .ARB_TIME_SLOT_5            (arbtimeslot5 )     ,
3660
               .ARB_TIME_SLOT_6            (arbtimeslot6 )     ,
3661
               .ARB_TIME_SLOT_7            (arbtimeslot7 )     ,
3662
               .ARB_TIME_SLOT_8            (arbtimeslot8 )     ,
3663
               .ARB_TIME_SLOT_9            (arbtimeslot9 )     ,
3664
               .ARB_TIME_SLOT_10           (arbtimeslot10)   ,
3665
               .ARB_TIME_SLOT_11           (arbtimeslot11)
3666
             )  samc_0
3667
     (
3668
 
3669
             // HIGH-SPEED PLL clock interface
3670
 
3671
             .PLLCLK            ({ioclk90,ioclk0}),
3672
             .PLLCE              ({pll_ce_90,pll_ce_0})       ,
3673
 
3674
             .PLLLOCK       (1'b1),
3675
 
3676
             // DQS CLOCK NETWork interface
3677
 
3678
             .DQSIOIN           (idelay_dqs_ioi_s),
3679
             .DQSIOIP           (idelay_dqs_ioi_m),
3680
             .UDQSIOIN          (idelay_udqs_ioi_s),
3681
             .UDQSIOIP          (idelay_udqs_ioi_m),
3682
 
3683
 
3684
               //.DQSPIN    (in_pre_dqsp),
3685
               .DQI       (in_dq),
3686
             // RESETS - GLOBAl & local
3687
             .SYSRST         (MCB_SYSRST ),
3688
 
3689
            // command port 0
3690
             .P0ARBEN            (mig_p0_arb_en),
3691
             .P0CMDCLK           (mig_p0_cmd_clk),
3692
             .P0CMDEN            (mig_p0_cmd_en),
3693
             .P0CMDRA            (mig_p0_cmd_ra),
3694
             .P0CMDBA            (mig_p0_cmd_ba),
3695
             .P0CMDCA            (mig_p0_cmd_ca),
3696
 
3697
             .P0CMDINSTR         (mig_p0_cmd_instr),
3698
             .P0CMDBL            (mig_p0_cmd_bl),
3699
             .P0CMDEMPTY         (mig_p0_cmd_empty),
3700
             .P0CMDFULL          (mig_p0_cmd_full),
3701
 
3702
             // command port 1 
3703
 
3704
             .P1ARBEN            (mig_p1_arb_en),
3705
             .P1CMDCLK           (mig_p1_cmd_clk),
3706
             .P1CMDEN            (mig_p1_cmd_en),
3707
             .P1CMDRA            (mig_p1_cmd_ra),
3708
             .P1CMDBA            (mig_p1_cmd_ba),
3709
             .P1CMDCA            (mig_p1_cmd_ca),
3710
 
3711
             .P1CMDINSTR         (mig_p1_cmd_instr),
3712
             .P1CMDBL            (mig_p1_cmd_bl),
3713
             .P1CMDEMPTY         (mig_p1_cmd_empty),
3714
             .P1CMDFULL          (mig_p1_cmd_full),
3715
 
3716
             // command port 2
3717
 
3718
             .P2ARBEN            (mig_p2_arb_en),
3719
             .P2CMDCLK           (mig_p2_cmd_clk),
3720
             .P2CMDEN            (mig_p2_cmd_en),
3721
             .P2CMDRA            (mig_p2_cmd_ra),
3722
             .P2CMDBA            (mig_p2_cmd_ba),
3723
             .P2CMDCA            (mig_p2_cmd_ca),
3724
 
3725
             .P2CMDINSTR         (mig_p2_cmd_instr),
3726
             .P2CMDBL            (mig_p2_cmd_bl),
3727
             .P2CMDEMPTY         (mig_p2_cmd_empty),
3728
             .P2CMDFULL          (mig_p2_cmd_full),
3729
 
3730
             // command port 3
3731
 
3732
             .P3ARBEN            (mig_p3_arb_en),
3733
             .P3CMDCLK           (mig_p3_cmd_clk),
3734
             .P3CMDEN            (mig_p3_cmd_en),
3735
             .P3CMDRA            (mig_p3_cmd_ra),
3736
             .P3CMDBA            (mig_p3_cmd_ba),
3737
             .P3CMDCA            (mig_p3_cmd_ca),
3738
 
3739
             .P3CMDINSTR         (mig_p3_cmd_instr),
3740
             .P3CMDBL            (mig_p3_cmd_bl),
3741
             .P3CMDEMPTY         (mig_p3_cmd_empty),
3742
             .P3CMDFULL          (mig_p3_cmd_full),
3743
 
3744
             // command port 4  // don't care in config 2
3745
 
3746
             .P4ARBEN            (mig_p4_arb_en),
3747
             .P4CMDCLK           (mig_p4_cmd_clk),
3748
             .P4CMDEN            (mig_p4_cmd_en),
3749
             .P4CMDRA            (mig_p4_cmd_ra),
3750
             .P4CMDBA            (mig_p4_cmd_ba),
3751
             .P4CMDCA            (mig_p4_cmd_ca),
3752
 
3753
             .P4CMDINSTR         (mig_p4_cmd_instr),
3754
             .P4CMDBL            (mig_p4_cmd_bl),
3755
             .P4CMDEMPTY         (mig_p4_cmd_empty),
3756
             .P4CMDFULL          (mig_p4_cmd_full),
3757
 
3758
             // command port 5 // don't care in config 2
3759
 
3760
             .P5ARBEN            (mig_p5_arb_en),
3761
             .P5CMDCLK           (mig_p5_cmd_clk),
3762
             .P5CMDEN            (mig_p5_cmd_en),
3763
             .P5CMDRA            (mig_p5_cmd_ra),
3764
             .P5CMDBA            (mig_p5_cmd_ba),
3765
             .P5CMDCA            (mig_p5_cmd_ca),
3766
 
3767
             .P5CMDINSTR         (mig_p5_cmd_instr),
3768
             .P5CMDBL            (mig_p5_cmd_bl),
3769
             .P5CMDEMPTY         (mig_p5_cmd_empty),
3770
             .P5CMDFULL          (mig_p5_cmd_full),
3771
 
3772
 
3773
             // IOI & IOB SIGNals/tristate interface
3774
 
3775
             .DQIOWEN0        (dqIO_w_en_0),
3776
             .DQSIOWEN90P     (dqsIO_w_en_90_p),
3777
             .DQSIOWEN90N     (dqsIO_w_en_90_n),
3778
 
3779
 
3780
             // IOB MEMORY INTerface signals
3781
             .ADDR         (address_90),
3782
             .BA           (ba_90 ),
3783
             .RAS         (ras_90 ),
3784
             .CAS         (cas_90 ),
3785
             .WE          (we_90  ),
3786
             .CKE          (cke_90 ),
3787
             .ODT          (odt_90 ),
3788
             .RST          (rst_90 ),
3789
 
3790
             // CALIBRATION DRP interface
3791
             .IOIDRPCLK           (ioi_drp_clk    ),
3792
             .IOIDRPADDR          (ioi_drp_addr   ),
3793
             .IOIDRPSDO           (ioi_drp_sdo    ),
3794
             .IOIDRPSDI           (ioi_drp_sdi    ),
3795
             .IOIDRPCS            (ioi_drp_cs     ),
3796
             .IOIDRPADD           (ioi_drp_add    ),
3797
             .IOIDRPBROADCAST     (ioi_drp_broadcast  ),
3798
             .IOIDRPTRAIN         (ioi_drp_train    ),
3799
             .IOIDRPUPDATE         (ioi_drp_update) ,
3800
 
3801
             // CALIBRATION DAtacapture interface
3802
             //SPECIAL COMMANDs
3803
             .RECAL               (mcb_recal    ),
3804
             .UIREAD               (mcb_ui_read),
3805
             .UIADD                (mcb_ui_add)    ,
3806
             .UICS                 (mcb_ui_cs)     ,
3807
             .UICLK                (mcb_ui_clk)    ,
3808
             .UISDI                (mcb_ui_sdi)    ,
3809
             .UIADDR               (mcb_ui_addr)   ,
3810
             .UIBROADCAST          (mcb_ui_broadcast) ,
3811
             .UIDRPUPDATE          (mcb_ui_drp_update) ,
3812
             .UIDONECAL            (mcb_ui_done_cal)   ,
3813
             .UICMD                (mcb_ui_cmd),
3814
             .UICMDIN              (mcb_ui_cmd_in)     ,
3815
             .UICMDEN              (mcb_ui_cmd_en)     ,
3816
             .UIDQCOUNT            (mcb_ui_dqcount)    ,
3817
             .UIDQLOWERDEC          (mcb_ui_dq_lower_dec),
3818
             .UIDQLOWERINC          (mcb_ui_dq_lower_inc),
3819
             .UIDQUPPERDEC          (mcb_ui_dq_upper_dec),
3820
             .UIDQUPPERINC          (mcb_ui_dq_upper_inc),
3821
             .UIUDQSDEC          (mcb_ui_udqs_dec),
3822
             .UIUDQSINC          (mcb_ui_udqs_inc),
3823
             .UILDQSDEC          (mcb_ui_ldqs_dec),
3824
             .UILDQSINC          (mcb_ui_ldqs_inc),
3825
             .UODATA             (uo_data),
3826
             .UODATAVALID          (uo_data_valid),
3827
             .UODONECAL            (hard_done_cal)  ,
3828
             .UOCMDREADYIN         (uo_cmd_ready_in),
3829
             .UOREFRSHFLAG         (uo_refrsh_flag),
3830
             .UOCALSTART           (uo_cal_start)   ,
3831
             .UOSDO                (uo_sdo),
3832
 
3833
             //CONTROL SIGNALS
3834
              .STATUS                    (status),
3835
              .SELFREFRESHENTER          (selfrefresh_mcb_enter  ),
3836
              .SELFREFRESHMODE           (selfrefresh_mcb_mode ),
3837
//////////////////////////////  //////////////////
3838
//MUIs
3839
////////////////////////////////////////////////
3840
 
3841
              .P0RDDATA         ( mig_p0_rd_data[31:0]    ),
3842
              .P1RDDATA         ( mig_p1_rd_data[31:0]   ),
3843
              .P2RDDATA         ( mig_p2_rd_data[31:0]  ),
3844
              .P3RDDATA         ( mig_p3_rd_data[31:0]       ),
3845
              .P4RDDATA         ( mig_p4_rd_data[31:0] ),
3846
              .P5RDDATA         ( mig_p5_rd_data[31:0]        ),
3847
              .LDMN             ( dqnlm       ),
3848
              .UDMN             ( dqnum       ),
3849
              .DQON             ( dqo_n       ),
3850
              .DQOP             ( dqo_p       ),
3851
              .LDMP             ( dqplm       ),
3852
              .UDMP             ( dqpum       ),
3853
 
3854
              .P0RDCOUNT          ( mig_p0_rd_count ),
3855
              .P0WRCOUNT          ( mig_p0_wr_count ),
3856
              .P1RDCOUNT          ( mig_p1_rd_count ),
3857
              .P1WRCOUNT          ( mig_p1_wr_count ),
3858
              .P2COUNT           ( mig_p2_count  ),
3859
              .P3COUNT           ( mig_p3_count  ),
3860
              .P4COUNT           ( mig_p4_count  ),
3861
              .P5COUNT           ( mig_p5_count  ),
3862
 
3863
              // NEW ADDED FIFo status siganls
3864
              // MIG USER PORT 0
3865
              .P0RDEMPTY        ( mig_p0_rd_empty),
3866
              .P0RDFULL         ( mig_p0_rd_full),
3867
              .P0RDOVERFLOW     ( mig_p0_rd_overflow),
3868
              .P0WREMPTY        ( mig_p0_wr_empty),
3869
              .P0WRFULL         ( mig_p0_wr_full),
3870
              .P0WRUNDERRUN     ( mig_p0_wr_underrun),
3871
              // MIG USER PORT 1
3872
              .P1RDEMPTY        ( mig_p1_rd_empty),
3873
              .P1RDFULL         ( mig_p1_rd_full),
3874
              .P1RDOVERFLOW     ( mig_p1_rd_overflow),
3875
              .P1WREMPTY        ( mig_p1_wr_empty),
3876
              .P1WRFULL         ( mig_p1_wr_full),
3877
              .P1WRUNDERRUN     ( mig_p1_wr_underrun),
3878
 
3879
              // MIG USER PORT 2
3880
              .P2EMPTY          ( mig_p2_empty),
3881
              .P2FULL           ( mig_p2_full),
3882
              .P2RDOVERFLOW        ( mig_p2_overflow),
3883
              .P2WRUNDERRUN       ( mig_p2_underrun),
3884
 
3885
              .P3EMPTY          ( mig_p3_empty ),
3886
              .P3FULL           ( mig_p3_full ),
3887
              .P3RDOVERFLOW        ( mig_p3_overflow),
3888
              .P3WRUNDERRUN       ( mig_p3_underrun ),
3889
              // MIG USER PORT 3
3890
              .P4EMPTY          ( mig_p4_empty),
3891
              .P4FULL           ( mig_p4_full),
3892
              .P4RDOVERFLOW        ( mig_p4_overflow),
3893
              .P4WRUNDERRUN       ( mig_p4_underrun),
3894
 
3895
              .P5EMPTY          ( mig_p5_empty ),
3896
              .P5FULL           ( mig_p5_full ),
3897
              .P5RDOVERFLOW        ( mig_p5_overflow),
3898
              .P5WRUNDERRUN       ( mig_p5_underrun),
3899
 
3900
              ////////////////////////////////////////////////////////-
3901
              .P0WREN        ( mig_p0_wr_en),
3902
              .P0RDEN        ( mig_p0_rd_en),
3903
              .P1WREN        ( mig_p1_wr_en),
3904
              .P1RDEN        ( mig_p1_rd_en),
3905
              .P2EN          ( mig_p2_en),
3906
              .P3EN          ( mig_p3_en),
3907
              .P4EN          ( mig_p4_en),
3908
              .P5EN          ( mig_p5_en),
3909
              // WRITE  MASK BIts connection
3910
              .P0RWRMASK        ( mig_p0_wr_mask[3:0]),
3911
              .P1RWRMASK        ( mig_p1_wr_mask[3:0]),
3912
              .P2WRMASK        ( mig_p2_wr_mask[3:0]),
3913
              .P3WRMASK        ( mig_p3_wr_mask[3:0]),
3914
              .P4WRMASK        ( mig_p4_wr_mask[3:0]),
3915
              .P5WRMASK        ( mig_p5_wr_mask[3:0]),
3916
              // DATA WRITE COnnection
3917
              .P0WRDATA      ( mig_p0_wr_data[31:0]),
3918
              .P1WRDATA      ( mig_p1_wr_data[31:0]),
3919
              .P2WRDATA      ( mig_p2_wr_data[31:0]),
3920
              .P3WRDATA      ( mig_p3_wr_data[31:0]),
3921
              .P4WRDATA      ( mig_p4_wr_data[31:0]),
3922
              .P5WRDATA      ( mig_p5_wr_data[31:0]),
3923
 
3924
              .P0WRERROR     (mig_p0_wr_error),
3925
              .P1WRERROR     (mig_p1_wr_error),
3926
              .P0RDERROR     (mig_p0_rd_error),
3927
              .P1RDERROR     (mig_p1_rd_error),
3928
 
3929
              .P2ERROR       (mig_p2_error),
3930
              .P3ERROR       (mig_p3_error),
3931
              .P4ERROR       (mig_p4_error),
3932
              .P5ERROR       (mig_p5_error),
3933
 
3934
              //  USER SIDE DAta ports clock
3935
              //  128 BITS CONnections
3936
              .P0WRCLK            ( mig_p0_wr_clk  ),
3937
              .P1WRCLK            ( mig_p1_wr_clk  ),
3938
              .P0RDCLK            ( mig_p0_rd_clk  ),
3939
              .P1RDCLK            ( mig_p1_rd_clk  ),
3940
              .P2CLK              ( mig_p2_clk  ),
3941
              .P3CLK              ( mig_p3_clk  ),
3942
              .P4CLK              ( mig_p4_clk  ),
3943
              .P5CLK              ( mig_p5_clk)
3944
              ////////////////////////////////////////////////////////
3945
              // TST MODE PINS
3946
 
3947
 
3948
 
3949
              );
3950
 
3951
 
3952
//////////////////////////////////////////////////////
3953
// Input Termination Calibration
3954
//////////////////////////////////////////////////////
3955
wire                          DONE_SOFTANDHARD_CAL;
3956
 
3957
assign uo_done_cal = (   C_CALIB_SOFT_IP == "TRUE") ? DONE_SOFTANDHARD_CAL : hard_done_cal;
3958
generate
3959
if ( C_CALIB_SOFT_IP == "TRUE") begin: gen_term_calib
3960
 
3961
 
3962
 
3963
 
3964
 
3965
mcb_soft_calibration_top  # (
3966
 
3967
    .C_MEM_TZQINIT_MAXCNT (C_MEM_TZQINIT_MAXCNT),
3968
    .C_MC_CALIBRATION_MODE(C_MC_CALIBRATION_MODE),
3969
    .SKIP_IN_TERM_CAL     (C_SKIP_IN_TERM_CAL),
3970
    .SKIP_DYNAMIC_CAL     (C_SKIP_DYNAMIC_CAL),
3971
    .SKIP_DYN_IN_TERM     (C_SKIP_DYN_IN_TERM),
3972
    .C_SIMULATION         (C_SIMULATION),
3973
    .C_MEM_TYPE           (C_MEM_TYPE)
3974
        )
3975
  mcb_soft_calibration_top_inst (
3976
    .UI_CLK               (ui_clk),               //Input - global clock to be used for input_term_tuner and IODRP clock
3977
    .RST                  (int_sys_rst),              //Input - reset for input_term_tuner - synchronous for input_term_tuner state machine, asynch for IODRP (sub)controller
3978
    .IOCLK                (ioclk0),               //Input - IOCLK input to the IODRP's
3979
    .DONE_SOFTANDHARD_CAL (DONE_SOFTANDHARD_CAL), // active high flag signals soft calibration of input delays is complete and MCB_UODONECAL is high (MCB hard calib complete)
3980
    .PLL_LOCK             (gated_pll_lock),
3981
 
3982
    .SELFREFRESH_REQ      (soft_cal_selfrefresh_req),    // from user app
3983
    .SELFREFRESH_MCB_MODE (selfrefresh_mcb_mode), // from MCB
3984
    .SELFREFRESH_MCB_REQ  (selfrefresh_mcb_enter),// to mcb
3985
    .SELFREFRESH_MODE     (selfrefresh_mode),     // to user app
3986
 
3987
 
3988
 
3989
    .MCB_UIADD            (mcb_ui_add),
3990
    .MCB_UISDI            (mcb_ui_sdi),
3991
    .MCB_UOSDO            (uo_sdo),               // from MCB's UOSDO port (User output SDO)
3992
    .MCB_UODONECAL        (hard_done_cal),        // input for when MCB hard calibration process is complete
3993
    .MCB_UOREFRSHFLAG     (uo_refrsh_flag),       //high during refresh cycle and time when MCB is innactive
3994
    .MCB_UICS             (mcb_ui_cs),            // to MCB's UICS port (User Input CS)
3995
    .MCB_UIDRPUPDATE      (mcb_ui_drp_update),    // MCB's UIDRPUPDATE port (gets passed to IODRP2_MCB's MEMUPDATE port: this controls shadow latch used during IODRP2_MCB writes).  Currently just trasnparent
3996
    .MCB_UIBROADCAST      (mcb_ui_broadcast),     // to MCB's UIBROADCAST port (User Input BROADCAST - gets passed to IODRP2_MCB's BKST port)
3997
    .MCB_UIADDR           (mcb_ui_addr),          //to MCB's UIADDR port (gets passed to IODRP2_MCB's AUXADDR port
3998
    .MCB_UICMDEN          (mcb_ui_cmd_en),        //set to take control of UI interface - removes control from internal calib block
3999
    .MCB_UIDONECAL        (mcb_ui_done_cal),      //
4000
    .MCB_UIDQLOWERDEC     (mcb_ui_dq_lower_dec),
4001
    .MCB_UIDQLOWERINC     (mcb_ui_dq_lower_inc),
4002
    .MCB_UIDQUPPERDEC     (mcb_ui_dq_upper_dec),
4003
    .MCB_UIDQUPPERINC     (mcb_ui_dq_upper_inc),
4004
    .MCB_UILDQSDEC        (mcb_ui_ldqs_dec),
4005
    .MCB_UILDQSINC        (mcb_ui_ldqs_inc),
4006
    .MCB_UIREAD           (mcb_ui_read),          //enables read w/o writing by turning on a SDO->SDI loopback inside the IODRP2_MCBs (doesn't exist in regular IODRP2).  IODRPCTRLR_R_WB becomes don't-care.
4007
    .MCB_UIUDQSDEC        (mcb_ui_udqs_dec),
4008
    .MCB_UIUDQSINC        (mcb_ui_udqs_inc),
4009
    .MCB_RECAL            (mcb_recal),
4010
    .MCB_SYSRST           (MCB_SYSRST),           //drives the MCB's SYSRST pin - the main reset for MCB
4011
    .MCB_UICMD            (mcb_ui_cmd),
4012
    .MCB_UICMDIN          (mcb_ui_cmd_in),
4013
    .MCB_UIDQCOUNT        (mcb_ui_dqcount),
4014
    .MCB_UODATA           (uo_data),
4015
    .MCB_UODATAVALID      (uo_data_valid),
4016
    .MCB_UOCMDREADY       (uo_cmd_ready_in),
4017
    .MCB_UO_CAL_START     (uo_cal_start),
4018
    .RZQ_Pin              (rzq),
4019
    .ZIO_Pin              (zio),
4020
    .CKE_Train            (cke_train)
4021
 
4022
     );
4023
 
4024
 
4025
 
4026
 
4027
 
4028
 
4029
        assign mcb_ui_clk = ui_clk;
4030
end
4031
endgenerate
4032
 
4033
generate
4034
if ( C_CALIB_SOFT_IP != "TRUE") begin: gen_no_term_calib
4035
    assign DONE_SOFTANDHARD_CAL = 1'b0;
4036
    assign MCB_SYSRST = int_sys_rst | (~wait_200us_counter[15]);
4037
    assign mcb_recal = calib_recal;
4038
    assign mcb_ui_read = ui_read;
4039
    assign mcb_ui_add = ui_add;
4040
    assign mcb_ui_cs = ui_cs;
4041
    assign mcb_ui_clk = ui_clk;
4042
    assign mcb_ui_sdi = ui_sdi;
4043
    assign mcb_ui_addr = ui_addr;
4044
    assign mcb_ui_broadcast = ui_broadcast;
4045
    assign mcb_ui_drp_update = ui_drp_update;
4046
    assign mcb_ui_done_cal = ui_done_cal;
4047
    assign mcb_ui_cmd = ui_cmd;
4048
    assign mcb_ui_cmd_in = ui_cmd_in;
4049
    assign mcb_ui_cmd_en = ui_cmd_en;
4050
    assign mcb_ui_dq_lower_dec = ui_dq_lower_dec;
4051
    assign mcb_ui_dq_lower_inc = ui_dq_lower_inc;
4052
    assign mcb_ui_dq_upper_dec = ui_dq_upper_dec;
4053
    assign mcb_ui_dq_upper_inc = ui_dq_upper_inc;
4054
    assign mcb_ui_udqs_inc = ui_udqs_inc;
4055
    assign mcb_ui_udqs_dec = ui_udqs_dec;
4056
    assign mcb_ui_ldqs_inc = ui_ldqs_inc;
4057
    assign mcb_ui_ldqs_dec = ui_ldqs_dec;
4058
    assign selfrefresh_mode = 1'b0;
4059
 
4060
    if (C_SIMULATION == "FALSE") begin: init_sequence
4061
        always @ (posedge ui_clk, posedge int_sys_rst)
4062
        begin
4063
            if (int_sys_rst)
4064
                wait_200us_counter <= 'b0;
4065
            else
4066
               if (wait_200us_counter[15])  // UI_CLK maximum is up to 100 MHz.
4067
                   wait_200us_counter <= wait_200us_counter                        ;
4068
               else
4069
                   wait_200us_counter <= wait_200us_counter + 1'b1;
4070
        end
4071
    end
4072
    else begin: init_sequence_skip
4073
// synthesis translate_off        
4074
        initial
4075
        begin
4076
           wait_200us_counter = 16'hFFFF;
4077
           $display("The 200 us wait period required before CKE goes active has been skipped in Simulation\n");
4078
        end
4079
// synthesis translate_on         
4080
    end
4081
 
4082
 
4083
    if( C_MEM_TYPE == "DDR2") begin : gen_cketrain_a
4084
 
4085
        always @ ( posedge ui_clk)
4086
        begin
4087
          // When wait_200us_[13] and wait_200us_[14] are both asserted,
4088
          // 200 us wait should have been passed. 
4089
          if (wait_200us_counter[14] && wait_200us_counter[13])
4090
             wait_200us_done_r1 <= 1'b1;
4091
          else
4092
             wait_200us_done_r1 <= 1'b0;
4093
 
4094
 
4095
          wait_200us_done_r2 <= wait_200us_done_r1;
4096
        end
4097
 
4098
        always @ ( posedge ui_clk, posedge int_sys_rst)
4099
        begin
4100
        if (int_sys_rst)
4101
           cke_train_reg <= 1'b0;
4102
        else
4103
           if ( wait_200us_done_r1 && ~wait_200us_done_r2 )
4104
               cke_train_reg <= 1'b1;
4105
           else if ( uo_done_cal)
4106
               cke_train_reg <= 1'b0;
4107
        end
4108
 
4109
        assign cke_train = cke_train_reg;
4110
    end
4111
 
4112
    if( C_MEM_TYPE != "DDR2") begin : gen_cketrain_b
4113
 
4114
        assign cke_train = 1'b0;
4115
    end
4116
 
4117
 
4118
end
4119
endgenerate
4120
 
4121
//////////////////////////////////////////////////////
4122
//ODDRDES2 instantiations
4123
//////////////////////////////////////////////////////
4124
 
4125
////////
4126
//ADDR
4127
////////
4128
 
4129
genvar addr_ioi;
4130
   generate
4131
      for(addr_ioi = 0; addr_ioi < C_MEM_ADDR_WIDTH; addr_ioi = addr_ioi + 1) begin : gen_addr_oserdes2
4132
OSERDES2 #(
4133
  .BYPASS_GCLK_FF ("TRUE"),
4134
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4135
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4136
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4137
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4138
  .DATA_WIDTH    (2)           // {1..8} 
4139
) ioi_addr_0
4140
(
4141
  .OQ(ioi_addr[addr_ioi]),
4142
  .SHIFTOUT1(),
4143
  .SHIFTOUT2(),
4144
  .SHIFTOUT3(),
4145
  .SHIFTOUT4(),
4146
  .TQ(t_addr[addr_ioi]),
4147
  .CLK0(ioclk0),
4148
  .CLK1(1'b0),
4149
  .CLKDIV(1'b0),
4150
  .D1(address_90[addr_ioi]),
4151
  .D2(address_90[addr_ioi]),
4152
  .D3(1'b0),
4153
  .D4(1'b0),
4154
  .IOCE(pll_ce_0),
4155
  .OCE(1'b1),
4156
  .RST(int_sys_rst),
4157
  .SHIFTIN1(1'b0),
4158
  .SHIFTIN2(1'b0),
4159
  .SHIFTIN3(1'b0),
4160
  .SHIFTIN4(1'b0),
4161
  .T1(1'b0),
4162
  .T2(1'b0),
4163
  .T3(1'b0),
4164
  .T4(1'b0),
4165
  .TCE(1'b1),
4166
  .TRAIN(1'b0)
4167
    );
4168
 end
4169
   endgenerate
4170
 
4171
////////
4172
//BA
4173
////////
4174
 
4175
genvar ba_ioi;
4176
   generate
4177
      for(ba_ioi = 0; ba_ioi < C_MEM_BANKADDR_WIDTH; ba_ioi = ba_ioi + 1) begin : gen_ba_oserdes2
4178
OSERDES2 #(
4179
  .BYPASS_GCLK_FF ("TRUE"),
4180
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4181
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4182
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4183
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4184
  .DATA_WIDTH    (2)           // {1..8} 
4185
) ioi_ba_0
4186
(
4187
  .OQ       (ioi_ba[ba_ioi]),
4188
  .SHIFTOUT1 (),
4189
  .SHIFTOUT2 (),
4190
  .SHIFTOUT3 (),
4191
  .SHIFTOUT4 (),
4192
  .TQ       (t_ba[ba_ioi]),
4193
  .CLK0     (ioclk0),
4194
  .CLK1 (1'b0),
4195
  .CLKDIV (1'b0),
4196
  .D1       (ba_90[ba_ioi]),
4197
  .D2       (ba_90[ba_ioi]),
4198
  .D3 (1'b0),
4199
  .D4 (1'b0),
4200
  .IOCE     (pll_ce_0),
4201
  .OCE      (1'b1),
4202
  .RST      (int_sys_rst),
4203
  .SHIFTIN1 (1'b0),
4204
  .SHIFTIN2 (1'b0),
4205
  .SHIFTIN3 (1'b0),
4206
  .SHIFTIN4 (1'b0),
4207
  .T1(1'b0),
4208
  .T2(1'b0),
4209
  .T3(1'b0),
4210
  .T4(1'b0),
4211
  .TCE(1'b1),
4212
  .TRAIN    (1'b0)
4213
    );
4214
 end
4215
   endgenerate
4216
 
4217
////////
4218
//CAS
4219
////////
4220
 
4221
OSERDES2 #(
4222
  .BYPASS_GCLK_FF ("TRUE"),
4223
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4224
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4225
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4226
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4227
  .DATA_WIDTH    (2)           // {1..8} 
4228
) ioi_cas_0
4229
(
4230
  .OQ       (ioi_cas),
4231
  .SHIFTOUT1 (),
4232
  .SHIFTOUT2 (),
4233
  .SHIFTOUT3 (),
4234
  .SHIFTOUT4 (),
4235
  .TQ       (t_cas),
4236
  .CLK0     (ioclk0),
4237
  .CLK1 (1'b0),
4238
  .CLKDIV (1'b0),
4239
  .D1       (cas_90),
4240
  .D2       (cas_90),
4241
  .D3 (1'b0),
4242
  .D4 (1'b0),
4243
  .IOCE     (pll_ce_0),
4244
  .OCE      (1'b1),
4245
  .RST      (int_sys_rst),
4246
  .SHIFTIN1 (1'b0),
4247
  .SHIFTIN2 (1'b0),
4248
  .SHIFTIN3 (1'b0),
4249
  .SHIFTIN4 (1'b0),
4250
  .T1(1'b0),
4251
  .T2(1'b0),
4252
  .T3(1'b0),
4253
  .T4(1'b0),
4254
  .TCE(1'b1),
4255
  .TRAIN    (1'b0)
4256
    );
4257
 
4258
////////
4259
//CKE
4260
////////
4261
 
4262
OSERDES2 #(
4263
  .BYPASS_GCLK_FF ("TRUE"),
4264
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4265
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4266
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4267
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4268
  .DATA_WIDTH    (2)    ,       // {1..8} 
4269
  .TRAIN_PATTERN (15)
4270
) ioi_cke_0
4271
(
4272
  .OQ       (ioi_cke),
4273
  .SHIFTOUT1 (),
4274
  .SHIFTOUT2 (),
4275
  .SHIFTOUT3 (),
4276
  .SHIFTOUT4 (),
4277
  .TQ       (t_cke),
4278
  .CLK0     (ioclk0),
4279
  .CLK1 (1'b0),
4280
  .CLKDIV (1'b0),
4281
  .D1       (cke_90),
4282
  .D2       (cke_90),
4283
  .D3 (1'b0),
4284
  .D4 (1'b0),
4285
  .IOCE     (pll_ce_0),
4286
  .OCE      (pll_lock),
4287
  .RST      (1'b0),//int_sys_rst
4288
  .SHIFTIN1 (1'b0),
4289
  .SHIFTIN2 (1'b0),
4290
  .SHIFTIN3 (1'b0),
4291
  .SHIFTIN4 (1'b0),
4292
  .T1(1'b0),
4293
  .T2(1'b0),
4294
  .T3(1'b0),
4295
  .T4(1'b0),
4296
  .TCE(1'b1),
4297
  .TRAIN    (cke_train)
4298
    );
4299
 
4300
////////
4301
//ODT
4302
////////
4303
generate
4304
if(C_MEM_TYPE == "DDR3" || C_MEM_TYPE == "DDR2" ) begin : gen_ioi_odt
4305
 
4306
OSERDES2 #(
4307
  .BYPASS_GCLK_FF ("TRUE"),
4308
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4309
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4310
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4311
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4312
  .DATA_WIDTH    (2)           // {1..8} 
4313
) ioi_odt_0
4314
(
4315
  .OQ       (ioi_odt),
4316
  .SHIFTOUT1 (),
4317
  .SHIFTOUT2 (),
4318
  .SHIFTOUT3 (),
4319
  .SHIFTOUT4 (),
4320
  .TQ       (t_odt),
4321
  .CLK0     (ioclk0),
4322
  .CLK1 (1'b0),
4323
  .CLKDIV (1'b0),
4324
  .D1       (odt_90),
4325
  .D2       (odt_90),
4326
  .D3 (1'b0),
4327
  .D4 (1'b0),
4328
  .IOCE     (pll_ce_0),
4329
  .OCE      (1'b1),
4330
  .RST      (int_sys_rst),
4331
  .SHIFTIN1 (1'b0),
4332
  .SHIFTIN2 (1'b0),
4333
  .SHIFTIN3 (1'b0),
4334
  .SHIFTIN4 (1'b0),
4335
  .T1(1'b0),
4336
  .T2(1'b0),
4337
  .T3(1'b0),
4338
  .T4(1'b0),
4339
  .TCE(1'b1),
4340
  .TRAIN    (1'b0)
4341
    );
4342
end
4343
endgenerate
4344
////////
4345
//RAS
4346
////////
4347
 
4348
OSERDES2 #(
4349
  .BYPASS_GCLK_FF ("TRUE"),
4350
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4351
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4352
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4353
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4354
  .DATA_WIDTH    (2)           // {1..8} 
4355
) ioi_ras_0
4356
(
4357
  .OQ       (ioi_ras),
4358
  .SHIFTOUT1 (),
4359
  .SHIFTOUT2 (),
4360
  .SHIFTOUT3 (),
4361
  .SHIFTOUT4 (),
4362
  .TQ       (t_ras),
4363
  .CLK0     (ioclk0),
4364
  .CLK1 (1'b0),
4365
  .CLKDIV (1'b0),
4366
  .D1       (ras_90),
4367
  .D2       (ras_90),
4368
  .D3 (1'b0),
4369
  .D4 (1'b0),
4370
  .IOCE     (pll_ce_0),
4371
  .OCE      (1'b1),
4372
  .RST      (int_sys_rst),
4373
  .SHIFTIN1 (1'b0),
4374
  .SHIFTIN2 (1'b0),
4375
  .SHIFTIN3 (1'b0),
4376
  .SHIFTIN4 (1'b0),
4377
  .T1 (1'b0),
4378
  .T2 (1'b0),
4379
  .T3 (1'b0),
4380
  .T4 (1'b0),
4381
  .TCE (1'b1),
4382
  .TRAIN    (1'b0)
4383
    );
4384
 
4385
////////
4386
//RST
4387
////////
4388
generate
4389
if (C_MEM_TYPE == "DDR3"  ) begin : gen_ioi_rst
4390
 
4391
OSERDES2 #(
4392
  .BYPASS_GCLK_FF ("TRUE"),
4393
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4394
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4395
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4396
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4397
  .DATA_WIDTH    (2)           // {1..8} 
4398
) ioi_rst_0
4399
(
4400
  .OQ       (ioi_rst),
4401
  .SHIFTOUT1 (),
4402
  .SHIFTOUT2 (),
4403
  .SHIFTOUT3 (),
4404
  .SHIFTOUT4 (),
4405
  .TQ       (t_rst),
4406
  .CLK0     (ioclk0),
4407
  .CLK1 (1'b0),
4408
  .CLKDIV (1'b0),
4409
  .D1       (rst_90),
4410
  .D2       (rst_90),
4411
  .D3 (1'b0),
4412
  .D4 (1'b0),
4413
  .IOCE     (pll_ce_0),
4414
  .OCE      (pll_lock),
4415
  .RST      (int_sys_rst),
4416
  .SHIFTIN1 (1'b0),
4417
  .SHIFTIN2 (1'b0),
4418
  .SHIFTIN3 (1'b0),
4419
  .SHIFTIN4 (1'b0),
4420
  .T1(1'b0),
4421
  .T2(1'b0),
4422
  .T3(1'b0),
4423
  .T4(1'b0),
4424
  .TCE(1'b1),
4425
  .TRAIN    (1'b0)
4426
    );
4427
end
4428
endgenerate
4429
////////
4430
//WE
4431
////////
4432
 
4433
OSERDES2 #(
4434
  .BYPASS_GCLK_FF ("TRUE"),
4435
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4436
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4437
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4438
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4439
  .DATA_WIDTH    (2)           // {1..8} 
4440
) ioi_we_0
4441
(
4442
  .OQ       (ioi_we),
4443
  .TQ       (t_we),
4444
  .SHIFTOUT1 (),
4445
  .SHIFTOUT2 (),
4446
  .SHIFTOUT3 (),
4447
  .SHIFTOUT4 (),
4448
  .CLK0     (ioclk0),
4449
  .CLK1 (1'b0),
4450
  .CLKDIV (1'b0),
4451
  .D1       (we_90),
4452
  .D2       (we_90),
4453
  .D3 (1'b0),
4454
  .D4 (1'b0),
4455
  .IOCE     (pll_ce_0),
4456
  .OCE      (1'b1),
4457
  .RST      (int_sys_rst),
4458
  .SHIFTIN1 (1'b0),
4459
  .SHIFTIN2 (1'b0),
4460
  .SHIFTIN3 (1'b0),
4461
  .SHIFTIN4 (1'b0),
4462
  .T1(1'b0),
4463
  .T2(1'b0),
4464
  .T3(1'b0),
4465
  .T4(1'b0),
4466
  .TCE(1'b1),
4467
  .TRAIN    (1'b0)
4468
);
4469
 
4470
////////
4471
//CK
4472
////////
4473
 
4474
OSERDES2 #(
4475
  .BYPASS_GCLK_FF ("TRUE"),
4476
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4477
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4478
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4479
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4480
  .DATA_WIDTH    (2)           // {1..8} 
4481
) ioi_ck_0
4482
(
4483
  .OQ       (ioi_ck),
4484
  .SHIFTOUT1(),
4485
  .SHIFTOUT2(),
4486
  .SHIFTOUT3(),
4487
  .SHIFTOUT4(),
4488
  .TQ       (t_ck),
4489
  .CLK0     (ioclk0),
4490
  .CLK1(1'b0),
4491
  .CLKDIV(1'b0),
4492
  .D1       (1'b0),
4493
  .D2       (1'b1),
4494
  .D3(1'b0),
4495
  .D4(1'b0),
4496
  .IOCE     (pll_ce_0),
4497
  .OCE      (pll_lock),
4498
 
4499
  .RST      (1'b0),//int_sys_rst
4500
  .SHIFTIN1(1'b0),
4501
  .SHIFTIN2(1'b0),
4502
  .SHIFTIN3 (1'b0),
4503
  .SHIFTIN4 (1'b0),
4504
  .T1(1'b0),
4505
  .T2(1'b0),
4506
  .T3(1'b0),
4507
  .T4(1'b0),
4508
  .TCE(1'b1),
4509
  .TRAIN    (1'b0)
4510
);
4511
 
4512
////////
4513
//CKN
4514
////////
4515
/*
4516
OSERDES2 #(
4517
  .BYPASS_GCLK_FF ("TRUE"),
4518
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4519
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4520
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4521
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_SLAVE),          // MASTER, SLAVE
4522
  .DATA_WIDTH    (2)           // {1..8}
4523
) ioi_ckn_0
4524
(
4525
  .OQ       (ioi_ckn),
4526
  .SHIFTOUT1(),
4527
  .SHIFTOUT2(),
4528
  .SHIFTOUT3(),
4529
  .SHIFTOUT4(),
4530
  .TQ       (t_ckn),
4531
  .CLK0     (ioclk0),
4532
  .CLK1(),
4533
  .CLKDIV(),
4534
  .D1       (1'b1),
4535
  .D2       (1'b0),
4536
  .D3(),
4537
  .D4(),
4538
  .IOCE     (pll_ce_0),
4539
  .OCE      (1'b1),
4540
  .RST      (1'b0),//int_sys_rst
4541
  .SHIFTIN1 (),
4542
  .SHIFTIN2 (),
4543
  .SHIFTIN3(),
4544
  .SHIFTIN4(),
4545
  .T1(1'b0),
4546
  .T2(1'b0),
4547
  .T3(),
4548
  .T4(),
4549
  .TCE(1'b1),
4550
  .TRAIN    (1'b0)
4551
);
4552
*/
4553
 
4554
////////
4555
//UDM
4556
////////
4557
 
4558
wire udm_oq;
4559
wire udm_t;
4560
OSERDES2 #(
4561
  .BYPASS_GCLK_FF ("TRUE"),
4562
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4563
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4564
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4565
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4566
  .DATA_WIDTH    (2)           // {1..8} 
4567
) ioi_udm_0
4568
(
4569
  .OQ       (udm_oq),
4570
  .SHIFTOUT1 (),
4571
  .SHIFTOUT2 (),
4572
  .SHIFTOUT3 (),
4573
  .SHIFTOUT4 (),
4574
  .TQ       (udm_t),
4575
  .CLK0     (ioclk90),
4576
  .CLK1 (1'b0),
4577
  .CLKDIV (1'b0),
4578
  .D1       (dqpum),
4579
  .D2       (dqnum),
4580
  .D3 (1'b0),
4581
  .D4 (1'b0),
4582
  .IOCE     (pll_ce_90),
4583
  .OCE      (1'b1),
4584
  .RST      (int_sys_rst),
4585
  .SHIFTIN1 (1'b0),
4586
  .SHIFTIN2 (1'b0),
4587
  .SHIFTIN3 (1'b0),
4588
  .SHIFTIN4 (1'b0),
4589
  .T1       (dqIO_w_en_0),
4590
  .T2       (dqIO_w_en_0),
4591
  .T3 (1'b0),
4592
  .T4 (1'b0),
4593
  .TCE      (1'b1),
4594
  .TRAIN    (1'b0)
4595
);
4596
 
4597
////////
4598
//LDM
4599
////////
4600
wire ldm_oq;
4601
wire ldm_t;
4602
OSERDES2 #(
4603
  .BYPASS_GCLK_FF ("TRUE"),
4604
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4605
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4606
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4607
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4608
  .DATA_WIDTH    (2)           // {1..8} 
4609
) ioi_ldm_0
4610
(
4611
  .OQ       (ldm_oq),
4612
  .SHIFTOUT1 (),
4613
  .SHIFTOUT2 (),
4614
  .SHIFTOUT3 (),
4615
  .SHIFTOUT4 (),
4616
  .TQ       (ldm_t),
4617
  .CLK0     (ioclk90),
4618
  .CLK1 (1'b0),
4619
  .CLKDIV (1'b0),
4620
  .D1       (dqplm),
4621
  .D2       (dqnlm),
4622
  .D3 (1'b0),
4623
  .D4 (1'b0),
4624
  .IOCE     (pll_ce_90),
4625
  .OCE      (1'b1),
4626
  .RST      (int_sys_rst),
4627
  .SHIFTIN1 (1'b0),
4628
  .SHIFTIN2 (1'b0),
4629
  .SHIFTIN3 (1'b0),
4630
  .SHIFTIN4 (1'b0),
4631
  .T1       (dqIO_w_en_0),
4632
  .T2       (dqIO_w_en_0),
4633
  .T3 (1'b0),
4634
  .T4 (1'b0),
4635
  .TCE      (1'b1),
4636
  .TRAIN    (1'b0)
4637
);
4638
 
4639
////////
4640
//DQ
4641
////////
4642
 
4643
wire dq_oq [C_NUM_DQ_PINS-1:0];
4644
wire dq_tq [C_NUM_DQ_PINS-1:0];
4645
 
4646
genvar dq;
4647
generate
4648
      for(dq = 0; dq < C_NUM_DQ_PINS; dq = dq + 1) begin : gen_dq
4649
 
4650
OSERDES2 #(
4651
  .BYPASS_GCLK_FF ("TRUE"),
4652
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4653
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4654
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4655
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4656
  .DATA_WIDTH    (2),           // {1..8} 
4657
  .TRAIN_PATTERN (5)            // {0..15}             
4658
) oserdes2_dq_0
4659
(
4660
  .OQ       (dq_oq[dq]),
4661
  .SHIFTOUT1 (),
4662
  .SHIFTOUT2 (),
4663
  .SHIFTOUT3 (),
4664
  .SHIFTOUT4 (),
4665
  .TQ       (dq_tq[dq]),
4666
  .CLK0     (ioclk90),
4667
  .CLK1 (1'b0),
4668
  .CLKDIV (1'b0),
4669
  .D1       (dqo_p[dq]),
4670
  .D2       (dqo_n[dq]),
4671
  .D3 (1'b0),
4672
  .D4 (1'b0),
4673
  .IOCE     (pll_ce_90),
4674
  .OCE      (1'b1),
4675
  .RST      (int_sys_rst),
4676
  .SHIFTIN1 (1'b0),
4677
  .SHIFTIN2 (1'b0),
4678
  .SHIFTIN3 (1'b0),
4679
  .SHIFTIN4 (1'b0),
4680
  .T1       (dqIO_w_en_0),
4681
  .T2       (dqIO_w_en_0),
4682
  .T3 (1'b0),
4683
  .T4 (1'b0),
4684
  .TCE      (1'b1),
4685
  .TRAIN    (ioi_drp_train)
4686
);
4687
 
4688
end
4689
endgenerate
4690
 
4691
////////
4692
//DQSP
4693
////////
4694
 
4695
wire dqsp_oq ;
4696
wire dqsp_tq ;
4697
 
4698
OSERDES2 #(
4699
  .BYPASS_GCLK_FF ("TRUE"),
4700
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4701
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4702
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4703
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4704
  .DATA_WIDTH    (2)           // {1..8} 
4705
) oserdes2_dqsp_0
4706
(
4707
  .OQ       (dqsp_oq),
4708
  .SHIFTOUT1(),
4709
  .SHIFTOUT2(),
4710
  .SHIFTOUT3(),
4711
  .SHIFTOUT4(),
4712
  .TQ       (dqsp_tq),
4713
  .CLK0     (ioclk0),
4714
  .CLK1(1'b0),
4715
  .CLKDIV(1'b0),
4716
  .D1       (1'b0),
4717
  .D2       (1'b1),
4718
  .D3(1'b0),
4719
  .D4(1'b0),
4720
  .IOCE     (pll_ce_0),
4721
  .OCE      (1'b1),
4722
  .RST      (int_sys_rst),
4723
  .SHIFTIN1(1'b0),
4724
  .SHIFTIN2(1'b0),
4725
  .SHIFTIN3 (1'b0),
4726
  .SHIFTIN4 (1'b0),
4727
  .T1       (dqsIO_w_en_90_n),
4728
  .T2       (dqsIO_w_en_90_p),
4729
  .T3(1'b0),
4730
  .T4(1'b0),
4731
  .TCE      (1'b1),
4732
  .TRAIN    (1'b0)
4733
);
4734
 
4735
////////
4736
//DQSN
4737
////////
4738
 
4739
wire dqsn_oq ;
4740
wire dqsn_tq ;
4741
 
4742
 
4743
 
4744
OSERDES2 #(
4745
  .BYPASS_GCLK_FF ("TRUE"),
4746
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4747
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4748
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4749
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_SLAVE),          // MASTER, SLAVE
4750
  .DATA_WIDTH    (2)           // {1..8} 
4751
) oserdes2_dqsn_0
4752
(
4753
  .OQ       (dqsn_oq),
4754
  .SHIFTOUT1(),
4755
  .SHIFTOUT2(),
4756
  .SHIFTOUT3(),
4757
  .SHIFTOUT4(),
4758
  .TQ       (dqsn_tq),
4759
  .CLK0     (ioclk0),
4760
  .CLK1(1'b0),
4761
  .CLKDIV(1'b0),
4762
  .D1       (1'b1),
4763
  .D2       (1'b0),
4764
  .D3(1'b0),
4765
  .D4(1'b0),
4766
  .IOCE     (pll_ce_0),
4767
  .OCE      (1'b1),
4768
  .RST      (int_sys_rst),
4769
  .SHIFTIN1 (1'b0),
4770
  .SHIFTIN2 (1'b0),
4771
  .SHIFTIN3(1'b0),
4772
  .SHIFTIN4(1'b0),
4773
  .T1       (dqsIO_w_en_90_n),
4774
  .T2       (dqsIO_w_en_90_p),
4775
  .T3(1'b0),
4776
  .T4(1'b0),
4777
  .TCE      (1'b1),
4778
  .TRAIN    (1'b0)
4779
);
4780
 
4781
////////
4782
//UDQSP
4783
////////
4784
 
4785
wire udqsp_oq ;
4786
wire udqsp_tq ;
4787
 
4788
 
4789
OSERDES2 #(
4790
  .BYPASS_GCLK_FF ("TRUE"),
4791
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4792
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4793
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4794
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_MASTER),          // MASTER, SLAVE
4795
  .DATA_WIDTH    (2)           // {1..8} 
4796
) oserdes2_udqsp_0
4797
(
4798
  .OQ       (udqsp_oq),
4799
  .SHIFTOUT1(),
4800
  .SHIFTOUT2(),
4801
  .SHIFTOUT3(),
4802
  .SHIFTOUT4(),
4803
  .TQ       (udqsp_tq),
4804
  .CLK0     (ioclk0),
4805
  .CLK1(1'b0),
4806
  .CLKDIV(1'b0),
4807
  .D1       (1'b0),
4808
  .D2       (1'b1),
4809
  .D3(1'b0),
4810
  .D4(1'b0),
4811
  .IOCE     (pll_ce_0),
4812
  .OCE      (1'b1),
4813
  .RST      (int_sys_rst),
4814
  .SHIFTIN1(1'b0),
4815
  .SHIFTIN2(1'b0),
4816
  .SHIFTIN3 (1'b0),
4817
  .SHIFTIN4 (1'b0),
4818
  .T1       (dqsIO_w_en_90_n),
4819
  .T2       (dqsIO_w_en_90_p),
4820
  .T3(1'b0),
4821
  .T4(1'b0),
4822
  .TCE      (1'b1),
4823
  .TRAIN    (1'b0)
4824
);
4825
 
4826
////////
4827
//UDQSN
4828
////////
4829
 
4830
wire udqsn_oq ;
4831
wire udqsn_tq ;
4832
 
4833
OSERDES2 #(
4834
  .BYPASS_GCLK_FF ("TRUE"),
4835
  .DATA_RATE_OQ  (C_OSERDES2_DATA_RATE_OQ),         // SDR, DDR      | Data Rate setting
4836
  .DATA_RATE_OT  (C_OSERDES2_DATA_RATE_OT),         // SDR, DDR, BUF | Tristate Rate setting.
4837
  .OUTPUT_MODE   (C_OSERDES2_OUTPUT_MODE_SE),          // SINGLE_ENDED, DIFFERENTIAL
4838
  .SERDES_MODE   (C_OSERDES2_SERDES_MODE_SLAVE),          // MASTER, SLAVE
4839
  .DATA_WIDTH    (2)           // {1..8} 
4840
) oserdes2_udqsn_0
4841
(
4842
  .OQ       (udqsn_oq),
4843
  .SHIFTOUT1(),
4844
  .SHIFTOUT2(),
4845
  .SHIFTOUT3(),
4846
  .SHIFTOUT4(),
4847
  .TQ       (udqsn_tq),
4848
  .CLK0     (ioclk0),
4849
  .CLK1(1'b0),
4850
  .CLKDIV(1'b0),
4851
  .D1       (1'b1),
4852
  .D2       (1'b0),
4853
  .D3(1'b0),
4854
  .D4(1'b0),
4855
  .IOCE     (pll_ce_0),
4856
  .OCE      (1'b1),
4857
  .RST      (int_sys_rst),
4858
  .SHIFTIN1 (1'b0),
4859
  .SHIFTIN2 (1'b0),
4860
  .SHIFTIN3(1'b0),
4861
  .SHIFTIN4(1'b0),
4862
  .T1       (dqsIO_w_en_90_n),
4863
  .T2       (dqsIO_w_en_90_p),
4864
  .T3(1'b0),
4865
  .T4(1'b0),
4866
  .TCE      (1'b1),
4867
  .TRAIN    (1'b0)
4868
);
4869
 
4870
////////////////////////////////////////////////////////
4871
//OSDDRES2 instantiations end
4872
///////////////////////////////////////////////////////
4873
 
4874
wire aux_sdi_out_udqsp;
4875
wire aux_sdi_out_10;
4876
wire aux_sdi_out_11;
4877
wire aux_sdi_out_12;
4878
wire aux_sdi_out_14;
4879
wire aux_sdi_out_15;
4880
 
4881
////////////////////////////////////////////////
4882
//IODRP2 instantiations
4883
////////////////////////////////////////////////
4884
generate
4885
if(C_NUM_DQ_PINS == 16 ) begin : dq_15_0_data
4886
////////////////////////////////////////////////
4887
//IODRP2 instantiations
4888
////////////////////////////////////////////////
4889
 
4890
wire aux_sdi_out_14;
4891
wire aux_sdi_out_15;
4892
////////////////////////////////////////////////
4893
//DQ14
4894
////////////////////////////////////////////////
4895
IODRP2_MCB #(
4896
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
4897
.IDELAY_VALUE         (DQ14_TAP_DELAY_VAL),  // 0 to 255 inclusive
4898
.MCB_ADDRESS          (7),  // 0 to 15
4899
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
4900
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
4901
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
4902
)
4903
iodrp2_dq_14
4904
(
4905
  .AUXSDO             (aux_sdi_out_14),
4906
  .DATAOUT(),
4907
  .DATAOUT2(),
4908
  .DOUT               (ioi_dq[14]),
4909
  .DQSOUTN(),
4910
  .DQSOUTP            (in_dq[14]),
4911
  .SDO(),
4912
  .TOUT               (t_dq[14]),
4913
  .ADD                (ioi_drp_add),
4914
  .AUXADDR            (ioi_drp_addr),
4915
  .AUXSDOIN           (aux_sdi_out_15),
4916
  .BKST               (ioi_drp_broadcast),
4917
  .CLK                (ioi_drp_clk),
4918
  .CS                 (ioi_drp_cs),
4919
  .IDATAIN            (in_pre_dq[14]),
4920
  .IOCLK0             (ioclk90),
4921
  .IOCLK1(1'b0),
4922
  .MEMUPDATE          (ioi_drp_update),
4923
  .ODATAIN            (dq_oq[14]),
4924
  .SDI                (ioi_drp_sdo),
4925
  .T                  (dq_tq[14])
4926
);
4927
 
4928
 
4929
/////////////////////////////////////////////////
4930
//DQ15
4931
////////////////////////////////////////////////
4932
IODRP2_MCB #(
4933
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
4934
.IDELAY_VALUE         (DQ15_TAP_DELAY_VAL),  // 0 to 255 inclusive
4935
.MCB_ADDRESS          (7),  // 0 to 15
4936
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
4937
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
4938
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
4939
 
4940
)
4941
iodrp2_dq_15
4942
(
4943
  .AUXSDO             (aux_sdi_out_15),
4944
  .DATAOUT(),
4945
  .DATAOUT2(),
4946
  .DOUT               (ioi_dq[15]),
4947
  .DQSOUTN(),
4948
  .DQSOUTP            (in_dq[15]),
4949
  .SDO(),
4950
  .TOUT               (t_dq[15]),
4951
  .ADD                (ioi_drp_add),
4952
  .AUXADDR            (ioi_drp_addr),
4953
  .AUXSDOIN           (1'b0),
4954
  .BKST               (ioi_drp_broadcast),
4955
  .CLK                (ioi_drp_clk),
4956
  .CS                 (ioi_drp_cs),
4957
  .IDATAIN            (in_pre_dq[15]),
4958
  .IOCLK0             (ioclk90),
4959
  .IOCLK1(1'b0),
4960
  .MEMUPDATE          (ioi_drp_update),
4961
  .ODATAIN            (dq_oq[15]),
4962
  .SDI                (ioi_drp_sdo),
4963
  .T                  (dq_tq[15])
4964
);
4965
 
4966
 
4967
 
4968
wire aux_sdi_out_12;
4969
wire aux_sdi_out_13;
4970
/////////////////////////////////////////////////
4971
//DQ12
4972
////////////////////////////////////////////////
4973
IODRP2_MCB #(
4974
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
4975
.IDELAY_VALUE         (DQ12_TAP_DELAY_VAL),  // 0 to 255 inclusive
4976
.MCB_ADDRESS          (6),  // 0 to 15
4977
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
4978
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
4979
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
4980
 
4981
)
4982
iodrp2_dq_12
4983
(
4984
  .AUXSDO             (aux_sdi_out_12),
4985
  .DATAOUT(),
4986
  .DATAOUT2(),
4987
  .DOUT               (ioi_dq[12]),
4988
  .DQSOUTN(),
4989
  .DQSOUTP            (in_dq[12]),
4990
  .SDO(),
4991
  .TOUT               (t_dq[12]),
4992
  .ADD                (ioi_drp_add),
4993
  .AUXADDR            (ioi_drp_addr),
4994
  .AUXSDOIN           (aux_sdi_out_13),
4995
  .BKST               (ioi_drp_broadcast),
4996
  .CLK                (ioi_drp_clk),
4997
  .CS                 (ioi_drp_cs),
4998
  .IDATAIN            (in_pre_dq[12]),
4999
  .IOCLK0             (ioclk90),
5000
  .IOCLK1(1'b0),
5001
  .MEMUPDATE          (ioi_drp_update),
5002
  .ODATAIN            (dq_oq[12]),
5003
  .SDI                (ioi_drp_sdo),
5004
  .T                  (dq_tq[12])
5005
);
5006
 
5007
 
5008
 
5009
/////////////////////////////////////////////////
5010
//DQ13
5011
////////////////////////////////////////////////
5012
IODRP2_MCB #(
5013
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5014
.IDELAY_VALUE         (DQ13_TAP_DELAY_VAL),  // 0 to 255 inclusive
5015
.MCB_ADDRESS          (6),  // 0 to 15
5016
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5017
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5018
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5019
 
5020
)
5021
iodrp2_dq_13
5022
(
5023
  .AUXSDO             (aux_sdi_out_13),
5024
  .DATAOUT(),
5025
  .DATAOUT2(),
5026
  .DOUT               (ioi_dq[13]),
5027
  .DQSOUTN(),
5028
  .DQSOUTP            (in_dq[13]),
5029
  .SDO(),
5030
  .TOUT               (t_dq[13]),
5031
  .ADD                (ioi_drp_add),
5032
  .AUXADDR            (ioi_drp_addr),
5033
  .AUXSDOIN           (aux_sdi_out_14),
5034
  .BKST               (ioi_drp_broadcast),
5035
  .CLK                (ioi_drp_clk),
5036
  .CS                 (ioi_drp_cs),
5037
  .IDATAIN            (in_pre_dq[13]),
5038
  .IOCLK0             (ioclk90),
5039
  .IOCLK1(1'b0),
5040
  .MEMUPDATE          (ioi_drp_update),
5041
  .ODATAIN            (dq_oq[13]),
5042
  .SDI                (ioi_drp_sdo),
5043
  .T                  (dq_tq[13])
5044
);
5045
 
5046
 
5047
wire aux_sdi_out_udqsp;
5048
wire aux_sdi_out_udqsn;
5049
/////////
5050
//UDQSP
5051
/////////
5052
IODRP2_MCB #(
5053
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
5054
.IDELAY_VALUE         (UDQSP_TAP_DELAY_VAL),  // 0 to 255 inclusive
5055
.MCB_ADDRESS          (14),  // 0 to 15
5056
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5057
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5058
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5059
 
5060
)
5061
iodrp2_udqsp_0
5062
(
5063
  .AUXSDO             (aux_sdi_out_udqsp),
5064
  .DATAOUT(),
5065
  .DATAOUT2(),
5066
  .DOUT               (ioi_udqs),
5067
  .DQSOUTN(),
5068
  .DQSOUTP            (idelay_udqs_ioi_m),
5069
  .SDO(),
5070
  .TOUT               (t_udqs),
5071
  .ADD                (ioi_drp_add),
5072
  .AUXADDR            (ioi_drp_addr),
5073
  .AUXSDOIN           (aux_sdi_out_udqsn),
5074
  .BKST               (ioi_drp_broadcast),
5075
  .CLK                (ioi_drp_clk),
5076
  .CS                 (ioi_drp_cs),
5077
  .IDATAIN            (in_pre_udqsp),
5078
  .IOCLK0             (ioclk0),
5079
  .IOCLK1(),
5080
  .MEMUPDATE          (ioi_drp_update),
5081
  .ODATAIN            (udqsp_oq),
5082
  .SDI                (ioi_drp_sdo),
5083
  .T                  (udqsp_tq)
5084
);
5085
 
5086
/////////
5087
//UDQSN
5088
/////////
5089
IODRP2_MCB #(
5090
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
5091
.IDELAY_VALUE         (UDQSN_TAP_DELAY_VAL),  // 0 to 255 inclusive
5092
.MCB_ADDRESS          (14),  // 0 to 15
5093
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5094
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5095
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5096
 
5097
)
5098
iodrp2_udqsn_0
5099
(
5100
  .AUXSDO             (aux_sdi_out_udqsn),
5101
  .DATAOUT(),
5102
  .DATAOUT2(),
5103
  .DOUT               (ioi_udqsn),
5104
  .DQSOUTN(),
5105
  .DQSOUTP            (idelay_udqs_ioi_s),
5106
  .SDO(),
5107
  .TOUT               (t_udqsn),
5108
  .ADD                (ioi_drp_add),
5109
  .AUXADDR            (ioi_drp_addr),
5110
  .AUXSDOIN           (aux_sdi_out_12),
5111
  .BKST               (ioi_drp_broadcast),
5112
  .CLK                (ioi_drp_clk),
5113
  .CS                 (ioi_drp_cs),
5114
  .IDATAIN            (in_pre_udqsp),
5115
  .IOCLK0             (ioclk0),
5116
  .IOCLK1(),
5117
  .MEMUPDATE          (ioi_drp_update),
5118
  .ODATAIN            (udqsn_oq),
5119
  .SDI                (ioi_drp_sdo),
5120
  .T                  (udqsn_tq)
5121
);
5122
 
5123
 
5124
wire aux_sdi_out_10;
5125
wire aux_sdi_out_11;
5126
/////////////////////////////////////////////////
5127
//DQ10
5128
////////////////////////////////////////////////
5129
IODRP2_MCB #(
5130
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5131
.IDELAY_VALUE         (DQ10_TAP_DELAY_VAL),  // 0 to 255 inclusive
5132
.MCB_ADDRESS          (5),  // 0 to 15
5133
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5134
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5135
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5136
 
5137
)
5138
iodrp2_dq_10
5139
(
5140
  .AUXSDO             (aux_sdi_out_10),
5141
  .DATAOUT(),
5142
  .DATAOUT2(),
5143
  .DOUT               (ioi_dq[10]),
5144
  .DQSOUTN(),
5145
  .DQSOUTP            (in_dq[10]),
5146
  .SDO(),
5147
  .TOUT               (t_dq[10]),
5148
  .ADD                (ioi_drp_add),
5149
  .AUXADDR            (ioi_drp_addr),
5150
  .AUXSDOIN           (aux_sdi_out_11),
5151
  .BKST               (ioi_drp_broadcast),
5152
  .CLK                (ioi_drp_clk),
5153
  .CS                 (ioi_drp_cs),
5154
  .IDATAIN            (in_pre_dq[10]),
5155
  .IOCLK0             (ioclk90),
5156
  .IOCLK1(1'b0),
5157
  .MEMUPDATE          (ioi_drp_update),
5158
  .ODATAIN            (dq_oq[10]),
5159
  .SDI                (ioi_drp_sdo),
5160
  .T                  (dq_tq[10])
5161
);
5162
 
5163
 
5164
/////////////////////////////////////////////////
5165
//DQ11
5166
////////////////////////////////////////////////
5167
IODRP2_MCB #(
5168
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5169
.IDELAY_VALUE         (DQ11_TAP_DELAY_VAL),  // 0 to 255 inclusive
5170
.MCB_ADDRESS          (5),  // 0 to 15
5171
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5172
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5173
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5174
 
5175
)
5176
iodrp2_dq_11
5177
(
5178
  .AUXSDO             (aux_sdi_out_11),
5179
  .DATAOUT(),
5180
  .DATAOUT2(),
5181
  .DOUT               (ioi_dq[11]),
5182
  .DQSOUTN(),
5183
  .DQSOUTP            (in_dq[11]),
5184
  .SDO(),
5185
  .TOUT               (t_dq[11]),
5186
  .ADD                (ioi_drp_add),
5187
  .AUXADDR            (ioi_drp_addr),
5188
  .AUXSDOIN           (aux_sdi_out_udqsp),
5189
  .BKST               (ioi_drp_broadcast),
5190
  .CLK                (ioi_drp_clk),
5191
  .CS                 (ioi_drp_cs),
5192
  .IDATAIN            (in_pre_dq[11]),
5193
  .IOCLK0             (ioclk90),
5194
  .IOCLK1(1'b0),
5195
  .MEMUPDATE          (ioi_drp_update),
5196
  .ODATAIN            (dq_oq[11]),
5197
  .SDI                (ioi_drp_sdo),
5198
  .T                  (dq_tq[11])
5199
);
5200
 
5201
 
5202
 
5203
wire aux_sdi_out_8;
5204
wire aux_sdi_out_9;
5205
/////////////////////////////////////////////////
5206
//DQ8
5207
////////////////////////////////////////////////
5208
IODRP2_MCB #(
5209
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5210
.IDELAY_VALUE         (DQ8_TAP_DELAY_VAL),  // 0 to 255 inclusive
5211
.MCB_ADDRESS          (4),  // 0 to 15
5212
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5213
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5214
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5215
 
5216
)
5217
iodrp2_dq_8
5218
(
5219
  .AUXSDO             (aux_sdi_out_8),
5220
  .DATAOUT(),
5221
  .DATAOUT2(),
5222
  .DOUT               (ioi_dq[8]),
5223
  .DQSOUTN(),
5224
  .DQSOUTP            (in_dq[8]),
5225
  .SDO(),
5226
  .TOUT               (t_dq[8]),
5227
  .ADD                (ioi_drp_add),
5228
  .AUXADDR            (ioi_drp_addr),
5229
  .AUXSDOIN           (aux_sdi_out_9),
5230
  .BKST               (ioi_drp_broadcast),
5231
  .CLK                (ioi_drp_clk),
5232
  .CS                 (ioi_drp_cs),
5233
  .IDATAIN            (in_pre_dq[8]),
5234
  .IOCLK0             (ioclk90),
5235
  .IOCLK1(1'b0),
5236
  .MEMUPDATE          (ioi_drp_update),
5237
  .ODATAIN            (dq_oq[8]),
5238
  .SDI                (ioi_drp_sdo),
5239
  .T                  (dq_tq[8])
5240
);
5241
 
5242
 
5243
/////////////////////////////////////////////////
5244
//DQ9
5245
////////////////////////////////////////////////
5246
IODRP2_MCB #(
5247
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5248
.IDELAY_VALUE         (DQ9_TAP_DELAY_VAL),  // 0 to 255 inclusive
5249
.MCB_ADDRESS          (4),  // 0 to 15
5250
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5251
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5252
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5253
 
5254
)
5255
iodrp2_dq_9
5256
(
5257
  .AUXSDO             (aux_sdi_out_9),
5258
  .DATAOUT(),
5259
  .DATAOUT2(),
5260
  .DOUT               (ioi_dq[9]),
5261
  .DQSOUTN(),
5262
  .DQSOUTP            (in_dq[9]),
5263
  .SDO(),
5264
  .TOUT               (t_dq[9]),
5265
  .ADD                (ioi_drp_add),
5266
  .AUXADDR            (ioi_drp_addr),
5267
  .AUXSDOIN           (aux_sdi_out_10),
5268
  .BKST               (ioi_drp_broadcast),
5269
  .CLK                (ioi_drp_clk),
5270
  .CS                 (ioi_drp_cs),
5271
  .IDATAIN            (in_pre_dq[9]),
5272
  .IOCLK0             (ioclk90),
5273
  .IOCLK1(1'b0),
5274
  .MEMUPDATE          (ioi_drp_update),
5275
  .ODATAIN            (dq_oq[9]),
5276
  .SDI                (ioi_drp_sdo),
5277
  .T                  (dq_tq[9])
5278
);
5279
 
5280
 
5281
wire aux_sdi_out_0;
5282
wire aux_sdi_out_1;
5283
/////////////////////////////////////////////////
5284
//DQ0
5285
////////////////////////////////////////////////
5286
IODRP2_MCB #(
5287
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5288
.IDELAY_VALUE         (DQ0_TAP_DELAY_VAL),  // 0 to 255 inclusive
5289
.MCB_ADDRESS          (0),  // 0 to 15
5290
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5291
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5292
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5293
 
5294
)
5295
iodrp2_dq_0
5296
(
5297
  .AUXSDO             (aux_sdi_out_0),
5298
  .DATAOUT(),
5299
  .DATAOUT2(),
5300
  .DOUT               (ioi_dq[0]),
5301
  .DQSOUTN(),
5302
  .DQSOUTP            (in_dq[0]),
5303
  .SDO(),
5304
  .TOUT               (t_dq[0]),
5305
  .ADD                (ioi_drp_add),
5306
  .AUXADDR            (ioi_drp_addr),
5307
  .AUXSDOIN           (aux_sdi_out_1),
5308
  .BKST               (ioi_drp_broadcast),
5309
  .CLK                (ioi_drp_clk),
5310
  .CS                 (ioi_drp_cs),
5311
  .IDATAIN            (in_pre_dq[0]),
5312
  .IOCLK0             (ioclk90),
5313
  .IOCLK1(1'b0),
5314
  .MEMUPDATE          (ioi_drp_update),
5315
  .ODATAIN            (dq_oq[0]),
5316
  .SDI                (ioi_drp_sdo),
5317
  .T                  (dq_tq[0])
5318
);
5319
 
5320
 
5321
/////////////////////////////////////////////////
5322
//DQ1
5323
////////////////////////////////////////////////
5324
IODRP2_MCB #(
5325
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5326
.IDELAY_VALUE         (DQ1_TAP_DELAY_VAL),  // 0 to 255 inclusive
5327
.MCB_ADDRESS          (0),  // 0 to 15
5328
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5329
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5330
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5331
 
5332
)
5333
iodrp2_dq_1
5334
(
5335
  .AUXSDO             (aux_sdi_out_1),
5336
  .DATAOUT(),
5337
  .DATAOUT2(),
5338
  .DOUT               (ioi_dq[1]),
5339
  .DQSOUTN(),
5340
  .DQSOUTP            (in_dq[1]),
5341
  .SDO(),
5342
  .TOUT               (t_dq[1]),
5343
  .ADD                (ioi_drp_add),
5344
  .AUXADDR            (ioi_drp_addr),
5345
  .AUXSDOIN           (aux_sdi_out_8),
5346
  .BKST               (ioi_drp_broadcast),
5347
  .CLK                (ioi_drp_clk),
5348
  .CS                 (ioi_drp_cs),
5349
  .IDATAIN            (in_pre_dq[1]),
5350
  .IOCLK0             (ioclk90),
5351
  .IOCLK1(),
5352
  .MEMUPDATE          (ioi_drp_update),
5353
  .ODATAIN            (dq_oq[1]),
5354
  .SDI                (ioi_drp_sdo),
5355
  .T                  (dq_tq[1])
5356
);
5357
 
5358
 
5359
wire aux_sdi_out_2;
5360
wire aux_sdi_out_3;
5361
/////////////////////////////////////////////////
5362
//DQ2
5363
////////////////////////////////////////////////
5364
IODRP2_MCB #(
5365
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5366
.IDELAY_VALUE         (DQ2_TAP_DELAY_VAL),  // 0 to 255 inclusive
5367
.MCB_ADDRESS          (1),  // 0 to 15
5368
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5369
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5370
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5371
 
5372
)
5373
iodrp2_dq_2
5374
(
5375
  .AUXSDO             (aux_sdi_out_2),
5376
  .DATAOUT(),
5377
  .DATAOUT2(),
5378
  .DOUT               (ioi_dq[2]),
5379
  .DQSOUTN(),
5380
  .DQSOUTP            (in_dq[2]),
5381
  .SDO(),
5382
  .TOUT               (t_dq[2]),
5383
  .ADD                (ioi_drp_add),
5384
  .AUXADDR            (ioi_drp_addr),
5385
  .AUXSDOIN           (aux_sdi_out_3),
5386
  .BKST               (ioi_drp_broadcast),
5387
  .CLK                (ioi_drp_clk),
5388
  .CS                 (ioi_drp_cs),
5389
  .IDATAIN            (in_pre_dq[2]),
5390
  .IOCLK0             (ioclk90),
5391
  .IOCLK1(1'b0),
5392
  .MEMUPDATE          (ioi_drp_update),
5393
  .ODATAIN            (dq_oq[2]),
5394
  .SDI                (ioi_drp_sdo),
5395
  .T                  (dq_tq[2])
5396
);
5397
 
5398
 
5399
/////////////////////////////////////////////////
5400
//DQ3
5401
////////////////////////////////////////////////
5402
IODRP2_MCB #(
5403
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5404
.IDELAY_VALUE         (DQ3_TAP_DELAY_VAL),  // 0 to 255 inclusive
5405
.MCB_ADDRESS          (1),  // 0 to 15
5406
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5407
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5408
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5409
 
5410
)
5411
iodrp2_dq_3
5412
(
5413
  .AUXSDO             (aux_sdi_out_3),
5414
  .DATAOUT(),
5415
  .DATAOUT2(),
5416
  .DOUT               (ioi_dq[3]),
5417
  .DQSOUTN(),
5418
  .DQSOUTP            (in_dq[3]),
5419
  .SDO(),
5420
  .TOUT               (t_dq[3]),
5421
  .ADD                (ioi_drp_add),
5422
  .AUXADDR            (ioi_drp_addr),
5423
  .AUXSDOIN           (aux_sdi_out_0),
5424
  .BKST               (ioi_drp_broadcast),
5425
  .CLK                (ioi_drp_clk),
5426
  .CS                 (ioi_drp_cs),
5427
  .IDATAIN            (in_pre_dq[3]),
5428
  .IOCLK0             (ioclk90),
5429
  .IOCLK1(1'b0),
5430
  .MEMUPDATE          (ioi_drp_update),
5431
  .ODATAIN            (dq_oq[3]),
5432
  .SDI                (ioi_drp_sdo),
5433
  .T                  (dq_tq[3])
5434
);
5435
 
5436
 
5437
wire aux_sdi_out_dqsp;
5438
wire aux_sdi_out_dqsn;
5439
/////////
5440
//DQSP
5441
/////////
5442
IODRP2_MCB #(
5443
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
5444
.IDELAY_VALUE         (LDQSP_TAP_DELAY_VAL),  // 0 to 255 inclusive
5445
.MCB_ADDRESS          (15),  // 0 to 15
5446
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5447
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5448
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5449
 
5450
)
5451
iodrp2_dqsp_0
5452
(
5453
  .AUXSDO             (aux_sdi_out_dqsp),
5454
  .DATAOUT(),
5455
  .DATAOUT2(),
5456
  .DOUT               (ioi_dqs),
5457
  .DQSOUTN(),
5458
  .DQSOUTP            (idelay_dqs_ioi_m),
5459
  .SDO(),
5460
  .TOUT               (t_dqs),
5461
  .ADD                (ioi_drp_add),
5462
  .AUXADDR            (ioi_drp_addr),
5463
  .AUXSDOIN           (aux_sdi_out_dqsn),
5464
  .BKST               (ioi_drp_broadcast),
5465
  .CLK                (ioi_drp_clk),
5466
  .CS                 (ioi_drp_cs),
5467
  .IDATAIN            (in_pre_dqsp),
5468
  .IOCLK0             (ioclk0),
5469
  .IOCLK1(1'b0),
5470
  .MEMUPDATE          (ioi_drp_update),
5471
  .ODATAIN            (dqsp_oq),
5472
  .SDI                (ioi_drp_sdo),
5473
  .T                  (dqsp_tq)
5474
);
5475
 
5476
/////////
5477
//DQSN
5478
/////////
5479
IODRP2_MCB #(
5480
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
5481
.IDELAY_VALUE         (LDQSN_TAP_DELAY_VAL),  // 0 to 255 inclusive
5482
.MCB_ADDRESS          (15),  // 0 to 15
5483
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5484
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5485
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5486
 
5487
)
5488
iodrp2_dqsn_0
5489
(
5490
  .AUXSDO             (aux_sdi_out_dqsn),
5491
  .DATAOUT(),
5492
  .DATAOUT2(),
5493
  .DOUT               (ioi_dqsn),
5494
  .DQSOUTN(),
5495
  .DQSOUTP            (idelay_dqs_ioi_s),
5496
  .SDO(),
5497
  .TOUT               (t_dqsn),
5498
  .ADD                (ioi_drp_add),
5499
  .AUXADDR            (ioi_drp_addr),
5500
  .AUXSDOIN           (aux_sdi_out_2),
5501
  .BKST               (ioi_drp_broadcast),
5502
  .CLK                (ioi_drp_clk),
5503
  .CS                 (ioi_drp_cs),
5504
  .IDATAIN            (in_pre_dqsp),
5505
  .IOCLK0             (ioclk0),
5506
  .IOCLK1(1'b0),
5507
  .MEMUPDATE          (ioi_drp_update),
5508
  .ODATAIN            (dqsn_oq),
5509
  .SDI                (ioi_drp_sdo),
5510
  .T                  (dqsn_tq)
5511
);
5512
 
5513
wire aux_sdi_out_6;
5514
wire aux_sdi_out_7;
5515
/////////////////////////////////////////////////
5516
//DQ6
5517
////////////////////////////////////////////////
5518
IODRP2_MCB #(
5519
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5520
.IDELAY_VALUE         (DQ6_TAP_DELAY_VAL),  // 0 to 255 inclusive
5521
.MCB_ADDRESS          (3),  // 0 to 15
5522
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5523
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5524
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5525
 
5526
)
5527
iodrp2_dq_6
5528
(
5529
  .AUXSDO             (aux_sdi_out_6),
5530
  .DATAOUT(),
5531
  .DATAOUT2(),
5532
  .DOUT               (ioi_dq[6]),
5533
  .DQSOUTN(),
5534
  .DQSOUTP            (in_dq[6]),
5535
  .SDO(),
5536
  .TOUT               (t_dq[6]),
5537
  .ADD                (ioi_drp_add),
5538
  .AUXADDR            (ioi_drp_addr),
5539
  .AUXSDOIN           (aux_sdi_out_7),
5540
  .BKST               (ioi_drp_broadcast),
5541
  .CLK                (ioi_drp_clk),
5542
  .CS                 (ioi_drp_cs),
5543
  .IDATAIN            (in_pre_dq[6]),
5544
  .IOCLK0             (ioclk90),
5545
  .IOCLK1(1'b0),
5546
  .MEMUPDATE          (ioi_drp_update),
5547
  .ODATAIN            (dq_oq[6]),
5548
  .SDI                (ioi_drp_sdo),
5549
  .T                  (dq_tq[6])
5550
);
5551
 
5552
/////////////////////////////////////////////////
5553
//DQ7
5554
////////////////////////////////////////////////
5555
IODRP2_MCB #(
5556
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5557
.IDELAY_VALUE         (DQ7_TAP_DELAY_VAL),  // 0 to 255 inclusive
5558
.MCB_ADDRESS          (3),  // 0 to 15
5559
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5560
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5561
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5562
 
5563
)
5564
iodrp2_dq_7
5565
(
5566
  .AUXSDO             (aux_sdi_out_7),
5567
  .DATAOUT(),
5568
  .DATAOUT2(),
5569
  .DOUT               (ioi_dq[7]),
5570
  .DQSOUTN(),
5571
  .DQSOUTP            (in_dq[7]),
5572
  .SDO(),
5573
  .TOUT               (t_dq[7]),
5574
  .ADD                (ioi_drp_add),
5575
  .AUXADDR            (ioi_drp_addr),
5576
  .AUXSDOIN           (aux_sdi_out_dqsp),
5577
  .BKST               (ioi_drp_broadcast),
5578
  .CLK                (ioi_drp_clk),
5579
  .CS                 (ioi_drp_cs),
5580
  .IDATAIN            (in_pre_dq[7]),
5581
  .IOCLK0             (ioclk90),
5582
  .IOCLK1(1'b0),
5583
  .MEMUPDATE          (ioi_drp_update),
5584
  .ODATAIN            (dq_oq[7]),
5585
  .SDI                (ioi_drp_sdo),
5586
  .T                  (dq_tq[7])
5587
);
5588
 
5589
 
5590
 
5591
wire aux_sdi_out_4;
5592
wire aux_sdi_out_5;
5593
/////////////////////////////////////////////////
5594
//DQ4
5595
////////////////////////////////////////////////
5596
IODRP2_MCB #(
5597
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5598
.IDELAY_VALUE         (DQ4_TAP_DELAY_VAL),  // 0 to 255 inclusive
5599
.MCB_ADDRESS          (2),  // 0 to 15
5600
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5601
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5602
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5603
 
5604
)
5605
iodrp2_dq_4
5606
(
5607
  .AUXSDO             (aux_sdi_out_4),
5608
  .DATAOUT(),
5609
  .DATAOUT2(),
5610
  .DOUT               (ioi_dq[4]),
5611
  .DQSOUTN(),
5612
  .DQSOUTP            (in_dq[4]),
5613
  .SDO(),
5614
  .TOUT               (t_dq[4]),
5615
  .ADD                (ioi_drp_add),
5616
  .AUXADDR            (ioi_drp_addr),
5617
  .AUXSDOIN           (aux_sdi_out_5),
5618
  .BKST               (ioi_drp_broadcast),
5619
  .CLK                (ioi_drp_clk),
5620
  .CS                 (ioi_drp_cs),
5621
  .IDATAIN            (in_pre_dq[4]),
5622
  .IOCLK0             (ioclk90),
5623
  .IOCLK1(1'b0),
5624
  .MEMUPDATE          (ioi_drp_update),
5625
  .ODATAIN            (dq_oq[4]),
5626
  .SDI                (ioi_drp_sdo),
5627
  .T                  (dq_tq[4])
5628
);
5629
 
5630
/////////////////////////////////////////////////
5631
//DQ5
5632
////////////////////////////////////////////////
5633
IODRP2_MCB #(
5634
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5635
.IDELAY_VALUE         (DQ5_TAP_DELAY_VAL),  // 0 to 255 inclusive
5636
.MCB_ADDRESS          (2),  // 0 to 15
5637
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5638
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5639
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5640
 
5641
)
5642
iodrp2_dq_5
5643
(
5644
  .AUXSDO             (aux_sdi_out_5),
5645
  .DATAOUT(),
5646
  .DATAOUT2(),
5647
  .DOUT               (ioi_dq[5]),
5648
  .DQSOUTN(),
5649
  .DQSOUTP            (in_dq[5]),
5650
  .SDO(),
5651
  .TOUT               (t_dq[5]),
5652
  .ADD                (ioi_drp_add),
5653
  .AUXADDR            (ioi_drp_addr),
5654
  .AUXSDOIN           (aux_sdi_out_6),
5655
  .BKST               (ioi_drp_broadcast),
5656
  .CLK                (ioi_drp_clk),
5657
  .CS                 (ioi_drp_cs),
5658
  .IDATAIN            (in_pre_dq[5]),
5659
  .IOCLK0             (ioclk90),
5660
  .IOCLK1(1'b0),
5661
  .MEMUPDATE          (ioi_drp_update),
5662
  .ODATAIN            (dq_oq[5]),
5663
  .SDI                (ioi_drp_sdo),
5664
  .T                  (dq_tq[5])
5665
);
5666
 
5667
 
5668
//wire aux_sdi_out_udm;
5669
wire aux_sdi_out_ldm;
5670
/////////////////////////////////////////////////
5671
//UDM
5672
////////////////////////////////////////////////
5673
IODRP2_MCB #(
5674
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5675
.IDELAY_VALUE         (0),  // 0 to 255 inclusive
5676
.MCB_ADDRESS          (8),  // 0 to 15
5677
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5678
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5679
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5680
 
5681
)
5682
iodrp2_dq_udm
5683
(
5684
  .AUXSDO             (ioi_drp_sdi),
5685
  .DATAOUT(),
5686
  .DATAOUT2(),
5687
  .DOUT               (ioi_udm),
5688
  .DQSOUTN(),
5689
  .DQSOUTP(),
5690
  .SDO(),
5691
  .TOUT               (t_udm),
5692
  .ADD                (ioi_drp_add),
5693
  .AUXADDR            (ioi_drp_addr),
5694
  .AUXSDOIN           (aux_sdi_out_ldm),
5695
  .BKST               (ioi_drp_broadcast),
5696
  .CLK                (ioi_drp_clk),
5697
  .CS                 (ioi_drp_cs),
5698
  .IDATAIN(1'b0),
5699
  .IOCLK0             (ioclk90),
5700
  .IOCLK1(1'b0),
5701
  .MEMUPDATE          (ioi_drp_update),
5702
  .ODATAIN            (udm_oq),
5703
  .SDI                (ioi_drp_sdo),
5704
  .T                  (udm_t)
5705
);
5706
 
5707
 
5708
/////////////////////////////////////////////////
5709
//LDM
5710
////////////////////////////////////////////////
5711
IODRP2_MCB #(
5712
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5713
.IDELAY_VALUE         (0),  // 0 to 255 inclusive
5714
.MCB_ADDRESS          (8),  // 0 to 15
5715
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5716
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5717
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5718
 
5719
)
5720
iodrp2_dq_ldm
5721
(
5722
  .AUXSDO             (aux_sdi_out_ldm),
5723
  .DATAOUT(),
5724
  .DATAOUT2(),
5725
  .DOUT               (ioi_ldm),
5726
  .DQSOUTN(),
5727
  .DQSOUTP(),
5728
  .SDO(),
5729
  .TOUT               (t_ldm),
5730
  .ADD                (ioi_drp_add),
5731
  .AUXADDR            (ioi_drp_addr),
5732
  .AUXSDOIN           (aux_sdi_out_4),
5733
  .BKST               (ioi_drp_broadcast),
5734
  .CLK                (ioi_drp_clk),
5735
  .CS                 (ioi_drp_cs),
5736
  .IDATAIN(1'b0),
5737
  .IOCLK0             (ioclk90),
5738
  .IOCLK1(1'b0),
5739
  .MEMUPDATE          (ioi_drp_update),
5740
  .ODATAIN            (ldm_oq),
5741
  .SDI                (ioi_drp_sdo),
5742
  .T                  (ldm_t)
5743
);
5744
end
5745
endgenerate
5746
 
5747
generate
5748
if(C_NUM_DQ_PINS == 8 ) begin : dq_7_0_data
5749
wire aux_sdi_out_0;
5750
wire aux_sdi_out_1;
5751
/////////////////////////////////////////////////
5752
//DQ0
5753
////////////////////////////////////////////////
5754
IODRP2_MCB #(
5755
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5756
.IDELAY_VALUE         (DQ0_TAP_DELAY_VAL),  // 0 to 255 inclusive
5757
.MCB_ADDRESS          (0),  // 0 to 15
5758
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5759
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5760
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5761
 
5762
)
5763
iodrp2_dq_0
5764
(
5765
  .AUXSDO             (aux_sdi_out_0),
5766
  .DATAOUT(),
5767
  .DATAOUT2(),
5768
  .DOUT               (ioi_dq[0]),
5769
  .DQSOUTN(),
5770
  .DQSOUTP            (in_dq[0]),
5771
  .SDO(),
5772
  .TOUT               (t_dq[0]),
5773
  .ADD                (ioi_drp_add),
5774
  .AUXADDR            (ioi_drp_addr),
5775
  .AUXSDOIN           (aux_sdi_out_1),
5776
  .BKST               (ioi_drp_broadcast),
5777
  .CLK                (ioi_drp_clk),
5778
  .CS                 (ioi_drp_cs),
5779
  .IDATAIN            (in_pre_dq[0]),
5780
  .IOCLK0             (ioclk90),
5781
  .IOCLK1(1'b0),
5782
  .MEMUPDATE          (ioi_drp_update),
5783
  .ODATAIN            (dq_oq[0]),
5784
  .SDI                (ioi_drp_sdo),
5785
  .T                  (dq_tq[0])
5786
);
5787
 
5788
 
5789
/////////////////////////////////////////////////
5790
//DQ1
5791
////////////////////////////////////////////////
5792
IODRP2_MCB #(
5793
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5794
.IDELAY_VALUE         (DQ1_TAP_DELAY_VAL),  // 0 to 255 inclusive
5795
.MCB_ADDRESS          (0),  // 0 to 15
5796
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5797
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5798
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5799
 
5800
)
5801
iodrp2_dq_1
5802
(
5803
  .AUXSDO             (aux_sdi_out_1),
5804
  .DATAOUT(),
5805
  .DATAOUT2(),
5806
  .DOUT               (ioi_dq[1]),
5807
  .DQSOUTN(),
5808
  .DQSOUTP            (in_dq[1]),
5809
  .SDO(),
5810
  .TOUT               (t_dq[1]),
5811
  .ADD                (ioi_drp_add),
5812
  .AUXADDR            (ioi_drp_addr),
5813
  .AUXSDOIN           (1'b0),
5814
  .BKST               (ioi_drp_broadcast),
5815
  .CLK                (ioi_drp_clk),
5816
  .CS                 (ioi_drp_cs),
5817
  .IDATAIN            (in_pre_dq[1]),
5818
  .IOCLK0             (ioclk90),
5819
  .IOCLK1(1'b0),
5820
  .MEMUPDATE          (ioi_drp_update),
5821
  .ODATAIN            (dq_oq[1]),
5822
  .SDI                (ioi_drp_sdo),
5823
  .T                  (dq_tq[1])
5824
);
5825
 
5826
 
5827
wire aux_sdi_out_2;
5828
wire aux_sdi_out_3;
5829
/////////////////////////////////////////////////
5830
//DQ2
5831
////////////////////////////////////////////////
5832
IODRP2_MCB #(
5833
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5834
.IDELAY_VALUE         (DQ2_TAP_DELAY_VAL),  // 0 to 255 inclusive
5835
.MCB_ADDRESS          (1),  // 0 to 15
5836
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5837
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5838
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5839
 
5840
)
5841
iodrp2_dq_2
5842
(
5843
  .AUXSDO             (aux_sdi_out_2),
5844
  .DATAOUT(),
5845
  .DATAOUT2(),
5846
  .DOUT               (ioi_dq[2]),
5847
  .DQSOUTN(),
5848
  .DQSOUTP            (in_dq[2]),
5849
  .SDO(),
5850
  .TOUT               (t_dq[2]),
5851
  .ADD                (ioi_drp_add),
5852
  .AUXADDR            (ioi_drp_addr),
5853
  .AUXSDOIN           (aux_sdi_out_3),
5854
  .BKST               (ioi_drp_broadcast),
5855
  .CLK                (ioi_drp_clk),
5856
  .CS                 (ioi_drp_cs),
5857
  .IDATAIN            (in_pre_dq[2]),
5858
  .IOCLK0             (ioclk90),
5859
  .IOCLK1(1'b0),
5860
  .MEMUPDATE          (ioi_drp_update),
5861
  .ODATAIN            (dq_oq[2]),
5862
  .SDI                (ioi_drp_sdo),
5863
  .T                  (dq_tq[2])
5864
);
5865
 
5866
 
5867
/////////////////////////////////////////////////
5868
//DQ3
5869
////////////////////////////////////////////////
5870
IODRP2_MCB #(
5871
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5872
.IDELAY_VALUE         (DQ3_TAP_DELAY_VAL),  // 0 to 255 inclusive
5873
.MCB_ADDRESS          (1),  // 0 to 15
5874
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5875
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5876
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5877
 
5878
)
5879
iodrp2_dq_3
5880
(
5881
  .AUXSDO             (aux_sdi_out_3),
5882
  .DATAOUT(),
5883
  .DATAOUT2(),
5884
  .DOUT               (ioi_dq[3]),
5885
  .DQSOUTN(),
5886
  .DQSOUTP            (in_dq[3]),
5887
  .SDO(),
5888
  .TOUT               (t_dq[3]),
5889
  .ADD                (ioi_drp_add),
5890
  .AUXADDR            (ioi_drp_addr),
5891
  .AUXSDOIN           (aux_sdi_out_0),
5892
  .BKST               (ioi_drp_broadcast),
5893
  .CLK                (ioi_drp_clk),
5894
  .CS                 (ioi_drp_cs),
5895
  .IDATAIN            (in_pre_dq[3]),
5896
  .IOCLK0             (ioclk90),
5897
  .IOCLK1(1'b0),
5898
  .MEMUPDATE          (ioi_drp_update),
5899
  .ODATAIN            (dq_oq[3]),
5900
  .SDI                (ioi_drp_sdo),
5901
  .T                  (dq_tq[3])
5902
);
5903
 
5904
 
5905
wire aux_sdi_out_dqsp;
5906
wire aux_sdi_out_dqsn;
5907
/////////
5908
//DQSP
5909
/////////
5910
IODRP2_MCB #(
5911
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
5912
.IDELAY_VALUE         (LDQSP_TAP_DELAY_VAL),  // 0 to 255 inclusive
5913
.MCB_ADDRESS          (15),  // 0 to 15
5914
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5915
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5916
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5917
 
5918
)
5919
iodrp2_dqsp_0
5920
(
5921
  .AUXSDO             (aux_sdi_out_dqsp),
5922
  .DATAOUT(),
5923
  .DATAOUT2(),
5924
  .DOUT               (ioi_dqs),
5925
  .DQSOUTN(),
5926
  .DQSOUTP            (idelay_dqs_ioi_m),
5927
  .SDO(),
5928
  .TOUT               (t_dqs),
5929
  .ADD                (ioi_drp_add),
5930
  .AUXADDR            (ioi_drp_addr),
5931
  .AUXSDOIN           (aux_sdi_out_dqsn),
5932
  .BKST               (ioi_drp_broadcast),
5933
  .CLK                (ioi_drp_clk),
5934
  .CS                 (ioi_drp_cs),
5935
  .IDATAIN            (in_pre_dqsp),
5936
  .IOCLK0             (ioclk0),
5937
  .IOCLK1(1'b0),
5938
  .MEMUPDATE          (ioi_drp_update),
5939
  .ODATAIN            (dqsp_oq),
5940
  .SDI                (ioi_drp_sdo),
5941
  .T                  (dqsp_tq)
5942
);
5943
 
5944
/////////
5945
//DQSN
5946
/////////
5947
IODRP2_MCB #(
5948
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
5949
.IDELAY_VALUE         (LDQSN_TAP_DELAY_VAL),  // 0 to 255 inclusive
5950
.MCB_ADDRESS          (15),  // 0 to 15
5951
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5952
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
5953
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5954
 
5955
)
5956
iodrp2_dqsn_0
5957
(
5958
  .AUXSDO             (aux_sdi_out_dqsn),
5959
  .DATAOUT(),
5960
  .DATAOUT2(),
5961
  .DOUT               (ioi_dqsn),
5962
  .DQSOUTN(),
5963
  .DQSOUTP            (idelay_dqs_ioi_s),
5964
  .SDO(),
5965
  .TOUT               (t_dqsn),
5966
  .ADD                (ioi_drp_add),
5967
  .AUXADDR            (ioi_drp_addr),
5968
  .AUXSDOIN           (aux_sdi_out_2),
5969
  .BKST               (ioi_drp_broadcast),
5970
  .CLK                (ioi_drp_clk),
5971
  .CS                 (ioi_drp_cs),
5972
  .IDATAIN            (in_pre_dqsp),
5973
  .IOCLK0             (ioclk0),
5974
  .IOCLK1(1'b0),
5975
  .MEMUPDATE          (ioi_drp_update),
5976
  .ODATAIN            (dqsn_oq),
5977
  .SDI                (ioi_drp_sdo),
5978
  .T                  (dqsn_tq)
5979
);
5980
 
5981
wire aux_sdi_out_6;
5982
wire aux_sdi_out_7;
5983
/////////////////////////////////////////////////
5984
//DQ6
5985
////////////////////////////////////////////////
5986
IODRP2_MCB #(
5987
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
5988
.IDELAY_VALUE         (DQ6_TAP_DELAY_VAL),  // 0 to 255 inclusive
5989
.MCB_ADDRESS          (3),  // 0 to 15
5990
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
5991
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
5992
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
5993
 
5994
)
5995
iodrp2_dq_6
5996
(
5997
  .AUXSDO             (aux_sdi_out_6),
5998
  .DATAOUT(),
5999
  .DATAOUT2(),
6000
  .DOUT               (ioi_dq[6]),
6001
  .DQSOUTN(),
6002
  .DQSOUTP            (in_dq[6]),
6003
  .SDO(),
6004
  .TOUT               (t_dq[6]),
6005
  .ADD                (ioi_drp_add),
6006
  .AUXADDR            (ioi_drp_addr),
6007
  .AUXSDOIN           (aux_sdi_out_7),
6008
  .BKST               (ioi_drp_broadcast),
6009
  .CLK                (ioi_drp_clk),
6010
  .CS                 (ioi_drp_cs),
6011
  .IDATAIN            (in_pre_dq[6]),
6012
  .IOCLK0             (ioclk90),
6013
  .IOCLK1(1'b0),
6014
  .MEMUPDATE          (ioi_drp_update),
6015
  .ODATAIN            (dq_oq[6]),
6016
  .SDI                (ioi_drp_sdo),
6017
  .T                  (dq_tq[6])
6018
);
6019
 
6020
/////////////////////////////////////////////////
6021
//DQ7
6022
////////////////////////////////////////////////
6023
IODRP2_MCB #(
6024
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6025
.IDELAY_VALUE         (DQ7_TAP_DELAY_VAL),  // 0 to 255 inclusive
6026
.MCB_ADDRESS          (3),  // 0 to 15
6027
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6028
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
6029
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6030
 
6031
)
6032
iodrp2_dq_7
6033
(
6034
  .AUXSDO             (aux_sdi_out_7),
6035
  .DATAOUT(),
6036
  .DATAOUT2(),
6037
  .DOUT               (ioi_dq[7]),
6038
  .DQSOUTN(),
6039
  .DQSOUTP            (in_dq[7]),
6040
  .SDO(),
6041
  .TOUT               (t_dq[7]),
6042
  .ADD                (ioi_drp_add),
6043
  .AUXADDR            (ioi_drp_addr),
6044
  .AUXSDOIN           (aux_sdi_out_dqsp),
6045
  .BKST               (ioi_drp_broadcast),
6046
  .CLK                (ioi_drp_clk),
6047
  .CS                 (ioi_drp_cs),
6048
  .IDATAIN            (in_pre_dq[7]),
6049
  .IOCLK0             (ioclk90),
6050
  .IOCLK1(1'b0),
6051
  .MEMUPDATE          (ioi_drp_update),
6052
  .ODATAIN            (dq_oq[7]),
6053
  .SDI                (ioi_drp_sdo),
6054
  .T                  (dq_tq[7])
6055
);
6056
 
6057
 
6058
 
6059
wire aux_sdi_out_4;
6060
wire aux_sdi_out_5;
6061
/////////////////////////////////////////////////
6062
//DQ4
6063
////////////////////////////////////////////////
6064
IODRP2_MCB #(
6065
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6066
.IDELAY_VALUE         (DQ4_TAP_DELAY_VAL),  // 0 to 255 inclusive
6067
.MCB_ADDRESS          (2),  // 0 to 15
6068
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6069
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
6070
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6071
 
6072
)
6073
iodrp2_dq_4
6074
(
6075
  .AUXSDO             (aux_sdi_out_4),
6076
  .DATAOUT(),
6077
  .DATAOUT2(),
6078
  .DOUT               (ioi_dq[4]),
6079
  .DQSOUTN(),
6080
  .DQSOUTP            (in_dq[4]),
6081
  .SDO(),
6082
  .TOUT               (t_dq[4]),
6083
  .ADD                (ioi_drp_add),
6084
  .AUXADDR            (ioi_drp_addr),
6085
  .AUXSDOIN           (aux_sdi_out_5),
6086
  .BKST               (ioi_drp_broadcast),
6087
  .CLK                (ioi_drp_clk),
6088
  .CS                 (ioi_drp_cs),
6089
  .IDATAIN            (in_pre_dq[4]),
6090
  .IOCLK0             (ioclk90),
6091
  .IOCLK1(1'b0),
6092
  .MEMUPDATE          (ioi_drp_update),
6093
  .ODATAIN            (dq_oq[4]),
6094
  .SDI                (ioi_drp_sdo),
6095
  .T                  (dq_tq[4])
6096
);
6097
 
6098
/////////////////////////////////////////////////
6099
//DQ5
6100
////////////////////////////////////////////////
6101
IODRP2_MCB #(
6102
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6103
.IDELAY_VALUE         (DQ5_TAP_DELAY_VAL),  // 0 to 255 inclusive
6104
.MCB_ADDRESS          (2),  // 0 to 15
6105
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6106
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
6107
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6108
 
6109
)
6110
iodrp2_dq_5
6111
(
6112
  .AUXSDO             (aux_sdi_out_5),
6113
  .DATAOUT(),
6114
  .DATAOUT2(),
6115
  .DOUT               (ioi_dq[5]),
6116
  .DQSOUTN(),
6117
  .DQSOUTP            (in_dq[5]),
6118
  .SDO(),
6119
  .TOUT               (t_dq[5]),
6120
  .ADD                (ioi_drp_add),
6121
  .AUXADDR            (ioi_drp_addr),
6122
  .AUXSDOIN           (aux_sdi_out_6),
6123
  .BKST               (ioi_drp_broadcast),
6124
  .CLK                (ioi_drp_clk),
6125
  .CS                 (ioi_drp_cs),
6126
  .IDATAIN            (in_pre_dq[5]),
6127
  .IOCLK0             (ioclk90),
6128
  .IOCLK1(1'b0),
6129
  .MEMUPDATE          (ioi_drp_update),
6130
  .ODATAIN            (dq_oq[5]),
6131
  .SDI                (ioi_drp_sdo),
6132
  .T                  (dq_tq[5])
6133
);
6134
 
6135
//NEED TO GENERATE UDM so that user won't instantiate in this location
6136
//wire aux_sdi_out_udm;
6137
wire aux_sdi_out_ldm;
6138
/////////////////////////////////////////////////
6139
//UDM
6140
////////////////////////////////////////////////
6141
IODRP2_MCB #(
6142
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6143
.IDELAY_VALUE         (0),  // 0 to 255 inclusive
6144
.MCB_ADDRESS          (8),  // 0 to 15
6145
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6146
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
6147
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6148
 
6149
)
6150
iodrp2_dq_udm
6151
(
6152
  .AUXSDO             (ioi_drp_sdi),
6153
  .DATAOUT(),
6154
  .DATAOUT2(),
6155
  .DOUT               (ioi_udm),
6156
  .DQSOUTN(),
6157
  .DQSOUTP(),
6158
  .SDO(),
6159
  .TOUT               (t_udm),
6160
  .ADD                (ioi_drp_add),
6161
  .AUXADDR            (ioi_drp_addr),
6162
  .AUXSDOIN           (aux_sdi_out_ldm),
6163
  .BKST               (ioi_drp_broadcast),
6164
  .CLK                (ioi_drp_clk),
6165
  .CS                 (ioi_drp_cs),
6166
  .IDATAIN(1'b0),
6167
  .IOCLK0             (ioclk90),
6168
  .IOCLK1(1'b0),
6169
  .MEMUPDATE          (ioi_drp_update),
6170
  .ODATAIN            (udm_oq),
6171
  .SDI                (ioi_drp_sdo),
6172
  .T                  (udm_t)
6173
);
6174
 
6175
 
6176
/////////////////////////////////////////////////
6177
//LDM
6178
////////////////////////////////////////////////
6179
IODRP2_MCB #(
6180
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6181
.IDELAY_VALUE         (0),  // 0 to 255 inclusive
6182
.MCB_ADDRESS          (8),  // 0 to 15
6183
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6184
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
6185
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6186
 
6187
)
6188
iodrp2_dq_ldm
6189
(
6190
  .AUXSDO             (aux_sdi_out_ldm),
6191
  .DATAOUT(),
6192
  .DATAOUT2(),
6193
  .DOUT               (ioi_ldm),
6194
  .DQSOUTN(),
6195
  .DQSOUTP(),
6196
  .SDO(),
6197
  .TOUT               (t_ldm),
6198
  .ADD                (ioi_drp_add),
6199
  .AUXADDR            (ioi_drp_addr),
6200
  .AUXSDOIN           (aux_sdi_out_4),
6201
  .BKST               (ioi_drp_broadcast),
6202
  .CLK                (ioi_drp_clk),
6203
  .CS                 (ioi_drp_cs),
6204
  .IDATAIN(1'b0),
6205
  .IOCLK0             (ioclk90),
6206
  .IOCLK1(1'b0),
6207
  .MEMUPDATE          (ioi_drp_update),
6208
  .ODATAIN            (ldm_oq),
6209
  .SDI                (ioi_drp_sdo),
6210
  .T                  (ldm_t)
6211
);
6212
end
6213
endgenerate
6214
 
6215
generate
6216
if(C_NUM_DQ_PINS == 4 ) begin : dq_3_0_data
6217
 
6218
wire aux_sdi_out_0;
6219
wire aux_sdi_out_1;
6220
/////////////////////////////////////////////////
6221
//DQ0
6222
////////////////////////////////////////////////
6223
IODRP2_MCB #(
6224
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6225
.IDELAY_VALUE         (DQ0_TAP_DELAY_VAL),  // 0 to 255 inclusive
6226
.MCB_ADDRESS          (0),  // 0 to 15
6227
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6228
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
6229
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6230
 
6231
)
6232
iodrp2_dq_0
6233
(
6234
  .AUXSDO             (aux_sdi_out_0),
6235
  .DATAOUT(),
6236
  .DATAOUT2(),
6237
  .DOUT               (ioi_dq[0]),
6238
  .DQSOUTN(),
6239
  .DQSOUTP            (in_dq[0]),
6240
  .SDO(),
6241
  .TOUT               (t_dq[0]),
6242
  .ADD                (ioi_drp_add),
6243
  .AUXADDR            (ioi_drp_addr),
6244
  .AUXSDOIN           (aux_sdi_out_1),
6245
  .BKST               (ioi_drp_broadcast),
6246
  .CLK                (ioi_drp_clk),
6247
  .CS                 (ioi_drp_cs),
6248
  .IDATAIN            (in_pre_dq[0]),
6249
  .IOCLK0             (ioclk90),
6250
  .IOCLK1(1'b0),
6251
  .MEMUPDATE          (ioi_drp_update),
6252
  .ODATAIN            (dq_oq[0]),
6253
  .SDI                (ioi_drp_sdo),
6254
  .T                  (dq_tq[0])
6255
);
6256
 
6257
 
6258
/////////////////////////////////////////////////
6259
//DQ1
6260
////////////////////////////////////////////////
6261
IODRP2_MCB #(
6262
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6263
.IDELAY_VALUE         (DQ1_TAP_DELAY_VAL),  // 0 to 255 inclusive
6264
.MCB_ADDRESS          (0),  // 0 to 15
6265
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6266
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
6267
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6268
 
6269
)
6270
iodrp2_dq_1
6271
(
6272
  .AUXSDO             (aux_sdi_out_1),
6273
  .DATAOUT(),
6274
  .DATAOUT2(),
6275
  .DOUT               (ioi_dq[1]),
6276
  .DQSOUTN(),
6277
  .DQSOUTP            (in_dq[1]),
6278
  .SDO(),
6279
  .TOUT               (t_dq[1]),
6280
  .ADD                (ioi_drp_add),
6281
  .AUXADDR            (ioi_drp_addr),
6282
  .AUXSDOIN           (1'b0),
6283
  .BKST               (ioi_drp_broadcast),
6284
  .CLK                (ioi_drp_clk),
6285
  .CS                 (ioi_drp_cs),
6286
  .IDATAIN            (in_pre_dq[1]),
6287
  .IOCLK0             (ioclk90),
6288
  .IOCLK1(1'b0),
6289
  .MEMUPDATE          (ioi_drp_update),
6290
  .ODATAIN            (dq_oq[1]),
6291
  .SDI                (ioi_drp_sdo),
6292
  .T                  (dq_tq[1])
6293
);
6294
 
6295
 
6296
wire aux_sdi_out_2;
6297
wire aux_sdi_out_3;
6298
/////////////////////////////////////////////////
6299
//DQ2
6300
////////////////////////////////////////////////
6301
IODRP2_MCB #(
6302
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6303
.IDELAY_VALUE         (DQ2_TAP_DELAY_VAL),  // 0 to 255 inclusive
6304
.MCB_ADDRESS          (1),  // 0 to 15
6305
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6306
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
6307
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6308
 
6309
)
6310
iodrp2_dq_2
6311
(
6312
  .AUXSDO             (aux_sdi_out_2),
6313
  .DATAOUT(),
6314
  .DATAOUT2(),
6315
  .DOUT               (ioi_dq[2]),
6316
  .DQSOUTN(),
6317
  .DQSOUTP            (in_dq[2]),
6318
  .SDO(),
6319
  .TOUT               (t_dq[2]),
6320
  .ADD                (ioi_drp_add),
6321
  .AUXADDR            (ioi_drp_addr),
6322
  .AUXSDOIN           (aux_sdi_out_3),
6323
  .BKST               (ioi_drp_broadcast),
6324
  .CLK                (ioi_drp_clk),
6325
  .CS                 (ioi_drp_cs),
6326
  .IDATAIN            (in_pre_dq[2]),
6327
  .IOCLK0             (ioclk90),
6328
  .IOCLK1(1'b0),
6329
  .MEMUPDATE          (ioi_drp_update),
6330
  .ODATAIN            (dq_oq[2]),
6331
  .SDI                (ioi_drp_sdo),
6332
  .T                  (dq_tq[2])
6333
);
6334
 
6335
 
6336
/////////////////////////////////////////////////
6337
//DQ3
6338
////////////////////////////////////////////////
6339
IODRP2_MCB #(
6340
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6341
.IDELAY_VALUE         (DQ3_TAP_DELAY_VAL),  // 0 to 255 inclusive
6342
.MCB_ADDRESS          (1),  // 0 to 15
6343
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6344
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
6345
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6346
 
6347
)
6348
iodrp2_dq_3
6349
(
6350
  .AUXSDO             (aux_sdi_out_3),
6351
  .DATAOUT(),
6352
  .DATAOUT2(),
6353
  .DOUT               (ioi_dq[3]),
6354
  .DQSOUTN(),
6355
  .DQSOUTP            (in_dq[3]),
6356
  .SDO(),
6357
  .TOUT               (t_dq[3]),
6358
  .ADD                (ioi_drp_add),
6359
  .AUXADDR            (ioi_drp_addr),
6360
  .AUXSDOIN           (aux_sdi_out_0),
6361
  .BKST               (ioi_drp_broadcast),
6362
  .CLK                (ioi_drp_clk),
6363
  .CS                 (ioi_drp_cs),
6364
  .IDATAIN            (in_pre_dq[3]),
6365
  .IOCLK0             (ioclk90),
6366
  .IOCLK1(1'b0),
6367
  .MEMUPDATE          (ioi_drp_update),
6368
  .ODATAIN            (dq_oq[3]),
6369
  .SDI                (ioi_drp_sdo),
6370
  .T                  (dq_tq[3])
6371
);
6372
 
6373
 
6374
wire aux_sdi_out_dqsp;
6375
wire aux_sdi_out_dqsn;
6376
/////////
6377
//DQSP
6378
/////////
6379
IODRP2_MCB #(
6380
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
6381
.IDELAY_VALUE         (LDQSP_TAP_DELAY_VAL),  // 0 to 255 inclusive
6382
.MCB_ADDRESS          (15),  // 0 to 15
6383
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6384
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
6385
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6386
 
6387
)
6388
iodrp2_dqsp_0
6389
(
6390
  .AUXSDO             (aux_sdi_out_dqsp),
6391
  .DATAOUT(),
6392
  .DATAOUT2(),
6393
  .DOUT               (ioi_dqs),
6394
  .DQSOUTN(),
6395
  .DQSOUTP            (idelay_dqs_ioi_m),
6396
  .SDO(),
6397
  .TOUT               (t_dqs),
6398
  .ADD                (ioi_drp_add),
6399
  .AUXADDR            (ioi_drp_addr),
6400
  .AUXSDOIN           (aux_sdi_out_dqsn),
6401
  .BKST               (ioi_drp_broadcast),
6402
  .CLK                (ioi_drp_clk),
6403
  .CS                 (ioi_drp_cs),
6404
  .IDATAIN            (in_pre_dqsp),
6405
  .IOCLK0             (ioclk0),
6406
  .IOCLK1(1'b0),
6407
  .MEMUPDATE          (ioi_drp_update),
6408
  .ODATAIN            (dqsp_oq),
6409
  .SDI                (ioi_drp_sdo),
6410
  .T                  (dqsp_tq)
6411
);
6412
 
6413
/////////
6414
//DQSN
6415
/////////
6416
IODRP2_MCB #(
6417
.DATA_RATE            (C_DQS_IODRP2_DATA_RATE),   // "SDR", "DDR"
6418
.IDELAY_VALUE         (LDQSN_TAP_DELAY_VAL),  // 0 to 255 inclusive
6419
.MCB_ADDRESS          (15),  // 0 to 15
6420
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6421
.SERDES_MODE          (C_DQS_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
6422
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6423
 
6424
)
6425
iodrp2_dqsn_0
6426
(
6427
  .AUXSDO             (aux_sdi_out_dqsn),
6428
  .DATAOUT(),
6429
  .DATAOUT2(),
6430
  .DOUT               (ioi_dqsn),
6431
  .DQSOUTN(),
6432
  .DQSOUTP            (idelay_dqs_ioi_s),
6433
  .SDO(),
6434
  .TOUT               (t_dqsn),
6435
  .ADD                (ioi_drp_add),
6436
  .AUXADDR            (ioi_drp_addr),
6437
  .AUXSDOIN           (aux_sdi_out_2),
6438
  .BKST               (ioi_drp_broadcast),
6439
  .CLK                (ioi_drp_clk),
6440
  .CS                 (ioi_drp_cs),
6441
  .IDATAIN            (in_pre_dqsp),
6442
  .IOCLK0             (ioclk0),
6443
  .IOCLK1(1'b0),
6444
  .MEMUPDATE          (ioi_drp_update),
6445
  .ODATAIN            (dqsn_oq),
6446
  .SDI                (ioi_drp_sdo),
6447
  .T                  (dqsn_tq)
6448
);
6449
 
6450
//NEED TO GENERATE UDM so that user won't instantiate in this location
6451
//wire aux_sdi_out_udm;
6452
wire aux_sdi_out_ldm;
6453
/////////////////////////////////////////////////
6454
//UDM
6455
////////////////////////////////////////////////
6456
IODRP2_MCB #(
6457
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6458
.IDELAY_VALUE         (0),  // 0 to 255 inclusive
6459
.MCB_ADDRESS          (8),  // 0 to 15
6460
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6461
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_MASTER),   // "NONE", "MASTER", "SLAVE"
6462
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6463
 
6464
)
6465
iodrp2_dq_udm
6466
(
6467
  .AUXSDO             (ioi_drp_sdi),
6468
  .DATAOUT(),
6469
  .DATAOUT2(),
6470
  .DOUT               (ioi_udm),
6471
  .DQSOUTN(),
6472
  .DQSOUTP(),
6473
  .SDO(),
6474
  .TOUT               (t_udm),
6475
  .ADD                (ioi_drp_add),
6476
  .AUXADDR            (ioi_drp_addr),
6477
  .AUXSDOIN           (aux_sdi_out_ldm),
6478
  .BKST               (ioi_drp_broadcast),
6479
  .CLK                (ioi_drp_clk),
6480
  .CS                 (ioi_drp_cs),
6481
  .IDATAIN(1'b0),
6482
  .IOCLK0             (ioclk90),
6483
  .IOCLK1(1'b0),
6484
  .MEMUPDATE          (ioi_drp_update),
6485
  .ODATAIN            (udm_oq),
6486
  .SDI                (ioi_drp_sdo),
6487
  .T                  (udm_t)
6488
);
6489
 
6490
 
6491
/////////////////////////////////////////////////
6492
//LDM
6493
////////////////////////////////////////////////
6494
IODRP2_MCB #(
6495
.DATA_RATE            (C_DQ_IODRP2_DATA_RATE),   // "SDR", "DDR"
6496
.IDELAY_VALUE         (0),  // 0 to 255 inclusive
6497
.MCB_ADDRESS          (8),  // 0 to 15
6498
.ODELAY_VALUE         (0),  // 0 to 255 inclusive
6499
.SERDES_MODE          (C_DQ_IODRP2_SERDES_MODE_SLAVE),   // "NONE", "MASTER", "SLAVE"
6500
.SIM_TAPDELAY_VALUE   (10)  // 10 to 90 inclusive
6501
 
6502
)
6503
iodrp2_dq_ldm
6504
(
6505
  .AUXSDO             (aux_sdi_out_ldm),
6506
  .DATAOUT(),
6507
  .DATAOUT2(),
6508
  .DOUT               (ioi_ldm),
6509
  .DQSOUTN(),
6510
  .DQSOUTP(),
6511
  .SDO(),
6512
  .TOUT               (t_ldm),
6513
  .ADD                (ioi_drp_add),
6514
  .AUXADDR            (ioi_drp_addr),
6515
  .AUXSDOIN           (aux_sdi_out_4),
6516
  .BKST               (ioi_drp_broadcast),
6517
  .CLK                (ioi_drp_clk),
6518
  .CS                 (ioi_drp_cs),
6519
  .IDATAIN(),
6520
  .IOCLK0             (ioclk90),
6521
  .IOCLK1(1'b0),
6522
  .MEMUPDATE          (ioi_drp_update),
6523
  .ODATAIN            (ldm_oq),
6524
  .SDI                (ioi_drp_sdo),
6525
  .T                  (ldm_t)
6526
);
6527
 
6528
end
6529
endgenerate
6530
 
6531
 ////////////////////////////////////////////////
6532
 //IOBs instantiations
6533
 // this part need more inputs from design team 
6534
 // for now just use as listed in fpga.v
6535
 ////////////////////////////////////////////////
6536
 
6537
 
6538
//// Address
6539
 
6540
genvar addr_i;
6541
   generate
6542
      for(addr_i = 0; addr_i < C_MEM_ADDR_WIDTH; addr_i = addr_i + 1) begin : gen_addr_obuft
6543
        OBUFT iob_addr_inst
6544
        (.I  ( ioi_addr[addr_i]),
6545
         .T   ( t_addr[addr_i]),
6546
         .O ( mcbx_dram_addr[addr_i])
6547
        );
6548
      end
6549
   endgenerate
6550
 
6551
genvar ba_i;
6552
   generate
6553
      for(ba_i = 0; ba_i < C_MEM_BANKADDR_WIDTH; ba_i = ba_i + 1) begin : gen_ba_obuft
6554
        OBUFT iob_ba_inst
6555
        (.I  ( ioi_ba[ba_i]),
6556
         .T   ( t_ba[ba_i]),
6557
         .O ( mcbx_dram_ba[ba_i])
6558
        );
6559
      end
6560
   endgenerate
6561
 
6562
 
6563
 
6564
// DRAM Control
6565
OBUFT iob_ras (.O(mcbx_dram_ras_n),.I(ioi_ras),.T(t_ras));
6566
OBUFT iob_cas (.O(mcbx_dram_cas_n),.I(ioi_cas),.T(t_cas));
6567
OBUFT iob_we  (.O(mcbx_dram_we_n ),.I(ioi_we ),.T(t_we ));
6568
OBUFT iob_cke (.O(mcbx_dram_cke),.I(ioi_cke),.T(t_cke));
6569
 
6570
generate
6571
if (C_MEM_TYPE == "DDR3") begin : gen_ddr3_rst
6572
OBUFT iob_rst (.O(mcbx_dram_ddr3_rst),.I(ioi_rst),.T(t_rst));
6573
end
6574
endgenerate
6575
generate
6576
if((C_MEM_TYPE == "DDR3"  && (C_MEM_DDR3_RTT != "OFF" || C_MEM_DDR3_DYN_WRT_ODT != "OFF"))
6577
 ||(C_MEM_TYPE == "DDR2" &&  C_MEM_DDR2_RTT != "OFF") ) begin : gen_dram_odt
6578
OBUFT iob_odt (.O(mcbx_dram_odt),.I(ioi_odt),.T(t_odt));
6579
end
6580
endgenerate
6581
 
6582
// Clock
6583
OBUFTDS iob_clk  (.I(ioi_ck), .T(t_ck), .O(mcbx_dram_clk), .OB(mcbx_dram_clk_n));
6584
 
6585
//DQ
6586
genvar dq_i;
6587
generate
6588
      for(dq_i = 0; dq_i < C_NUM_DQ_PINS; dq_i = dq_i + 1) begin : gen_dq_iobuft
6589
         IOBUF gen_iob_dq_inst (.IO(mcbx_dram_dq[dq_i]),.I(ioi_dq[dq_i]),.T(t_dq[dq_i]),.O(in_pre_dq[dq_i]));
6590
      end
6591
endgenerate
6592
 
6593
 
6594
// DQS
6595
generate
6596
if(C_MEM_TYPE == "DDR" || C_MEM_TYPE =="MDDR" || (C_MEM_TYPE == "DDR2" && (C_MEM_DDR2_DIFF_DQS_EN == "NO"))) begin: gen_dqs_iobuf
6597
IOBUF iob_dqs  (.IO(mcbx_dram_dqs), .I(ioi_dqs),.T(t_dqs),.O(in_pre_dqsp));
6598
end else begin: gen_dqs_iobufds
6599
IOBUFDS iob_dqs  (.IO(mcbx_dram_dqs),.IOB(mcbx_dram_dqs_n), .I(ioi_dqs),.T(t_dqs),.O(in_pre_dqsp));
6600
 
6601
end
6602
endgenerate
6603
 
6604
generate
6605
if((C_MEM_TYPE == "DDR" || C_MEM_TYPE =="MDDR" || (C_MEM_TYPE == "DDR2" && (C_MEM_DDR2_DIFF_DQS_EN == "NO"))) && C_NUM_DQ_PINS == 16) begin: gen_udqs_iobuf
6606
IOBUF iob_udqs  (.IO(mcbx_dram_udqs), .I(ioi_udqs),.T(t_udqs),.O(in_pre_udqsp));
6607
end else if(C_NUM_DQ_PINS == 16) begin: gen_udqs_iobufds
6608
IOBUFDS iob_udqs  (.IO(mcbx_dram_udqs),.IOB(mcbx_dram_udqs_n), .I(ioi_udqs),.T(t_udqs),.O(in_pre_udqsp));
6609
 
6610
end
6611
endgenerate
6612
 
6613
// DQS PULLDWON
6614
generate
6615
if(C_MEM_TYPE == "DDR" || C_MEM_TYPE =="MDDR" || (C_MEM_TYPE == "DDR2" && (C_MEM_DDR2_DIFF_DQS_EN == "NO"))) begin: gen_dqs_pullupdn
6616
PULLDOWN dqs_pulldown (.O(mcbx_dram_dqs));
6617
end else begin: gen_dqs_pullupdn_ds
6618
PULLDOWN dqs_pulldown (.O(mcbx_dram_dqs));
6619
PULLUP dqs_n_pullup (.O(mcbx_dram_dqs_n));
6620
 
6621
end
6622
endgenerate
6623
 
6624
// DQSN PULLUP
6625
generate
6626
if((C_MEM_TYPE == "DDR" || C_MEM_TYPE =="MDDR" || (C_MEM_TYPE == "DDR2" && (C_MEM_DDR2_DIFF_DQS_EN == "NO"))) && C_NUM_DQ_PINS == 16) begin: gen_udqs_pullupdn
6627
PULLDOWN udqs_pulldown (.O(mcbx_dram_udqs));
6628
end else if(C_NUM_DQ_PINS == 16) begin: gen_udqs_pullupdn_ds
6629
PULLDOWN udqs_pulldown (.O(mcbx_dram_udqs));
6630
PULLUP   udqs_n_pullup (.O(mcbx_dram_udqs_n));
6631
 
6632
end
6633
endgenerate
6634
 
6635
 
6636
 
6637
 
6638
//DM
6639
//  datamask generation
6640
generate
6641
if( C_NUM_DQ_PINS == 16) begin : gen_udm
6642
OBUFT iob_udm (.I(ioi_udm), .T(t_udm), .O(mcbx_dram_udm));
6643
end
6644
endgenerate
6645
 
6646
OBUFT iob_ldm (.I(ioi_ldm), .T(t_ldm), .O(mcbx_dram_ldm));
6647
 
6648
endmodule
6649
 

powered by: WebSVN 2.1.0

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