⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgt_bert_4.v

📁 这是用于xilinx virtex-2 pro产品的误码仪方案verilog HDL代码
💻 V
字号:
///////////////////////////////////////////////////////////////////////////////////    File Name:  VirtexIIpBERT.v//      Version:  2.2//         Date:  05/14/03//        Model:  Implementation of the MGT for BERT testing.////      Company:  Xilinx, Inc.//  Contributor:  Mike Matera////   Disclaimer:  XILINX IS PROVIDING THIS DESIGN, CODE, OR//                INFORMATION "AS IS" SOLELY FOR USE IN DEVELOPING//                PROGRAMS AND SOLUTIONS FOR XILINX DEVICES.  BY//                PROVIDING THIS DESIGN, CODE, OR INFORMATION AS//                ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,//                APPLICATION OR STANDARD, XILINX IS MAKING NO//                REPRESENTATION THAT THIS IMPLEMENTATION IS FREE//                FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE//                RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY//                REQUIRE FOR YOUR IMPLEMENTATION.  XILINX//                EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH//                RESPECT TO THE ADEQUACY OF THE IMPLEMENTATION,//                INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR//                REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE//                FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES//                OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR//                PURPOSE.////                (c) Copyright 2003 Xilinx, Inc.//                All rights reserved./////////////////////////////////////////////////////////////////////////////////// Summary: MGT_BERT_4 is an adapter for the raw GT module//   for the convinience of outer modules implementing a//   parallel bit error rate test.  The functionality of the//   GT is partly sacrificed for the benefit of testing.//`ifdef MGT_BERT_4 `else`define MGT_BERT_4module MGT_BERT_4(                  // MGT Clocks:                  ref_clock0_in, ref_clock1_in,                  ref_clock_select_in,                  tx_clock_in, rx_clock_in, rec_clock_out,                  // MGT Parallel Data:                  tx_parallel_data_in, rx_parallel_data_out,                  // MGT Serial Data:                  serial_n_out, serial_p_out,                  serial_n_in, serial_p_in,                  // MGT Control Signals (TX Domain):                  loopback_mode_in, tx_reset_in, tx_inhibit_in,                  // MGT Control Signals (RX Domain):                  rx_reset_in, rx_comma_detect_out, rx_realign_out,                  // MGT Control Signals (Asynchronous):                  powerdown_in, en_p_comma_align_in                  );   //-------------------------------------------------------------   //   // Port Summary:   //   // ref_clock0_in (clock: unfuffered)   //    One of the reference clocks for the GT:  Must come directly from IO.   //   // ref_clock1_in (clock: unfuffered)   //    One of the reference clocks for the GT:  Must come directly from IO.   //   // ref_clock_select_in (asynchronous)   //    Selectes which reference clock to use.   //    0: use ref_clock0_in   //    1: use ref_clock1_in.   //   // tx_clock_in (clock: buffered)   //    Clock for the digital TX portion of the GT.   //   // rx_clock_in (clock: buffered)   //    Clock for the digital RX portion of the GT.   //   // rec_clock_out (clock: unbuffered (output))   //    Unbuffered version of the recovered clock.   //   // tx_parallel_data_in[19:00] (synchronous: tx_clock_in)   //    Parallel input data to the GT.   //   // rx_parallel_data_out[19:00] (synchronous: rx_clock_in)   //    Parallel output data from the GT.   //   // rx_comma_detect_out (synchronous: rx_clock_in)   //    High when the PMA detects the selected COMMA.   //   // rx_realign_out (synchronous: rx_clock_in)   //    High when the PCS is realigning the RX buffer due   //    to the recipt of a selected COMMA.   //   // serial_n_out   // serial_p_out (analog)   //    Must be connected to dedicated GT TX pads.   //   // serial_n_in   // serial_p_in (analog)   //    Must be connected to dedicated GT RX pads.   //   // loopback_mode_in[01:00] (synchronous: tx_clock_in)   //    Value of the GTs loopback mode input.   //   // tx_reset_in (synchronous: tx_clock_in)   //    Synchronous reset for the TX portion of the GT.   //   // tx_inhibit_in (synchronous: tx_clock_in)   //    Prevents the GT from transmitting data.   //   // rx_reset_in (synchronous: rx_clock_in)   //    Synchronous reset for the RX portion of the GT.   //   // powerdown_in (asynchronous)   //    Puts the GT into powerdown mode.   //   // powerdown_in (asynchronous)   //    Puts the GT into powerdown mode.   //   // en_m_comma_align_in (asynchronous)   //    Allows the inverted comma to be detected.   //   // en_p_comma_align_in (asynchronous)   //    Allows the true comma to be detected.   //   //-------------------------------------------------------------   // MGT Parallel Data:   output [19:00] rx_parallel_data_out;   input [19:00]  tx_parallel_data_in;   // MGT Clocks:   input          ref_clock0_in, ref_clock1_in,                  ref_clock_select_in, tx_clock_in, rx_clock_in;   output         rec_clock_out;   // MGT Serial Data:   output         serial_n_out, serial_p_out;   input          serial_n_in, serial_p_in;   // MGT Control Signals (TX Domain):   input [01:00]  loopback_mode_in;   input          tx_reset_in, tx_inhibit_in;   // MGT Control Signals (RX Domain):   input          rx_reset_in;   output         rx_comma_detect_out, rx_realign_out;   // MGT Control Signals (Asynchronous):   input          powerdown_in, en_p_comma_align_in;   // Control Signals:   wire [01:00] LOOPBACK          = loopback_mode_in;   wire         TXINHIBIT         = tx_inhibit_in;   wire [03:00] TXBYPASS8B10B     = 4'b1111;   wire [03:00] TXCHARISK         = 4'b0000;   wire         ENPCOMMAALIGN     = en_p_comma_align_in;   wire         RXCOMMADET;   wire         RXREALIGN;   // High Speed Serial:   wire         TXN;   wire         TXP;   wire         RXN               = serial_n_in;   wire         RXP               = serial_p_in;   // Resets:   wire         POWERDOWN         = powerdown_in;   wire         TXRESET           = tx_reset_in;   wire         RXRESET           = rx_reset_in;   // Clocks:   wire         REFCLK            = ref_clock0_in;   wire         REFCLK2           = ref_clock1_in;   wire         REFCLKSEL         = ref_clock_select_in;   wire         TXUSRCLK          = tx_clock_in;   wire         TXUSRCLK2         = tx_clock_in;   wire         RXUSRCLK          = rx_clock_in;   wire         RXUSRCLK2         = rx_clock_in;   wire         RXRECCLK;   // TX Data:   wire [31:00] TXDATA;   wire [03:00] TXCHARDISPMODE;   wire [03:00] TXCHARDISPVAL;   // RX Data:   wire [31:00] RXDATA;   wire [03:00] RXCHARISK;   wire [03:00] RXRUNDISP;   // Misc Signals:   wire [19:00] RXDATA_WIDE = {RXCHARISK[1], RXRUNDISP[1], RXDATA[15:08],                               RXCHARISK[0], RXRUNDISP[0], RXDATA[07:00]};   wire [39:00] TXDATA_WIDE;   assign {TXCHARDISPMODE[3], TXCHARDISPVAL[3], TXDATA[31:24],           TXCHARDISPMODE[2], TXCHARDISPVAL[2], TXDATA[23:16],           TXCHARDISPMODE[1], TXCHARDISPVAL[1], TXDATA[15:08],           TXCHARDISPMODE[0], TXCHARDISPVAL[0], TXDATA[07:00]} = TXDATA_WIDE;   assign TXDATA_WIDE[19:00] = tx_parallel_data_in;   assign TXDATA_WIDE[39:20] = 20'b0;   assign rx_parallel_data_out = RXDATA_WIDE[19:00];   assign serial_n_out = TXN;   assign serial_p_out = TXP;   assign rx_comma_detect_out = RXCOMMADET;   assign rx_realign_out = RXREALIGN;   assign rec_clock_out = RXRECCLK; `ifdef XBERT_FOR_SIM_ONLY    GT_CUSTOM MGT (  // Xilinx 5.1i GT_CUSTOM cell model        .ENMCOMMAALIGN          (1'b0),        .ENPCOMMAALIGN          (ENPCOMMAALIGN),        .CHBONDDONE             (),        .CHBONDO                (),        .CONFIGOUT              (),        .RXBUFSTATUS            (),        .RXCHARISCOMMA          (),        .RXCHARISK              (RXCHARISK),        .RXCHECKINGCRC          (),        .RXCLKCORCNT            (),        .RXCOMMADET             (RXCOMMADET),        .RXCRCERR               (),        .RXDATA                 (RXDATA),        .RXDISPERR              (),        .RXLOSSOFSYNC           (),        .RXNOTINTABLE           (),        .RXREALIGN              (RXREALIGN),        .RXRECCLK               (RXRECCLK),        .RXRUNDISP              (RXRUNDISP),        .TXBUFERR               (),        .TXKERR                 (),        .TXN                    (TXN),        .TXP                    (TXP),        .TXRUNDISP              (),        .CHBONDI                (4'b0),        .CONFIGENABLE           (1'b0),        .CONFIGIN               (1'b0),        .ENCHANSYNC             (1'b0),        .LOOPBACK               (LOOPBACK),        .POWERDOWN              (POWERDOWN),        .BREFCLK                (1'b0),        .BREFCLK2               (1'b0),        .REFCLK                 (REFCLK),   // Use REFCLK for simulation        .REFCLK2                (REFCLK2),        .REFCLKSEL              (REFCLKSEL),        .RXN                    (RXN),        .RXP                    (RXP),        .RXPOLARITY             (1'b0),        .RXRESET                (RXRESET),        .RXUSRCLK               (RXUSRCLK),        .RXUSRCLK2              (RXUSRCLK2),        .TXBYPASS8B10B          (TXBYPASS8B10B),        .TXCHARDISPMODE         (TXCHARDISPMODE),        .TXCHARDISPVAL          (TXCHARDISPVAL),        .TXCHARISK              (TXCHARISK),        .TXDATA                 (TXDATA),        .TXFORCECRCERR          (1'b0),        .TXINHIBIT              (TXINHIBIT),        .TXPOLARITY             (1'b0),        .TXRESET                (TXRESET),        .TXUSRCLK               (TXUSRCLK),        .TXUSRCLK2              (TXUSRCLK2)      );`else  // load GT_* cell for implementation   GT_CUSTOM MGT (   // Xilinx 5.1i GT_CUSTOM cell model        .ENMCOMMAALIGN          (1'b0),        .ENPCOMMAALIGN          (ENPCOMMAALIGN),        .CHBONDDONE             (),        .CHBONDO                (),        .CONFIGOUT              (),        .RXBUFSTATUS            (),        .RXCHARISCOMMA          (),        .RXCHARISK              (RXCHARISK),        .RXCHECKINGCRC          (),        .RXCLKCORCNT            (),        .RXCOMMADET             (RXCOMMADET),        .RXCRCERR               (),        .RXDATA                 (RXDATA),        .RXDISPERR              (),        .RXLOSSOFSYNC           (),        .RXNOTINTABLE           (),        .RXREALIGN              (RXREALIGN),        .RXRECCLK               (RXRECCLK),        .RXRUNDISP              (RXRUNDISP),        .TXBUFERR               (),        .TXKERR                 (),        .TXN                    (TXN),        .TXP                    (TXP),        .TXRUNDISP              (),        .CHBONDI                (4'b0),        .CONFIGENABLE           (1'b0),        .CONFIGIN               (1'b0),        .ENCHANSYNC             (1'b0),        .LOOPBACK               (LOOPBACK),        .POWERDOWN              (POWERDOWN),        .REFCLK                 (1'b0),        .REFCLK2                (1'b0),        .BREFCLK                (REFCLK),   //use BREFCLKs in implementation        .BREFCLK2               (REFCLK2),        .REFCLKSEL              (REFCLKSEL),        .RXN                    (RXN),        .RXP                    (RXP),        .RXPOLARITY             (1'b0),        .RXRESET                (RXRESET),        .RXUSRCLK               (RXUSRCLK),        .RXUSRCLK2              (RXUSRCLK2),        .TXBYPASS8B10B          (TXBYPASS8B10B),        .TXCHARDISPMODE         (TXCHARDISPMODE),        .TXCHARDISPVAL          (TXCHARDISPVAL),        .TXCHARISK              (TXCHARISK),        .TXDATA                 (TXDATA),        .TXFORCECRCERR          (1'b0),        .TXINHIBIT              (TXINHIBIT),        .TXPOLARITY             (1'b0),        .TXRESET                (TXRESET),        .TXUSRCLK               (TXUSRCLK),        .TXUSRCLK2              (TXUSRCLK2)      );`endif  //synthesis translate_off  defparam MGT.TX_PREEMPHASIS                  = 1;  defparam MGT.TX_DIFF_CTRL                    = 500;  defparam MGT.TERMINATION_IMP                 = 50;  defparam MGT.ALIGN_COMMA_MSB                 = "TRUE";  defparam MGT.RX_DECODE_USE                   = "FALSE";  defparam MGT.RX_BUFFER_USE                   = "TRUE";  defparam MGT.TX_BUFFER_USE                   = "TRUE";  defparam MGT.RX_DATA_WIDTH                   = 2;  defparam MGT.TX_DATA_WIDTH                   = 2;  defparam MGT.CLK_CORRECT_USE                 = "FALSE";  defparam MGT.CHAN_BOND_MODE                  = "OFF";  defparam MGT.TX_CRC_USE                      = "FALSE";  defparam MGT.RX_CRC_USE                      = "FALSE";  defparam MGT.PCOMMA_DETECT                   = "TRUE";  defparam MGT.MCOMMA_DETECT                   = "FALSE";  defparam MGT.DEC_PCOMMA_DETECT               = "FALSE";  defparam MGT.DEC_MCOMMA_DETECT               = "FALSE";  defparam MGT.DEC_VALID_COMMA_ONLY            = "FALSE";  defparam MGT.SERDES_10B                      = "FALSE";  defparam MGT.CLK_COR_KEEP_IDLE               = "FALSE";  defparam MGT.CLK_COR_SEQ_LEN                 = 1;  defparam MGT.CLK_COR_SEQ_2_USE               = "FALSE";  defparam MGT.CLK_COR_INSERT_IDLE_FLAG        = "FALSE";  defparam MGT.CLK_COR_REPEAT_WAIT             = 0;  defparam MGT.CHAN_BOND_SEQ_LEN               = 1;  defparam MGT.CHAN_BOND_SEQ_2_USE             = "FALSE";  defparam MGT.CHAN_BOND_WAIT                  = 1;  defparam MGT.CHAN_BOND_OFFSET                = 0;  defparam MGT.CHAN_BOND_ONE_SHOT              = "FALSE";  defparam MGT.CHAN_BOND_LIMIT                 = 1;  defparam MGT.RX_LOSS_OF_SYNC_FSM             = "FALSE";  defparam MGT.RX_LOS_INVALID_INCR             = 1;  defparam MGT.RX_LOS_THRESHOLD                = 4;  defparam MGT.CRC_FORMAT                      = "USER_MODE";  defparam MGT.CRC_START_OF_PKT                = "K28_0";  defparam MGT.CRC_END_OF_PKT                  = "K28_1";  //synthesis translate_onendmodule`endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -