diff options
Diffstat (limited to 'fpga/usrp3/top/x300/sim/x300_tb.v')
-rw-r--r-- | fpga/usrp3/top/x300/sim/x300_tb.v | 848 |
1 files changed, 848 insertions, 0 deletions
diff --git a/fpga/usrp3/top/x300/sim/x300_tb.v b/fpga/usrp3/top/x300/sim/x300_tb.v new file mode 100644 index 000000000..cd98f33b3 --- /dev/null +++ b/fpga/usrp3/top/x300/sim/x300_tb.v @@ -0,0 +1,848 @@ +`timescale 1ps / 1ps + +module x300_tb(); + + /////////////////// START FROM XILINX TB /////////////////////////// + + //*************************************************************************** + // Traffic Gen related parameters + //*************************************************************************** + parameter SIMULATION = "TRUE"; + parameter BL_WIDTH = 10; + parameter PORT_MODE = "BI_MODE"; + parameter DATA_MODE = 4'b0010; + parameter ADDR_MODE = 4'b0011; + parameter TST_MEM_INSTR_MODE = "R_W_INSTR_MODE"; + parameter EYE_TEST = "FALSE"; + // set EYE_TEST = "TRUE" to probe memory + // signals. Traffic Generator will only + // write to one single location and no + // read transactions will be generated. + parameter DATA_PATTERN = "DGEN_ALL"; + // For small devices, choose one only. + // For large device, choose "DGEN_ALL" + // "DGEN_HAMMER", "DGEN_WALKING1", + // "DGEN_WALKING0","DGEN_ADDR"," + // "DGEN_NEIGHBOR","DGEN_PRBS","DGEN_ALL" + parameter CMD_PATTERN = "CGEN_ALL"; + // "CGEN_PRBS","CGEN_FIXED","CGEN_BRAM", + // "CGEN_SEQUENTIAL", "CGEN_ALL" + parameter BEGIN_ADDRESS = 32'h00000000; + parameter END_ADDRESS = 32'h00000fff; + parameter PRBS_EADDR_MASK_POS = 32'hff000000; + parameter SEL_VICTIM_LINE = 11; + + //*************************************************************************** + // The following parameters refer to width of various ports + //*************************************************************************** + parameter BANK_WIDTH = 3; + // # of memory Bank Address bits. + parameter CK_WIDTH = 1; + // # of CK/CK# outputs to memory. + parameter COL_WIDTH = 10; + // # of memory Column Address bits. + parameter CS_WIDTH = 1; + // # of unique CS outputs to memory. + parameter nCS_PER_RANK = 1; + // # of unique CS outputs per rank for phy + parameter CKE_WIDTH = 1; + // # of CKE outputs to memory. + parameter DATA_BUF_ADDR_WIDTH = 5; + parameter DQ_CNT_WIDTH = 5; + // = ceil(log2(DQ_WIDTH)) + parameter DQ_PER_DM = 8; + parameter DM_WIDTH = 4; + // # of DM (data mask) + parameter DQ_WIDTH = 32; + // # of DQ (data) + parameter DQS_WIDTH = 4; + parameter DQS_CNT_WIDTH = 2; + // = ceil(log2(DQS_WIDTH)) + parameter DRAM_WIDTH = 8; + // # of DQ per DQS + parameter ECC = "OFF"; + parameter nBANK_MACHS = 4; + parameter RANKS = 1; + // # of Ranks. + parameter ODT_WIDTH = 1; + // # of ODT outputs to memory. + parameter ROW_WIDTH = 15; + // # of memory Row Address bits. + parameter ADDR_WIDTH = 29; + // # = RANK_WIDTH + BANK_WIDTH + // + ROW_WIDTH + COL_WIDTH; + // Chip Select is always tied to low for + // single rank devices + parameter USE_CS_PORT = 1; + // # = 1, When CS output is enabled + // = 0, When CS output is disabled + // If CS_N disabled, user must connect + // DRAM CS_N input(s) to ground + parameter USE_DM_PORT = 1; + // # = 1, When Data Mask option is enabled + // = 0, When Data Mask option is disbaled + // When Data Mask option is disabled in + // MIG Controller Options page, the logic + // related to Data Mask should not get + // synthesized + parameter USE_ODT_PORT = 1; + // # = 1, When ODT output is enabled + // = 0, When ODT output is disabled + + //*************************************************************************** + // The following parameters are mode register settings + //*************************************************************************** + parameter AL = "0"; + // DDR3 SDRAM: + // Additive Latency (Mode Register 1). + // # = "0", "CL-1", "CL-2". + // DDR2 SDRAM: + // Additive Latency (Extended Mode Register). + parameter nAL = 0; + // # Additive Latency in number of clock + // cycles. + parameter BURST_MODE = "8"; + // DDR3 SDRAM: + // Burst Length (Mode Register 0). + // # = "8", "4", "OTF". + // DDR2 SDRAM: + // Burst Length (Mode Register). + // # = "8", "4". + parameter BURST_TYPE = "SEQ"; + // DDR3 SDRAM: Burst Type (Mode Register 0). + // DDR2 SDRAM: Burst Type (Mode Register). + // # = "SEQ" - (Sequential), + // = "INT" - (Interleaved). + parameter CL = 7; + // in number of clock cycles + // DDR3 SDRAM: CAS Latency (Mode Register 0). + // DDR2 SDRAM: CAS Latency (Mode Register). + parameter CWL = 6; + // in number of clock cycles + // DDR3 SDRAM: CAS Write Latency (Mode Register 2). + // DDR2 SDRAM: Can be ignored + parameter OUTPUT_DRV = "HIGH"; + // Output Driver Impedance Control (Mode Register 1). + // # = "HIGH" - RZQ/7, + // = "LOW" - RZQ/6. + parameter RTT_NOM = "60"; + // RTT_NOM (ODT) (Mode Register 1). + // # = "DISABLED" - RTT_NOM disabled, + // = "120" - RZQ/2, + // = "60" - RZQ/4, + // = "40" - RZQ/6. + parameter RTT_WR = "OFF"; + // RTT_WR (ODT) (Mode Register 2). + // # = "OFF" - Dynamic ODT off, + // = "120" - RZQ/2, + // = "60" - RZQ/4, + parameter ADDR_CMD_MODE = "1T" ; + // # = "1T", "2T". + parameter REG_CTRL = "OFF"; + // # = "ON" - RDIMMs, + // = "OFF" - Components, SODIMMs, UDIMMs. + parameter CA_MIRROR = "OFF"; + // C/A mirror opt for DDR3 dual rank + + //*************************************************************************** + // The following parameters are multiplier and divisor factors for PLLE2. + // Based on the selected design frequency these parameters vary. + //*************************************************************************** + parameter CLKIN_PERIOD = 10000; + // Input Clock Period + parameter CLKFBOUT_MULT = 10; + // write PLL VCO multiplier + parameter DIVCLK_DIVIDE = 1; + // write PLL VCO divisor + parameter CLKOUT0_DIVIDE = 2; + // VCO output divisor for PLL output clock (CLKOUT0) + parameter CLKOUT1_DIVIDE = 2; + // VCO output divisor for PLL output clock (CLKOUT1) + parameter CLKOUT2_DIVIDE = 32; + // VCO output divisor for PLL output clock (CLKOUT2) + parameter CLKOUT3_DIVIDE = 8; + // VCO output divisor for PLL output clock (CLKOUT3) + + //*************************************************************************** + // Memory Timing Parameters. These parameters varies based on the selected + // memory part. + //*************************************************************************** + parameter tCKE = 5000; + // memory tCKE paramter in pS + parameter tFAW = 30000; + // memory tRAW paramter in pS. + parameter tRAS = 35000; + // memory tRAS paramter in pS. + parameter tRCD = 13750; + // memory tRCD paramter in pS. + parameter tREFI = 7800000; + // memory tREFI paramter in pS. + parameter tRFC = 300000; + // memory tRFC paramter in pS. + parameter tRP = 13750; + // memory tRP paramter in pS. + parameter tRRD = 6000; + // memory tRRD paramter in pS. + parameter tRTP = 7500; + // memory tRTP paramter in pS. + parameter tWTR = 7500; + // memory tWTR paramter in pS. + parameter tZQI = 128_000_000; + // memory tZQI paramter in nS. + parameter tZQCS = 64; + // memory tZQCS paramter in clock cycles. + + //*************************************************************************** + // Simulation parameters + //*************************************************************************** + parameter SIM_BYPASS_INIT_CAL = "FAST"; + // # = "SIM_INIT_CAL_FULL" - Complete + // memory init & + // calibration sequence + // # = "SKIP" - Not supported + // # = "FAST" - Complete memory init & use + // abbreviated calib sequence + + //*************************************************************************** + // The following parameters varies based on the pin out entered in MIG GUI. + // Do not change any of these parameters directly by editing the RTL. + // Any changes required should be done through GUI and the design regenerated. + //*************************************************************************** + parameter BYTE_LANES_B0 = 4'b1111; + // Byte lanes used in an IO column. + parameter BYTE_LANES_B1 = 4'b1110; + // Byte lanes used in an IO column. + parameter BYTE_LANES_B2 = 4'b0000; + // Byte lanes used in an IO column. + parameter BYTE_LANES_B3 = 4'b0000; + // Byte lanes used in an IO column. + parameter BYTE_LANES_B4 = 4'b0000; + // Byte lanes used in an IO column. + parameter DATA_CTL_B0 = 4'b1111; + // Indicates Byte lane is data byte lane + // or control Byte lane. '1' in a bit + // position indicates a data byte lane and + // a '0' indicates a control byte lane + parameter DATA_CTL_B1 = 4'b0000; + // Indicates Byte lane is data byte lane + // or control Byte lane. '1' in a bit + // position indicates a data byte lane and + // a '0' indicates a control byte lane + parameter DATA_CTL_B2 = 4'b0000; + // Indicates Byte lane is data byte lane + // or control Byte lane. '1' in a bit + // position indicates a data byte lane and + // a '0' indicates a control byte lane + parameter DATA_CTL_B3 = 4'b0000; + // Indicates Byte lane is data byte lane + // or control Byte lane. '1' in a bit + // position indicates a data byte lane and + // a '0' indicates a control byte lane + parameter DATA_CTL_B4 = 4'b0000; + // Indicates Byte lane is data byte lane + // or control Byte lane. '1' in a bit + // position indicates a data byte lane and + // a '0' indicates a control byte lane + parameter PHY_0_BITLANES = 48'h3FE_3FE_3FE_2FF; + parameter PHY_1_BITLANES = 48'h3FF_FFF_C00_000; + parameter PHY_2_BITLANES = 48'h000_000_000_000; + + // control/address/data pin mapping parameters + parameter CK_BYTE_MAP + = 144'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_13; + parameter ADDR_MAP + = 192'h000_139_138_137_136_135_134_133_132_131_130_129_128_127_126_12B; + parameter BANK_MAP = 36'h12A_125_124; + parameter CAS_MAP = 12'h122; + parameter CKE_ODT_BYTE_MAP = 8'h00; + parameter CKE_MAP = 96'h000_000_000_000_000_000_000_11B; + parameter ODT_MAP = 96'h000_000_000_000_000_000_000_11A; + parameter CS_MAP = 120'h000_000_000_000_000_000_000_000_000_120; + parameter PARITY_MAP = 12'h000; + parameter RAS_MAP = 12'h123; + parameter WE_MAP = 12'h121; + parameter DQS_BYTE_MAP + = 144'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_02_03; + parameter DATA0_MAP = 96'h031_032_033_034_035_036_037_038; + parameter DATA1_MAP = 96'h021_022_023_024_025_026_027_028; + parameter DATA2_MAP = 96'h011_012_013_014_015_016_017_018; + parameter DATA3_MAP = 96'h000_001_002_003_004_005_006_007; + parameter DATA4_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA5_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA6_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA7_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA8_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA9_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA10_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA11_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA12_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA13_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA14_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA15_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA16_MAP = 96'h000_000_000_000_000_000_000_000; + parameter DATA17_MAP = 96'h000_000_000_000_000_000_000_000; + parameter MASK0_MAP = 108'h000_000_000_000_000_009_019_029_039; + parameter MASK1_MAP = 108'h000_000_000_000_000_000_000_000_000; + + parameter SLOT_0_CONFIG = 8'b0000_0001; + // Mapping of Ranks. + parameter SLOT_1_CONFIG = 8'b0000_0000; + // Mapping of Ranks. + parameter MEM_ADDR_ORDER + = "BANK_ROW_COLUMN"; + + //*************************************************************************** + // IODELAY and PHY related parameters + //*************************************************************************** + parameter IODELAY_HP_MODE = "ON"; + // to phy_top + parameter IBUF_LPWR_MODE = "OFF"; + // to phy_top + parameter DATA_IO_IDLE_PWRDWN = "ON"; + // # = "ON", "OFF" + parameter DATA_IO_PRIM_TYPE = "HP_LP"; + // # = "HP_LP", "HR_LP", "DEFAULT" + parameter USER_REFRESH = "OFF"; + parameter WRLVL = "ON"; + // # = "ON" - DDR3 SDRAM + // = "OFF" - DDR2 SDRAM. + parameter ORDERING = "NORM"; + // # = "NORM", "STRICT", "RELAXED". + parameter CALIB_ROW_ADD = 16'h0000; + // Calibration row address will be used for + // calibration read and write operations + parameter CALIB_COL_ADD = 12'h000; + // Calibration column address will be used for + // calibration read and write operations + parameter CALIB_BA_ADD = 3'h0; + // Calibration bank address will be used for + // calibration read and write operations + parameter TCQ = 100; + //*************************************************************************** + // IODELAY and PHY related parameters + //*************************************************************************** + parameter IODELAY_GRP = "IODELAY_MIG"; + // It is associated to a set of IODELAYs with + // an IDELAYCTRL that have same IODELAY CONTROLLER + // clock frequency. + parameter SYSCLK_TYPE = "SINGLE_ENDED"; + // System clock type DIFFERENTIAL, SINGLE_ENDED, + // NO_BUFFER + parameter REFCLK_TYPE = "NO_BUFFER"; + // Reference clock type DIFFERENTIAL, SINGLE_ENDED, + // NO_BUFFER, USE_SYSTEM_CLOCK + parameter RST_ACT_LOW = 1; + // =1 for active low reset, + // =0 for active high. + parameter CAL_WIDTH = "HALF"; + parameter STARVE_LIMIT = 2; + // # = 2,3,4. + + //*************************************************************************** + // Referece clock frequency parameters + //*************************************************************************** + parameter REFCLK_FREQ = 200.0; + // IODELAYCTRL reference clock frequency + //*************************************************************************** + // System clock frequency parameters + //*************************************************************************** + parameter tCK = 2000; + // memory tCK paramter. + // # = Clock Period in pS. + parameter nCK_PER_CLK = 4; + // # of memory CKs per fabric CLK + + + //*************************************************************************** + // AXI4 Shim parameters + //*************************************************************************** + parameter C_S_AXI_ID_WIDTH = 4; + // Width of all master and slave ID signals. + // # = >= 1. + parameter C_S_AXI_ADDR_WIDTH = 32; + // Width of S_AXI_AWADDR, S_AXI_ARADDR, M_AXI_AWADDR and + // M_AXI_ARADDR for all SI/MI slots. + // # = 32. + parameter C_S_AXI_DATA_WIDTH = 128; + // Width of WDATA and RDATA on SI slot. + // Must be <= APP_DATA_WIDTH. + // # = 32, 64, 128, 256. + parameter C_MC_nCK_PER_CLK = 4; + // Indicates whether to instatiate upsizer + // Range: 0, 1 + parameter C_S_AXI_SUPPORTS_NARROW_BURST = 1; + // Indicates whether to instatiate upsizer + // Range: 0, 1 + parameter C_RD_WR_ARB_ALGORITHM = "ROUND_ROBIN"; + // Indicates the Arbitration + // Allowed values - "TDM", "ROUND_ROBIN", + // "RD_PRI_REG", "RD_PRI_REG_STARVE_LIMIT" + parameter C_S_AXI_REG_EN0 = 20'h00000; + // C_S_AXI_REG_EN0[00] = Reserved + // C_S_AXI_REG_EN0[04] = AW CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN0[05] = W CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN0[06] = B CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN0[07] = R CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN0[08] = AW CHANNEL UPSIZER REGISTER SLICE + // C_S_AXI_REG_EN0[09] = W CHANNEL UPSIZER REGISTER SLICE + // C_S_AXI_REG_EN0[10] = AR CHANNEL UPSIZER REGISTER SLICE + // C_S_AXI_REG_EN0[11] = R CHANNEL UPSIZER REGISTER SLICE + parameter C_S_AXI_REG_EN1 = 20'h00000; + // Instatiates register slices after the upsizer. + // The type of register is specified for each channel + // in a vector. 4 bits per channel are used. + // C_S_AXI_REG_EN1[03:00] = AW CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN1[07:04] = W CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN1[11:08] = B CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN1[15:12] = AR CHANNEL REGISTER SLICE + // C_S_AXI_REG_EN1[20:16] = R CHANNEL REGISTER SLICE + // Possible values for each channel are: + // + // 0 => BYPASS = The channel is just wired through the + // module. + // 1 => FWD = The master VALID and payload signals + // are registrated. + // 2 => REV = The slave ready signal is registrated + // 3 => FWD_REV = Both FWD and REV + // 4 => SLAVE_FWD = All slave side signals and master + // VALID and payload are registrated. + // 5 => SLAVE_RDY = All slave side signals and master + // READY are registrated. + // 6 => INPUTS = Slave and Master side inputs are + // registrated. + // 7 => ADDRESS = Optimized for address channel + + //*************************************************************************** + // Debug and Internal parameters + //*************************************************************************** + parameter DEBUG_PORT = "OFF"; + // # = "ON" Enable debug signals/controls. + // = "OFF" Disable debug signals/controls. + //*************************************************************************** + // Debug and Internal parameters + //*************************************************************************** + parameter DRAM_TYPE = "DDR3"; + + + + //**************************************************************************// + // Local parameters Declarations + //**************************************************************************// + + localparam real TPROP_DQS = 0.00; + // Delay for DQS signal during Write Operation + localparam real TPROP_DQS_RD = 0.00; + // Delay for DQS signal during Read Operation + localparam real TPROP_PCB_CTRL = 0.00; + // Delay for Address and Ctrl signals + localparam real TPROP_PCB_DATA = 0.00; + // Delay for data signal during Write operation + localparam real TPROP_PCB_DATA_RD = 0.00; + // Delay for data signal during Read operation + + localparam MEMORY_WIDTH = 16; + localparam NUM_COMP = DQ_WIDTH/MEMORY_WIDTH; + + localparam real REFCLK_PERIOD = (1000000.0/(2*REFCLK_FREQ)); + localparam RESET_PERIOD = 200000; //in pSec + localparam real SYSCLK_PERIOD = tCK; + + ///////////////// END FROM XILINX TB ////////////////////////////////////////// + + wire [31:0] ddr3_dq; // Data pins. Input for Reads, Output for Writes. + wire [3:0] ddr3_dqs_n; // Data Strobes. Input for Reads, Output for Writes. + wire [3:0] ddr3_dqs_p; + wire [14:0] ddr3_addr; // Address + wire [2:0] ddr3_ba; // Bank Address + wire ddr3_ras_n; // Row Address Strobe. + wire ddr3_cas_n; // Column address select + wire ddr3_we_n; // Write Enable + wire ddr3_reset_n; // SDRAM reset pin. + wire ddr3_ck_p; // Differential clock + wire ddr3_ck_n; + wire ddr3_cke; // Clock Enable + wire ddr3_cs_n; // Chip Select + wire [3:0] ddr3_dm; // Data Mask [3] = UDM.U26, [2] = LDM.U26, ... + wire ddr3_odt; // On-Die termination enable. + reg sys_clk_i; // 100MHz clock source to generate DDR3 clocking. + reg FPGA_CLK_p, FPGA_CLK_n; + reg FPGA_125MHz_CLK; + + /////////////////////////////////////////////////////////// + // + // 120MHz differential clock source + // + /////////////////////////////////////////////////////////// + initial + begin + FPGA_CLK_p <= 0; + FPGA_CLK_n <= 1; + end + + always #4000 begin + FPGA_CLK_p <= ~FPGA_CLK_p; + FPGA_CLK_n <= ~FPGA_CLK_n; + end + + + /////////////////////////////////////////////////////////// + // + // 125MHz clock source + // + /////////////////////////////////////////////////////////// + initial FPGA_125MHz_CLK <= 0; + + always #4000 FPGA_125MHz_CLK <= ~FPGA_125MHz_CLK; + + /////////////////////////////////////////////////////////// + // + // 100MHz clock source for DDR3 + // + /////////////////////////////////////////////////////////// + initial + sys_clk_i <= 0; + + always #5000 sys_clk_i = ~sys_clk_i; + + /////////////////////////////////////////////////////////// + // + // 2x 4Gb DDR3 SDRAMS x16 + // + /////////////////////////////////////////////////////////// + + ddr3_model sdram0 ( + .rst_n(ddr3_reset_n), + .ck(ddr3_ck_p), + .ck_n(ddr3_ck_n), + .cke(ddr3_cke), + .cs_n(ddr3_cs_n), + .ras_n(ddr3_ras_n), + .cas_n(ddr3_cas_n), + .we_n(ddr3_we_n), + .dm_tdqs(ddr3_dm[1:0]), + .ba(ddr3_ba), + .addr(ddr3_addr), + .dq(ddr3_dq[15:0]), + .dqs(ddr3_dqs_p[1:0]), + .dqs_n(ddr3_dqs_n[1:0]), + .tdqs_n(), // Unused on x16 + .odt(ddr3_odt) + ); + + ddr3_model sdram1 ( + .rst_n(ddr3_reset_n), + .ck(ddr3_ck_p), + .ck_n(ddr3_ck_n), + .cke(ddr3_cke), + .cs_n(ddr3_cs_n), + .ras_n(ddr3_ras_n), + .cas_n(ddr3_cas_n), + .we_n(ddr3_we_n), + .dm_tdqs(ddr3_dm[3:2]), + .ba(ddr3_ba), + .addr(ddr3_addr), + .dq(ddr3_dq[31:16]), + .dqs(ddr3_dqs_p[3:2]), + .dqs_n(ddr3_dqs_n[3:2]), + .tdqs_n(), // Unused on x16 + .odt(ddr3_odt) + ); + + /////////////////////////////////////////////////////////// + // + // DUT + // + /////////////////////////////////////////////////////////// + + x300 # + ( + + .SIMULATION (SIMULATION), + .BL_WIDTH (BL_WIDTH), + .PORT_MODE (PORT_MODE), + .DATA_MODE (DATA_MODE), + .ADDR_MODE (ADDR_MODE), + .TST_MEM_INSTR_MODE (TST_MEM_INSTR_MODE), + .EYE_TEST (EYE_TEST), + .DATA_PATTERN (DATA_PATTERN), + .CMD_PATTERN (CMD_PATTERN), + .BEGIN_ADDRESS (BEGIN_ADDRESS), + .END_ADDRESS (END_ADDRESS), + .PRBS_EADDR_MASK_POS (PRBS_EADDR_MASK_POS), + .SEL_VICTIM_LINE (SEL_VICTIM_LINE), + + .BANK_WIDTH (BANK_WIDTH), + .CK_WIDTH (CK_WIDTH), + .COL_WIDTH (COL_WIDTH), + .CS_WIDTH (CS_WIDTH), + .nCS_PER_RANK (nCS_PER_RANK), + .CKE_WIDTH (CKE_WIDTH), + .DATA_BUF_ADDR_WIDTH (DATA_BUF_ADDR_WIDTH), + .DQ_CNT_WIDTH (DQ_CNT_WIDTH), + .DQ_PER_DM (DQ_PER_DM), + .DM_WIDTH (DM_WIDTH), + + .DQ_WIDTH (DQ_WIDTH), + .DQS_WIDTH (DQS_WIDTH), + .DQS_CNT_WIDTH (DQS_CNT_WIDTH), + .DRAM_WIDTH (DRAM_WIDTH), + .ECC (ECC), + .nBANK_MACHS (nBANK_MACHS), + .RANKS (RANKS), + .ODT_WIDTH (ODT_WIDTH), + .ROW_WIDTH (ROW_WIDTH), + .ADDR_WIDTH (ADDR_WIDTH), + .USE_CS_PORT (USE_CS_PORT), + .USE_DM_PORT (USE_DM_PORT), + .USE_ODT_PORT (USE_ODT_PORT), + + .AL (AL), + .nAL (nAL), + .BURST_MODE (BURST_MODE), + .BURST_TYPE (BURST_TYPE), + .CL (CL), + .CWL (CWL), + .OUTPUT_DRV (OUTPUT_DRV), + .RTT_NOM (RTT_NOM), + .RTT_WR (RTT_WR), + .ADDR_CMD_MODE (ADDR_CMD_MODE), + .REG_CTRL (REG_CTRL), + .CA_MIRROR (CA_MIRROR), + + + .CLKIN_PERIOD (CLKIN_PERIOD), + .CLKFBOUT_MULT (CLKFBOUT_MULT), + .DIVCLK_DIVIDE (DIVCLK_DIVIDE), + .CLKOUT0_DIVIDE (CLKOUT0_DIVIDE), + .CLKOUT1_DIVIDE (CLKOUT1_DIVIDE), + .CLKOUT2_DIVIDE (CLKOUT2_DIVIDE), + .CLKOUT3_DIVIDE (CLKOUT3_DIVIDE), + + + .tCKE (tCKE), + .tFAW (tFAW), + .tRAS (tRAS), + .tRCD (tRCD), + .tREFI (tREFI), + .tRFC (tRFC), + .tRP (tRP), + .tRRD (tRRD), + .tRTP (tRTP), + .tWTR (tWTR), + .tZQI (tZQI), + .tZQCS (tZQCS), + + .SIM_BYPASS_INIT_CAL (SIM_BYPASS_INIT_CAL), + + .BYTE_LANES_B0 (BYTE_LANES_B0), + .BYTE_LANES_B1 (BYTE_LANES_B1), + .BYTE_LANES_B2 (BYTE_LANES_B2), + .BYTE_LANES_B3 (BYTE_LANES_B3), + .BYTE_LANES_B4 (BYTE_LANES_B4), + .DATA_CTL_B0 (DATA_CTL_B0), + .DATA_CTL_B1 (DATA_CTL_B1), + .DATA_CTL_B2 (DATA_CTL_B2), + .DATA_CTL_B3 (DATA_CTL_B3), + .DATA_CTL_B4 (DATA_CTL_B4), + .PHY_0_BITLANES (PHY_0_BITLANES), + .PHY_1_BITLANES (PHY_1_BITLANES), + .PHY_2_BITLANES (PHY_2_BITLANES), + .CK_BYTE_MAP (CK_BYTE_MAP), + .ADDR_MAP (ADDR_MAP), + .BANK_MAP (BANK_MAP), + .CAS_MAP (CAS_MAP), + .CKE_ODT_BYTE_MAP (CKE_ODT_BYTE_MAP), + .CKE_MAP (CKE_MAP), + .ODT_MAP (ODT_MAP), + .CS_MAP (CS_MAP), + .PARITY_MAP (PARITY_MAP), + .RAS_MAP (RAS_MAP), + .WE_MAP (WE_MAP), + .DQS_BYTE_MAP (DQS_BYTE_MAP), + .DATA0_MAP (DATA0_MAP), + .DATA1_MAP (DATA1_MAP), + .DATA2_MAP (DATA2_MAP), + .DATA3_MAP (DATA3_MAP), + .DATA4_MAP (DATA4_MAP), + .DATA5_MAP (DATA5_MAP), + .DATA6_MAP (DATA6_MAP), + .DATA7_MAP (DATA7_MAP), + .DATA8_MAP (DATA8_MAP), + .DATA9_MAP (DATA9_MAP), + .DATA10_MAP (DATA10_MAP), + .DATA11_MAP (DATA11_MAP), + .DATA12_MAP (DATA12_MAP), + .DATA13_MAP (DATA13_MAP), + .DATA14_MAP (DATA14_MAP), + .DATA15_MAP (DATA15_MAP), + .DATA16_MAP (DATA16_MAP), + .DATA17_MAP (DATA17_MAP), + .MASK0_MAP (MASK0_MAP), + .MASK1_MAP (MASK1_MAP), + .SLOT_0_CONFIG (SLOT_0_CONFIG), + .SLOT_1_CONFIG (SLOT_1_CONFIG), + .MEM_ADDR_ORDER (MEM_ADDR_ORDER), + + .IODELAY_HP_MODE (IODELAY_HP_MODE), + .IBUF_LPWR_MODE (IBUF_LPWR_MODE), + .DATA_IO_IDLE_PWRDWN (DATA_IO_IDLE_PWRDWN), + .DATA_IO_PRIM_TYPE (DATA_IO_PRIM_TYPE), + .USER_REFRESH (USER_REFRESH), + .WRLVL (WRLVL), + .ORDERING (ORDERING), + .CALIB_ROW_ADD (CALIB_ROW_ADD), + .CALIB_COL_ADD (CALIB_COL_ADD), + .CALIB_BA_ADD (CALIB_BA_ADD), + .TCQ (TCQ), + + + .IODELAY_GRP (IODELAY_GRP), + .SYSCLK_TYPE (SYSCLK_TYPE), + .REFCLK_TYPE (REFCLK_TYPE), + .DRAM_TYPE (DRAM_TYPE), + .CAL_WIDTH (CAL_WIDTH), + .STARVE_LIMIT (STARVE_LIMIT), + + + .REFCLK_FREQ (REFCLK_FREQ), + + + .tCK (tCK), + .nCK_PER_CLK (nCK_PER_CLK), + + + .C_S_AXI_ID_WIDTH (C_S_AXI_ID_WIDTH), + .C_S_AXI_ADDR_WIDTH (C_S_AXI_ADDR_WIDTH), + .C_S_AXI_DATA_WIDTH (C_S_AXI_DATA_WIDTH), + .C_MC_nCK_PER_CLK (C_MC_nCK_PER_CLK), + .C_S_AXI_SUPPORTS_NARROW_BURST (C_S_AXI_SUPPORTS_NARROW_BURST), + .C_RD_WR_ARB_ALGORITHM (C_RD_WR_ARB_ALGORITHM), + .C_S_AXI_REG_EN0 (C_S_AXI_REG_EN0), + .C_S_AXI_REG_EN1 (C_S_AXI_REG_EN1), + + .DEBUG_PORT (DEBUG_PORT), + + .RST_ACT_LOW (RST_ACT_LOW) + ) + +x300 ( + .FPGA_CLK_p(FPGA_CLK_p), + .FPGA_CLK_n(FPGA_CLK_n), + .FPGA_125MHz_CLK(FPGA_125MHz_CLK), + // 1Gb SFP signals + .SFP_CLK_AC_p(), + .SFP_CLK_AC_n(), + .SFP_RX_p(), + .SFP_RX_n(), + .SFP_TX_p(), + .SFP_TX_n(), + // DDR3 I/F + .ddr3_addr(ddr3_addr), + .ddr3_ba(ddr3_ba), + .ddr3_ras_n(ddr3_ras_n), + .ddr3_cas_n(ddr3_cas_n), + .ddr3_we_n(ddr3_we_n), + .ddr3_reset_n(ddr3_reset_n), + .ddr3_ck_p(ddr3_ck_p), + .ddr3_ck_n(ddr3_ck_n), + .ddr3_cke(ddr3_cke), + .ddr3_cs_n(ddr3_cs_n), + .ddr3_dm(ddr3_dm), + .ddr3_odt(ddr3_odt), + .ddr3_dq(ddr3_dq), + .ddr3_dqs_n(ddr3_dqs_n), + .ddr3_dqs_p(ddr3_dqs_p), + .sys_clk_i(sys_clk_i), + // ADC0 + .DB0_ADC_DCLK_P(), .DB0_ADC_DCLK_N(), + .DB0_ADC_DA0_P(), .DB0_ADC_DA0_N(), .DB0_ADC_DB0_P(), .DB0_ADC_DB0_N(), + .DB0_ADC_DA1_P(), .DB0_ADC_DA1_N(), .DB0_ADC_DB1_P(), .DB0_ADC_DB1_N(), + .DB0_ADC_DA2_P(), .DB0_ADC_DA2_N(), .DB0_ADC_DB2_P(), .DB0_ADC_DB2_N(), + .DB0_ADC_DA3_P(), .DB0_ADC_DA3_N(), .DB0_ADC_DB3_P(), .DB0_ADC_DB3_N(), + .DB0_ADC_DA4_P(), .DB0_ADC_DA4_N(), .DB0_ADC_DB4_P(), .DB0_ADC_DB4_N(), + .DB0_ADC_DA5_P(), .DB0_ADC_DA5_N(), .DB0_ADC_DB5_P(), .DB0_ADC_DB5_N(), + .DB0_ADC_DA6_P(), .DB0_ADC_DA6_N(), .DB0_ADC_DB6_P(), .DB0_ADC_DB6_N(), + + // ADC1 + + .DB1_ADC_DCLK_P(), .DB1_ADC_DCLK_N(), + .DB1_ADC_DA0_P(), .DB1_ADC_DA0_N(), .DB1_ADC_DB0_P(), .DB1_ADC_DB0_N(), + .DB1_ADC_DA1_P(), .DB1_ADC_DA1_N(), .DB1_ADC_DB1_P(), .DB1_ADC_DB1_N(), + .DB1_ADC_DA2_P(), .DB1_ADC_DA2_N(), .DB1_ADC_DB2_P(), .DB1_ADC_DB2_N(), + .DB1_ADC_DA3_P(), .DB1_ADC_DA3_N(), .DB1_ADC_DB3_P(), .DB1_ADC_DB3_N(), + .DB1_ADC_DA4_P(), .DB1_ADC_DA4_N(), .DB1_ADC_DB4_P(), .DB1_ADC_DB4_N(), + .DB1_ADC_DA5_P(), .DB1_ADC_DA5_N(), .DB1_ADC_DB5_P(), .DB1_ADC_DB5_N(), + .DB1_ADC_DA6_P(), .DB1_ADC_DA6_N(), .DB1_ADC_DB6_P(), .DB1_ADC_DB6_N(), + + // DAC0 + .DB0_DAC_DCI_P(), .DB0_DAC_DCI_N(), + .DB0_DAC_FRAME_P(), .DB0_DAC_FRAME_N(), + .DB0_DAC_D0_P(), .DB0_DAC_D0_N(), .DB0_DAC_D1_P(), .DB0_DAC_D1_N(), + .DB0_DAC_D2_P(), .DB0_DAC_D2_N(), .DB0_DAC_D3_P(), .DB0_DAC_D3_N(), + .DB0_DAC_D4_P(), .DB0_DAC_D4_N(), .DB0_DAC_D5_P(), .DB0_DAC_D5_N(), + .DB0_DAC_D6_P(), .DB0_DAC_D6_N(), .DB0_DAC_D7_P(), .DB0_DAC_D7_N(), + .DB0_DAC_ENABLE(), + + // DAC1 + .DB1_DAC_DCI_P(), .DB1_DAC_DCI_N(), + .DB1_DAC_FRAME_P(), .DB1_DAC_FRAME_N(), + .DB1_DAC_D0_P(), .DB1_DAC_D0_N(), .DB1_DAC_D1_P(), .DB1_DAC_D1_N(), + .DB1_DAC_D2_P(), .DB1_DAC_D2_N(), .DB1_DAC_D3_P(), .DB1_DAC_D3_N(), + .DB1_DAC_D4_P(), .DB1_DAC_D4_N(), .DB1_DAC_D5_P(), .DB1_DAC_D5_N(), + .DB1_DAC_D6_P(), .DB1_DAC_D6_N(), .DB1_DAC_D7_P(), .DB1_DAC_D7_N(), + .DB1_DAC_ENABLE(), + + // Daughter Board 0 - SPI + .DB0_SCLK(), .DB0_MOSI(), + .DB0_ADC_SEN(), .DB0_DAC_SEN(), .DB0_TX_SEN(), .DB0_RX_SEN(), + .DB0_RX_LSADC_SEN(), .DB0_RX_LSDAC_SEN(), .DB0_TX_LSADC_SEN(), .DB0_TX_LSDAC_SEN(), + .DB0_RX_LSADC_MISO(), .DB0_RX_MISO(), .DB0_TX_LSADC_MISO(), .DB0_TX_MISO(), + + // Daughter Board1 - SPI + .DB1_SCLK(), .DB1_MOSI(), + .DB1_ADC_SEN(), .DB1_DAC_SEN(), .DB1_TX_SEN(), .DB1_RX_SEN(), + .DB1_RX_LSADC_SEN(), .DB1_RX_LSDAC_SEN(), .DB1_TX_LSADC_SEN(), .DB1_TX_LSDAC_SEN(), + .DB1_RX_LSADC_MISO(), .DB1_RX_MISO(), .DB1_TX_LSADC_MISO(), .DB1_TX_MISO(), + + // DaughterBoard + .DB_DAC_SCLK(), .DB_DAC_MOSI(), + .DB_ADC_RESET(), .DB_DAC_RESET(), + + // SFP+ I2C + .SFPP_SCL(), .SFPP_SDA(), + + // Debug + .DebugClkIn(), + .DebugClkOut(), + .DebugIo(), + + // Front Panel + .FrontPanelGpio(), + .LED_ACT(), .LED_LINK(), + .LED_PPS(), .LED_REFLOCK(), + .LED_RX1_RX(), .LED_RX2_RX(), + .LED_TXRX1_RX(), .LED_TXRX1_TX(), + .LED_TXRX2_RX(), .LED_TXRX2_TX(), + + // GPIO + .DB0_TX_IO(), + .DB0_RX_IO(), + .DB1_TX_IO(), + .DB1_RX_IO(), + + // Clocking + .AD9510Status(), .AD9510Function(), + .AD9510_SEN(), .AD9510_MOSI(), .AD9510_SCLK(), .AD9510_MISO(), + .ClockRefSelect(), + .GPS_SER_IN(), .GPS_SER_OUT(), + .GPS_PPS_OUT(), .EXT_PPS_IN(), + .MIMO_TIME_IN_P(), .MIMO_TIME_IN_N(), + .MIMO_TIME_OUT_P(), .MIMO_TIME_OUT_N(), + + // SFP+ contorl/status + .SFPP_ModAbs(), .SFPP_RxLOS(), .SFPP_TxFault(), + .SFPP_RS0(), .SFPP_RS1(), .SFPP_TxDisable() // These are actually open drain outputs + ); + + +endmodule // x300_tb |