diff options
author | Martin Braun <martin.braun@ettus.com> | 2014-10-07 11:25:20 +0200 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2014-10-07 11:25:20 +0200 |
commit | fd3e84941de463fa1a7ebab0a69515b4bf2614cd (patch) | |
tree | 3fa721a13d41d2c0451d663a59a220a38fd5e614 /fpga/usrp3/top/x300/x300.v | |
parent | 3b66804e41891e358c790b453a7a59ec7462dba4 (diff) | |
download | uhd-fd3e84941de463fa1a7ebab0a69515b4bf2614cd.tar.gz uhd-fd3e84941de463fa1a7ebab0a69515b4bf2614cd.tar.bz2 uhd-fd3e84941de463fa1a7ebab0a69515b4bf2614cd.zip |
Removed copy of FPGA source files.
Diffstat (limited to 'fpga/usrp3/top/x300/x300.v')
-rw-r--r-- | fpga/usrp3/top/x300/x300.v | 1966 |
1 files changed, 0 insertions, 1966 deletions
diff --git a/fpga/usrp3/top/x300/x300.v b/fpga/usrp3/top/x300/x300.v deleted file mode 100644 index e57ae7b3b..000000000 --- a/fpga/usrp3/top/x300/x300.v +++ /dev/null @@ -1,1966 +0,0 @@ -/////////////////////////////////// -// -// NOTE: A set of precompiler directives configure the features in an FPGA build -// and are listed here. These should be set exclusively using the Makefile mechanism provided. -// -// ETH10G_PORT0 - Ethernet Port0 is configured for 10G (default is 1G) -// ETH10G_PORT1 - Ethernet Port1 is configured for 10G (default is 1G) -// NO_DRAM_FIFOS - All DRAM I/F logic, supporting AXI4 and VFIFOs' replaced by internal SRAM FIFOs. -// DELETE_DSP0 - Deletes DUC and DDC from Radio0 -// DELETE_DSP1 - Deletes DUC and DDC from Radio1 -// DEBUG_UART - Adds 115kbaud UART to GPIO pins 10 & 11 for firmware debug -// -/////////////////////////////////// - -//Defines `LVFPGA_IFACE constants -`include "../../lib/io_port2/LvFpga_Chinch_Interface.vh" - -module x300 - - ( - /////////////////////////////////// - // - // Clock sources for main FPGA clocks - // - /////////////////////////////////// - input FPGA_CLK_p, input FPGA_CLK_n, - input FPGA_125MHz_CLK, - - /////////////////////////////////// - // - // High Speed SPF+ signals and clocking - // - /////////////////////////////////// - -`ifdef BUILD_1G - input ETH_CLK_p, input ETH_CLK_n, -`endif - -`ifdef BUILD_10G - input XG_CLK_p, input XG_CLK_n, -`endif - - input SFP0_RX_p, input SFP0_RX_n, - output SFP0_TX_p, output SFP0_TX_n, - input SFP1_RX_p, input SFP1_RX_n, - output SFP1_TX_p, output SFP1_TX_n, - - /////////////////////////////////// - // - // DRAM Interface - // - /////////////////////////////////// -`ifndef NO_DRAM_FIFOS - inout [31:0] ddr3_dq, // Data pins. Input for Reads, Output for Writes. - inout [3:0] ddr3_dqs_n, // Data Strobes. Input for Reads, Output for Writes. - inout [3:0] ddr3_dqs_p, - // - output [14:0] ddr3_addr, // Address - output [2:0] ddr3_ba, // Bank Address - output ddr3_ras_n, // Row Address Strobe. - output ddr3_cas_n, // Column address select - output ddr3_we_n, // Write Enable - output ddr3_reset_n, // SDRAM reset pin. - output [0:0] ddr3_ck_p, // Differential clock - output [0:0] ddr3_ck_n, - output [0:0] ddr3_cke, // Clock Enable - output [0:0] ddr3_cs_n, // Chip Select - output [3:0] ddr3_dm, // Data Mask [3] = UDM.U26, [2] = LDM.U26, ... - output [0:0] ddr3_odt, // On-Die termination enable. - // - input sys_clk_i, // 100MHz clock source to generate DDR3 clocking. -`endif - /////////////////////////////////// - // - // IOPORT2 - // - /////////////////////////////////// - - //-- The IO_Port2 asynchronous handshaking pins - input aIoResetIn_n, - output aIoReadyOut, - input aIoReadyIn, - output aIoPort2Restart, - input aStc3Gpio7, - - //-- The IO_Port2 high speed receiver pins - input IoRxClock, - input IoRxClock_n, - input [15:0] irIoRxData, - input [15:0] irIoRxData_n, - input irIoRxHeader, - input irIoRxHeader_n, - - //-- The IO_Port2 high speed transmitter interface pins - output IoTxClock, - output IoTxClock_n, - output [15:0] itIoTxData, - output [15:0] itIoTxData_n, - output itIoTxHeader, - output itIoTxHeader_n, - - output aIrq, - - /////////////////////////////////// - // - // ADC and DAC interfaces - // - /////////////////////////////////// - - input DB0_ADC_DCLK_P, input DB0_ADC_DCLK_N, - input DB0_ADC_DA0_P, input DB0_ADC_DA0_N, input DB0_ADC_DB0_P, input DB0_ADC_DB0_N, - input DB0_ADC_DA1_P, input DB0_ADC_DA1_N, input DB0_ADC_DB1_P, input DB0_ADC_DB1_N, - input DB0_ADC_DA2_P, input DB0_ADC_DA2_N, input DB0_ADC_DB2_P, input DB0_ADC_DB2_N, - input DB0_ADC_DA3_P, input DB0_ADC_DA3_N, input DB0_ADC_DB3_P, input DB0_ADC_DB3_N, - input DB0_ADC_DA4_P, input DB0_ADC_DA4_N, input DB0_ADC_DB4_P, input DB0_ADC_DB4_N, - input DB0_ADC_DA5_P, input DB0_ADC_DA5_N, input DB0_ADC_DB5_P, input DB0_ADC_DB5_N, - input DB0_ADC_DA6_P, input DB0_ADC_DA6_N, input DB0_ADC_DB6_P, input DB0_ADC_DB6_N, - - input DB1_ADC_DCLK_P, input DB1_ADC_DCLK_N, - input DB1_ADC_DA0_P, input DB1_ADC_DA0_N, input DB1_ADC_DB0_P, input DB1_ADC_DB0_N, - input DB1_ADC_DA1_P, input DB1_ADC_DA1_N, input DB1_ADC_DB1_P, input DB1_ADC_DB1_N, - input DB1_ADC_DA2_P, input DB1_ADC_DA2_N, input DB1_ADC_DB2_P, input DB1_ADC_DB2_N, - input DB1_ADC_DA3_P, input DB1_ADC_DA3_N, input DB1_ADC_DB3_P, input DB1_ADC_DB3_N, - input DB1_ADC_DA4_P, input DB1_ADC_DA4_N, input DB1_ADC_DB4_P, input DB1_ADC_DB4_N, - input DB1_ADC_DA5_P, input DB1_ADC_DA5_N, input DB1_ADC_DB5_P, input DB1_ADC_DB5_N, - input DB1_ADC_DA6_P, input DB1_ADC_DA6_N, input DB1_ADC_DB6_P, input DB1_ADC_DB6_N, - - output DB0_DAC_DCI_P, output DB0_DAC_DCI_N, - output DB0_DAC_FRAME_P, output DB0_DAC_FRAME_N, - output DB0_DAC_D0_P, output DB0_DAC_D0_N, output DB0_DAC_D1_P, output DB0_DAC_D1_N, - output DB0_DAC_D2_P, output DB0_DAC_D2_N, output DB0_DAC_D3_P, output DB0_DAC_D3_N, - output DB0_DAC_D4_P, output DB0_DAC_D4_N, output DB0_DAC_D5_P, output DB0_DAC_D5_N, - output DB0_DAC_D6_P, output DB0_DAC_D6_N, output DB0_DAC_D7_P, output DB0_DAC_D7_N, - output DB0_DAC_ENABLE, - - output DB1_DAC_DCI_P, output DB1_DAC_DCI_N, - output DB1_DAC_FRAME_P, output DB1_DAC_FRAME_N, - output DB1_DAC_D0_P, output DB1_DAC_D0_N, output DB1_DAC_D1_P, output DB1_DAC_D1_N, - output DB1_DAC_D2_P, output DB1_DAC_D2_N, output DB1_DAC_D3_P, output DB1_DAC_D3_N, - output DB1_DAC_D4_P, output DB1_DAC_D4_N, output DB1_DAC_D5_P, output DB1_DAC_D5_N, - output DB1_DAC_D6_P, output DB1_DAC_D6_N, output DB1_DAC_D7_P, output DB1_DAC_D7_N, - output DB1_DAC_ENABLE, - - output DB0_SCLK, output DB0_MOSI, - output DB0_ADC_SEN, output DB0_DAC_SEN, output DB0_TX_SEN, output DB0_RX_SEN, - output DB0_RX_LSADC_SEN, output DB0_RX_LSDAC_SEN, output DB0_TX_LSADC_SEN, output DB0_TX_LSDAC_SEN, - input DB0_RX_LSADC_MISO, input DB0_RX_MISO, input DB0_TX_LSADC_MISO, input DB0_TX_MISO, - - output DB1_SCLK, output DB1_MOSI, - output DB1_ADC_SEN, output DB1_DAC_SEN, output DB1_TX_SEN, output DB1_RX_SEN, - output DB1_RX_LSADC_SEN, output DB1_RX_LSDAC_SEN, output DB1_TX_LSADC_SEN, output DB1_TX_LSDAC_SEN, - input DB1_RX_LSADC_MISO, input DB1_RX_MISO, input DB1_TX_LSADC_MISO, input DB1_TX_MISO, - output DB_DAC_SCLK, inout DB_DAC_MOSI, - - output DB_ADC_RESET, output DB_DAC_RESET, - - inout DB_SCL, inout DB_SDA, - - /////////////////////////////////// - // - // GPIO/LEDS/Etc - // - /////////////////////////////////// - - inout [11:0] FrontPanelGpio, - - output LED_ACT1, output LED_ACT2, - output LED_LINK1, output LED_LINK2, - - output LED_PPS, output LED_REFLOCK, output LED_GPSLOCK, - output LED_LINKSTAT, output LED_LINKACT, - output LED_RX1_RX, output LED_RX2_RX, - output LED_TXRX1_RX, output LED_TXRX1_TX, - output LED_TXRX2_RX, output LED_TXRX2_TX, - inout [15:0] DB0_TX_IO, - inout [15:0] DB0_RX_IO, - inout [15:0] DB1_TX_IO, - inout [15:0] DB1_RX_IO, - - /////////////////////////////////// - // - // LMK CLock chip - // - /////////////////////////////////// - - input [1:0] LMK_Status, - input LMK_Holdover, - input LMK_Lock, - input LMK_Sync, //not used, we do soft sync - output LMK_SEN, output LMK_MOSI, output LMK_SCLK, - - /////////////////////////////////// - // - // GPSDO and Clock Refs - // - /////////////////////////////////// - - output [1:0] ClockRefSelect, - output GPS_SER_IN, input GPS_SER_OUT, - input GPS_PPS_OUT, input EXT_PPS_IN, - output EXT_PPS_OUT, input GPS_LOCK_OK, - output GPSDO_PWR_ENA, output TCXO_ENA, - - output CPRI_CLK_OUT_P, output CPRI_CLK_OUT_N, - - input FPGA_REFCLK_10MHz_p, input FPGA_REFCLK_10MHz_n, - - /////////////////////////////////// - // - // Supporting I/O for SPF+ interfaces - // (non high speed stuff) - // - /////////////////////////////////// - - inout SFPP0_SCL, inout SFPP0_SDA, - input SFPP0_ModAbs, - input SFPP0_RxLOS, // High if module asserts Loss of Signal - input SFPP0_TxFault, // Current 10G PMA/PCS apparently ignores this signal. - output SFPP0_RS0, // These are actually open drain outputs - output SFPP0_RS1, // CAUTION! Take great care, this signal shorted to VeeR on SFP module. - output SFPP0_TxDisable, // These are actually open drain outputs - - inout SFPP1_SCL, inout SFPP1_SDA, - input SFPP1_ModAbs, - input SFPP1_RxLOS, // High if module asserts Loss of Signal - input SFPP1_TxFault, // Current 10G PMA/PCS apparently ignores this signal. - output SFPP1_RS0, // These are actually open drain outputs - output SFPP1_RS1, // CAUTION! Take great care, this signal shorted to VeeR on SFP module. - output SFPP1_TxDisable // These are actually open drain outputs - - ); - - // - // LOG2 function. - // - function integer clogb2 (input integer size); - begin - size = size - 1; - for (clogb2=1; size>1; clogb2=clogb2+1) - size = size >> 1; - end - endfunction // clogb2 - - - wire radio_clk, radio_clk_2x; - wire global_rst, radio_rst, bus_rst; - - wire [3:0] sw_rst; - - - wire [63:0] vita_time; - wire [2:0] led0, led1; - - wire [31:0] debug0, debug1; - - ///////////////////////////////////////////////////////////////////// - // - // Debug logic on front panel GPIO pins - // - ////////////////////////////////////////////////////////////////////// - wire debug_txd, debug_rxd; - - `ifdef DEBUG_UART - assign FrontPanelGpio[11] = debug_txd; - - assign debug_rxd = FrontPanelGpio[10]; - - - `endif - - //////////////////////////////////////////////////////////////////// - // - // Generate Bus Clock and PCIe Clocks. - // Source clock comes from U19 which is fixed freq - // and bufferd to be used by STC3 also (Page17 schematics). - // - //////////////////////////////////////////////////////////////////// - - wire fpga_clk125, bus_clk, ioport2_clk, rio40_clk, ioport2_idelay_ref_clk; - wire bus_clk_locked, rio40_clk_locked, rio40_clk_reset; - - IBUFG fpga_125MHz_clk_buf ( - .I(FPGA_125MHz_CLK), - .O(fpga_clk125)); - - bus_clk_gen bus_clk_gen ( - .CLK_IN1(fpga_clk125), //Input Clock: 125MHz Clock from STC3 - .CLK_OUT1(bus_clk), //Output Clock 1: 166.666667MHz - .CLK_OUT2(ioport2_clk), //Output Clock 2: 125MHz - .RESET(1'b0), - .LOCKED(bus_clk_locked)); - - //rio40_clk and ioport2_idelay_ref_clk cannot share a PLL/MMCM reset with ioport2_clk - //so they have to come from a different clocking primitive instance - pcie_clk_gen pcie_clk_gen ( - .CLK_IN1(fpga_clk125), //Input Clock: 125MHz Clock from STC3 - .CLK_OUT1(rio40_clk), //Output Clock 1: 40MHz - .CLK_OUT2(ioport2_idelay_ref_clk), //Output Clock 2: 200MHz - .RESET(rio40_clk_reset), - .LOCKED(rio40_clk_locked)); - - ///////////////////////////////////////////////////////////////////// - // - // 10MHz Reference clock - // - ////////////////////////////////////////////////////////////////////// - wire ref_clk_10mhz; - IBUFDS IBUFDS_10_MHz ( - .O(ref_clk_10mhz), - .I(FPGA_REFCLK_10MHz_p), - .IB(FPGA_REFCLK_10MHz_n) - ); - - ////////////////////////////////////////////////////////////////////// - // CPRI Clock output -- this is the dirty recovered clock from the MGT - // This goes to the LMK04816 which locks to it and cleans it up - // We get the clean versions back as CPRI_CLK (for the CPRI MGT) - // and FPGA_CLK (for our main rfclk) - ////////////////////////////////////////////////////////////////////// - - wire cpri_clk_out = 1'b0; // FIXME - connect to CPRI clock recovery when implemented - OBUFDS OBUFDS_cpri (.I(cpri_clk_out), .O(CPRI_CLK_OUT_P), .OB(CPRI_CLK_OUT_N)); - - ///////////////////////////////////////////////////////////////////// - // - // power-on-reset logic. - // - ////////////////////////////////////////////////////////////////////// - por_gen por_gen(.clk(bus_clk), .reset_out(global_rst)); - - ////////////////////////////////////////////////////////////////////// - wire sync_dacs_radio0, sync_dacs_radio1; - wire [31:0] rx0, rx1; - wire [31:0] tx0, tx1; - wire sclk0, mosi0, miso0, sclk1, mosi1, miso1; - wire [7:0] sen0, sen1; - - wire set_stb; - wire [7:0] set_addr; - wire [31:0] set_data; - - //////////////////////////////////////////////////////////////////// - // - // Generate Radio Clocks from LMK04816 - // Radio clock is normally 200MHz, radio_clk_2x 400MHz. - // In CPRI or LTE mode, radio clock is 184.32 MHz. - // radio_clk_2x is only to be used for clocking out TX samples to DAC - // - //////////////////////////////////////////////////////////////////// - wire radio_clk_locked; - - radio_clk_gen radio_clk_gen - (.CLK_IN1_P(FPGA_CLK_p), .CLK_IN1_N(FPGA_CLK_n), .CLK_OUT1(radio_clk), .CLK_OUT2(radio_clk_2x), - .RESET(sw_rst[2]), .LOCKED(radio_clk_locked)); - defparam radio_clk_gen.clkin1_buf.DIFF_TERM = "TRUE"; - - //////////////////////////////////////////////////////////////////// - // - // IJB. Radio PLL doesn't seem to lock at power up. - // Probably needs AD9610 to be programmed to 120 or 200MHz to get - // an input clock thats in the ball park for PLL configuration. - // Currently use busclk PLL lock signal to control this reset, - // but we should find a better solution, perhaps a S/W controllable - // reset like the ETH PHY uses so that we can reset this clock domain - // after programming the AD9610. - // - //////////////////////////////////////////////////////////////////// - - reset_sync radio_reset_sync - ( - .clk(radio_clk), - .reset_in(global_rst || !bus_clk_locked || sw_rst[1]), - .reset_out(radio_rst) - ); - - reset_sync int_reset_sync - ( - .clk(bus_clk), - .reset_in(global_rst || !bus_clk_locked), - .reset_out(bus_rst) - ); - - //////////////////////////////////////////////////////////////////// - // PPS - // Support for internal, external, and GPSDO PPS inputs - // Every attempt to minimize propagation between the external PPS - // input and outputs to support daisy-chaining the signal. - //////////////////////////////////////////////////////////////////// - - // Generate an internal PPS signal with a 25% duty cycle - reg [31:0] pps_count; - wire int_pps = (pps_count < 32'd2500000); - always @(posedge ref_clk_10mhz) begin - if (pps_count >= 32'd9999999) - pps_count <= 32'b0; - else - pps_count <= pps_count + 1'b1; - end - - // PPS MUX - selects internal, external, or gpsdo PPS - reg pps; - wire [1:0] pps_select; - wire pps_out_enb; - always @(*) begin - case(pps_select) - 2'b00 : pps = EXT_PPS_IN; - 2'b01 : pps = 1'b0; - 2'b10 : pps = int_pps; - 2'b11 : pps = GPS_PPS_OUT; - default: pps = 1'b0; - endcase - end - - // PPS out and LED - assign EXT_PPS_OUT = pps & pps_out_enb; - assign LED_PPS = ~pps; // active low LED driver - - assign LED_GPSLOCK = ~GPS_LOCK_OK; - assign LED_REFLOCK = ~LMK_Lock; - assign {LED_RX1_RX,LED_TXRX1_TX,LED_TXRX1_RX} = ~led0; // active low LED driver - assign {LED_RX2_RX,LED_TXRX2_TX,LED_TXRX2_RX} = ~led1; // active low LED driver - // Allocate SPI chip selects to various slaves. - assign {DB1_DAC_SEN, DB1_ADC_SEN, DB1_RX_LSADC_SEN, DB1_RX_LSDAC_SEN, DB1_TX_LSADC_SEN, DB1_TX_LSDAC_SEN, DB1_RX_SEN, DB1_TX_SEN} = sen1; - assign {DB0_DAC_SEN, DB0_ADC_SEN, DB0_RX_LSADC_SEN, DB0_RX_LSDAC_SEN, DB0_TX_LSADC_SEN, DB0_TX_LSDAC_SEN, DB0_RX_SEN, DB0_TX_SEN} = sen0; - - wire db_dac_mosi_int, db_dac_miso; - wire drive_dac_pin; - reg drop_dac_pin; - reg [5:0] bitcount; - reg sclk_d1; - - // Register copy of outgoing DAC clock to do synchronous edge detect. - always @(posedge radio_clk) sclk_d1 <= DB_DAC_SCLK; - - always @(posedge radio_clk) - // If neither DAC is selected keep counter reset - if(DB0_DAC_SEN & DB1_DAC_SEN) - begin - bitcount <= 6'd0; - drop_dac_pin <= 1'b0; - end - else if(~DB_DAC_SCLK & sclk_d1) - // Falling edge of SCLK detected. - begin - bitcount <= bitcount + 6'd1; - end - else if(bitcount == 0 & DB_DAC_SCLK & ~sclk_d1) - // On first rising edge store R/W bit to determine if we tristate after 8bits for a Read. - drop_dac_pin <= db_dac_mosi_int; - - assign drive_dac_pin = (bitcount < 8) | ~drop_dac_pin; - - // Both DAC's use a single SPI bus on PCB. Select appriate Radio to drive the SPi bus by looking at chip selects. - assign { DB_DAC_SCLK, db_dac_mosi_int } = ~DB0_DAC_SEN ? {sclk0, mosi0} : ~DB1_DAC_SEN ? {sclk1,mosi1} : 2'b0; - // Data to/from DAC's is bi-dir so tristate driver when reading. - assign DB_DAC_MOSI = drive_dac_pin ? db_dac_mosi_int : 1'bz; - // I/O Input buffer - assign db_dac_miso = DB_DAC_MOSI; - - // If any SPI Slave is selected (except DAC) then drive SPI clk and MOSI out onto duaghterboard. - assign { DB0_SCLK, DB0_MOSI } = (~&sen0[6:0]) ? {sclk0,mosi0} : 2'b0; - assign { DB1_SCLK, DB1_MOSI } = (~&sen1[6:0]) ? {sclk1,mosi1} : 2'b0; - - // Wired OR Mux together the possible sources of read data from SPI devices. - assign miso0 = (~DB0_RX_LSADC_SEN & DB0_RX_LSADC_MISO) | - (~DB0_RX_SEN & DB0_RX_MISO) | - (~DB0_TX_LSADC_SEN & DB0_TX_LSADC_MISO) | - (~DB0_TX_SEN & DB0_TX_MISO) | - (~DB0_DAC_SEN & db_dac_miso); - - assign miso1 = (~DB1_RX_LSADC_SEN & DB1_RX_LSADC_MISO) | - (~DB1_RX_SEN & DB1_RX_MISO) | - (~DB1_TX_LSADC_SEN & DB1_TX_LSADC_MISO) | - (~DB1_TX_SEN & DB1_TX_MISO) | - (~DB1_DAC_SEN & db_dac_miso); - - ///////////////////////////////////////////////////////////////////// - // - // ADC Interface for ADS62P48 - // - ///////////////////////////////////////////////////////////////////// - wire [13:0] rx0_q_inv, rx1_q_inv, rx0_i, rx1_i; - // Analog diff pairs on I side of ADC are inverted for layout reasons, but data diff pairs are all swapped as well - // so I gets a double negative, and is unchanged. Q must be inverted. - - capture_ddrlvds #(.WIDTH(14),.X300(1)) cap_db0 - (.clk(radio_clk), .ssclk_p(DB0_ADC_DCLK_P), .ssclk_n(DB0_ADC_DCLK_N), - .in_p({{DB0_ADC_DA6_P, DB0_ADC_DA5_P, DB0_ADC_DA4_P, DB0_ADC_DA3_P, DB0_ADC_DA2_P, DB0_ADC_DA1_P, DB0_ADC_DA0_P}, - {DB0_ADC_DB6_P, DB0_ADC_DB5_P, DB0_ADC_DB4_P, DB0_ADC_DB3_P, DB0_ADC_DB2_P, DB0_ADC_DB1_P, DB0_ADC_DB0_P}}), - - .in_n({{DB0_ADC_DA6_N, DB0_ADC_DA5_N, DB0_ADC_DA4_N, DB0_ADC_DA3_N, DB0_ADC_DA2_N, DB0_ADC_DA1_N, DB0_ADC_DA0_N}, - {DB0_ADC_DB6_N, DB0_ADC_DB5_N, DB0_ADC_DB4_N, DB0_ADC_DB3_N, DB0_ADC_DB2_N, DB0_ADC_DB1_N, DB0_ADC_DB0_N}}), - .out({rx0_i,rx0_q_inv})); - assign rx0[31:0] = { rx0_i, 2'b00, ~rx0_q_inv, 2'b00 }; - - capture_ddrlvds #(.WIDTH(14),.X300(1)) cap_db1 - (.clk(radio_clk), .ssclk_p(DB1_ADC_DCLK_P), .ssclk_n(DB1_ADC_DCLK_N), - .in_p({{DB1_ADC_DA6_P, DB1_ADC_DA5_P, DB1_ADC_DA4_P, DB1_ADC_DA3_P, DB1_ADC_DA2_P, DB1_ADC_DA1_P, DB1_ADC_DA0_P}, - {DB1_ADC_DB6_P, DB1_ADC_DB5_P, DB1_ADC_DB4_P, DB1_ADC_DB3_P, DB1_ADC_DB2_P, DB1_ADC_DB1_P, DB1_ADC_DB0_P}}), - - .in_n({{DB1_ADC_DA6_N, DB1_ADC_DA5_N, DB1_ADC_DA4_N, DB1_ADC_DA3_N, DB1_ADC_DA2_N, DB1_ADC_DA1_N, DB1_ADC_DA0_N}, - {DB1_ADC_DB6_N, DB1_ADC_DB5_N, DB1_ADC_DB4_N, DB1_ADC_DB3_N, DB1_ADC_DB2_N, DB1_ADC_DB1_N, DB1_ADC_DB0_N}}), - .out({rx1_i,rx1_q_inv})); - assign rx1[31:0] = { rx1_i, 2'b00, ~rx1_q_inv, 2'b00 }; - - ///////////////////////////////////////////////////////////////////// - // - // DAC Interface for AD9146 - // - ///////////////////////////////////////////////////////////////////// - gen_ddrlvds gen_db0 - ( - .reset(radio_rst), - .tx_clk_2x_p(DB0_DAC_DCI_P), .tx_clk_2x_n(DB0_DAC_DCI_N), - .tx_frame_p(DB0_DAC_FRAME_P), .tx_frame_n(DB0_DAC_FRAME_N), - .tx_d_p({DB0_DAC_D7_P,DB0_DAC_D6_P,DB0_DAC_D5_P,DB0_DAC_D4_P,DB0_DAC_D3_P,DB0_DAC_D2_P,DB0_DAC_D1_P,DB0_DAC_D0_P}), - .tx_d_n({DB0_DAC_D7_N,DB0_DAC_D6_N,DB0_DAC_D5_N,DB0_DAC_D4_N,DB0_DAC_D3_N,DB0_DAC_D2_N,DB0_DAC_D1_N,DB0_DAC_D0_N}), - .tx_clk_2x(radio_clk_2x), .tx_clk_1x(radio_clk), - .i(~tx0[31:16]), .q(~tx0[15:0]), // invert b/c Analog diff pairs are swapped for layout - .sync_dacs(sync_dacs_radio0|sync_dacs_radio1) - ); - - - gen_ddrlvds gen_db1 - ( - .reset(radio_rst), - .tx_clk_2x_p(DB1_DAC_DCI_P), .tx_clk_2x_n(DB1_DAC_DCI_N), - .tx_frame_p(DB1_DAC_FRAME_P), .tx_frame_n(DB1_DAC_FRAME_N), - .tx_d_p({DB1_DAC_D7_P,DB1_DAC_D6_P,DB1_DAC_D5_P,DB1_DAC_D4_P,DB1_DAC_D3_P,DB1_DAC_D2_P,DB1_DAC_D1_P,DB1_DAC_D0_P}), - .tx_d_n({DB1_DAC_D7_N,DB1_DAC_D6_N,DB1_DAC_D5_N,DB1_DAC_D4_N,DB1_DAC_D3_N,DB1_DAC_D2_N,DB1_DAC_D1_N,DB1_DAC_D0_N}), - .tx_clk_2x(radio_clk_2x), .tx_clk_1x(radio_clk), - .i(~tx1[31:16]), .q(~tx1[15:0]), // invert b/c Analog diff pairs are swapped for layout - .sync_dacs(sync_dacs_radio0|sync_dacs_radio1) - ); - - - wire [7:0] leds; - assign { LED_ACT1, LED_ACT2, - LED_LINK1, LED_LINK2, - LED_LINKSTAT, LED_LINKACT } = ~leds; - - wire [31:0] debug; - - ////////////////////////////////////////////////////////////////////// - // - // PCIe Stuff - // - ////////////////////////////////////////////////////////////////////// - - localparam IOP2_MSG_WIDTH = 64; - localparam DMA_STREAM_WIDTH = `LVFPGA_IFACE_DMA_CHAN_WIDTH; - localparam DMA_COUNT_WIDTH = `LVFPGA_IFACE_DMA_SIZE_WIDTH; - localparam NUM_TX_STREAMS = `LVFPGA_IFACE_NUM_TX_DMA_CNT; - localparam NUM_RX_STREAMS = `LVFPGA_IFACE_NUM_RX_DMA_CNT; - localparam TX_STREAM_START_IDX = `LVFPGA_IFACE_TX_DMA_INDEX; - localparam RX_STREAM_START_IDX = `LVFPGA_IFACE_RX_DMA_INDEX; - - wire [DMA_STREAM_WIDTH-1:0] dmatx_tdata, dmarx_tdata, pcii_tdata, pcio_tdata; - wire dmatx_tvalid, dmarx_tvalid, pcii_tvalid, pcio_tvalid; - wire dmatx_tlast, dmarx_tlast, pcii_tlast, pcio_tlast; - wire dmatx_tready, dmarx_tready, pcii_tready, pcio_tready; - - wire [IOP2_MSG_WIDTH-1:0] o_iop2_msg_tdata, i_iop2_msg_tdata; - wire o_iop2_msg_tvalid, o_iop2_msg_tlast, o_iop2_msg_tready; - wire i_iop2_msg_tvalid, i_iop2_msg_tlast, i_iop2_msg_tready; - - wire pcie_usr_reg_wr, pcie_usr_reg_rd, pcie_usr_reg_rc, pcie_usr_reg_rdy; - wire [1:0] pcie_usr_reg_len; - wire [19:0] pcie_usr_reg_addr; - wire [31:0] pcie_usr_reg_data_in, pcie_usr_reg_data_out; - - wire chinch_reg_wr, chinch_reg_rd, chinch_reg_rc, chinch_reg_rdy; - wire [1:0] chinch_reg_len; - wire [19:0] chinch_reg_addr; - wire [31:0] chinch_reg_data_out; - wire [63:0] chinch_reg_data_in; - - wire [(NUM_TX_STREAMS*DMA_STREAM_WIDTH)-1:0] dmatx_tdata_iop2; - wire [NUM_TX_STREAMS-1:0] dmatx_tvalid_iop2, dmatx_tready_iop2; - - wire [(NUM_RX_STREAMS*DMA_STREAM_WIDTH)-1:0] dmarx_tdata_iop2; - wire [NUM_RX_STREAMS-1:0] dmarx_tvalid_iop2, dmarx_tready_iop2; - - //PCIe Express "Physical" DMA and Register logic - LvFpga_Chinch_Interface lvfpga_chinch_inst - ( - .aIoResetIn_n(aIoResetIn_n), - .bBusReset(), //Output - - // Clocks - .BusClk(ioport2_clk), - .Rio40Clk(rio40_clk), - .IDelayRefClk(ioport2_idelay_ref_clk), - .aRioClkPllLocked(rio40_clk_locked), - .aRioClkPllReset(rio40_clk_reset), - - // The IO_Port2 asynchronous handshaking pins - .aIoReadyOut(aIoReadyOut), - .aIoReadyIn(aIoReadyIn), - .aIoPort2Restart(aIoPort2Restart), - - // The IO_Port2 high speed receiver pins - .IoRxClock(IoRxClock), - .IoRxClock_n(IoRxClock_n), - .irIoRxData(irIoRxData), - .irIoRxData_n(irIoRxData_n), - .irIoRxHeader(irIoRxHeader), - .irIoRxHeader_n(irIoRxHeader_n), - - // The IO_Port2 high speed transmitter interface pins - .IoTxClock(IoTxClock), - .IoTxClock_n(IoTxClock_n), - .itIoTxData(itIoTxData), - .itIoTxData_n(itIoTxData_n), - .itIoTxHeader(itIoTxHeader), - .itIoTxHeader_n(itIoTxHeader_n), - - // DMA TX Fifos - .bDmaTxData(dmatx_tdata_iop2), - .bDmaTxValid(dmatx_tvalid_iop2), - .bDmaTxReady(dmatx_tready_iop2), - .bDmaTxEnabled(), - .bDmaTxFifoFullCnt(), - - // DMA RX Fifos - .bDmaRxData(dmarx_tdata_iop2), - .bDmaRxValid(dmarx_tvalid_iop2), - .bDmaRxReady(dmarx_tready_iop2), - .bDmaRxEnabled(), - .bDmaRxFifoFreeCnt(), - - // User Register Port In - .bUserRegPortInWt(pcie_usr_reg_wr), - .bUserRegPortInRd(pcie_usr_reg_rd), - .bUserRegPortInAddr(pcie_usr_reg_addr), - .bUserRegPortInData(pcie_usr_reg_data_in), - .bUserRegPortInSize(pcie_usr_reg_len), - - // User Register Port Out - .bUserRegPortOutData(pcie_usr_reg_data_out), - .bUserRegPortOutDataValid(pcie_usr_reg_rc), - .bUserRegPortOutReady(pcie_usr_reg_rdy), - - // Chinch Register Port Out - .bChinchRegPortOutWt(chinch_reg_wr), - .bChinchRegPortOutRd(chinch_reg_rd), - .bChinchRegPortOutAddr({12'h0, chinch_reg_addr}), - .bChinchRegPortOutData({32'h0, chinch_reg_data_out}), - .bChinchRegPortOutSize(chinch_reg_len), - - // User Register Port In - .bChinchRegPortInData(chinch_reg_data_in), - .bChinchRegPortInDataValid(chinch_reg_rc), - .bChinchRegPortInReady(chinch_reg_rdy), - - // Level interrupt - .aIrq(aIrq) - ); - - //PCIe Express adapter logic to link to the AXI crossbar and the WB bus - x300_pcie_int #( - .DMA_STREAM_WIDTH(DMA_STREAM_WIDTH), - .NUM_TX_STREAMS(NUM_TX_STREAMS), - .NUM_RX_STREAMS(NUM_RX_STREAMS), - .REGPORT_ADDR_WIDTH(20), - .REGPORT_DATA_WIDTH(32), - .IOP2_MSG_WIDTH(IOP2_MSG_WIDTH) - ) x300_pcie_int ( - .ioport2_clk(ioport2_clk), - .bus_clk(bus_clk), - .bus_rst(bus_rst), - - //DMA TX FIFOs (IoPort2 Clock Domain) - .dmatx_tdata_iop2(dmatx_tdata_iop2), - .dmatx_tvalid_iop2(dmatx_tvalid_iop2), - .dmatx_tready_iop2(dmatx_tready_iop2), - - //DMA TX FIFOs (IoPort2 Clock Domain) - .dmarx_tdata_iop2(dmarx_tdata_iop2), - .dmarx_tvalid_iop2(dmarx_tvalid_iop2), - .dmarx_tready_iop2(dmarx_tready_iop2), - - //PCIe User Regport - .pcie_usr_reg_wr(pcie_usr_reg_wr), - .pcie_usr_reg_rd(pcie_usr_reg_rd), - .pcie_usr_reg_addr(pcie_usr_reg_addr), - .pcie_usr_reg_data_in(pcie_usr_reg_data_in), - .pcie_usr_reg_len(pcie_usr_reg_len), - .pcie_usr_reg_data_out(pcie_usr_reg_data_out), - .pcie_usr_reg_rc(pcie_usr_reg_rc), - .pcie_usr_reg_rdy(pcie_usr_reg_rdy), - - //Chinch Regport - .chinch_reg_wr(chinch_reg_wr), - .chinch_reg_rd(chinch_reg_rd), - .chinch_reg_addr(chinch_reg_addr), - .chinch_reg_data_out(chinch_reg_data_out), - .chinch_reg_len(chinch_reg_len), - .chinch_reg_data_in(chinch_reg_data_in[31:0]), - .chinch_reg_rc(chinch_reg_rc), - .chinch_reg_rdy(chinch_reg_rdy), - - //DMA TX FIFO (Bus Clock Domain) - .dmatx_tdata(dmatx_tdata), - .dmatx_tlast(dmatx_tlast), - .dmatx_tvalid(dmatx_tvalid), - .dmatx_tready(dmatx_tready), - - //DMA RX FIFO (Bus Clock Domain) - .dmarx_tdata(dmarx_tdata), - .dmarx_tlast(dmarx_tlast), - .dmarx_tvalid(dmarx_tvalid), - .dmarx_tready(dmarx_tready), - - //Message FIFO Out (Bus Clock Domain) - .rego_tdata(o_iop2_msg_tdata), - .rego_tvalid(o_iop2_msg_tvalid), - .rego_tlast(o_iop2_msg_tlast), - .rego_tready(o_iop2_msg_tready), - - //Message FIFO In (Bus Clock Domain) - .regi_tdata(i_iop2_msg_tdata), - .regi_tvalid(i_iop2_msg_tvalid), - .regi_tlast(i_iop2_msg_tlast), - .regi_tready(i_iop2_msg_tready), - - //Misc - .misc_status({15'h0, aStc3Gpio7}), - .debug() - ); - - // The PCIe logic will tend to stay close to the physical IoPort2 pins - // so add an additional stage of pipelining to give the tool more routing - // slack. This is significantly help timing closure. - - axi_fifo_short #(.WIDTH(DMA_STREAM_WIDTH+1)) pcii_pipeline_srl ( - .clk(bus_clk), .reset(bus_rst), .clear(1'b0), - .i_tdata({dmatx_tlast, dmatx_tdata}), .i_tvalid(dmatx_tvalid), .i_tready(dmatx_tready), - .o_tdata({pcii_tlast, pcii_tdata}), .o_tvalid(pcii_tvalid), .o_tready(pcii_tready), - .space(), .occupied()); - - axi_fifo_short #(.WIDTH(DMA_STREAM_WIDTH+1)) pcio_pipeline_srl ( - .clk(bus_clk), .reset(bus_rst), .clear(1'b0), - .i_tdata({pcio_tlast, pcio_tdata}), .i_tvalid(pcio_tvalid), .i_tready(pcio_tready), - .o_tdata({dmarx_tlast, dmarx_tdata}), .o_tvalid(dmarx_tvalid), .o_tready(dmarx_tready), - .space(), .occupied()); - - ////////////////////////////////////////////////////////////////////// - // - // Configure Ethernet PHY clocking - // - ////////////////////////////////////////////////////////////////////// -`ifdef BUILD_1G - wire gige_sfp_clk; - - IBUFDS_GTE2 gige_clk_sfp_pin (.O(gige_sfp_clk),.I(ETH_CLK_p),.IB(ETH_CLK_n), .CEB(1'b0)); -`endif -`ifdef BUILD_10G - wire xgige_sfp_clk; - wire xgige_sfp_clk_bufg; - - IBUFDS_GTE2 clk_sfp_pin (.O(xgige_sfp_clk),.I(XG_CLK_p),.IB(XG_CLK_n), .CEB(1'b0)); - - BUFG xgige_bufg_inst - ( - .I (xgige_sfp_clk), - .O (xgige_sfp_clk_bufg) - ); -`endif - - ////////////////////////////////////////////////////////////////////// - // - // Configure Ethernet PHY implemented for PORT0 - // - ////////////////////////////////////////////////////////////////////// - wire mdc0, mdio_in0, mdio_out0, mdio_tri0; - wire [4:0] prtad0 = 5'b00100; // MDIO address is 4 - -`ifdef ETH10G_PORT0 - ////////////////////////////////////////////////////////////////////// - // - // 10GBaseR PHY with XGMII interface to MAC - // - ////////////////////////////////////////////////////////////////////// - wire xgmii_clk0; // 156.25MHz - wire [63:0] xgmii_txd0; - wire [7:0] xgmii_txc0; - wire [63:0] xgmii_rxd0; - wire [7:0] xgmii_rxc0; - - wire [7:0] core_status0; - wire xge_phy_resetdone0; - - ten_gig_eth_pcs_pma_x300_top ten_gig_eth_pcs_pma_x300_top_port0 - ( - .refclk156(xgige_sfp_clk), - .refclk156_buf(xgige_sfp_clk_bufg), - .clk156(xgmii_clk0), - .reset(global_rst | sw_rst[0]), - .xgmii_txd(xgmii_txd0), - .xgmii_txc(xgmii_txc0), - .xgmii_rxd(xgmii_rxd0), - .xgmii_rxc(xgmii_rxc0), - .txp(SFP0_TX_p), - .txn(SFP0_TX_n), - .rxp(SFP0_RX_p), - .rxn(SFP0_RX_n), - .mdc(mdc0), - .mdio_in(mdio_in0), - .mdio_out(mdio_out0), - .mdio_tri(mdio_tri0), - .prtad(prtad0), - .core_status(core_status0), // Ignore for now. IJB - .resetdone(xge_phy_resetdone0), - .signal_detect(~SFPP0_RxLOS), // Undocumented, but it seems Xilinx expect this to be inverted. - .tx_fault(SFPP0_TxFault), - .tx_disable(SFPP0_TxDisable) - ); - -`else - - ////////////////////////////////////////////////////////////////////// - // - // 1000Base-X PHY with GMII interface to MAC - // - ////////////////////////////////////////////////////////////////////// - wire [31:0] gige_phy_misc_dbg0; - wire [15:0] gige_phy_int_data0; - wire [7:0] gmii_txd0, gmii_rxd0; - wire gmii_tx_en0, gmii_tx_er0, gmii_rx_dv0, gmii_rx_er0; - wire gmii_clk0; - wire [15:0] gmii_status0; - - assign SFPP0_TxDisable = 1'b0; // Always on. - - gige_phy_mdio gige_phy_port0 - ( - .reset(global_rst | sw_rst[0]), - .independent_clock(bus_clk), - .sfp_clk(gige_sfp_clk), - .SFP_TX_p(SFP0_TX_p), - .SFP_TX_n(SFP0_TX_n), - .SFP_RX_p(SFP0_RX_p), - .SFP_RX_n(SFP0_RX_n), - .gmii_clk(gmii_clk0), - .gmii_txd(gmii_txd0), - .gmii_tx_en(gmii_tx_en0), - .gmii_tx_er(gmii_tx_er0), - .gmii_rxd(gmii_rxd0), - .gmii_rx_dv(gmii_rx_dv0), - .gmii_rx_er(gmii_rx_er0), - .misc_debug(gige_phy_misc_dbg0), - .int_data(gige_phy_int_data0), - .status_vector(gmii_status0), - // MDIO signals - .prtad(prtad0), - .mdc(mdc0), - .mdio_i(mdio_in0), - .mdio_o(mdio_out0), - .mdio_t(mdio_tri0) - ); - - wire [35:0] CONTROL0; - - -/* -----\/----- EXCLUDED -----\/----- - - chipscope_ila chipscope_ila_i0 - ( - .CONTROL(CONTROL0), // INOUT BUS [35:0] - .CLK(mdc0), // IN - .TRIG0( - { - gmii_status0, //31:16 - 3'b0, prtad0, //15:8 - 4'b0, 1'b0, mdio_in0, mdio_out0, mdio_tri0 //7:0 - } - ) // IN BUS [191:0] - ); - - chipscope_icon chipscope_icon_i0 - ( - .CONTROL0(CONTROL0) // INOUT BUS [35:0] - ); - - -----/\----- EXCLUDED -----/\----- */ - -`endif // !`ifdef - - ////////////////////////////////////////////////////////////////////// - // - // Configure Ethernet PHY implemented for PORT1 - // - ////////////////////////////////////////////////////////////////////// - wire mdc1, mdio_in1, mdio_out1, mdio_tri1; - wire [4:0] prtad1 = 5'b00100; // MDIO address is 4 - -`ifdef ETH10G_PORT1 - ////////////////////////////////////////////////////////////////////// - // - // 10GBaseR PHY with XGMII interface to MAC - // - ////////////////////////////////////////////////////////////////////// - wire xgmii_clk1; // 156.25MHz - wire [63:0] xgmii_txd1; - wire [7:0] xgmii_txc1; - wire [63:0] xgmii_rxd1; - wire [7:0] xgmii_rxc1; - - wire [7:0] core_status1; - wire xge_phy_resetdone1; - - ten_gig_eth_pcs_pma_x300_top ten_gig_eth_pcs_pma_x300_top_port1 - ( - .refclk156(xgige_sfp_clk), - .refclk156_buf(xgige_sfp_clk_bufg), - .clk156(xgmii_clk1), - .reset(global_rst | sw_rst[0]), - .xgmii_txd(xgmii_txd1), - .xgmii_txc(xgmii_txc1), - .xgmii_rxd(xgmii_rxd1), - .xgmii_rxc(xgmii_rxc1), - .txp(SFP1_TX_p), - .txn(SFP1_TX_n), - .rxp(SFP1_RX_p), - .rxn(SFP1_RX_n), - .mdc(mdc1), - .mdio_in(mdio_in1), - .mdio_out(mdio_out1), - .mdio_tri(mdio_tri1), - .prtad(prtad0), - .core_status(core_status1), // Ignore for now. IJB - .resetdone(xge_phy_resetdone1), - .signal_detect(~SFPP1_RxLOS), // Undocumented, but it seems Xilinx expect this to be inverted. - .tx_fault(SFPP1_TxFault), - .tx_disable(SFPP1_TxDisable) - ); - -`else - - ////////////////////////////////////////////////////////////////////// - // - // 1000Base-X PHY with GMII interface to MAC - // - ////////////////////////////////////////////////////////////////////// - wire [31:0] gige_phy_misc_dbg1; - wire [15:0] gige_phy_int_data1; - wire [7:0] gmii_txd1, gmii_rxd1; - wire gmii_tx_en1, gmii_tx_er1, gmii_rx_dv1, gmii_rx_er1; - wire gmii_clk1; - wire [15:0] gmii_status1; - - assign SFPP1_TxDisable = 1'b0; // Always on. - - gige_phy_mdio gige_phy_port1 - ( - .reset(global_rst | sw_rst[0]), - .independent_clock(bus_clk), - .sfp_clk(gige_sfp_clk), - .SFP_TX_p(SFP1_TX_p), - .SFP_TX_n(SFP1_TX_n), - .SFP_RX_p(SFP1_RX_p), - .SFP_RX_n(SFP1_RX_n), - .gmii_clk(gmii_clk1), - .gmii_txd(gmii_txd1), - .gmii_tx_en(gmii_tx_en1), - .gmii_tx_er(gmii_tx_er1), - .gmii_rxd(gmii_rxd1), - .gmii_rx_dv(gmii_rx_dv1), - .gmii_rx_er(gmii_rx_er1), - .misc_debug(gige_phy_misc_dbg1), - .int_data(gige_phy_int_data1), - .status_vector(gmii_status1), - // MDIO signals - .prtad(prtad0), - .mdc(mdc1), - .mdio_i(mdio_in1), - .mdio_o(mdio_out1), - .mdio_t(mdio_tri1) - ); -`endif // !`ifdef - - /////////////////////////////////////////////////////////////////////////////////// - // - // Debug bus for logic analyzer use. - // - /////////////////////////////////////////////////////////////////////////////////// - -// assign {DB0_TX_IO,DB0_RX_IO} = debug0; - -// assign {DB1_TX_IO,DB1_RX_IO} = debug1; - -/* - assign debug = { - 2'b0, SFPP1_ModAbs, SFPP1_RxLOS, SFPP1_TxFault, SFPP1_RS0, SFPP1_RS1, SFPP1_TxDisable, //8 - 4'b0, gmii_tx_en, gmii_tx_er, gmii_rx_dv, gmii_rx_er, //8 - gmii_txd, gmii_rxd //16 - }; -*/ - - -`ifndef NO_DRAM_FIFOS - - /////////////////////////////////////////////////////////////////////////////////// - // - // Xilinx DDR3 Controller and PHY. - // - /////////////////////////////////////////////////////////////////////////////////// - - - wire ddr3_axi_clk; // 1/4 DDR external clock rate (250MHz) - wire ddr3_axi_rst; // Synchronized to ddr_sys_clk - wire ddr3_running; // DRAM calibration complete. - - // Slave Interface Write Address Ports - wire [3:0] s_axi_awid; - wire [31:0] s_axi_awaddr; - wire [7:0] s_axi_awlen; - wire [2:0] s_axi_awsize; - wire [1:0] s_axi_awburst; - wire [0:0] s_axi_awlock; - wire [3:0] s_axi_awcache; - wire [2:0] s_axi_awprot; - wire [3:0] s_axi_awqos; - wire s_axi_awvalid; - wire s_axi_awready; - // Slave Interface Write Data Ports - wire [127:0] s_axi_wdata; - wire [15:0] s_axi_wstrb; - wire s_axi_wlast; - wire s_axi_wvalid; - wire s_axi_wready; - // Slave Interface Write Response Ports - wire s_axi_bready; - wire [3:0] s_axi_bid; - wire [1:0] s_axi_bresp; - wire s_axi_bvalid; - // Slave Interface Read Address Ports - wire [3:0] s_axi_arid; - wire [31:0] s_axi_araddr; - wire [7:0] s_axi_arlen; - wire [2:0] s_axi_arsize; - wire [1:0] s_axi_arburst; - wire [0:0] s_axi_arlock; - wire [3:0] s_axi_arcache; - wire [2:0] s_axi_arprot; - wire [3:0] s_axi_arqos; - wire s_axi_arvalid; - wire s_axi_arready; - // Slave Interface Read Data Ports - wire s_axi_rready; - wire [3:0] s_axi_rid; - wire [127:0] s_axi_rdata; - wire [1:0] s_axi_rresp; - wire s_axi_rlast; - wire s_axi_rvalid; - - reg ddr3_axi_rst_reg_n; - - // Copied this reset circuit from example design. - always @(posedge ddr3_axi_clk) - ddr3_axi_rst_reg_n <= ~ddr3_axi_rst; - - -/* -----\/----- EXCLUDED -----\/----- - //-*************************************************************************** - // Traffic Gen related localparams - //-*************************************************************************** - localparam BL_WIDTH = 10; - localparam PORT_MODE = "BI_MODE"; - localparam DATA_MODE = 4'b0010; - localparam ADDR_MODE = 4'b0011; - localparam TST_MEM_INSTR_MODE = "R_W_INSTR_MODE"; - localparam 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. - localparam 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" - localparam CMD_PATTERN = "CGEN_ALL"; - // "CGEN_PRBS","CGEN_FIXED","CGEN_BRAM", - // "CGEN_SEQUENTIAL", "CGEN_ALL" - localparam BEGIN_ADDRESS = 32'h00000000; - localparam END_ADDRESS = 32'h00ffffff; - localparam PRBS_EADDR_MASK_POS = 32'hff000000; - localparam CMD_WDT = 'h3FF; - localparam WR_WDT = 'h1FFF; - localparam RD_WDT = 'h3FF; - localparam SEL_VICTIM_LINE = 0; - localparam ENFORCE_RD_WR = 0; - localparam ENFORCE_RD_WR_CMD = 8'h11; - localparam ENFORCE_RD_WR_PATTERN = 3'b000; - localparam C_EN_WRAP_TRANS = 0; - localparam C_AXI_NBURST_TEST = 0; - - //-*************************************************************************** - // The following localparams refer to width of various ports - //-*************************************************************************** - localparam BANK_WIDTH = 3; - // # of memory Bank Address bits. - localparam CK_WIDTH = 1; - // # of CK/CK# outputs to memory. - localparam COL_WIDTH = 10; - // # of memory Column Address bits. - localparam CS_WIDTH = 1; - // # of unique CS outputs to memory. - localparam nCS_PER_RANK = 1; - // # of unique CS outputs per rank for phy - localparam CKE_WIDTH = 1; - // # of CKE outputs to memory. - localparam DATA_BUF_ADDR_WIDTH = 5; - localparam DQ_CNT_WIDTH = 5; - // = ceil(log2(DQ_WIDTH)) - localparam DQ_PER_DM = 8; - localparam DM_WIDTH = 4; - // # of DM (data mask) - localparam DQ_WIDTH = 32; - // # of DQ (data) - localparam DQS_WIDTH = 4; - localparam DQS_CNT_WIDTH = 2; - // = ceil(log2(DQS_WIDTH)) - localparam DRAM_WIDTH = 8; - // # of DQ per DQS - localparam ECC = "OFF"; - localparam nBANK_MACHS = 4; - localparam RANKS = 1; - // # of Ranks. - localparam ODT_WIDTH = 1; - // # of ODT outputs to memory. - localparam ROW_WIDTH = 15; - // # of memory Row Address bits. - localparam ADDR_WIDTH = 29; - // # = RANK_WIDTH + BANK_WIDTH - // + ROW_WIDTH + COL_WIDTH; - // Chip Select is always tied to low for - // single rank devices - localparam USE_CS_PORT = 1; - // # = 1, When Chip Select (CS#) output is enabled - // = 0, When Chip Select (CS#) output is disabled - // If CS_N disabled, user must connect - // DRAM CS_N input(s) to ground - localparam 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 - localparam USE_ODT_PORT = 1; - // # = 1, When ODT output is enabled - // = 0, When ODT output is disabled - localparam PHY_CONTROL_MASTER_BANK = 1; - // The bank index where master PHY_CONTROL resides; - // equal to the PLL residing bank - localparam MEM_DENSITY = "4Gb"; - // Indicates the density of the Memory part - // Added for the sake of Vivado simulations - localparam MEM_SPEEDGRADE = "125"; - // Indicates the Speed grade of Memory Part - // Added for the sake of Vivado simulations - localparam MEM_DEVICE_WIDTH = 16; - // Indicates the device width of the Memory Part - // Added for the sake of Vivado simulations - - //-*************************************************************************** - // The following localparams are mode register settings - //-*************************************************************************** - localparam AL = "0"; - // DDR3 SDRAM: - // Additive Latency (Mode Register 1). - // # = "0", "CL-1", "CL-2". - // DDR2 SDRAM: - // Additive Latency (Extended Mode Register). - localparam nAL = 0; - // # Additive Latency in number of clock - // cycles. - localparam BURST_MODE = "8"; - // DDR3 SDRAM: - // Burst Length (Mode Register 0). - // # = "8", "4", "OTF". - // DDR2 SDRAM: - // Burst Length (Mode Register). - // # = "8", "4". - localparam BURST_TYPE = "SEQ"; - // DDR3 SDRAM: Burst Type (Mode Register 0). - // DDR2 SDRAM: Burst Type (Mode Register). - // # = "SEQ" - (Sequential), - // = "INT" - (Interleaved). - localparam CL = 7; - // in number of clock cycles - // DDR3 SDRAM: CAS Latency (Mode Register 0). - // DDR2 SDRAM: CAS Latency (Mode Register). - localparam CWL = 6; - // in number of clock cycles - // DDR3 SDRAM: CAS Write Latency (Mode Register 2). - // DDR2 SDRAM: Can be ignored - localparam OUTPUT_DRV = "HIGH"; - // Output Driver Impedance Control (Mode Register 1). - // # = "HIGH" - RZQ/7, - // = "LOW" - RZQ/6. - localparam RTT_NOM = "60"; - // RTT_NOM (ODT) (Mode Register 1). - // = "120" - RZQ/2, - // = "60" - RZQ/4, - // = "40" - RZQ/6. - localparam RTT_WR = "OFF"; - // RTT_WR (ODT) (Mode Register 2). - // # = "OFF" - Dynamic ODT off, - // = "120" - RZQ/2, - // = "60" - RZQ/4, - localparam ADDR_CMD_MODE = "1T" ; - // # = "1T", "2T". - localparam REG_CTRL = "OFF"; - // # = "ON" - RDIMMs, - // = "OFF" - Components, SODIMMs, UDIMMs. - localparam CA_MIRROR = "OFF"; - // C/A mirror opt for DDR3 dual rank - - //-*************************************************************************** - // The following localparams are multiplier and divisor factors for PLLE2. - // Based on the selected design frequency these localparams vary. - //-*************************************************************************** - localparam CLKIN_PERIOD = 10000; - // Input Clock Period - localparam CLKFBOUT_MULT = 10; - // write PLL VCO multiplier - localparam DIVCLK_DIVIDE = 1; - // write PLL VCO divisor - localparam CLKOUT0_PHASE = 337.5; - // Phase for PLL output clock (CLKOUT0) - localparam CLKOUT0_DIVIDE = 2; - // VCO output divisor for PLL output clock (CLKOUT0) - localparam CLKOUT1_DIVIDE = 2; - // VCO output divisor for PLL output clock (CLKOUT1) - localparam CLKOUT2_DIVIDE = 32; - // VCO output divisor for PLL output clock (CLKOUT2) - localparam CLKOUT3_DIVIDE = 8; - // VCO output divisor for PLL output clock (CLKOUT3) - - //-*************************************************************************** - // Memory Timing Localparams. These localparams varies based on the selected - // memory part. - //-*************************************************************************** - localparam tCKE = 5000; - // memory tCKE paramter in pS - localparam tFAW = 30000; - // memory tRAW paramter in pS. - localparam tRAS = 35000; - // memory tRAS paramter in pS. - localparam tRCD = 13750; - // memory tRCD paramter in pS. - localparam tREFI = 7800000; - // memory tREFI paramter in pS. - localparam tRFC = 300000; - // memory tRFC paramter in pS. - localparam tRP = 13750; - // memory tRP paramter in pS. - localparam tRRD = 6000; - // memory tRRD paramter in pS. - localparam tRTP = 7500; - // memory tRTP paramter in pS. - localparam tWTR = 7500; - // memory tWTR paramter in pS. - localparam tZQI = 128_000_000; - // memory tZQI paramter in nS. - localparam tZQCS = 64; - // memory tZQCS paramter in clock cycles. - - //-*************************************************************************** - // Simulation localparams - //-*************************************************************************** - localparam SIM_BYPASS_INIT_CAL = "OFF"; - // # = "OFF" - Complete memory init & - // calibration sequence - // # = "SKIP" - Not supported - // # = "FAST" - Complete memory init & use - // abbreviated calib sequence - - localparam SIMULATION = "FALSE"; - // Should be TRUE during design simulations and - // FALSE during implementations - - //-*************************************************************************** - // The following localparams varies based on the pin out entered in MIG GUI. - // Do not change any of these localparams directly by editing the RTL. - // Any changes required should be done through GUI and the design regenerated. - //-*************************************************************************** - localparam BYTE_LANES_B0 = 4'b1111; - // Byte lanes used in an IO column. - localparam BYTE_LANES_B1 = 4'b1110; - // Byte lanes used in an IO column. - localparam BYTE_LANES_B2 = 4'b0000; - // Byte lanes used in an IO column. - localparam BYTE_LANES_B3 = 4'b0000; - // Byte lanes used in an IO column. - localparam BYTE_LANES_B4 = 4'b0000; - // Byte lanes used in an IO column. - localparam 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 - localparam 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 - localparam 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 - localparam 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 - localparam 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 - localparam PHY_0_BITLANES = 48'h3FE_3FE_3FE_2FF; - localparam PHY_1_BITLANES = 48'h3FF_FFF_C00_000; - localparam PHY_2_BITLANES = 48'h000_000_000_000; - - // control/address/data pin mapping localparams - localparam CK_BYTE_MAP - = 144'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_13; - localparam ADDR_MAP - = 192'h000_139_138_137_136_135_134_133_132_131_130_129_128_127_126_12B; - localparam BANK_MAP = 36'h12A_125_124; - localparam CAS_MAP = 12'h122; - localparam CKE_ODT_BYTE_MAP = 8'h00; - localparam CKE_MAP = 96'h000_000_000_000_000_000_000_11B; - localparam ODT_MAP = 96'h000_000_000_000_000_000_000_11A; - localparam CS_MAP = 120'h000_000_000_000_000_000_000_000_000_120; - localparam PARITY_MAP = 12'h000; - localparam RAS_MAP = 12'h123; - localparam WE_MAP = 12'h121; - localparam DQS_BYTE_MAP - = 144'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_02_03; - localparam DATA0_MAP = 96'h031_032_033_034_035_036_037_038; - localparam DATA1_MAP = 96'h021_022_023_024_025_026_027_028; - localparam DATA2_MAP = 96'h011_012_013_014_015_016_017_018; - localparam DATA3_MAP = 96'h000_001_002_003_004_005_006_007; - localparam DATA4_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA5_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA6_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA7_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA8_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA9_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA10_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA11_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA12_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA13_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA14_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA15_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA16_MAP = 96'h000_000_000_000_000_000_000_000; - localparam DATA17_MAP = 96'h000_000_000_000_000_000_000_000; - localparam MASK0_MAP = 108'h000_000_000_000_000_009_019_029_039; - localparam MASK1_MAP = 108'h000_000_000_000_000_000_000_000_000; - - localparam SLOT_0_CONFIG = 8'b0000_0001; - // Mapping of Ranks. - localparam SLOT_1_CONFIG = 8'b0000_0000; - // Mapping of Ranks. - localparam MEM_ADDR_ORDER - = "BANK_ROW_COLUMN"; - - //-*************************************************************************** - // IODELAY and PHY related localparams - //-*************************************************************************** - localparam IODELAY_HP_MODE = "ON"; - // to phy_top - localparam IBUF_LPWR_MODE = "OFF"; - // to phy_top - localparam DATA_IO_IDLE_PWRDWN = "ON"; - // # = "ON", "OFF" - localparam BANK_TYPE = "HP_IO"; - // # = "HP_IO", "HPL_IO", "HR_IO", "HRL_IO" - localparam DATA_IO_PRIM_TYPE = "HP_LP"; - // # = "HP_LP", "HR_LP", "DEFAULT" - localparam CKE_ODT_AUX = "FALSE"; - localparam USER_REFRESH = "OFF"; - localparam WRLVL = "ON"; - // # = "ON" - DDR3 SDRAM - // = "OFF" - DDR2 SDRAM. - localparam ORDERING = "NORM"; - // # = "NORM", "STRICT", "RELAXED". - localparam CALIB_ROW_ADD = 16'h0000; - // Calibration row address will be used for - // calibration read and write operations - localparam CALIB_COL_ADD = 12'h000; - // Calibration column address will be used for - // calibration read and write operations - localparam CALIB_BA_ADD = 3'h0; - // Calibration bank address will be used for - // calibration read and write operations - localparam TCQ = 100; - localparam IODELAY_GRP = "IODELAY_MIG"; - // It is associated to a set of IODELAYs with - // an IDELAYCTRL that have same IODELAY CONTROLLER - // clock frequency. - localparam SYSCLK_TYPE = "SINGLE_ENDED"; - // System clock type DIFFERENTIAL, SINGLE_ENDED, - // NO_BUFFER - localparam REFCLK_TYPE = "NO_BUFFER"; - // Reference clock type DIFFERENTIAL, SINGLE_ENDED, - // NO_BUFFER, USE_SYSTEM_CLOCK - - localparam DRAM_TYPE = "DDR3"; - localparam CAL_WIDTH = "HALF"; - localparam STARVE_LIMIT = 2; - // # = 2,3,4. - - //-*************************************************************************** - // Referece clock frequency localparams - //-*************************************************************************** - localparam REFCLK_FREQ = 200.0; - // IODELAYCTRL reference clock frequency - localparam DIFF_TERM_REFCLK = "TRUE"; - // Differential Termination for idelay - // reference clock input pins - //-*************************************************************************** - // System clock frequency localparams - //-*************************************************************************** - localparam tCK = 2000; - // memory tCK paramter. - // # = Clock Period in pS. - localparam nCK_PER_CLK = 4; - // # of memory CKs per fabric CLK - localparam DIFF_TERM_SYSCLK = "TRUE"; - // Differential Termination for System - // clock input pins - - - //-*************************************************************************** - // AXI4 Shim localparams - //-*************************************************************************** - localparam C_S_AXI_ID_WIDTH = 4; - // Width of all master and slave ID signals. - // # = >= 1. - localparam C_S_AXI_MEM_SIZE = "2147483648"; - // Address Space required for this component - localparam 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. - localparam C_S_AXI_DATA_WIDTH = 128; - // Width of WDATA and RDATA on SI slot. - // Must be <= APP_DATA_WIDTH. - // # = 32, 64, 128, 256. - localparam C_MC_nCK_PER_CLK = 4; - // Indicates whether to instatiate upsizer - // Range: 0, 1 - localparam C_S_AXI_SUPPORTS_NARROW_BURST = 1; - // Indicates whether to instatiate upsizer - // Range: 0, 1 - localparam C_RD_WR_ARB_ALGORITHM = "ROUND_ROBIN"; - // Indicates the Arbitration - // Allowed values - "TDM", "ROUND_ROBIN", - // "RD_PRI_REG", "RD_PRI_REG_STARVE_LIMIT" - // "WRITE_PRIORITY", "WRITE_PRIORITY_REG" - localparam 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 - localparam 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 - localparam C_S_AXI_CTRL_ADDR_WIDTH = 32; - // Width of AXI-4-Lite address bus - localparam C_S_AXI_CTRL_DATA_WIDTH = 32; - // Width of AXI-4-Lite data buses - localparam C_S_AXI_BASEADDR = 32'h0000_0000; - // Base address of AXI4 Memory Mapped bus. - localparam C_ECC_ONOFF_RESET_VALUE = 1; - // Controls ECC on/off value at startup/reset - localparam C_ECC_CE_COUNTER_WIDTH = 8; - // The external memory to controller clock ratio. - - //-*************************************************************************** - // Debug localparams - //-*************************************************************************** - localparam DEBUG_PORT = "OFF"; - // # = "ON" Enable debug signals/controls. - // = "OFF" Disable debug signals/controls. - - //-*************************************************************************** - // Temparature monitor localparam - //-*************************************************************************** - localparam TEMP_MON_CONTROL = "INTERNAL"; - // # = "INTERNAL", "EXTERNAL" - - localparam RST_ACT_LOW = 1; - // =1 for active low reset, - // =0 for active high. - //-******************* - - localparam CMD_PIPE_PLUS1 = "ON"; - // add pipeline stage between MC and PHY - localparam DATA_WIDTH = 32; - localparam ECC_WIDTH = (ECC == "OFF")? - 0 : (DATA_WIDTH <= 4)? - 4 : (DATA_WIDTH <= 10)? - 5 : (DATA_WIDTH <= 26)? - 6 : (DATA_WIDTH <= 57)? - 7 : (DATA_WIDTH <= 120)? - 8 : (DATA_WIDTH <= 247)? - 9 : 10; - localparam ECC_TEST = "OFF"; - localparam RANK_WIDTH = clogb2(RANKS); - localparam DATA_BUF_OFFSET_WIDTH = 1; - localparam MC_ERR_ADDR_WIDTH = ((CS_WIDTH == 1) ? 0 : RANK_WIDTH) - + BANK_WIDTH + ROW_WIDTH + COL_WIDTH - + DATA_BUF_OFFSET_WIDTH; - localparam tPRDI = 1_000_000; - // memory tPRDI paramter in pS. - localparam PAYLOAD_WIDTH = (ECC_TEST == "OFF") ? DATA_WIDTH : DQ_WIDTH; - //localparam BURST_LENGTH = STR_TO_INT(BURST_MODE); - localparam APP_DATA_WIDTH = 2 * nCK_PER_CLK * PAYLOAD_WIDTH; - localparam APP_MASK_WIDTH = APP_DATA_WIDTH / 8; - -----/\----- EXCLUDED -----/\----- */ - - - ddr3_32bit - /* -----\/----- EXCLUDED -----\/----- - #( - .TCQ (TCQ), - .ADDR_CMD_MODE (ADDR_CMD_MODE), - .AL (AL), - .PAYLOAD_WIDTH (PAYLOAD_WIDTH), - .BANK_WIDTH (BANK_WIDTH), - .BURST_MODE (BURST_MODE), - .BURST_TYPE (BURST_TYPE), - .CA_MIRROR (CA_MIRROR), - .CK_WIDTH (CK_WIDTH), - .COL_WIDTH (COL_WIDTH), - .CMD_PIPE_PLUS1 (CMD_PIPE_PLUS1), - .CS_WIDTH (CS_WIDTH), - .nCS_PER_RANK (nCS_PER_RANK), - .CKE_WIDTH (CKE_WIDTH), - .DATA_WIDTH (DATA_WIDTH), - .DATA_BUF_ADDR_WIDTH (DATA_BUF_ADDR_WIDTH), - .DQ_CNT_WIDTH (DQ_CNT_WIDTH), - .DQ_PER_DM (DQ_PER_DM), - .DQ_WIDTH (DQ_WIDTH), - .DQS_CNT_WIDTH (DQS_CNT_WIDTH), - .DQS_WIDTH (DQS_WIDTH), - .DRAM_WIDTH (DRAM_WIDTH), - .ECC (ECC), - .ECC_WIDTH (ECC_WIDTH), - .ECC_TEST (ECC_TEST), - .MC_ERR_ADDR_WIDTH (MC_ERR_ADDR_WIDTH), - .nAL (nAL), - .nBANK_MACHS (nBANK_MACHS), - .CKE_ODT_AUX (CKE_ODT_AUX), - .ORDERING (ORDERING), - .OUTPUT_DRV (OUTPUT_DRV), - .IBUF_LPWR_MODE (IBUF_LPWR_MODE), - .IODELAY_HP_MODE (IODELAY_HP_MODE), - .DATA_IO_IDLE_PWRDWN (DATA_IO_IDLE_PWRDWN), - .BANK_TYPE (BANK_TYPE), - .DATA_IO_PRIM_TYPE (DATA_IO_PRIM_TYPE), - .REG_CTRL (REG_CTRL), - .RTT_NOM (RTT_NOM), - .RTT_WR (RTT_WR), - .CL (CL), - .CWL (CWL), - .tCKE (tCKE), - .tFAW (tFAW), - .tPRDI (tPRDI), - .tRAS (tRAS), - .tRCD (tRCD), - .tREFI (tREFI), - .tRFC (tRFC), - .tRP (tRP), - .tRRD (tRRD), - .tRTP (tRTP), - .tWTR (tWTR), - .tZQI (tZQI), - .tZQCS (tZQCS), - .USER_REFRESH (USER_REFRESH), - .WRLVL (WRLVL), - .DEBUG_PORT (DEBUG_PORT), - .RANKS (RANKS), - .ODT_WIDTH (ODT_WIDTH), - .ROW_WIDTH (ROW_WIDTH), - .ADDR_WIDTH (ADDR_WIDTH), - .SIM_BYPASS_INIT_CAL (SIM_BYPASS_INIT_CAL), - .SIMULATION (SIMULATION), - .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), - .CALIB_ROW_ADD (CALIB_ROW_ADD), - .CALIB_COL_ADD (CALIB_COL_ADD), - .CALIB_BA_ADD (CALIB_BA_ADD), - .SLOT_0_CONFIG (SLOT_0_CONFIG), - .SLOT_1_CONFIG (SLOT_1_CONFIG), - .MEM_ADDR_ORDER (MEM_ADDR_ORDER), - .USE_CS_PORT (USE_CS_PORT), - .USE_DM_PORT (USE_DM_PORT), - .USE_ODT_PORT (USE_ODT_PORT), - .PHY_CONTROL_MASTER_BANK (PHY_CONTROL_MASTER_BANK), - .TEMP_MON_CONTROL (TEMP_MON_CONTROL), - - - .DM_WIDTH (DM_WIDTH), - - .nCK_PER_CLK (nCK_PER_CLK), - .tCK (tCK), - .DIFF_TERM_SYSCLK (DIFF_TERM_SYSCLK), - .CLKIN_PERIOD (CLKIN_PERIOD), - .CLKFBOUT_MULT (CLKFBOUT_MULT), - .DIVCLK_DIVIDE (DIVCLK_DIVIDE), - .CLKOUT0_PHASE (CLKOUT0_PHASE), - .CLKOUT0_DIVIDE (CLKOUT0_DIVIDE), - .CLKOUT1_DIVIDE (CLKOUT1_DIVIDE), - .CLKOUT2_DIVIDE (CLKOUT2_DIVIDE), - .CLKOUT3_DIVIDE (CLKOUT3_DIVIDE), - .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), - .C_S_AXI_CTRL_ADDR_WIDTH (C_S_AXI_CTRL_ADDR_WIDTH), - .C_S_AXI_CTRL_DATA_WIDTH (C_S_AXI_CTRL_DATA_WIDTH), - .C_S_AXI_BASEADDR (C_S_AXI_BASEADDR), - .C_ECC_ONOFF_RESET_VALUE (C_ECC_ONOFF_RESET_VALUE), - .C_ECC_CE_COUNTER_WIDTH (C_ECC_CE_COUNTER_WIDTH), - - - .SYSCLK_TYPE (SYSCLK_TYPE), - .REFCLK_TYPE (REFCLK_TYPE), - .REFCLK_FREQ (REFCLK_FREQ), - .DIFF_TERM_REFCLK (DIFF_TERM_REFCLK), - .IODELAY_GRP (IODELAY_GRP), - - .CAL_WIDTH (CAL_WIDTH), - .STARVE_LIMIT (STARVE_LIMIT), - .DRAM_TYPE (DRAM_TYPE), - - - .RST_ACT_LOW (RST_ACT_LOW) - ) - -----/\----- EXCLUDED -----/\----- */ - u_ddr3_32bit - ( - // Memory interface ports - .ddr3_addr (ddr3_addr), - .ddr3_ba (ddr3_ba), - .ddr3_cas_n (ddr3_cas_n), - .ddr3_ck_n (ddr3_ck_n), - .ddr3_ck_p (ddr3_ck_p), - .ddr3_cke (ddr3_cke), - .ddr3_ras_n (ddr3_ras_n), - .ddr3_reset_n (ddr3_reset_n), - .ddr3_we_n (ddr3_we_n), - .ddr3_dq (ddr3_dq), - .ddr3_dqs_n (ddr3_dqs_n), - .ddr3_dqs_p (ddr3_dqs_p), - .init_calib_complete (ddr3_running), - - .ddr3_cs_n (ddr3_cs_n), - .ddr3_dm (ddr3_dm), - .ddr3_odt (ddr3_odt), - // Application interface ports - .ui_clk (ddr3_axi_clk), // 250MHz clock out - .ui_clk_sync_rst (ddr3_axi_rst), // Active high Reset signal synchronised to 250MHz - .aresetn (ddr3_axi_rst_reg_n), - .app_sr_req (1'b0), - .app_sr_active (app_sr_active), - .app_ref_req (1'b0), - .app_ref_ack (app_ref_ack), - .app_zq_req (1'b0), - .app_zq_ack (app_zq_ack), - - // Slave Interface Write Address Ports - .s_axi_awid (s_axi_awid), - .s_axi_awaddr (s_axi_awaddr), - .s_axi_awlen (s_axi_awlen), - .s_axi_awsize (s_axi_awsize), - .s_axi_awburst (s_axi_awburst), - .s_axi_awlock (s_axi_awlock), - .s_axi_awcache (s_axi_awcache), - .s_axi_awprot (s_axi_awprot), - .s_axi_awqos (s_axi_awqos), - .s_axi_awvalid (s_axi_awvalid), - .s_axi_awready (s_axi_awready), - // Slave Interface Write Data Ports - .s_axi_wdata (s_axi_wdata), - .s_axi_wstrb (s_axi_wstrb), - .s_axi_wlast (s_axi_wlast), - .s_axi_wvalid (s_axi_wvalid), - .s_axi_wready (s_axi_wready), - // Slave Interface Write Response Ports - .s_axi_bid (s_axi_bid), - .s_axi_bresp (s_axi_bresp), - .s_axi_bvalid (s_axi_bvalid), - .s_axi_bready (s_axi_bready), - // Slave Interface Read Address Ports - .s_axi_arid (s_axi_arid), - .s_axi_araddr (s_axi_araddr), - .s_axi_arlen (s_axi_arlen), - .s_axi_arsize (s_axi_arsize), - .s_axi_arburst (s_axi_arburst), - .s_axi_arlock (s_axi_arlock), - .s_axi_arcache (s_axi_arcache), - .s_axi_arprot (s_axi_arprot), - .s_axi_arqos (s_axi_arqos), - .s_axi_arvalid (s_axi_arvalid), - .s_axi_arready (s_axi_arready), - // Slave Interface Read Data Ports - .s_axi_rid (s_axi_rid), - .s_axi_rdata (s_axi_rdata), - .s_axi_rresp (s_axi_rresp), - .s_axi_rlast (s_axi_rlast), - .s_axi_rvalid (s_axi_rvalid), - .s_axi_rready (s_axi_rready), - // System Clock Ports - .sys_clk_i (sys_clk_i), // From external 100MHz source. - .sys_rst (~global_rst) // IJB. Poorly named active low. Should change RST_ACT_LOW. - ); - -`endif // `ifndef NO_DRAM_FIFOS - - /////////////////////////////////////////////////////////////////////////////////// - // - // X300 Core - // - /////////////////////////////////////////////////////////////////////////////////// - x300_core x300_core - ( - .radio_clk(radio_clk), .radio_rst(radio_rst), - .bus_clk(bus_clk), .bus_rst(bus_rst), .sw_rst(sw_rst), -`ifdef DEBUG_UART - .fp_gpio(FrontPanelGpio[9:0]), // Discard upper unsued bits. -`else - .fp_gpio(FrontPanelGpio[11:0]), // Discard upper unsued bits. - `endif - // Radio0 signals - .rx0(rx0), .tx0(tx0), .db_gpio0({DB0_TX_IO,DB0_RX_IO}), - .sen0(sen0), .sclk0(sclk0), .mosi0(mosi0), .miso0(miso0), - .radio_led0(led0), .radio_misc0({DB_ADC_RESET, DB_DAC_RESET,DB0_DAC_ENABLE}), - .sync_dacs_radio0(sync_dacs_radio0), - // Radio1 signals - .rx1(rx1), .tx1(tx1), .db_gpio1({DB1_TX_IO,DB1_RX_IO}), - .sen1(sen1), .sclk1(sclk1), .mosi1(mosi1), .miso1(miso1), - .radio_led1(led1), .radio_misc1({DB1_DAC_ENABLE}), - .sync_dacs_radio1(sync_dacs_radio1), - // I2C bus - .db_scl(DB_SCL), .db_sda(DB_SDA), - // External clock gen - .ext_ref_clk(ref_clk_10mhz), - .clock_ref_sel(ClockRefSelect), - .clock_misc_opt({GPSDO_PWR_ENA, TCXO_ENA}), - .LMK_Status(LMK_Status[1:0]), .LMK_Holdover(LMK_Holdover), .LMK_Lock(LMK_Lock), .LMK_Sync(LMK_Sync), - .LMK_SEN(LMK_SEN), .LMK_SCLK(LMK_SCLK), .LMK_MOSI(LMK_MOSI), - // SFP+ 0 flags - .SFPP0_SCL(SFPP0_SCL), - .SFPP0_SDA(SFPP0_SDA), - .SFPP0_ModAbs(SFPP0_ModAbs), - .SFPP0_TxFault(SFPP0_TxFault), - .SFPP0_RxLOS(SFPP0_RxLOS), - .SFPP0_RS1(SFPP0_RS1), - .SFPP0_RS0(SFPP0_RS0), - // SFP+ 1 flags - .SFPP1_SCL(SFPP1_SCL), - .SFPP1_SDA(SFPP1_SDA), - .SFPP1_ModAbs(SFPP1_ModAbs), - .SFPP1_TxFault(SFPP1_TxFault), - .SFPP1_RxLOS(SFPP1_RxLOS), - .SFPP1_RS1(SFPP1_RS1), - .SFPP1_RS0(SFPP1_RS0), - // MDIO bus to SFP0 - .mdc0(mdc0), - .mdio_in0(mdio_in0), - .mdio_out0(mdio_out0), - // SFP+ 0 packet interface -`ifdef ETH10G_PORT0 - .xgmii_clk0(xgmii_clk0), - .xgmii_txd0(xgmii_txd0), - .xgmii_txc0(xgmii_txc0), - .xgmii_rxd0(xgmii_rxd0), - .xgmii_rxc0(xgmii_rxc0), - .xge_phy_resetdone0(xge_phy_resetdone0), -`else - .gmii_clk0(gmii_clk0), - .gmii_txd0(gmii_txd0), .gmii_tx_en0(gmii_tx_en0), .gmii_tx_er0(gmii_tx_er0), - .gmii_rxd0(gmii_rxd0), .gmii_rx_dv0(gmii_rx_dv0), .gmii_rx_er0(gmii_rx_er0), -`endif // !`ifdef - // MDIO bus to SFP1 - .mdc1(mdc1), - .mdio_in1(mdio_in1), - .mdio_out1(mdio_out1), - // SFP+ 1 packet interface -`ifdef ETH10G_PORT1 - .xgmii_clk1(xgmii_clk1), - .xgmii_txd1(xgmii_txd1), - .xgmii_txc1(xgmii_txc1), - .xgmii_rxd1(xgmii_rxd1), - .xgmii_rxc1(xgmii_rxc1), - .xge_phy_resetdone1(xge_phy_resetdone1), -`else - .gmii_clk1(gmii_clk1), - .gmii_txd1(gmii_txd1), .gmii_tx_en1(gmii_tx_en1), .gmii_tx_er1(gmii_tx_er1), - .gmii_rxd1(gmii_rxd1), .gmii_rx_dv1(gmii_rx_dv1), .gmii_rx_er1(gmii_rx_er1), -`endif // !`ifdef - // Time - .pps(pps),.pps_select(pps_select), .pps_out_enb(pps_out_enb), - // GPS Signals - .gps_txd(GPS_SER_IN), .gps_rxd(GPS_SER_OUT), - // Debug UART - .debug_rxd(debug_rxd), .debug_txd(debug_txd), - // Misc. - .led_misc(leds), - .debug0(), .debug1(), .debug2(), -`ifndef NO_DRAM_FIFOS - // DRAM signals. - .ddr3_axi_clk (ddr3_axi_clk), - .ddr3_axi_rst (ddr3_axi_rst), - .ddr3_running (ddr3_running), - // Slave Interface Write Address Ports - .ddr3_axi_awid (s_axi_awid), - .ddr3_axi_awaddr (s_axi_awaddr), - .ddr3_axi_awlen (s_axi_awlen), - .ddr3_axi_awsize (s_axi_awsize), - .ddr3_axi_awburst (s_axi_awburst), - .ddr3_axi_awlock (s_axi_awlock), - .ddr3_axi_awcache (s_axi_awcache), - .ddr3_axi_awprot (s_axi_awprot), - .ddr3_axi_awqos (s_axi_awqos), - .ddr3_axi_awvalid (s_axi_awvalid), - .ddr3_axi_awready (s_axi_awready), - // Slave Interface Write Data Ports - .ddr3_axi_wdata (s_axi_wdata), - .ddr3_axi_wstrb (s_axi_wstrb), - .ddr3_axi_wlast (s_axi_wlast), - .ddr3_axi_wvalid (s_axi_wvalid), - .ddr3_axi_wready (s_axi_wready), - // Slave Interface Write Response Ports - .ddr3_axi_bid (s_axi_bid), - .ddr3_axi_bresp (s_axi_bresp), - .ddr3_axi_bvalid (s_axi_bvalid), - .ddr3_axi_bready (s_axi_bready), - // Slave Interface Read Address Ports - .ddr3_axi_arid (s_axi_arid), - .ddr3_axi_araddr (s_axi_araddr), - .ddr3_axi_arlen (s_axi_arlen), - .ddr3_axi_arsize (s_axi_arsize), - .ddr3_axi_arburst (s_axi_arburst), - .ddr3_axi_arlock (s_axi_arlock), - .ddr3_axi_arcache (s_axi_arcache), - .ddr3_axi_arprot (s_axi_arprot), - .ddr3_axi_arqos (s_axi_arqos), - .ddr3_axi_arvalid (s_axi_arvalid), - .ddr3_axi_arready (s_axi_arready), - // Slave Interface Read Data Ports - .ddr3_axi_rid (s_axi_rid), - .ddr3_axi_rdata (s_axi_rdata), - .ddr3_axi_rresp (s_axi_rresp), - .ddr3_axi_rlast (s_axi_rlast), - .ddr3_axi_rvalid (s_axi_rvalid), - .ddr3_axi_rready (s_axi_rready), -`endif // `ifndef NO_DRAM_FIFOS - - // IoPort2 Message FIFOs - .o_iop2_msg_tdata (o_iop2_msg_tdata), - .o_iop2_msg_tvalid (o_iop2_msg_tvalid), - .o_iop2_msg_tlast (o_iop2_msg_tlast), - .o_iop2_msg_tready (o_iop2_msg_tready), - .i_iop2_msg_tdata (i_iop2_msg_tdata), - .i_iop2_msg_tvalid (i_iop2_msg_tvalid), - .i_iop2_msg_tlast (i_iop2_msg_tlast), - .i_iop2_msg_tready (i_iop2_msg_tready), - // PCIe DMA Data - .pcio_tdata (pcio_tdata), - .pcio_tlast (pcio_tlast), - .pcio_tvalid (pcio_tvalid), - .pcio_tready (pcio_tready), - .pcii_tdata (pcii_tdata), - .pcii_tlast (pcii_tlast), - .pcii_tvalid (pcii_tvalid), - .pcii_tready (pcii_tready) - ); - - -endmodule // x300 |