Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / model / verilog / niu / niu_enet_models / enet_models.v
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T2 Processor File: enet_models.v
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
//
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
//
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// have any questions.
//
// ========== Copyright Header End ============================================
module enet_models (
ref_clk, // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
reset, // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
RGMII_TXCLK0, // input () <= ()
RGMII_TXCLK1, // input () <= ()
RGMII_TXCLK2, // input () <= ()
RGMII_TXCLK3, // input () <= ()
RXN0_p0, // input (serdes_P0) <= ()
RXN1_p0, // input (serdes_P0) <= ()
RXN2_p0, // input (serdes_P0) <= ()
RXN3_p0, // input (serdes_P0) <= ()
RXP0_p0, // input (serdes_P0) <= ()
RXP1_p0, // input (serdes_P0) <= ()
RXP2_p0, // input (serdes_P0) <= ()
RXP3_p0, // input (serdes_P0) <= ()
RXN0_p1, // input (serdes_P1) <= ()
RXN1_p1, // input (serdes_P1) <= ()
RXN2_p1, // input (serdes_P1) <= ()
RXN3_p1, // input (serdes_P1) <= ()
RXP0_p1, // input (serdes_P1) <= ()
RXP1_p1, // input (serdes_P1) <= ()
RXP2_p1, // input (serdes_P1) <= ()
RXP3_p1, // input (serdes_P1) <= ()
m0_rx_clk, // output (port0_clk) => (xgmii_if_P0)
m0_tx_clk, // output () => (BW_CALC_P0)
m0_tx_data, // output () => (BW_CALC_P0)
m0_tx_en, // output () => (BW_CALC_P0)
m0_tx_err, // output () => ()
m1_rx_clk, // output (port1_clk) => (xgmii_if_P1)
m1_tx_clk, // output () => (BW_CALC_P1)
m1_tx_data, // output () => (BW_CALC_P1)
m1_tx_en, // output () => (BW_CALC_P1)
m1_tx_err, // output () => ()
m2_rx_clk, // output (port2_clk) => ()
m2_tx_clk, // output () => ()
m2_tx_data, // output () => ()
m2_tx_en, // output () => ()
m2_tx_err, // output () => ()
m3_rx_clk, // output (port3_clk) => ()
m3_tx_clk, // output () => ()
m3_tx_data, // output () => ()
m3_tx_en, // output () => ()
m3_tx_err, // output () => ()
BSINITCLK, // input (serdes_P0,serdes_P1) <= ()
REFCLKN, // input (serdes_P0,serdes_P1) <= ()
REFCLKP, // input (serdes_P0,serdes_P1) <= ()
core_clk, // input (pcs_0_ENV,pcs_1_ENV) <= ()
m0_rx_config, // input (port0_clk) <= ()
m0_rx_data, // input (pcs_0_ENV,xgmii_if_P0) <= ()
m0_rx_dv, // input (pcs_0_ENV,xgmii_if_P0) <= ()
m0_rx_err, // input (pcs_0_ENV) <= ()
m0_tx_config, // input (port0_clk) <= ()
m1_rx_config, // input (port1_clk) <= ()
m1_rx_data, // input (pcs_1_ENV,xgmii_if_P1) <= ()
m1_rx_dv, // input (pcs_1_ENV,xgmii_if_P1) <= ()
m1_rx_err, // input (pcs_1_ENV) <= ()
m1_tx_config, // input (port1_clk) <= ()
m2_rx_config, // input (port2_clk) <= ()
m2_tx_config, // input (port2_clk) <= ()
m3_rx_config, // input (port3_clk) <= ()
m3_tx_config, // input (port3_clk) <= ()
AMUX_p0, // output (serdes_P0) => ()
AMUX_p1, // output (serdes_P1) => ()
STCIQ_p0, // output (serdes_P0) => ()
STCIQ_p1, // output (serdes_P1) => ()
TXN0_p0, // output (serdes_P0) => ()
TXN0_p1, // output (serdes_P1) => ()
TXN1_p0, // output (serdes_P0) => ()
TXN1_p1, // output (serdes_P1) => ()
TXN2_p0, // output (serdes_P0) => ()
TXN2_p1, // output (serdes_P1) => ()
TXN3_p0, // output (serdes_P0) => ()
TXN3_p1, // output (serdes_P1) => ()
TXP0_p0, // output (serdes_P0) => ()
TXP0_p1, // output (serdes_P1) => ()
TXP1_p0, // output (serdes_P0) => ()
TXP1_p1, // output (serdes_P1) => ()
TXP2_p0, // output (serdes_P0) => ()
TXP2_p1, // output (serdes_P1) => ()
TXP3_p0, // output (serdes_P0) => ()
TXP3_p1, // output (serdes_P1) => ()
m0_rx_col, // output (pcs_0_ENV) => ()
m0_rx_crs, // output (pcs_0_ENV) => ()
m0_tx_clk_port, // output (port0_clk) => ()
m1_rx_col, // output (pcs_1_ENV) => ()
m1_rx_crs, // output (pcs_1_ENV) => ()
m1_tx_clk_port, // output (port1_clk) => ()
m2_tx_clk_port, // output (port2_clk) => ()
m3_tx_clk_port, // output (port3_clk) => ()
rx_clk_xgmii // output (xgmii_if_P0,xgmii_if_P1) => ()
);
input BSINITCLK;
input REFCLKN;
input REFCLKP;
input core_clk;
input [3:0] m0_rx_config;
input [7:0] m0_rx_data;
input m0_rx_dv;
input m0_rx_err;
input [3:0] m0_tx_config;
input [3:0] m1_rx_config;
input [7:0] m1_rx_data;
input m1_rx_dv;
input m1_rx_err;
input [3:0] m1_tx_config;
input [3:0] m2_rx_config;
input [3:0] m2_tx_config;
input [3:0] m3_rx_config;
input [3:0] m3_tx_config;
output AMUX_p0;
output AMUX_p1;
output STCIQ_p0;
output STCIQ_p1;
output TXN0_p0;
output TXN0_p1;
output TXN1_p0;
output TXN1_p1;
output TXN2_p0;
output TXN2_p1;
output TXN3_p0;
output TXN3_p1;
output TXP0_p0;
output TXP0_p1;
output TXP1_p0;
output TXP1_p1;
output TXP2_p0;
output TXP2_p1;
output TXP3_p0;
output TXP3_p1;
output m0_rx_col;
output m0_rx_crs;
output m0_tx_clk_port;
output m1_rx_col;
output m1_rx_crs;
output m1_tx_clk_port;
output m2_tx_clk_port;
output m3_tx_clk_port;
output rx_clk_xgmii;
wire [31:0] xgmii_rxd0;
wire [31:0] xgmii_rxd1;
wire [3:0] xgmii_rxc0;
wire [3:0] xgmii_rxc1;
supply0 VLO;
supply0 GND;
supply1 VDD;
supply0 LV_TM;
input ref_clk;
input reset;
input RGMII_TXCLK0;
input RGMII_TXCLK1;
input RGMII_TXCLK2;
input RGMII_TXCLK3;
input RXN0_p0;
input RXN1_p0;
input RXN2_p0;
input RXN3_p0;
input RXP0_p0;
input RXP1_p0;
input RXP2_p0;
input RXP3_p0;
input RXN0_p1;
input RXN1_p1;
input RXN2_p1;
input RXN3_p1;
input RXP0_p1;
input RXP1_p1;
input RXP2_p1;
input RXP3_p1;
output m0_rx_clk;
output m0_tx_clk;
output [7:0] m0_tx_data;
output m0_tx_en;
output m0_tx_err;
output m1_rx_clk;
output m1_tx_clk;
output [7:0] m1_tx_data;
output m1_tx_en;
output m1_tx_err;
output m2_rx_clk;
output m2_tx_clk;
output [7:0] m2_tx_data;
output m2_tx_en;
output m2_tx_err;
output m3_rx_clk;
output m3_tx_clk;
output [7:0] m3_tx_data;
output m3_tx_en;
output m3_tx_err;
wire ENV_RO_MONI;
wire w_BT_EN;
wire w_RO_EN;
wire w_TEST_EN;
wire w_BS_MODE;
wire w_FORCE_DRV_DIS;
wire w_TX_BS_SEL;
wire DRV_BSOUT_A;
wire DRV_BSOUT_B;
wire DRV_BSOUT_C;
wire DRV_BSOUT_D;
wire ENV_PLL_LOCK;
wire ENV_RES_EXT;
wire RX_BSOUT_A;
wire RX_BSOUT_B;
wire RX_BSOUT_C;
wire RX_BSOUT_D;
wire TX_BSOUT_A;
wire TX_BSOUT_B;
wire TX_BSOUT_C;
wire TX_BSOUT_D;
wire [3:0] RDreg;
wire odd_rx_pcs0_ENV;
wire odd_rx_pcs1_ENV;
wire odd_rx_pcs2_ENV;
wire odd_rx_pcs3_ENV;
wire pio_core_sel_pcs_ENV;
wire pio_rd_wr__pcs_ENV;
wire [6:0] pio_addr_pcs_ENV;
wire [17:0] pio_wr_data_pcs_ENV;
wire [1:0] slink_state_pcs_ENV;
wire signal_detect_pcs_ENV;
wire serdes_rdy_pcs_ENV;
wire pio_err_pcs_0_ENV;
wire pio_err_pcs_1_ENV;
wire an_loss_sync_pcs_ENV;
wire ewrap_pcs_ENV;
wire pcs_int_pcs_ENV;
wire phy_mode_pcs_ENV;
wire pio_core_ack_pcs_ENV;
wire [31:0] pio_rd_data_pcs_ENV;
wire [31:0] xgmii_txd0_in;
wire [3:0] xgmii_txc0_in;
wire [31:0] xgmii_txd1_in;
wire [3:0] xgmii_txc1_in;
wire eser_env_bit_byte_sync_a;
wire eser_env_bit_byte_sync_b;
wire eser_env_bit_byte_sync_c;
wire eser_env_bit_byte_sync_d;
wire link_up_tx_pcs_0_ENV;
wire link_up_tx_pcs_1_ENV;
wire rx_clkn;
wire [2:0] shared_sel_pcs_ENV;
wire sw_ensyncdet_pcs_ENV;
wire sw_lockref_pcs_ENV;
wire tx_clk_xgmii0;
wire tx_clk_xgmii1;
wire tx_clkn;
wire rx_clk_pcs0_ENV;
wire rx_clk_pcs1_ENV;
wire [9:0] xgmii_env_eser_rxd_a_del;
wire [9:0] xgmii_env_eser_rxd_b_del;
wire [9:0] xgmii_env_eser_rxd_c_del;
wire [9:0] xgmii_env_eser_rxd_d_del;
wire [9:0] env_eser_rxd_a_del;
wire [9:0] env_eser_rxd_b_del;
wire [9:0] env_eser_rxd_c_del;
wire [9:0] env_eser_rxd_d_del;
wire [9:0] env_eser_rxd_a_del1;
wire [9:0] env_eser_rxd_b_del1;
wire [9:0] env_eser_rxd_c_del1;
wire [9:0] env_eser_rxd_d_del1;
wire [9:0] env_eser_rxd_a;
wire [9:0] env_eser_rxd_b;
wire [9:0] env_eser_rxd_c;
wire [9:0] env_eser_rxd_d;
wire env_eser_pll_en;
wire env_eser_bias_en;
wire [1:0] env_eser_ser_sel;
wire env_eser_refclk_sel;
wire env_eser_trd_sel;
wire env_eser_tclk_sel;
wire env_eser_low_latency;
wire env_eser_sync_dual_pol;
wire [5:0] env_eser_tubi;
wire env_eser_tx_en_a;
wire env_eser_tx_en_b;
wire env_eser_tx_en_c;
wire env_eser_tx_en_d;
wire env_eser_tx_clk_en_a;
wire env_eser_tx_clk_en_b;
wire env_eser_tx_clk_en_c;
wire env_eser_tx_clk_en_d;
wire env_eser_drv_en_a;
wire env_eser_drv_en_b;
wire env_eser_drv_en_c;
wire env_eser_drv_en_d;
wire [1:0] env_eser_lev_sel_a;
wire [1:0] env_eser_lev_sel_b;
wire [1:0] env_eser_lev_sel_c;
wire [1:0] env_eser_lev_sel_d;
wire [1:0] env_eser_drv_emp_lvl_a;
wire [1:0] env_eser_drv_emp_lvl_b;
wire [1:0] env_eser_drv_emp_lvl_c;
wire [1:0] env_eser_drv_emp_lvl_d;
wire env_eser_tx_lpb_en_a;
wire env_eser_tx_lpb_en_b;
wire env_eser_tx_lpb_en_c;
wire env_eser_tx_lpb_en_d;
wire env_eser_rx_lpb_en_a;
wire env_eser_rx_lpb_en_b;
wire env_eser_rx_lpb_en_c;
wire env_eser_rx_lpb_en_d;
wire env_eser_rx_en_a;
wire env_eser_rx_en_b;
wire env_eser_rx_en_c;
wire env_eser_rx_en_d;
wire env_eser_rx_clk_en_a;
wire env_eser_rx_clk_en_b;
wire env_eser_rx_clk_en_c;
wire env_eser_rx_clk_en_d;
wire env_eser_rx_sleep_en_a;
wire env_eser_rx_sleep_en_b;
wire env_eser_rx_sleep_en_c;
wire env_eser_rx_sleep_en_d;
wire env_eser_rbc_sel_a;
wire env_eser_rbc_sel_b;
wire env_eser_rbc_sel_c;
wire env_eser_rbc_sel_d;
wire env_eser_byte_sync_en_a;
wire env_eser_byte_sync_en_b;
wire env_eser_byte_sync_en_c;
wire env_eser_byte_sync_en_d;
wire env_eser_sync_sel_a;
wire env_eser_sync_sel_b;
wire env_eser_sync_sel_c;
wire env_eser_sync_sel_d;
wire env_eser_rx_reset_a;
wire env_eser_rx_reset_b;
wire env_eser_rx_reset_c;
wire env_eser_rx_reset_d;
wire [9:0] eser_env_txd_a;
wire [9:0] eser_env_txd_b;
wire [9:0] eser_env_txd_c;
wire [9:0] eser_env_txd_d;
wire eser_env_rbc0_a;
wire eser_env_rbc0_b;
wire eser_env_rbc0_c;
wire eser_env_rbc0_d;
wire eser_env_rbc1_a;
wire eser_env_rbc1_b;
wire eser_env_rbc1_c;
wire eser_env_rbc1_d;
wire eser_env_tclk0;
wire eser_env_tclk1;
wire eser_env_common_ready;
wire eser_env_cchk_dmy;
wire [2:0] eser_env_tubo;
wire [3:0] eser_env_tbo;
wire eser_env_fraq_a;
wire eser_env_fraq_b;
wire eser_env_fraq_c;
wire eser_env_fraq_d;
wire eser_env_sigdet_a;
wire eser_env_sigdet_b;
wire eser_env_sigdet_c;
wire eser_env_sigdet_d;
wire eser_env_rx_ready_a;
wire eser_env_rx_ready_b;
wire eser_env_rx_ready_c;
wire eser_env_rx_ready_d;
wire [9:0] w_SYNC_CHAR;
wire [4:0] w_SYNC_MASK;
wire m0_gmii_tx_en0;
wire m0_xgmii_tx_en;
wire [7:0] m0_xgmii_txdata;
wire m1_xgmii_tx_en;
wire [7:0] m1_xgmii_txdata;
wire [7:0] m0_gmii_txd0;
wire rxclk_mux0;
wire rxclk_mux1;
wire txclk_mux0;
wire txclk_mux1;
wire [7:0] pcs0_tx_data;
wire [7:0] pcs1_tx_data;
wire [7:0] pcs2_tx_data;
wire [7:0] pcs3_tx_data;
wire pcs0_tx_en;
wire pcs1_tx_en;
wire pcs2_tx_en;
wire pcs3_tx_en;
wire pcs0_tx_err;
wire pcs1_tx_err;
wire pcs2_tx_err;
wire pcs3_tx_err;
wire [7:0] rgmii0_tx_data;
wire [7:0] rgmii1_tx_data;
wire [7:0] rgmii2_tx_data;
wire [7:0] rgmii3_tx_data;
wire rgmii0_tx_en;
wire rgmii1_tx_en;
wire rgmii2_tx_en;
wire rgmii3_tx_en;
wire rgmii0_tx_err;
wire rgmii1_tx_err;
wire rgmii2_tx_err;
wire rgmii3_tx_err;
wire [9:0] temp_enc_ch0_p0;
wire [9:0] temp_enc_ch1_p0;
wire [9:0] temp_enc_ch2_p0;
wire [9:0] temp_enc_ch3_p0;
wire [9:0] temp_enc_ch0_p1;
wire [9:0] temp_enc_ch1_p1;
wire [9:0] temp_enc_ch2_p1;
wire [9:0] temp_enc_ch3_p1;
wire [9:0] TD0_p0;
wire [9:0] TD1_p0;
wire [9:0] TD2_p0;
wire [9:0] TD3_p0;
wire [9:0] TD0_r_p0;
wire [9:0] TD1_r_p0;
wire [9:0] TD2_r_p0;
wire [9:0] TD3_r_p0;
wire [9:0] TD1_r_p0_mux;
wire [9:0] TD0_r_p0_mux;
wire [9:0] TD0_r_p1_mux;
wire [9:0] RD0_p0;
wire [9:0] RD1_p0;
wire [9:0] RD2_p0;
wire [9:0] RD3_p0;
wire [9:0] RD0_r_p0;
wire [9:0] RD1_r_p0;
wire [9:0] RD2_r_p0;
wire [9:0] RD3_r_p0;
wire [3:0] STSPLL_p0;
wire [7:0] STSRX0_p0;
wire [7:0] STSRX1_p0;
wire [7:0] STSRX2_p0;
wire [7:0] STSRX3_p0;
wire [3:0] STSTX0_p0;
wire [3:0] STSTX1_p0;
wire [3:0] STSTX2_p0;
wire [3:0] STSTX3_p0;
wire [3:0] TXBCLK_p0;
wire [1:0] RDLL0_p0;
wire [1:0] RDLL1_p0;
wire [1:0] RDLL2_p0;
wire [1:0] RDLL3_p0;
wire [3:0] RXBCLKLLN_p0;
wire [3:0] RXBCLKLLP_p0;
wire [3:0] RXBCLK_p0;
wire [3:0] RXBCLKIN_p0;
wire AMX_p0;
wire FDO_p0;
wire BSINITCLK_p0;
wire [11:0] CFGPLL_p0;
wire [27:0] CFGRX0_p0;
wire [27:0] CFGRX1_p0;
wire [27:0] CFGRX2_p0;
wire [27:0] CFGRX3_p0;
wire [19:0] CFGTX0_p0;
wire [19:0] CFGTX1_p0;
wire [19:0] CFGTX2_p0;
wire [19:0] CFGTX3_p0;
wire [19:0] TESTCFG_p0;
wire FCLK_p0;
wire FCLRZ_p0;
wire FDI_p0;
wire [1:0] STCICFG_p0;
wire STCICLK_p0;
wire STCID_p0;
wire TESTCLKR_p0;
wire TESTCLKT_p0;
wire [3:0] TXBCLKIN_p0;
wire [9:0] TD0_p1;
wire [9:0] TD1_p1;
wire [9:0] TD2_p1;
wire [9:0] TD3_p1;
wire [9:0] TD0_r_p1;
wire [9:0] TD1_r_p1;
wire [9:0] TD2_r_p1;
wire [9:0] TD3_r_p1;
wire [9:0] TD1_r_p1_mux;
wire [9:0] RD0_p1;
wire [9:0] RD1_p1;
wire [9:0] RD2_p1;
wire [9:0] RD3_p1;
wire [9:0] RD0_r_p1;
wire [9:0] RD1_r_p1;
wire [9:0] RD2_r_p1;
wire [9:0] RD3_r_p1;
wire [3:0] STSPLL_p1;
wire [7:0] STSRX0_p1;
wire [7:0] STSRX1_p1;
wire [7:0] STSRX2_p1;
wire [7:0] STSRX3_p1;
wire [3:0] STSTX0_p1;
wire [3:0] STSTX1_p1;
wire [3:0] STSTX2_p1;
wire [3:0] STSTX3_p1;
wire [3:0] TXBCLK_p1;
wire [1:0] RDLL0_p1;
wire [1:0] RDLL1_p1;
wire [1:0] RDLL2_p1;
wire [1:0] RDLL3_p1;
wire [3:0] RXBCLKLLN_p1;
wire [3:0] RXBCLKLLP_p1;
wire [3:0] RXBCLK_p1;
wire [3:0] RXBCLKIN_p1;
wire AMX_p1;
wire FDO_p1;
wire BSINITCLK_p1;
wire [11:0] CFGPLL_p1;
wire [27:0] CFGRX0_p1;
wire [27:0] CFGRX1_p1;
wire [27:0] CFGRX2_p1;
wire [27:0] CFGRX3_p1;
wire [19:0] CFGTX0_p1;
wire [19:0] CFGTX1_p1;
wire [19:0] CFGTX2_p1;
wire [19:0] CFGTX3_p1;
wire [19:0] TESTCFG_p1;
wire FCLK_p1;
wire FCLRZ_p1;
wire FDI_p1;
wire [1:0] STCICFG_p1;
wire STCICLK_p1;
wire STCID_p1;
wire TESTCLKR_p1;
wire TESTCLKT_p1;
wire [3:0] TXBCLKIN_p1;
wire [15:0] no_of_txpkts_r;
wire [15:0] tx_pkt_len_r;
wire enb_bwcal_r;
wire speed_10G_w;
serdes_wrapper serdes_P0 (
.BSINITCLK (BSINITCLK), // input (serdes_P0,serdes_P1) <= ()
.CFGPLL (CFGPLL_p0[11:0]), // input (serdes_P0) <= ()
.CFGRX0 (CFGRX0_p0[27:0]), // input (serdes_P0) <= ()
.CFGRX1 (CFGRX1_p0[27:0]), // input (serdes_P0) <= ()
.CFGRX2 (CFGRX2_p0[27:0]), // input (serdes_P0) <= ()
.CFGRX3 (CFGRX3_p0[27:0]), // input (serdes_P0) <= ()
.CFGTX0 (CFGTX0_p0[19:0]), // input (serdes_P0) <= ()
.CFGTX1 (CFGTX1_p0[19:0]), // input (serdes_P0) <= ()
.CFGTX2 (CFGTX2_p0[19:0]), // input (serdes_P0) <= ()
.CFGTX3 (CFGTX3_p0[19:0]), // input (serdes_P0) <= ()
.FCLK (FCLK_p0), // input (serdes_P0) <= ()
.FCLRZ (FCLRZ_p0), // input (serdes_P0) <= ()
.FDI (FDI_p0), // input (serdes_P0) <= ()
.REFCLKN (REFCLKN), // input (serdes_P0,serdes_P1) <= ()
.REFCLKP (REFCLKP), // input (serdes_P0,serdes_P1) <= ()
.RXBCLKIN (RXBCLKIN_p0[3:0]), // input (serdes_P0) <= ()
.RXN0 (RXN0_p0), // input (serdes_P0) <= ()
.RXN1 (RXN1_p0), // input (serdes_P0) <= ()
.RXN2 (RXN2_p0), // input (serdes_P0) <= ()
.RXN3 (RXN3_p0), // input (serdes_P0) <= ()
.RXP0 (RXP0_p0), // input (serdes_P0) <= ()
.RXP1 (RXP1_p0), // input (serdes_P0) <= ()
.RXP2 (RXP2_p0), // input (serdes_P0) <= ()
.RXP3 (RXP3_p0), // input (serdes_P0) <= ()
.STCICFG (STCICFG_p0[1:0]), // input (serdes_P0) <= ()
.STCICLK (STCICLK_p0), // input (serdes_P0) <= ()
.STCID (STCID_p0), // input (serdes_P0) <= ()
.TD0 (TD0_r_p0[9:0]), // input (serdes_P0) <= ()
.TD1 (TD1_r_p0[9:0]), // input (serdes_P0) <= ()
.TD2 (TD2_r_p0[9:0]), // input (serdes_P0) <= ()
.TD3 (TD3_r_p0[9:0]), // input (serdes_P0) <= ()
.TESTCFG (TESTCFG_p0[19:0]), // input (serdes_P0) <= ()
.TESTCLKR (TESTCLKR_p0), // input (serdes_P0) <= ()
.TESTCLKT (TESTCLKT_p0), // input (serdes_P0) <= ()
.TXBCLKIN (TXBCLKIN_p0[3:0]), // input (serdes_P0) <= ()
.AMUX (AMUX_p0), // output (serdes_P0) => ()
.FDO (FDO_p0), // output (serdes_P0) => ()
.RD0 (RD0_p0[9:0]), // output (serdes_P0) => ()
.RD1 (RD1_p0[9:0]), // output (serdes_P0) => ()
.RD2 (RD2_p0[9:0]), // output (serdes_P0) => ()
.RD3 (RD3_p0[9:0]), // output (serdes_P0) => ()
.RDLL0 (RDLL0_p0), // output (serdes_P0) => ()
.RDLL1 (RDLL1_p0), // output (serdes_P0) => ()
.RDLL2 (RDLL2_p0), // output (serdes_P0) => ()
.RDLL3 (RDLL3_p0), // output (serdes_P0) => ()
.RXBCLK (RXBCLK_p0), // output (serdes_P0) => ()
.RXBCLKLLN (RXBCLKLLN_p0), // output (serdes_P0) => ()
.RXBCLKLLP (RXBCLKLLP_p0), // output (serdes_P0) => ()
.STCIQ (STCIQ_p0), // output (serdes_P0) => ()
.STSPLL (STSPLL_p0), // output (serdes_P0) => ()
.STSRX0 (STSRX0_p0), // output (serdes_P0) => (pcs_0_ENV)
.STSRX1 (STSRX1_p0), // output (serdes_P0) => ()
.STSRX2 (STSRX2_p0), // output (serdes_P0) => ()
.STSRX3 (STSRX3_p0), // output (serdes_P0) => ()
.STSTX0 (STSTX0_p0), // output (serdes_P0) => ()
.STSTX1 (STSTX1_p0), // output (serdes_P0) => ()
.STSTX2 (STSTX2_p0), // output (serdes_P0) => ()
.STSTX3 (STSTX3_p0), // output (serdes_P0) => ()
.TXBCLK (TXBCLK_p0), // output (serdes_P0) => ()
.TXN0 (TXN0_p0), // output (serdes_P0) => ()
.TXN1 (TXN1_p0), // output (serdes_P0) => ()
.TXN2 (TXN2_p0), // output (serdes_P0) => ()
.TXN3 (TXN3_p0), // output (serdes_P0) => ()
.TXP0 (TXP0_p0), // output (serdes_P0) => ()
.TXP1 (TXP1_p0), // output (serdes_P0) => ()
.TXP2 (TXP2_p0), // output (serdes_P0) => ()
.TXP3 (TXP3_p0) // output (serdes_P0) => ()
);
serdes_wrapper serdes_P1 (
.BSINITCLK (BSINITCLK), // input (serdes_P0,serdes_P1) <= ()
.CFGPLL (CFGPLL_p1[11:0]), // input (serdes_P1) <= ()
.CFGRX0 (CFGRX0_p1[27:0]), // input (serdes_P1) <= ()
.CFGRX1 (CFGRX1_p1[27:0]), // input (serdes_P1) <= ()
.CFGRX2 (CFGRX2_p1[27:0]), // input (serdes_P1) <= ()
.CFGRX3 (CFGRX3_p1[27:0]), // input (serdes_P1) <= ()
.CFGTX0 (CFGTX0_p1[19:0]), // input (serdes_P1) <= ()
.CFGTX1 (CFGTX1_p1[19:0]), // input (serdes_P1) <= ()
.CFGTX2 (CFGTX2_p1[19:0]), // input (serdes_P1) <= ()
.CFGTX3 (CFGTX3_p1[19:0]), // input (serdes_P1) <= ()
.FCLK (FCLK_p1), // input (serdes_P1) <= ()
.FCLRZ (FCLRZ_p1), // input (serdes_P1) <= ()
.FDI (FDI_p1), // input (serdes_P1) <= ()
.REFCLKN (REFCLKN), // input (serdes_P0,serdes_P1) <= ()
.REFCLKP (REFCLKP), // input (serdes_P0,serdes_P1) <= ()
.RXBCLKIN (RXBCLKIN_p1[3:0]), // input (serdes_P1) <= ()
.RXN0 (RXN0_p1), // input (serdes_P1) <= ()
.RXN1 (RXN1_p1), // input (serdes_P1) <= ()
.RXN2 (RXN2_p1), // input (serdes_P1) <= ()
.RXN3 (RXN3_p1), // input (serdes_P1) <= ()
.RXP0 (RXP0_p1), // input (serdes_P1) <= ()
.RXP1 (RXP1_p1), // input (serdes_P1) <= ()
.RXP2 (RXP2_p1), // input (serdes_P1) <= ()
.RXP3 (RXP3_p1), // input (serdes_P1) <= ()
.STCICFG (STCICFG_p1[1:0]), // input (serdes_P1) <= ()
.STCICLK (STCICLK_p1), // input (serdes_P1) <= ()
.STCID (STCID_p1), // input (serdes_P1) <= ()
.TD0 (TD0_r_p1[9:0]), // input (serdes_P1) <= ()
.TD1 (TD1_r_p1[9:0]), // input (serdes_P1) <= ()
.TD2 (TD2_r_p1[9:0]), // input (serdes_P1) <= ()
.TD3 (TD3_r_p1[9:0]), // input (serdes_P1) <= ()
.TESTCFG (TESTCFG_p1[19:0]), // input (serdes_P1) <= ()
.TESTCLKR (TESTCLKR_p1), // input (serdes_P1) <= ()
.TESTCLKT (TESTCLKT_p1), // input (serdes_P1) <= ()
.TXBCLKIN (TXBCLKIN_p1[3:0]), // input (serdes_P1) <= ()
.AMUX (AMUX_p1), // output (serdes_P1) => ()
.FDO (FDO_p1), // output (serdes_P1) => ()
.RD0 (RD0_p1[9:0]), // output (serdes_P1) => ()
.RD1 (RD1_p1[9:0]), // output (serdes_P1) => ()
.RD2 (RD2_p1[9:0]), // output (serdes_P1) => ()
.RD3 (RD3_p1[9:0]), // output (serdes_P1) => ()
.RDLL0 (RDLL0_p1), // output (serdes_P1) => ()
.RDLL1 (RDLL1_p1), // output (serdes_P1) => ()
.RDLL2 (RDLL2_p1), // output (serdes_P1) => ()
.RDLL3 (RDLL3_p1), // output (serdes_P1) => ()
.RXBCLK (RXBCLK_p1), // output (serdes_P1) => ()
.RXBCLKLLN (RXBCLKLLN_p1), // output (serdes_P1) => ()
.RXBCLKLLP (RXBCLKLLP_p1), // output (serdes_P1) => ()
.STCIQ (STCIQ_p1), // output (serdes_P1) => ()
.STSPLL (STSPLL_p1), // output (serdes_P1) => ()
.STSRX0 (STSRX0_p1), // output (serdes_P1) => (pcs_1_ENV)
.STSRX1 (STSRX1_p1), // output (serdes_P1) => ()
.STSRX2 (STSRX2_p1), // output (serdes_P1) => ()
.STSRX3 (STSRX3_p1), // output (serdes_P1) => ()
.STSTX0 (STSTX0_p1), // output (serdes_P1) => ()
.STSTX1 (STSTX1_p1), // output (serdes_P1) => ()
.STSTX2 (STSTX2_p1), // output (serdes_P1) => ()
.STSTX3 (STSTX3_p1), // output (serdes_P1) => ()
.TXBCLK (TXBCLK_p1), // output (serdes_P1) => ()
.TXN0 (TXN0_p1), // output (serdes_P1) => ()
.TXN1 (TXN1_p1), // output (serdes_P1) => ()
.TXN2 (TXN2_p1), // output (serdes_P1) => ()
.TXN3 (TXN3_p1), // output (serdes_P1) => ()
.TXP0 (TXP0_p1), // output (serdes_P1) => ()
.TXP1 (TXP1_p1), // output (serdes_P1) => ()
.TXP2 (TXP2_p1), // output (serdes_P1) => ()
.TXP3 (TXP3_p1) // output (serdes_P1) => ()
);
pcs pcs_0_ENV (
.rxclk (rxclk_mux0), // input (pcs_0_ENV) <= ()
.rx_10bdata (RD0_r_p0), // input (pcs_0_ENV,xgmii_A_dec_P0) <= ()
.rxd (pcs0_tx_data[7:0]), // output (pcs_0_ENV) => ()
.rx_dv (pcs0_tx_en), // output (pcs_0_ENV) => ()
.rx_er (pcs0_tx_err), // output (pcs_0_ENV) => ()
.serdes_rdy (serdes_rdy_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.link_up_tx (link_up_tx_pcs_0_ENV), // output (pcs_0_ENV) => ()
.odd_rx (STSRX0_p0[2]), // input (pcs_0_ENV) <= (serdes_P0)
.signal_detect (signal_detect_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.an_loss_sync (an_loss_sync_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.txclk (txclk_mux0), // input (pcs_0_ENV) <= ()
.tx_en (m0_rx_dv), // input (pcs_0_ENV,xgmii_if_P0) <= ()
.tx_er (m0_rx_err), // input (pcs_0_ENV) <= ()
.crs (m0_rx_crs), // output (pcs_0_ENV) => ()
.col (m0_rx_col), // output (pcs_0_ENV) => ()
.txd (m0_rx_data[7:0]), // input (pcs_0_ENV,xgmii_if_P0) <= ()
.tx_10bdata (env_eser_rxd_a[9:0]), // output (pcs_0_ENV) => ()
.clk (core_clk), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_core_reset (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.pio_core_sel (pio_core_sel_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_rd_wr (pio_rd_wr__pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_addr (pio_addr_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_wr_data (pio_wr_data_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.slink_state (slink_state_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_err (pio_err_pcs_0_ENV), // output (pcs_0_ENV) => ()
.pio_core_ack (pio_core_ack_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.pio_rd_data (pio_rd_data_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.sw_ensyncdet (sw_ensyncdet_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.sw_lockref (sw_lockref_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.phy_mode (phy_mode_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.shared_sel (shared_sel_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.pcs_int (pcs_int_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.ewrap (ewrap_pcs_ENV) // output (pcs_0_ENV,pcs_1_ENV) => ()
);
pcs pcs_1_ENV (
.rxclk (rxclk_mux1), // input (pcs_1_ENV) <= ()
.rx_10bdata (RD0_r_p1), // input (pcs_1_ENV,xgmii_A_dec_P1) <= ()
.rxd (pcs1_tx_data[7:0]), // output (pcs_1_ENV) => ()
.rx_dv (pcs1_tx_en), // output (pcs_1_ENV) => ()
.rx_er (pcs1_tx_err), // output (pcs_1_ENV) => ()
.serdes_rdy (serdes_rdy_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.link_up_tx (link_up_tx_pcs_1_ENV), // output (pcs_1_ENV) => ()
.odd_rx (STSRX0_p1[2]), // input (pcs_1_ENV) <= (serdes_P1)
.signal_detect (signal_detect_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.an_loss_sync (an_loss_sync_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.txclk (txclk_mux1), // input (pcs_1_ENV) <= ()
.tx_en (m1_rx_dv), // input (pcs_1_ENV,xgmii_if_P1) <= ()
.tx_er (m1_rx_err), // input (pcs_1_ENV) <= ()
.crs (m1_rx_crs), // output (pcs_1_ENV) => ()
.col (m1_rx_col), // output (pcs_1_ENV) => ()
.txd (m1_rx_data[7:0]), // input (pcs_1_ENV,xgmii_if_P1) <= ()
.tx_10bdata (env_eser_rxd_b[9:0]), // output (pcs_1_ENV) => ()
.clk (core_clk), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_core_reset (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.pio_core_sel (pio_core_sel_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_rd_wr (pio_rd_wr__pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_addr (pio_addr_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_wr_data (pio_wr_data_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.slink_state (slink_state_pcs_ENV), // input (pcs_0_ENV,pcs_1_ENV) <= ()
.pio_err (pio_err_pcs_1_ENV), // output (pcs_1_ENV) => ()
.pio_core_ack (pio_core_ack_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.pio_rd_data (pio_rd_data_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.sw_ensyncdet (sw_ensyncdet_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.sw_lockref (sw_lockref_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.phy_mode (phy_mode_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.shared_sel (shared_sel_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.pcs_int (pcs_int_pcs_ENV), // output (pcs_0_ENV,pcs_1_ENV) => ()
.ewrap (ewrap_pcs_ENV) // output (pcs_0_ENV,pcs_1_ENV) => ()
);
phy_clock_doubler_env phy_clk_doubler_0_ENV (
.rbc0 (eser_env_rbc0_a), // input (phy_clk_doubler_0_ENV) <= ()
.rbc1 (eser_env_rbc1_a), // input (phy_clk_doubler_0_ENV) <= ()
.rbcx2 (rx_clk_pcs0_ENV) // output (phy_clk_doubler_0_ENV) => ()
);
phy_clock_doubler_env phy_clk_doubler_1_ENV (
.rbc0 (eser_env_rbc0_b), // input (phy_clk_doubler_1_ENV) <= ()
.rbc1 (eser_env_rbc1_b), // input (phy_clk_doubler_1_ENV) <= ()
.rbcx2 (rx_clk_pcs1_ENV) // output (phy_clk_doubler_1_ENV) => ()
);
xgmii_tx_encoder_top xgmii_tx_enc_top_P0 (
.tx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.tx_rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.tx_enc_in (xgmii_rxd0[31:0]), // input (xgmii_tx_enc_top_P0) <= (xgmii_if_P0)
.tx_ctrl_in (xgmii_rxc0[3:0]), // input (xgmii_tx_enc_top_P0) <= (xgmii_if_P0)
.RDreg (RDreg[0]), // output (xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) => ()
.tx_10b_enc_out_a (temp_enc_ch0_p0[9:0]), // output (xgmii_tx_enc_top_P0) => ()
.tx_10b_enc_out_b (temp_enc_ch1_p0[9:0]), // output (xgmii_tx_enc_top_P0) => ()
.tx_10b_enc_out_c (temp_enc_ch2_p0[9:0]), // output (xgmii_tx_enc_top_P0) => ()
.tx_10b_enc_out_d (temp_enc_ch3_p0[9:0]) // output (xgmii_tx_enc_top_P0) => ()
);
xgmii_tx_encoder_top xgmii_tx_enc_top_P1 (
.tx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.tx_rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.tx_enc_in (xgmii_rxd1[31:0]), // input (xgmii_tx_enc_top_P1) <= (xgmii_if_P1)
.tx_ctrl_in (xgmii_rxc1[3:0]), // input (xgmii_tx_enc_top_P1) <= (xgmii_if_P1)
.RDreg (RDreg[0]), // output (xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) => ()
.tx_10b_enc_out_a (temp_enc_ch0_p1[9:0]), // output (xgmii_tx_enc_top_P1) => ()
.tx_10b_enc_out_b (temp_enc_ch1_p1[9:0]), // output (xgmii_tx_enc_top_P1) => ()
.tx_10b_enc_out_c (temp_enc_ch2_p1[9:0]), // output (xgmii_tx_enc_top_P1) => ()
.tx_10b_enc_out_d (temp_enc_ch3_p1[9:0]) // output (xgmii_tx_enc_top_P1) => ()
);
xgmii_rx_decoder xgmii_A_dec_P0 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD0_r_p0[9:0]), // input (pcs_0_ENV,xgmii_A_dec_P0) <= ()
.rx_8bdec_out (xgmii_txd0_in[7:0]), // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
.special (xgmii_txc0_in[0]) // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
);
xgmii_rx_decoder xgmii_B_dec_P0 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD1_r_p0[9:0]), // input (xgmii_B_dec_P0) <= ()
.rx_8bdec_out (xgmii_txd0_in[15:8]), // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
.special (xgmii_txc0_in[1]) // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
);
xgmii_rx_decoder xgmii_C_dec_P0 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD2_r_p0[9:0]), // input (xgmii_C_dec_P0) <= ()
.rx_8bdec_out (xgmii_txd0_in[23:16]), // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
.special (xgmii_txc0_in[2]) // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
);
xgmii_rx_decoder xgmii_D_dec_P0 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD3_r_p0[9:0]), // input (xgmii_D_dec_P0) <= ()
.rx_8bdec_out (xgmii_txd0_in[31:24]), // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
.special (xgmii_txc0_in[3]) // output (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0) => (xgmii_if_P0)
);
xgmii_rx_decoder xgmii_A_dec_P1 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD0_r_p1[9:0]), // input (pcs_1_ENV,xgmii_A_dec_P1) <= ()
.rx_8bdec_out (xgmii_txd1_in[7:0]), // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
.special (xgmii_txc1_in[0]) // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
);
xgmii_rx_decoder xgmii_B_dec_P1 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD1_r_p1[9:0]), // input (xgmii_B_dec_P1) <= ()
.rx_8bdec_out (xgmii_txd1_in[15:8]), // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
.special (xgmii_txc1_in[1]) // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
);
xgmii_rx_decoder xgmii_C_dec_P1 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD2_r_p1[9:0]), // input (xgmii_C_dec_P1) <= ()
.rx_8bdec_out (xgmii_txd1_in[23:16]), // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
.special (xgmii_txc1_in[2]) // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
);
xgmii_rx_decoder xgmii_D_dec_P1 (
.rx_clk (ref_clk), // input (xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rst (reset), // input (pcs_0_ENV,pcs_1_ENV,xgmii_A_dec_P0,xgmii_A_dec_P1,xgmii_B_dec_P0,xgmii_B_dec_P1,xgmii_C_dec_P0,xgmii_C_dec_P1,xgmii_D_dec_P0,xgmii_D_dec_P1,xgmii_tx_enc_top_P0,xgmii_tx_enc_top_P1) <= ()
.rx_10bdec_in (RD3_r_p1[9:0]), // input (xgmii_D_dec_P1) <= ()
.rx_8bdec_out (xgmii_txd1_in[31:24]), // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
.special (xgmii_txc1_in[3]) // output (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1) => (xgmii_if_P1)
);
xgmii_if xgmii_if_P0 (
.rxd (m0_rx_data), // input (pcs_0_ENV,xgmii_if_P0) <= ()
.rxdv (m0_rx_dv), // input (pcs_0_ENV,xgmii_if_P0) <= ()
.rx_clk (m0_rx_clk), // input (xgmii_if_P0) <= (port0_clk)
.txd_xgmii (xgmii_txd0_in[31:0]), // input (xgmii_if_P0) <= (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0)
.txctrl_xgmii (xgmii_txc0_in[3:0]), // input (xgmii_if_P0) <= (xgmii_A_dec_P0,xgmii_B_dec_P0,xgmii_C_dec_P0,xgmii_D_dec_P0)
.tx_clk (m0_rx_clk), // input (xgmii_if_P0) <= (port0_clk)
.rx_clk_xgmii (rx_clk_xgmii), // output (xgmii_if_P0,xgmii_if_P1) => ()
.rxd_xgmii (xgmii_rxd0), // output (xgmii_if_P0) => (xgmii_tx_enc_top_P0)
.rxctrl_xgmii (xgmii_rxc0), // output (xgmii_if_P0) => (xgmii_tx_enc_top_P0)
.tx_clk_xgmii (tx_clk_xgmii0), // output (xgmii_if_P0) => ()
.txd (m0_xgmii_txdata), // output (xgmii_if_P0) => ()
.txen (m0_xgmii_tx_en) // output (xgmii_if_P0) => ()
);
xgmii_if xgmii_if_P1 (
.rxd (m1_rx_data), // input (pcs_1_ENV,xgmii_if_P1) <= ()
.rxdv (m1_rx_dv), // input (pcs_1_ENV,xgmii_if_P1) <= ()
.rx_clk (m1_rx_clk), // input (xgmii_if_P1) <= (port1_clk)
.txd_xgmii (xgmii_txd1_in[31:0]), // input (xgmii_if_P1) <= (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1)
.txctrl_xgmii (xgmii_txc1_in[3:0]), // input (xgmii_if_P1) <= (xgmii_A_dec_P1,xgmii_B_dec_P1,xgmii_C_dec_P1,xgmii_D_dec_P1)
.tx_clk (m1_rx_clk), // input (xgmii_if_P1) <= (port1_clk)
.rx_clk_xgmii (rx_clk_xgmii), // output (xgmii_if_P0,xgmii_if_P1) => ()
.rxd_xgmii (xgmii_rxd1), // output (xgmii_if_P1) => (xgmii_tx_enc_top_P1)
.rxctrl_xgmii (xgmii_rxc1), // output (xgmii_if_P1) => (xgmii_tx_enc_top_P1)
.tx_clk_xgmii (tx_clk_xgmii1), // output (xgmii_if_P1) => ()
.txd (m1_xgmii_txdata), // output (xgmii_if_P1) => ()
.txen (m1_xgmii_tx_en) // output (xgmii_if_P1) => ()
);
port_clk port0_clk (
.tx_clkp (m0_tx_clk_port), // output (port0_clk) => ()
.tx_clkn (tx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.rx_clkp (m0_rx_clk), // output (port0_clk) => (xgmii_if_P0)
.rx_clkn (rx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.tx_config (m0_tx_config[3:0]), // input (port0_clk) <= ()
.rx_config (m0_rx_config[3:0]) // input (port0_clk) <= ()
);
port_clk port1_clk (
.tx_clkp (m1_tx_clk_port), // output (port1_clk) => ()
.tx_clkn (tx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.rx_clkp (m1_rx_clk), // output (port1_clk) => (xgmii_if_P1)
.rx_clkn (rx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.tx_config (m1_tx_config[3:0]), // input (port1_clk) <= ()
.rx_config (m1_rx_config[3:0]) // input (port1_clk) <= ()
);
port_clk port2_clk (
.tx_clkp (m2_tx_clk_port), // output (port2_clk) => ()
.tx_clkn (tx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.rx_clkp (m2_rx_clk), // output (port2_clk) => ()
.rx_clkn (rx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.tx_config (m2_tx_config[3:0]), // input (port2_clk) <= ()
.rx_config (m2_rx_config[3:0]) // input (port2_clk) <= ()
);
port_clk port3_clk (
.tx_clkp (m3_tx_clk_port), // output (port3_clk) => ()
.tx_clkn (tx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.rx_clkp (m3_rx_clk), // output (port3_clk) => ()
.rx_clkn (rx_clkn), // output (port0_clk,port1_clk,port2_clk,port3_clk) => ()
.tx_config (m3_tx_config[3:0]), // input (port3_clk) <= ()
.rx_config (m3_rx_config[3:0]) // input (port3_clk) <= ()
);
bw_calc BW_CALC_P0 (
.clk (m0_tx_clk), // input (BW_CALC_P0) <= ()
.data (m0_tx_data), // input (BW_CALC_P0) <= ()
.enb (m0_tx_en), // input (BW_CALC_P0) <= ()
.cal_enb (enb_bwcal_r), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.speed_10G (speed_10G_w), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.port_num ({VLO,VLO}), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.no_of_pkts (no_of_txpkts_r), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.pkt_len (tx_pkt_len_r) // input (BW_CALC_P0,BW_CALC_P1) <= ()
);
bw_calc BW_CALC_P1 (
.clk (m1_tx_clk), // input (BW_CALC_P1) <= ()
.data (m1_tx_data), // input (BW_CALC_P1) <= ()
.enb (m1_tx_en), // input (BW_CALC_P1) <= ()
.cal_enb (enb_bwcal_r), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.speed_10G (speed_10G_w), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.port_num ({VLO,VDD}), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.no_of_pkts (no_of_txpkts_r), // input (BW_CALC_P0,BW_CALC_P1) <= ()
.pkt_len (tx_pkt_len_r) // input (BW_CALC_P0,BW_CALC_P1) <= ()
);
// VPERL: GENERATED_END
//------------------------------------------------------------
// SerDes_ENV initialization
//------------------------------------------------------------
assign w_BT_EN = 1'b0;
assign w_RO_EN = 1'b0;
assign w_SYNC_CHAR = 10'b0101111100;
assign w_SYNC_MASK = 5'b00000;
assign w_TEST_EN = 1'b0;
assign w_BS_MODE = 1'b0;
assign w_FORCE_DRV_DIS = 1'b0;
assign w_TX_BS_SEL = 1'b0;
assign env_eser_pll_en = 1;
assign env_eser_bias_en = 1;
assign env_eser_tclk_sel = 1;
assign env_eser_drv_emp_lvl_a[1] = 0;
assign env_eser_drv_emp_lvl_a[0] = 0;
assign env_eser_drv_emp_lvl_b[1] = 0;
assign env_eser_drv_emp_lvl_b[0] = 0;
assign env_eser_drv_emp_lvl_c[1] = 0;
assign env_eser_drv_emp_lvl_c[0] = 0;
assign env_eser_drv_emp_lvl_d[1] = 0;
assign env_eser_drv_emp_lvl_d[0] = 0;
/**
assign env_eser_ser_sel[1] = 0;
assign env_eser_ser_sel[0] = 0;
assign env_eser_refclk_sel = 0;
**/
assign env_eser_trd_sel = 0;
assign env_eser_low_latency = 0;
assign env_eser_sync_dual_pol = 1;
assign env_eser_tubi[5] = 0;
assign env_eser_tubi[4] = 0;
assign env_eser_tubi[3] = 0;
assign env_eser_tubi[2] = 0;
assign env_eser_tubi[1] = 0;
assign env_eser_tubi[0] = 0;
assign env_eser_tx_en_a = 1;
assign env_eser_tx_en_b = 1;
assign env_eser_tx_en_c = 1;
assign env_eser_tx_en_d = 1;
assign env_eser_tx_clk_en_a = 1;
assign env_eser_tx_clk_en_b = 1;
assign env_eser_tx_clk_en_c = 1;
assign env_eser_tx_clk_en_d = 1;
assign env_eser_drv_en_a = 1;
assign env_eser_drv_en_b = 1;
assign env_eser_drv_en_c = 1;
assign env_eser_drv_en_d = 1;
assign env_eser_lev_sel_a[1] = 0;
assign env_eser_lev_sel_b[1] = 0;
assign env_eser_lev_sel_c[1] = 0;
assign env_eser_lev_sel_d[1] = 0;
assign env_eser_lev_sel_a[0] = 0;
assign env_eser_lev_sel_b[0] = 0;
assign env_eser_lev_sel_c[0] = 0;
assign env_eser_lev_sel_d[0] = 0;
assign env_eser_tx_lpb_en_a = 0;
assign env_eser_tx_lpb_en_b = 0;
assign env_eser_tx_lpb_en_c = 0;
assign env_eser_tx_lpb_en_d = 0;
assign env_eser_rx_lpb_en_a = 0;
assign env_eser_rx_lpb_en_b = 0;
assign env_eser_rx_lpb_en_c = 0;
assign env_eser_rx_lpb_en_d = 0;
assign env_eser_rx_en_a = 1;
assign env_eser_rx_en_b = 1;
assign env_eser_rx_en_c = 1;
assign env_eser_rx_en_d = 1;
assign env_eser_rx_clk_en_a = 1;
assign env_eser_rx_clk_en_b = 1;
assign env_eser_rx_clk_en_c = 1;
assign env_eser_rx_clk_en_d = 1;
assign env_eser_rx_sleep_en_a = 1;
assign env_eser_rx_sleep_en_b = 1;
assign env_eser_rx_sleep_en_c = 1;
assign env_eser_rx_sleep_en_d = 1;
assign env_eser_rbc_sel_a = 0;
assign env_eser_rbc_sel_b = 0;
assign env_eser_rbc_sel_c = 0;
assign env_eser_rbc_sel_d = 0;
assign env_eser_byte_sync_en_a = 1;
assign env_eser_byte_sync_en_b = 1;
assign env_eser_byte_sync_en_c = 1;
assign env_eser_byte_sync_en_d = 1;
assign env_eser_sync_sel_a = 0;
assign env_eser_sync_sel_b = 0;
assign env_eser_sync_sel_c = 0;
assign env_eser_sync_sel_d = 0;
assign env_eser_rx_reset_a = 0;
assign env_eser_rx_reset_b = 0;
assign env_eser_rx_reset_c = 0;
assign env_eser_rx_reset_d = 0;
//------------------------------------------------------------
// pcs_ENV initialization
//------------------------------------------------------------
assign signal_detect_pcs_ENV = 1;
assign serdes_rdy_pcs_ENV = 1;
assign #2 odd_rx_pcs0_ENV = eser_env_rbc1_a;
assign #2 odd_rx_pcs1_ENV = eser_env_rbc1_b;
//assign #2 odd_rx_pcs2_ENV = eser_env_rbc1_c;
//assign #2 odd_rx_pcs3_ENV = eser_env_rbc1_d;
assign pio_core_sel_pcs_ENV = 1;
assign pio_rd_wr__pcs_ENV = 0;
assign pio_addr_pcs_ENV = 0;
assign pio_wr_data_pcs_ENV = 0;
assign slink_state_pcs_ENV = 0;
// asign TD and xgmii_env_esr
assign TD0_p0 = temp_enc_ch0_p0;
assign TD1_p0 = temp_enc_ch1_p0;
assign TD2_p0 = temp_enc_ch2_p0;
assign TD3_p0 = temp_enc_ch3_p0;
assign TD0_p1 = temp_enc_ch0_p1;
assign TD1_p1 = temp_enc_ch1_p1;
assign TD2_p1 = temp_enc_ch2_p1;
assign TD3_p1 = temp_enc_ch3_p1;
initial begin
force enet_models.pcs_0_ENV.pcs_slave.phy_mode_ext_xREG2.qout=2'b10;
force enet_models.pcs_0_ENV.pcs_slave.pcs_config_xREG2.qout=7'h21;
force enet_models.pcs_1_ENV.pcs_slave.phy_mode_ext_xREG2.qout=2'b10;
force enet_models.pcs_1_ENV.pcs_slave.pcs_config_xREG2.qout=7'h21;
//force enet_models.pcs_2_ENV.pcs_slave.phy_mode_ext_xREG2.qout=2'b10;
//force enet_models.pcs_2_ENV.pcs_slave.pcs_config_xREG2.qout=7'h21;
//force enet_models.pcs_3_ENV.pcs_slave.phy_mode_ext_xREG2.qout=2'b10;
//force enet_models.pcs_3_ENV.pcs_slave.pcs_config_xREG2.qout=7'h21;
end
reg sel_gmii;
integer speed0,speed1;
integer mac_port;
reg speed_10G;
reg[8*60:1] arg,arg0,arg1,arg2,arg3;
reg enb_bwcal;
integer no_of_txpkts,tx_pkt_len;
integer tb_time_out;
reg [31:0] CycleCounter;
`ifdef TEST_UNH_VECTORS
initial begin
if ($value$plusargs ("tb_time_out=%d", tb_time_out)) begin
$display("SET tb_time_out = %d", tb_time_out);
end // if ($value$plusargs ("tb_time_out=%d", tb_time_out))
else
begin
tb_time_out = 1999999;
$display("SET tb_time_out = %d", tb_time_out);
end // else: !if($value$plusargs ("tb_time_out=%d", tb_time_out))
end // initial begin
initial CycleCounter = 0;
always @(posedge core_clk)
begin
CycleCounter = CycleCounter+1;
if(CycleCounter % 100000 == 0)
$display("INFO Simulation CycleCounter = %d", CycleCounter);
end
always @(posedge core_clk)
begin
if(CycleCounter > tb_time_out)
begin
$display("INFO Simulation is quitting at CycleCounter = %d for UNH TESTS", CycleCounter);
$finish;
end // if (CycleCounter == 32'h5_4000)
end // always @ (posedge SystemClock)
`else
`endif
/* reg [9:0] xgmii_env_eser_rxd_a;
reg [9:0] xgmii_env_eser_rxd_b;
reg [9:0] xgmii_env_eser_rxd_c;
reg [9:0] xgmii_env_eser_rxd_d; */
wire [9:0] xgmii_env_eser_rxd_a;
wire [9:0] xgmii_env_eser_rxd_b;
wire [9:0] xgmii_env_eser_rxd_c;
wire [9:0] xgmii_env_eser_rxd_d;
initial
begin
arg = "GET_MAC_PORTS=";
if ($test$plusargs("GET_MAC_PORTS="))
mac_port = $util_get_plus_args_num(arg);
$display("mc_core : Ethernet Port is %0d \n",mac_port);
end
/* if (mac_port == 0)
begin
xgmii_env_eser_rxd_a = temp_enc_ch0_p0;
xgmii_env_eser_rxd_b = temp_enc_ch1_p0;
xgmii_env_eser_rxd_c = temp_enc_ch2_p0;
xgmii_env_eser_rxd_d = temp_enc_ch3_p0;
end
else if (mac_port == 1)
begin
xgmii_env_eser_rxd_a = temp_enc_ch0_p1;
xgmii_env_eser_rxd_b = temp_enc_ch1_p1;
xgmii_env_eser_rxd_c = temp_enc_ch2_p1;
xgmii_env_eser_rxd_d = temp_enc_ch3_p1;
end
end */
assign xgmii_env_eser_rxd_a = mac_port ? temp_enc_ch0_p1 : temp_enc_ch0_p0;
assign xgmii_env_eser_rxd_b = mac_port ? temp_enc_ch1_p1 : temp_enc_ch1_p0;
assign xgmii_env_eser_rxd_c = mac_port ? temp_enc_ch2_p1 : temp_enc_ch2_p0;
assign xgmii_env_eser_rxd_d = mac_port ? temp_enc_ch3_p1 : temp_enc_ch3_p0;
initial
begin
/* Check MAC_SPEED0 */
arg0 = "MAC_SPEED0=";
if ($test$plusargs("MAC_SPEED0="))
speed0 = $util_get_plus_args_num(arg0);
else speed0 = 1000;
/* Check MAC_SPEED1 */
arg1 = "MAC_SPEED1=";
if ($test$plusargs("MAC_SPEED1="))
speed1 = $util_get_plus_args_num(arg1);
else speed1 = 1000;
arg2 = "TX_PKT_CNT=";
/* check for no_of_pkts */
if ($test$plusargs("TX_PKT_CNT=")) begin
no_of_txpkts = $util_get_plus_args_num(arg2);
$display("Number of tx_pkts %0d\n",no_of_txpkts);
end
arg3 = "TX_PKT_LEN=";
/* check for no_of_pkts */
if ($test$plusargs("TX_PKT_LEN=")) begin
tx_pkt_len = $util_get_plus_args_num(arg3);
$display("Tx_pkt_len %0d\n",tx_pkt_len);
end
if ((speed0 == 10000) ||(speed1 == 10000))
begin
$display("mc_core : Ethernet Speed 10G\n");
speed_10G = 1;
end
else
begin
$display("mac_core : Ethernet Speed0 Speed1 %0d, %0d\n",speed0, speed1);
speed_10G = 0;
end
/* Check PCS_SERDES */
if ($test$plusargs("PCS_SERDES"))
begin
$display("mac_core : Ethernet SerDes Mode\n");
sel_gmii = 0;
end
else
begin
$display("mac_core : Ethernet RGMII Mode\n");
sel_gmii = 1;
end
/* check if perf test */
if($test$plusargs("PERF_TEST"))
begin
$display("BANDW_CAL_ON\n");
enb_bwcal = 1;
end
else
enb_bwcal = 0;
end
assign no_of_txpkts_r = no_of_txpkts;
assign tx_pkt_len_r = tx_pkt_len;
assign enb_bwcal_r = enb_bwcal;
assign speed_10G_w = speed_10G;
////////////////////////////////////////////////////
// INJECT_10b_ERRORS //port0 only
// test specific, only sends corrupt pattern for `corrupt_time_limit
`define corrupt_time_limit 160000
`define corrupt_limit_min 300
`define corrupt_limit_max 600
reg [9:0] txd_corrupt;
integer corrupt_cnt=0;
integer corrupt_limit=`corrupt_limit_min;
reg corrupt;
reg inject_10b_errors=0;
initial begin
corrupt=0;
txd_corrupt='h17c;
if($test$plusargs("INJECT_10b_ERRORS")) begin
repeat(2000) @(posedge ref_clk); // wait for link up
inject_10b_errors=1;
end
else inject_10b_errors=0;
end
always@(posedge TXBCLK_p0[0] & inject_10b_errors) begin
if($time>`corrupt_time_limit) begin
corrupt=0; // stop corrupting and let link up remain
end
else if(corrupt_cnt==corrupt_limit) begin
corrupt_cnt = 0;
corrupt=~corrupt;
if(corrupt==1) begin
if(corrupt_limit==`corrupt_limit_max) corrupt_limit=`corrupt_limit_min;
else corrupt_limit=corrupt_limit+3;
end
end
else corrupt_cnt = corrupt_cnt +1;
end
always@(posedge TXBCLK_p0[0]) begin
if(corrupt_cnt<5) txd_corrupt=$random;
else txd_corrupt = (txd_corrupt=='h17c) ? 9'h00 : 9'h17c; //17c==fa
end
////////////////////////////////////////////////////
assign TD0_r_p0_mux = speed_10G ? {TD0_p0[0],TD0_p0[1],TD0_p0[2],TD0_p0[3],TD0_p0[4],
TD0_p0[5],TD0_p0[6],TD0_p0[7],TD0_p0[8],TD0_p0[9]} :
{env_eser_rxd_a[0],env_eser_rxd_a[1],env_eser_rxd_a[2],
env_eser_rxd_a[3],env_eser_rxd_a[4],env_eser_rxd_a[5],
env_eser_rxd_a[6],env_eser_rxd_a[7],env_eser_rxd_a[8],
env_eser_rxd_a[9]};
assign TD0_r_p1_mux = speed_10G ? {TD0_p1[0],TD0_p1[1],TD0_p1[2],TD0_p1[3],TD0_p1[4],
TD0_p1[5],TD0_p1[6],TD0_p1[7],TD0_p1[8],TD0_p1[9]} :
{env_eser_rxd_b[0],env_eser_rxd_b[1],env_eser_rxd_b[2],
env_eser_rxd_b[3],env_eser_rxd_b[4],env_eser_rxd_b[5],
env_eser_rxd_b[6],env_eser_rxd_b[7],env_eser_rxd_b[8],
env_eser_rxd_b[9]};
//-------------------------------------------------------
//-- For ti serdes reverse the encoded data Port 0 ------
//-------------------------------------------------------
// assign TD0_r_p0 = {TD0_p0[0],TD0_p0[1],TD0_p0[2],TD0_p0[3],TD0_p0[4],
// TD0_p0[5],TD0_p0[6],TD0_p0[7],TD0_p0[8],TD0_p0[9]};
// assign TD1_r_p0 = TD1_r_p0_mux; // mux for 10G and 1G
// assign TD0_r_p0 = TD0_r_p0_mux; // mux for 10G and 1G
`ifdef TEST_UNH_VECTORS
assign TD0_r_p0 = {env_eser_rxd_a_del[0],env_eser_rxd_a_del[1],env_eser_rxd_a_del[2],env_eser_rxd_a_del[3],
env_eser_rxd_a_del[4],env_eser_rxd_a_del[5],env_eser_rxd_a_del[6],env_eser_rxd_a_del[7],
env_eser_rxd_a_del[8],env_eser_rxd_a_del[9]};
`else
//assign TD0_r_p0 = TD0_r_p0_mux;
assign TD0_r_p0 = (corrupt) ? {txd_corrupt[0],txd_corrupt[1],txd_corrupt[2],
txd_corrupt[3],txd_corrupt[4],txd_corrupt[5],
txd_corrupt[6],txd_corrupt[7],txd_corrupt[8],
txd_corrupt[9]}
: TD0_r_p0_mux;
`endif
`ifdef TEST_UNH_VECTORS
assign TD1_r_p0 = {env_eser_rxd_b_del[0],env_eser_rxd_b_del[1],env_eser_rxd_b_del[2],env_eser_rxd_b_del[3],
env_eser_rxd_b_del[4],env_eser_rxd_b_del[5],env_eser_rxd_b_del[6],env_eser_rxd_b_del[7],
env_eser_rxd_b_del[8],env_eser_rxd_b_del[9]};
`else
assign TD1_r_p0 = {TD1_p0[0],TD1_p0[1],TD1_p0[2],TD1_p0[3],TD1_p0[4],
TD1_p0[5],TD1_p0[6],TD1_p0[7],TD1_p0[8],TD1_p0[9]};
`endif
`ifdef TEST_UNH_VECTORS
assign TD2_r_p0 = {env_eser_rxd_c_del[0],env_eser_rxd_c_del[1],env_eser_rxd_c_del[2],env_eser_rxd_c_del[3],
env_eser_rxd_c_del[4],env_eser_rxd_c_del[5],env_eser_rxd_c_del[6],env_eser_rxd_c_del[7],
env_eser_rxd_c_del[8],env_eser_rxd_c_del[9]};
`else
assign TD2_r_p0 = {TD2_p0[0],TD2_p0[1],TD2_p0[2],TD2_p0[3],TD2_p0[4],
TD2_p0[5],TD2_p0[6],TD2_p0[7],TD2_p0[8],TD2_p0[9]};
`endif
`ifdef TEST_UNH_VECTORS
// assign TD3_r_p0 = env_eser_rxd_d_del[9:0];
assign TD3_r_p0 = {env_eser_rxd_d_del[0],env_eser_rxd_d_del[1],env_eser_rxd_d_del[2],env_eser_rxd_d_del[3],
env_eser_rxd_d_del[4],env_eser_rxd_d_del[5],env_eser_rxd_d_del[6],env_eser_rxd_d_del[7],
env_eser_rxd_d_del[8],env_eser_rxd_d_del[9]};
`else
assign TD3_r_p0 = {TD3_p0[0],TD3_p0[1],TD3_p0[2],TD3_p0[3],TD3_p0[4],
TD3_p0[5],TD3_p0[6],TD3_p0[7],TD3_p0[8],TD3_p0[9]};
`endif
assign RD0_r_p0 = {RD0_p0[0],RD0_p0[1],RD0_p0[2],RD0_p0[3],RD0_p0[4],
RD0_p0[5],RD0_p0[6],RD0_p0[7],RD0_p0[8],RD0_p0[9]};
assign RD1_r_p0 = {RD1_p0[0],RD1_p0[1],RD1_p0[2],RD1_p0[3],RD1_p0[4],
RD1_p0[5],RD1_p0[6],RD1_p0[7],RD1_p0[8],RD1_p0[9]};
assign RD2_r_p0 = {RD2_p0[0],RD2_p0[1],RD2_p0[2],RD2_p0[3],RD2_p0[4],
RD2_p0[5],RD2_p0[6],RD2_p0[7],RD2_p0[8],RD2_p0[9]};
assign RD3_r_p0 = {RD3_p0[0],RD3_p0[1],RD3_p0[2],RD3_p0[3],RD3_p0[4],
RD3_p0[5],RD3_p0[6],RD3_p0[7],RD3_p0[8],RD3_p0[9]};
//-------------------------------------------------------
//-- For ti serdes reverse the encoded data Port 1 ------
//-------------------------------------------------------
// assign TD0_r_p1 = {TD0_p1[0],TD0_p1[1],TD0_p1[2],TD0_p1[3],TD0_p1[4],
// TD0_p1[5],TD0_p1[6],TD0_p1[7],TD0_p1[8],TD0_p1[9]};
// assign TD0_r_p1 = TD0_r_p1_mux; // mux for 10G and 1G
`ifdef TEST_UNH_VECTORS
assign TD0_r_p1 = {env_eser_rxd_a_del[0],env_eser_rxd_a_del[1],env_eser_rxd_a_del[2],env_eser_rxd_a_del[3],
env_eser_rxd_a_del[4],env_eser_rxd_a_del[5],env_eser_rxd_a_del[6],env_eser_rxd_a_del[7],
env_eser_rxd_a_del[8],env_eser_rxd_a_del[9]};
`else
assign TD0_r_p1 = TD0_r_p1_mux; // mux for 10G and 1G
`endif
`ifdef TEST_UNH_VECTORS
assign TD1_r_p1 = {env_eser_rxd_b_del[0],env_eser_rxd_b_del[1],env_eser_rxd_b_del[2],env_eser_rxd_b_del[3],
env_eser_rxd_b_del[4],env_eser_rxd_b_del[5],env_eser_rxd_b_del[6],env_eser_rxd_b_del[7],
env_eser_rxd_b_del[8],env_eser_rxd_b_del[9]};
`else
assign TD1_r_p1 = {TD1_p1[0],TD1_p1[1],TD1_p1[2],TD1_p1[3],TD1_p1[4],
TD1_p1[5],TD1_p1[6],TD1_p1[7],TD1_p1[8],TD1_p1[9]};
`endif
`ifdef TEST_UNH_VECTORS
assign TD2_r_p1 = {env_eser_rxd_c_del[0],env_eser_rxd_c_del[1],env_eser_rxd_c_del[2],env_eser_rxd_c_del[3],
env_eser_rxd_c_del[4],env_eser_rxd_c_del[5],env_eser_rxd_c_del[6],env_eser_rxd_c_del[7],
env_eser_rxd_c_del[8],env_eser_rxd_c_del[9]};
`else
assign TD2_r_p1 = {TD2_p1[0],TD2_p1[1],TD2_p1[2],TD2_p1[3],TD2_p1[4],
TD2_p1[5],TD2_p1[6],TD2_p1[7],TD2_p1[8],TD2_p1[9]};
`endif
`ifdef TEST_UNH_VECTORS
assign TD3_r_p1 = {env_eser_rxd_d_del[0],env_eser_rxd_d_del[1],env_eser_rxd_d_del[2],env_eser_rxd_d_del[3],
env_eser_rxd_d_del[4],env_eser_rxd_d_del[5],env_eser_rxd_d_del[6],env_eser_rxd_d_del[7],
env_eser_rxd_d_del[8],env_eser_rxd_d_del[9]};
`else
assign TD3_r_p1 = {TD3_p1[0],TD3_p1[1],TD3_p1[2],TD3_p1[3],TD3_p1[4],
TD3_p1[5],TD3_p1[6],TD3_p1[7],TD3_p1[8],TD3_p1[9]};
`endif
assign RD0_r_p1 = {RD0_p1[0],RD0_p1[1],RD0_p1[2],RD0_p1[3],RD0_p1[4],
RD0_p1[5],RD0_p1[6],RD0_p1[7],RD0_p1[8],RD0_p1[9]};
assign RD1_r_p1 = {RD1_p1[0],RD1_p1[1],RD1_p1[2],RD1_p1[3],RD1_p1[4],
RD1_p1[5],RD1_p1[6],RD1_p1[7],RD1_p1[8],RD1_p1[9]};
assign RD2_r_p1 = {RD2_p1[0],RD2_p1[1],RD2_p1[2],RD2_p1[3],RD2_p1[4],
RD2_p1[5],RD2_p1[6],RD2_p1[7],RD2_p1[8],RD2_p1[9]};
assign RD3_r_p1 = {RD3_p1[0],RD3_p1[1],RD3_p1[2],RD3_p1[3],RD3_p1[4],
RD3_p1[5],RD3_p1[6],RD3_p1[7],RD3_p1[8],RD3_p1[9]};
assign env_eser_ser_sel[1] = speed_10G ? 1'b1 : 1'b0;
assign env_eser_ser_sel[0] = speed_10G ? 1'b0 : 1'b0;
assign env_eser_refclk_sel = speed_10G ? 1'b1 : 1'b0;
assign rxclk_mux0 = speed_10G ? 1'b0 : RXBCLK_p0[0];
assign rxclk_mux1 = speed_10G ? 1'b0 : RXBCLK_p1[0];
assign txclk_mux0 = speed_10G ? 1'b0 : TXBCLK_p0[0];
assign txclk_mux1 = speed_10G ? 1'b0 : TXBCLK_p1[0];
assign m0_tx_clk = speed_10G ? tx_clk_xgmii0 : (sel_gmii ? RGMII_TXCLK0 : eser_env_tclk0);
assign m1_tx_clk = speed_10G ? tx_clk_xgmii1 : (sel_gmii ? RGMII_TXCLK1 : eser_env_tclk1);
assign m2_tx_clk = sel_gmii ? RGMII_TXCLK2 : eser_env_tclk0;
assign m3_tx_clk = sel_gmii ? RGMII_TXCLK3 : eser_env_tclk0;
assign eser_env_tclk0 = TXBCLK_p0[0];
assign eser_env_tclk1 = TXBCLK_p1[0];
assign m0_tx_data = speed_10G ? m0_xgmii_txdata : (sel_gmii ? rgmii0_tx_data : pcs0_tx_data);
assign m0_tx_en = speed_10G ? m0_xgmii_tx_en : (sel_gmii ? rgmii0_tx_en : pcs0_tx_en);
assign m0_tx_err = speed_10G ? 0 : (sel_gmii ? rgmii0_tx_err : pcs0_tx_err);
assign m1_tx_data = speed_10G ? m1_xgmii_txdata : (sel_gmii ? rgmii1_tx_data : pcs1_tx_data);
assign m1_tx_en = speed_10G ? m1_xgmii_tx_en : (sel_gmii ? rgmii1_tx_en : pcs1_tx_en);
assign m1_tx_err = speed_10G ? 0 : ( sel_gmii ? rgmii1_tx_err : pcs1_tx_err);
assign m2_tx_data = sel_gmii ? rgmii2_tx_data : pcs2_tx_data;
assign m2_tx_en = sel_gmii ? rgmii2_tx_en : pcs2_tx_en;
assign m2_tx_err = sel_gmii ? rgmii2_tx_err : pcs2_tx_err;
assign m3_tx_data = sel_gmii ? rgmii3_tx_data : pcs3_tx_data;
assign m3_tx_en = sel_gmii ? rgmii3_tx_en : pcs3_tx_en;
assign m3_tx_err = sel_gmii ? rgmii3_tx_err : pcs3_tx_err;
assign #0.9 xgmii_env_eser_rxd_a_del[9:0] = xgmii_env_eser_rxd_a[9:0];
assign #0.9 xgmii_env_eser_rxd_b_del[9:0] = xgmii_env_eser_rxd_b[9:0];
assign #0.9 xgmii_env_eser_rxd_c_del[9:0] = xgmii_env_eser_rxd_c[9:0];
assign #0.9 xgmii_env_eser_rxd_d_del[9:0] = xgmii_env_eser_rxd_d[9:0];
assign #0.9 env_eser_rxd_a_del1[9:0] = env_eser_rxd_a[9:0];
assign #0.9 env_eser_rxd_b_del1[9:0] = env_eser_rxd_b[9:0];
assign #0.9 env_eser_rxd_c_del1[9:0] = env_eser_rxd_c[9:0];
assign #0.9 env_eser_rxd_d_del1[9:0] = env_eser_rxd_d[9:0];
`ifdef TEST_UNH_VECTORS
reg [9:0] unh_rxd_a,unh_rxd_b,unh_rxd_c,unh_rxd_d;
wire [9:0] unh_rxd_a_del,unh_rxd_b_del,unh_rxd_c_del,unh_rxd_d_del;
reg [9:0] vectors[20000:0];
reg [15:0] vector_loc;
reg start_playing_vectors;
reg USE_UNH_VECTOR;
wire USE_UNH_VECTOR_del;
reg [31:0] start_time;
reg[8*60:1] unh_arg;
integer plus_args_ok;
reg [400*8:0] unh_vector_filename;
wire env_eop;
reg [3:0] env_pkt_cnt;
reg new_start_time,new_start_time_d;
reg check_serdes_output;
initial begin
USE_UNH_VECTOR =0;
env_pkt_cnt = 4'h0;
new_start_time =0;
new_start_time_d =0;
start_playing_vectors =0;
unh_rxd_a = 0;
unh_rxd_b = 0;
unh_rxd_c = 0;
unh_rxd_d = 0;
for(vector_loc =0;vector_loc < 18096; vector_loc = vector_loc +1)
vectors[vector_loc] = 0;
unh_vector_filename = "unh_vectors.txt";
//plus_args_ok = $util_get_plus_args_str("UNH_VECTOR_FILE_",unh_vector_filename);
plus_args_ok = $value$plusargs("UNH_VECTOR_FILE=%s", unh_vector_filename);
if(plus_args_ok)
$display("UNH_DEBUG: UNH Vector Files -- %s",unh_vector_filename);
else begin
unh_vector_filename = "unh_vectors.txt";
$display("UNH_DEBUG: No Vector File Specified Using Default FileName-- %s",unh_vector_filename);
$display("UNH_DEBUG: UNH Vector Files -- %s",unh_vector_filename);
end
$readmemb(unh_vector_filename,vectors);
$display(" UNH Vectors Read into Buffer \n");
vector_loc =0;
unh_arg = "UNH_START_TIME=";
if ($test$plusargs("UNH_START_TIME="))
start_time = $util_get_plus_args_num(unh_arg);
else start_time = 1277;
$display("%m:UNH start time set to %d \n",start_time);
// $display("%m:UNH start time set to %d \n",start_time);
// repeat(1633) @(posedge ref_clk);
// repeat(1347) @(posedge ref_clk);
// repeat(1277) @(posedge ref_clk);
// repeat(start_time) @(posedge ref_clk);
// start_playing_vectors =1;
// $display(" UNH VECTORS STARTED Time = %t ",$time);
end
assign env_eop = (xgmii_env_eser_rxd_a[9:0] == 10'h3a2 /* 0x117*/ ) | ( xgmii_env_eser_rxd_a[9:0] == 10'h05d /* 0x2e8*/ );
always@(posedge ref_clk) begin
if(env_eop)
env_pkt_cnt <= env_pkt_cnt +1;
if(env_pkt_cnt ==1) begin
start_playing_vectors <= 1;
end // if (env_pkt_cnt ==1)
new_start_time_d <= start_playing_vectors;
if(~start_playing_vectors & new_start_time_d)
$display(" UNH VECTORS STARTED Time = %t ",$time);
end
always@(posedge ref_clk) begin
if(start_playing_vectors) begin
USE_UNH_VECTOR <=1;
unh_rxd_a <= vectors[vector_loc +0 ] ;
unh_rxd_b <= vectors[vector_loc +1 ] ;
unh_rxd_c <= vectors[vector_loc +2 ] ;
unh_rxd_d <= vectors[vector_loc +3 ] ;
vector_loc <= vector_loc +4;
if(vector_loc >= 18096) begin
USE_UNH_VECTOR <=0;
start_playing_vectors <= 1'b0;
end
end else // if (start_playing_vectors)
USE_UNH_VECTOR <=0;
end
// assign #0.9 USE_UNH_VECTOR_del = USE_UNH_VECTOR;
assign #0.9 USE_UNH_VECTOR_del = new_start_time_d;
assign #0.9 unh_rxd_a_del = {unh_rxd_a[0],unh_rxd_a[1],unh_rxd_a[2],unh_rxd_a[3],unh_rxd_a[4],unh_rxd_a[5],unh_rxd_a[6],unh_rxd_a[7],unh_rxd_a[8],unh_rxd_a[9]} ;
assign #0.9 unh_rxd_b_del = {unh_rxd_b[0],unh_rxd_b[1],unh_rxd_b[2],unh_rxd_b[3],unh_rxd_b[4],unh_rxd_b[5],unh_rxd_b[6],unh_rxd_b[7],unh_rxd_b[8],unh_rxd_b[9]} ;
assign #0.9 unh_rxd_c_del = {unh_rxd_c[0],unh_rxd_c[1],unh_rxd_c[2],unh_rxd_c[3],unh_rxd_c[4],unh_rxd_c[5],unh_rxd_c[6],unh_rxd_c[7],unh_rxd_c[8],unh_rxd_c[9]} ;
assign #0.9 unh_rxd_d_del = {unh_rxd_d[0],unh_rxd_d[1],unh_rxd_d[2],unh_rxd_d[3],unh_rxd_d[4],unh_rxd_d[5],unh_rxd_d[6],unh_rxd_d[7],unh_rxd_d[8],unh_rxd_d[9]} ;
assign env_eser_rxd_a_del[9:0] = USE_UNH_VECTOR_del? unh_rxd_a_del : (speed_10G ?
xgmii_env_eser_rxd_a_del[9:0] : env_eser_rxd_a_del1[9:0]);
assign env_eser_rxd_b_del[9:0] = USE_UNH_VECTOR_del? unh_rxd_b_del : (speed_10G ?
xgmii_env_eser_rxd_b_del[9:0] : env_eser_rxd_b_del1[9:0]);
assign env_eser_rxd_c_del[9:0] = USE_UNH_VECTOR_del? unh_rxd_c_del : (speed_10G ?
xgmii_env_eser_rxd_c_del[9:0] : env_eser_rxd_c_del1[9:0]);
assign env_eser_rxd_d_del[9:0] = USE_UNH_VECTOR_del? unh_rxd_d_del : (speed_10G ?
xgmii_env_eser_rxd_d_del[9:0] : env_eser_rxd_d_del1[9:0]);
xaui_decode unh_rxda ( .data(unh_rxd_a), .clk(ref_clk),.decode(start_playing_vectors), .bit_reverse(1'b0));
xaui_decode unh_rxdb ( .data(unh_rxd_b), .clk(ref_clk),.decode(start_playing_vectors), .bit_reverse(1'b0));
xaui_decode unh_rxdc ( .data(unh_rxd_c), .clk(ref_clk),.decode(start_playing_vectors), .bit_reverse(1'b0));
xaui_decode unh_rxdd ( .data(unh_rxd_d), .clk(ref_clk),.decode(start_playing_vectors), .bit_reverse(1'b0));
unh_checks unh_checks(.ref_clk(core_clk));
reg [9:0] serdesout_lane0,serdesout_lane1,serdesout_lane2,serdesout_lane3;
reg [4:0] start_checking_serdesdata;
reg [15:0] check_loc;
reg [9:0] lane0_exp,lane1_exp,lane2_exp,lane3_exp;
initial begin
start_checking_serdesdata =0;
check_loc =0;
if($test$plusargs("CHECK_SERDES"))
check_serdes_output = 1;
else
check_serdes_output =0;
end
always@(posedge ref_clk) begin
start_checking_serdesdata <= {start_checking_serdesdata[3:0],USE_UNH_VECTOR};
end
always@(posedge ref_clk) begin
if(start_checking_serdesdata[4] & check_serdes_output) begin
lane0_exp <= vectors[check_loc + 0];
lane1_exp <= vectors[check_loc + 1];
lane2_exp <= vectors[check_loc + 2];
lane3_exp <= vectors[check_loc + 3];
check_loc <= check_loc +4;
serdesout_lane0 <= tb_top.cpu.mac.mac_core.esr_mac_rxd0_0[9:0];
serdesout_lane1 <= tb_top.cpu.mac.mac_core.esr_mac_rxd1_0[9:0];
serdesout_lane2 <= tb_top.cpu.mac.mac_core.esr_mac_rxd2_0[9:0];
serdesout_lane3 <= tb_top.cpu.mac.mac_core.esr_mac_rxd3_0[9:0];
check_serdesout(lane0_exp,serdesout_lane0,2'h0,check_loc);
check_serdesout(lane1_exp,serdesout_lane1,2'h1,check_loc);
check_serdesout(lane2_exp,serdesout_lane2,2'h2,check_loc);
check_serdesout(lane3_exp,serdesout_lane3,2'h3,check_loc);
end
end
`else // !ifdef TEST_UNH_VECTORS
assign env_eser_rxd_a_del[9:0] = speed_10G ?
xgmii_env_eser_rxd_a_del[9:0] : env_eser_rxd_a_del1[9:0];
assign env_eser_rxd_b_del[9:0] = speed_10G ?
xgmii_env_eser_rxd_b_del[9:0] : env_eser_rxd_b_del1[9:0];
assign env_eser_rxd_c_del[9:0] = speed_10G ?
xgmii_env_eser_rxd_c_del[9:0] : env_eser_rxd_c_del1[9:0];
assign env_eser_rxd_d_del[9:0] = speed_10G ?
xgmii_env_eser_rxd_d_del[9:0] : env_eser_rxd_d_del1[9:0];
`endif
// Code for dumping Tx signals into file for easy debug
reg dump_tx_debug,start_tx_dump;
reg [31:0] tx_dump_start_time;
reg [8*60:1] tx_dump_arg,tx_start_arg;
reg [80*6:0] fp;
initial begin
fp = $fopen("xaui_tx_debug.txt","w");
start_tx_dump =0;
tx_dump_arg = "TX_DEBUG_ENABLE";
if ($test$plusargs("TX_DEBUG_ENABLE"))
dump_tx_debug = 1;
else dump_tx_debug = 0;
tx_start_arg = "TX_DEBUG_START=";
if ($test$plusargs("TX_DEBUG_START="))
tx_dump_start_time = $util_get_plus_args_num(tx_start_arg);
else tx_dump_start_time = 10;
if(dump_tx_debug) begin
$display("%m:TX Debug Dump start clock set to %d \n",tx_dump_start_time);
repeat(tx_dump_start_time) @(posedge ref_clk);
$display(" enabling Tx Debug Dumps at Time =%t",$time);
start_tx_dump =1;
end // if (dump_tx_debug)
end
always@(posedge ref_clk) begin
if(start_tx_dump & dump_tx_debug )
$fdisplay(fp,"%b %b %b %b",eser_env_txd_a[9:0],eser_env_txd_b[9:0],eser_env_txd_c[9:0],eser_env_txd_d[9:0]);
end
xaui_decode rxda ( .data(env_eser_rxd_a_del), .clk(ref_clk), .decode(1'b1), .bit_reverse(1'b1));
xaui_decode rxdb ( .data(env_eser_rxd_b_del), .clk(ref_clk), .decode(1'b1), .bit_reverse(1'b1));
xaui_decode rxdc ( .data(env_eser_rxd_c_del), .clk(ref_clk), .decode(1'b1), .bit_reverse(1'b1));
xaui_decode rxdd ( .data(env_eser_rxd_d_del), .clk(ref_clk), .decode(1'b1), .bit_reverse(1'b1));
`ifdef TEST_UNH_VECTORS
task check_serdesout;
input [9:0] lane_exp;
input [9:0] serdesout;
input [1:0] lane_num;
input [15:0] check_loc;
reg [9:0] serdes_out_tmp;
begin
serdes_out_tmp = { serdesout[0],serdesout[1],serdesout[2],serdesout[3],serdesout[4],
serdesout[5],serdesout[6],serdesout[7],serdesout[8],serdesout[9] };
if(serdes_out_tmp!== lane_exp) begin
$display("Time =%t: ERROR Serdes Output Mismatch!! LaneNumber = %d, Expected = %h Received = %h VectorIndex = %d ",$time,lane_num,lane_exp,serdes_out_tmp,check_loc);
end
end
endtask
`endif
//-----------------------------------------------------------------------
//------------- PORT0 reg declarations and init -------------------------
// register declarations and initialization code of ti-serdes for port 0
//------------------------------------------------------------------------
reg [11:0] reg_CFGPLL_p0;
reg [27:0] reg_CFGRX0_p0; // Receive configuration bus - channel 0
reg [27:0] reg_CFGRX1_p0; // Receive configuration bus - channel 1
reg [27:0] reg_CFGRX2_p0; // Receive configuration bus - channel 2
reg [27:0] reg_CFGRX3_p0; // Receive configuration bus - channel 3
reg [19:0] reg_CFGTX0_p0; // Transmit configuration bus - channel 0
reg [19:0] reg_CFGTX1_p0; // Transmit configuration bus - channel 1
reg [19:0] reg_CFGTX2_p0; // Transmit configuration bus - channel 2
reg [19:0] reg_CFGTX3_p0; // Transmit configuration bus - channel 3
reg [19:0] reg_TESTCFG_p0; // Test configuration bus.
reg reg_FCLK_p0; // eFuse clock
reg reg_FCLRZ_p0; // eFuse clear
reg reg_FDI_p0; // eFuse input data
reg [1:0] reg_STCICFG_p0; // STCI Mode.
reg reg_STCICLK_p0; // STCI clock.
reg reg_STCID_p0; // STCI input data
reg reg_TESTCLKR_p0; // Receive test clock
reg reg_TESTCLKT_p0; // Receive test clock
reg reg_BSINITCLK_p0;
initial
if(speed_10G == 1)
begin
@(posedge ref_clk);
reg_BSINITCLK_p0 = 1'b0;
// configure PLL
reg_CFGPLL_p0 = 0;
reg_CFGPLL_p0[0] = 1'b1;
reg_CFGPLL_p0[4:1] = 4'h1;
reg_CFGPLL_p0[9:8] = 2'b11;
reg_CFGPLL_p0[11:10] = 2'b10;
// RX Configuration
reg_CFGRX0_p0 = 0;
reg_CFGRX1_p0 = reg_CFGRX0_p0;
reg_CFGRX2_p0 = reg_CFGRX0_p0;
reg_CFGRX3_p0 = reg_CFGRX0_p0;
// TX Configuration
reg_CFGTX0_p0 = 0;
reg_CFGTX1_p0 = reg_CFGTX0_p0;
reg_CFGTX2_p0 = reg_CFGTX0_p0;
reg_CFGTX3_p0 = reg_CFGTX0_p0;
// Test Configuration
reg_TESTCFG_p0 = 0;
// misc
reg_FCLK_p0 = 0;
reg_FCLRZ_p0 = 1; // active low
reg_FDI_p0 = 0;
reg_STCICFG_p0 = 0;
reg_STCICLK_p0 = 0;
reg_STCID_p0 = 0;
reg_TESTCLKR_p0 = 0;
reg_TESTCLKT_p0 = 0;
@(posedge STSPLL_p0[0]);
$display("PLL Lock for Port0 is %b", STSPLL_p0[0] );
@(posedge REFCLKP);
// TX Configuration
reg_CFGTX0_p0[0] = 1;
reg_CFGTX1_p0[0] = 1;
reg_CFGTX2_p0[0] = 1;
reg_CFGTX3_p0[0] = 1;
// RX Configuration
reg_CFGRX0_p0[0] = 1;
reg_CFGRX0_p0[13:12] = 2'b01;
reg_CFGRX0_p0[15:14] = 2'b01;
reg_CFGRX1_p0 = reg_CFGRX0_p0;
reg_CFGRX2_p0 = reg_CFGRX0_p0;
reg_CFGRX3_p0 = reg_CFGRX0_p0;
end
else
begin
@(posedge ref_clk);
reg_BSINITCLK_p0 = 1'b0;
// configure PLL
reg_CFGPLL_p0 = 0;
reg_CFGPLL_p0[0] = 1'b1;
reg_CFGPLL_p0[4:1] = 4'h5;
reg_CFGPLL_p0[9:8] = 2'b00;
reg_CFGPLL_p0[11:10] = 2'b00;
// RX Configuration
reg_CFGRX0_p0 = 0;
reg_CFGRX1_p0 = reg_CFGRX0_p0;
reg_CFGRX2_p0 = reg_CFGRX0_p0;
reg_CFGRX3_p0 = reg_CFGRX0_p0;
// TX Configuration
reg_CFGTX0_p0 = 0;
reg_CFGTX1_p0 = reg_CFGTX0_p0;
reg_CFGTX2_p0 = reg_CFGTX0_p0;
reg_CFGTX3_p0 = reg_CFGTX0_p0;
// Test Configuration
reg_TESTCFG_p0 = 0;
// misc
reg_FCLK_p0 = 0;
reg_FCLRZ_p0 = 1; // active low
reg_FDI_p0 = 0;
reg_STCICFG_p0 = 0;
reg_STCICLK_p0 = 0;
reg_STCID_p0 = 0;
reg_TESTCLKR_p0 = 0;
reg_TESTCLKT_p0 = 0;
@(posedge STSPLL_p0[0]);
$display("PLL Lock for Port0 is %b", STSPLL_p0[0] );
@(posedge REFCLKP);
// TX Configuration
reg_CFGTX0_p0[0] = 1;
reg_CFGTX0_p0[6:5] = 2'b01;
reg_CFGTX1_p0[0] = 0;
reg_CFGTX2_p0[0] = 0;
reg_CFGTX3_p0[0] = 0;
// RX Configuration
reg_CFGRX0_p0[0] = 1;
reg_CFGRX0_p0[6:5] = 2'b01;
reg_CFGRX0_p0[13:12] = 2'b01;
reg_CFGRX0_p0[15:14] = 2'b01;
end
assign TXBCLKIN_p0 = {4{REFCLKP}};
assign RXBCLKIN_p0 = RXBCLK_p0;
assign CFGPLL_p0 = reg_CFGPLL_p0;
assign CFGRX0_p0 = reg_CFGRX0_p0;
assign CFGRX1_p0 = reg_CFGRX1_p0;
assign CFGRX2_p0 = reg_CFGRX2_p0;
assign CFGRX3_p0 = reg_CFGRX3_p0;
assign CFGTX0_p0 = reg_CFGTX0_p0;
assign CFGTX1_p0 = reg_CFGTX1_p0;
assign CFGTX2_p0 = reg_CFGTX2_p0;
assign CFGTX3_p0 = reg_CFGTX3_p0;
assign TESTCFG_p0 = reg_TESTCFG_p0;
assign FCLK_p0 = reg_FCLK_p0;
assign FCLRZ_p0 = reg_FCLRZ_p0; // eFuse clear
assign FDI_p0 = reg_FDI_p0; // eFuse input data
assign STCICFG_p0 = reg_STCICFG_p0; // STCI Mode.
assign STCICLK_p0 = reg_STCICLK_p0; // STCI clock.
assign STCID_p0 = reg_STCID_p0; // STCI input data
assign TESTCFG_p0 = reg_TESTCFG_p0; // Test configuration bus.
assign TESTCLKR_p0 = reg_TESTCLKR_p0; // Receive test clock
assign TESTCLKT_p0 = reg_TESTCLKT_p0; // Tx test clock
assign BSINITCLK_p0 = reg_BSINITCLK_p0;
//-----------------------------------------------------------------------
//------------- PORT1 reg declarations and init -------------------------
// register declarations and initialization code of ti-serdes for port 1
//------------------------------------------------------------------------
reg [11:0] reg_CFGPLL_p1;
reg [27:0] reg_CFGRX0_p1; // Receive configuration bus - channel 0
reg [27:0] reg_CFGRX1_p1; // Receive configuration bus - channel 1
reg [27:0] reg_CFGRX2_p1; // Receive configuration bus - channel 2
reg [27:0] reg_CFGRX3_p1; // Receive configuration bus - channel 3
reg [19:0] reg_CFGTX0_p1; // Transmit configuration bus - channel 0
reg [19:0] reg_CFGTX1_p1; // Transmit configuration bus - channel 1
reg [19:0] reg_CFGTX2_p1; // Transmit configuration bus - channel 2
reg [19:0] reg_CFGTX3_p1; // Transmit configuration bus - channel 3
reg [19:0] reg_TESTCFG_p1; // Test configuration bus.
reg reg_FCLK_p1; // eFuse clock
reg reg_FCLRZ_p1; // eFuse clear
reg reg_FDI_p1; // eFuse input data
reg [1:0] reg_STCICFG_p1; // STCI Mode.
reg reg_STCICLK_p1; // STCI clock.
reg reg_STCID_p1; // STCI input data
reg reg_TESTCLKR_p1; // Receive test clock
reg reg_TESTCLKT_p1; // Receive test clock
reg reg_BSINITCLK_p1;
//----------------------------------------------------------
//------ declarations for BW Cal -----------------------
//----------------------------------------------------------
// integer data_byte_cnt;
// integer ipg_byte_cnt;
// real BW;
// real avg_ipg_byte_cnt;
// time bw_start_time;
// time bw_end_time;
// integer pkt_cnt;
// reg [1:0] bw_state;
// reg [1:0] nxt_state;
// reg [1:0] bw_state1;
// reg [1:0] nxt_state1;
initial
if (speed_10G == 1)
begin
@(posedge ref_clk);
reg_BSINITCLK_p1 = 1'b0;
// configure PLL
reg_CFGPLL_p1 = 0;
reg_CFGPLL_p1[0] = 1'b1;
reg_CFGPLL_p1[4:1] = 4'h1;
reg_CFGPLL_p1[9:8] = 2'b11;
reg_CFGPLL_p1[11:10] = 2'b10;
// RX Configuration
reg_CFGRX0_p1 = 0;
reg_CFGRX1_p1 = reg_CFGRX0_p1;
reg_CFGRX2_p1 = reg_CFGRX0_p1;
reg_CFGRX3_p1 = reg_CFGRX0_p1;
// TX Configuration
reg_CFGTX0_p1 = 0;
reg_CFGTX1_p1 = reg_CFGTX0_p1;
reg_CFGTX2_p1 = reg_CFGTX0_p1;
reg_CFGTX3_p1 = reg_CFGTX0_p1;
// Test Configuration
reg_TESTCFG_p1 = 0;
// misc
reg_FCLK_p1 = 0;
reg_FCLRZ_p1 = 1; // active low
reg_FDI_p1 = 0;
reg_STCICFG_p1 = 0;
reg_STCICLK_p1 = 0;
reg_STCID_p1 = 0;
reg_TESTCLKR_p1 = 0;
reg_TESTCLKT_p1 = 0;
@(posedge STSPLL_p1[0]);
$display("PLL Lock for Port1 is %b", STSPLL_p1[0] );
@(posedge REFCLKP);
// TX Configuration
reg_CFGTX0_p1[0] = 1;
reg_CFGTX1_p1[0] = 1;
reg_CFGTX2_p1[0] = 1;
reg_CFGTX3_p1[0] = 1;
// RX Configuration
reg_CFGRX0_p1[0] = 1;
reg_CFGRX0_p1[13:12] = 2'b01;
reg_CFGRX0_p1[15:14] = 2'b01;
reg_CFGRX1_p1 = reg_CFGRX0_p1;
reg_CFGRX2_p1 = reg_CFGRX0_p1;
reg_CFGRX3_p1 = reg_CFGRX0_p1;
end
else
begin
@(posedge ref_clk);
reg_BSINITCLK_p1 = 1'b0;
// configure PLL
reg_CFGPLL_p1 = 0;
reg_CFGPLL_p1[0] = 1'b1;
reg_CFGPLL_p1[4:1] = 4'h5;
reg_CFGPLL_p1[9:8] = 2'b00;
reg_CFGPLL_p1[11:10] = 2'b00;
// RX Configuration
reg_CFGRX0_p1 = 0;
reg_CFGRX1_p1 = reg_CFGRX0_p1;
reg_CFGRX2_p1 = reg_CFGRX0_p1;
reg_CFGRX3_p1 = reg_CFGRX0_p1;
// TX Configuration
reg_CFGTX0_p1 = 0;
reg_CFGTX1_p1 = reg_CFGTX0_p1;
reg_CFGTX2_p1 = reg_CFGTX0_p1;
reg_CFGTX3_p1 = reg_CFGTX0_p1;
// Test Configuration
reg_TESTCFG_p1 = 0;
// misc
reg_FCLK_p1 = 0;
reg_FCLRZ_p1 = 1; // active low
reg_FDI_p1 = 0;
reg_STCICFG_p1 = 0;
reg_STCICLK_p1 = 0;
reg_STCID_p1 = 0;
reg_TESTCLKR_p1 = 0;
reg_TESTCLKT_p1 = 0;
@(posedge STSPLL_p1[0]);
$display("PLL Lock for Port1 is %b", STSPLL_p1[0] );
@(posedge REFCLKP);
// TX Configuration
reg_CFGTX0_p1[0] = 1;
reg_CFGTX0_p1[6:5] = 2'b01;
reg_CFGTX1_p1[0] = 0;
reg_CFGTX2_p1[0] = 0;
reg_CFGTX3_p1[0] = 0;
// RX Configuration
//reg_CFGRX0_p1[0] = 0;
//reg_CFGRX0_p1[13:12] = 2'b01;
//reg_CFGRX0_p1[15:14] = 2'b01;
// reg_CFGRX1_p1 = reg_CFGRX0_p1;
reg_CFGRX0_p1[0] = 1;
reg_CFGRX0_p1[6:5] = 2'b01;
reg_CFGRX0_p1[13:12] = 2'b01;
reg_CFGRX0_p1[15:14] = 2'b01;
//reg_CFGRX2_p1 = reg_CFGRX0_p1;
//reg_CFGRX3_p1 = reg_CFGRX0_p1;
end
assign TXBCLKIN_p1 = {4{REFCLKP}};
assign RXBCLKIN_p1 = RXBCLK_p1;
assign CFGPLL_p1 = reg_CFGPLL_p1;
assign CFGRX0_p1 = reg_CFGRX0_p1;
assign CFGRX1_p1 = reg_CFGRX1_p1;
assign CFGRX2_p1 = reg_CFGRX2_p1;
assign CFGRX3_p1 = reg_CFGRX3_p1;
assign CFGTX0_p1 = reg_CFGTX0_p1;
assign CFGTX1_p1 = reg_CFGTX1_p1;
assign CFGTX2_p1 = reg_CFGTX2_p1;
assign CFGTX3_p1 = reg_CFGTX3_p1;
assign TESTCFG_p1 = reg_TESTCFG_p1;
assign FCLK_p1 = reg_FCLK_p1;
assign FCLRZ_p1 = reg_FCLRZ_p1; // eFuse clear
assign FDI_p1 = reg_FDI_p1; // eFuse input data
assign STCICFG_p1 = reg_STCICFG_p1; // STCI Mode.
assign STCICLK_p1 = reg_STCICLK_p1; // STCI clock.
assign STCID_p1 = reg_STCID_p1; // STCI input data
assign TESTCFG_p1 = reg_TESTCFG_p1; // Test configuration bus.
assign TESTCLKR_p1 = reg_TESTCLKR_p1; // Receive test clock
assign TESTCLKT_p1 = reg_TESTCLKT_p1; // Tx test clock
assign BSINITCLK_p1 = reg_BSINITCLK_p1;
endmodule