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

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [src/] [mSGMII.v] - Diff between revs 16 and 23

Only display areas with differences | Details | Blame | View Log

Rev 16 Rev 23
/*
/*
Copyright � 2012 JeffLieu-jefflieu@fpga-ipcores.com
Copyright � 2012 JeffLieu-jefflieu@fpga-ipcores.com
 
 
        This file is part of SGMII-IP-Core.
        This file is part of SGMII-IP-Core.
    SGMII-IP-Core is free software: you can redistribute it and/or modify
    SGMII-IP-Core is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    (at your option) any later version.
 
 
    SGMII-IP-Core is distributed in the hope that it will be useful,
    SGMII-IP-Core is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    GNU General Public License for more details.
 
 
    You should have received a copy of the GNU General Public License
    You should have received a copy of the GNU General Public License
    along with SGMII-IP-Core.  If not, see <http://www.gnu.org/licenses/>.
    along with SGMII-IP-Core.  If not, see <http://www.gnu.org/licenses/>.
 
 
File            :
File            :
Description     :
Description     :
        This core implements:
        This core implements:
        B1000-X Standard
        B1000-X Standard
        PCS/PMA of SGMII MAC Side
        PCS/PMA of SGMII MAC Side
Remarks         :
Remarks         :
Revision        :
Revision        :
        Date    Author          Description
        Date    Author          Description
02/09/12        Jefflieu
02/09/12        Jefflieu
*/
*/
 
 
`timescale 1ns/10ps
`timescale 1ns/10ps
`include "SGMIIDefs.v"
`include "SGMIIDefs.v"
 
 
module mSGMII
module mSGMII
(
(
        //Tranceiver Interface
        //Tranceiver Interface
        input   i_SerRx,
        input   i_SerRx,
        output  o_SerTx,
        output  o_SerTx,
        input   i_CalClk,
        input   i_CalClk,
        input   i_RefClk125M,
        input   i_RefClk125M,
        input   i_ARstHardware_L,
        input   i_ARstHardware_L,
 
 
        //Local BUS interface
        //Local BUS interface
        //Wishbonebus, single transaction mode (non-pipeline slave)
        //Wishbonebus, single transaction mode (non-pipeline slave)
        input   i_Cyc,
        input   i_Cyc,
        input   i_Stb,
        input   i_Stb,
        input   i_WEn,
        input   i_WEn,
        input   [31:00]         i32_WrData,
        input   [31:00]         i32_WrData,
        input   [07:00]         iv_Addr,
        input   [07:00]         iv_Addr,
        output  [31:00]         o32_RdData,
        output  [31:00]         o32_RdData,
        output  o_Ack,
        output  o_Ack,
 
 
        input   i_Mdc,
        input   i_Mdc,
        inout   io_Mdio,
        inout   io_Mdio,
 
 
        output  o_Linkup,
        output  o_Linkup,
        output  o_ANDone,
        output  o_ANDone,
        //This is used in Phy-Side SGMII 
        //This is used in Phy-Side SGMII 
        input   i_PhyLink,
        input   i_PhyLink,
        input   i_PhyDuplex,
        input   i_PhyDuplex,
        input   [1:0] i2_PhySpeed,
        input   [1:0] i2_PhySpeed,
 
 
 
 
        output  [1:0] o2_SGMIISpeed,
        output  [1:0] o2_SGMIISpeed,
        output  o_SGMIIDuplex,
        output  o_SGMIIDuplex,
 
 
        //GMII Interface
        //GMII Interface
 
        output  o_TxClk,
 
        output  o_RxClk,
        input   [07:00] i8_TxD,
        input   [07:00] i8_TxD,
        input   i_TxEN,
        input   i_TxEN,
        input   i_TxER,
        input   i_TxER,
        output  [07:00] o8_RxD,
        output  [07:00] o8_RxD,
        output  o_RxDV,
        output  o_RxDV,
        output  o_RxER,
        output  o_RxER,
        output  o_GMIIClk,
        output  o_GMIIClk,
        output  o_MIIClk,
        output  o_MIIClk,
        output  o_Col,
        output  o_Col,
        output  o_Crs);
        output  o_Crs);
 
 
 
        wire    w_ClkTx,w_ClkRx;
        wire    w_ClkSys;
        wire    w_ClkSys;
        wire    w_Loopback;
        wire    w_Loopback;
        reg             r_RestartAN;
        reg             r_RestartAN;
        wire    w_ANEnable;
        wire    w_ANEnable;
        wire    [15:00] w16_Status;
        wire    [15:00] w16_Status;
        wire    w_MIIRst_L;
        wire    w_MIIRst_L;
        wire    w_ANComplete;
        wire    w_ANComplete;
 
 
        wire    [07:00] w8_RxCG_SyncToRxver;
        wire    [07:00] w8_RxCG_SyncToRxver;
        wire    w_RxCGInv_SyncToRxver;
        wire    w_RxCGInv_SyncToRxver;
        wire    w_RxCGCtrl_SyncToRxver;
        wire    w_RxCGCtrl_SyncToRxver;
        wire    w_SyncStatus,w_RxEven,w_IsComma,w_OSValid;
        wire    w_SyncStatus,w_RxEven,w_IsComma,w_OSValid;
        wire    w_IsI1Set,w_IsI2Set,w_IsC1Set,w_IsC2Set,w_IsTSet,w_IsVSet,w_IsSSet,w_IsRSet;
        wire    w_IsI1Set,w_IsI2Set,w_IsC1Set,w_IsC2Set,w_IsTSet,w_IsVSet,w_IsSSet,w_IsRSet;
 
 
        wire    w_Receiving;
        wire    w_Receiving;
        wire    w_Transmitting;
        wire    w_Transmitting;
        wire    w_CheckEndKDK,w_CheckEndKD21_5D0_0,w_CheckEndKD2_2D0_0,w_CheckEndTRK,w_CheckEndTRR,w_CheckEndRRR,w_CheckEndRRK,w_CheckEndRRS;
        wire    w_CheckEndKDK,w_CheckEndKD21_5D0_0,w_CheckEndKD2_2D0_0,w_CheckEndTRK,w_CheckEndTRR,w_CheckEndRRR,w_CheckEndRRK,w_CheckEndRRS;
        reg             r_CheckEndKDK,r_CheckEndKD21_5D0_0,r_CheckEndKD2_2D0_0,r_CheckEndTRK,r_CheckEndTRR,r_CheckEndRRR,r_CheckEndRRK,r_CheckEndRRS;
        reg             r_CheckEndKDK,r_CheckEndKD21_5D0_0,r_CheckEndKD2_2D0_0,r_CheckEndTRK,r_CheckEndTRR,r_CheckEndRRR,r_CheckEndRRK,r_CheckEndRRS;
 
 
        wire    [2:0] w3_XmitState;
        wire    [2:0] w3_XmitState;
        wire    [16:01] w16_TxConfigReg;
        wire    [16:01] w16_TxConfigReg;
        wire    [15:00] w16_RxConfigReg;
        wire    [15:00] w16_RxConfigReg;
        wire    [15:00] w16_LcAdvAbility;
        wire    [15:00] w16_LcAdvAbility;
        wire    [15:00] w16_LpAdvAbility;
        wire    [15:00] w16_LpAdvAbility;
        wire    w_RUDIConfig;
        wire    w_RUDIConfig;
        wire    w_RUDIIdle;
        wire    w_RUDIIdle;
        wire    w_RUDIInvalid;
        wire    w_RUDIInvalid;
        wire    w_ARstLogic_L;
        wire    w_ARstLogic_L;
        wire    w_MIIReset_L;
        wire    w_MIIReset_L;
        wire    w_ANRestart;
        wire    w_ANRestart;
        //This delay stage is for the function checkend
        //This delay stage is for the function checkend
        reg     [07:00] r8_RxCodeGroup[0:2];
        reg     [07:00] r8_RxCodeGroup[0:2];
        reg     r_RxCgInvalid[0:2];
        reg     r_RxCgInvalid[0:2];
        reg     r_RxCgCtrl[0:2];
        reg     r_RxCgCtrl[0:2];
        wire    [2:0] w3_PreCheckIsSSet;
        wire    [2:0] w3_PreCheckIsSSet;
        wire    [2:0] w3_PreCheckIsTSet;
        wire    [2:0] w3_PreCheckIsTSet;
        wire    [2:0] w3_PreCheckIsRSet;
        wire    [2:0] w3_PreCheckIsRSet;
        wire    [2:0] w3_PreCheckIsComma;
        wire    [2:0] w3_PreCheckIsComma;
        wire    [2:0] w3_PreCheckIsD21_5;
        wire    [2:0] w3_PreCheckIsD21_5;
        wire    [2:0] w3_PreCheckIsD2_2;
        wire    [2:0] w3_PreCheckIsD2_2;
        wire    [2:0] w3_PreCheckIsD;
        wire    [2:0] w3_PreCheckIsD;
        wire    [2:0] w3_PreCheckIsD0_0;
        wire    [2:0] w3_PreCheckIsD0_0;
        wire    w_GxBPowerDown;
        wire    w_GxBPowerDown;
        wire    w_TxCodeCtrl, w_TxCodeValid, w_RxCodeInvalid, w_RxCodeCtrl;
        wire    w_TxCodeCtrl, w_TxCodeValid, w_RxCodeInvalid, w_RxCodeCtrl;
        wire    [07:00] w8_TxCode, w8_RxCode;
        wire    [07:00] w8_TxCode, w8_RxCode;
        wire    w_SignalDetect;
        wire    w_SignalDetect;
        wire    w_TxForceNegDisp;
        wire    w_TxForceNegDisp;
        wire    w_PllLocked;
        wire    w_PllLocked;
        wire    [20:00] w21_LinkTimer;
        wire    [20:00] w21_LinkTimer;
        wire    w_TxEN,w_TxER,w_RxER, w_RxDV;
        wire    w_TxEN,w_TxER,w_RxER, w_RxDV;
        wire    [07:00] w8_RxD, w8_TxD;
        wire    [07:00] w8_RxD, w8_TxD;
        wire    w_BitSlip;
        wire    w_BitSlip;
        wire    w_Invalid;//Not Used
        wire    w_Invalid;//Not Used
        wire    w_TxEven;//Not Used
        wire    w_TxEven;//Not Used
        wire    w_CurrentParity;
        wire    w_CurrentParity;
 
 
        //MII Clock Gen
        //MII Clock Gen
        reg [6:0]        r7_Cntr;
        reg [6:0]        r7_Cntr;
        reg r_MIIClk;
        reg r_MIIClk;
        reg r_MIIClk_D;
        reg r_MIIClk_D;
        wire w_SamplingClk;
        wire w_SamplingClk;
 
 
        integer DELAY;
        integer DELAY;
 
 
        assign o_Linkup = w_SyncStatus;
        assign o_Linkup = w_SyncStatus;
        assign o_ANDone = w_ANComplete;
        assign o_ANDone = w_ANComplete;
 
        assign o_TxClk = w_ClkTx;
 
        assign o_RxClk = w_ClkRx;
 
 
        mRateAdapter    u0RateAdapter(
        mRateAdapter    u0RateAdapter(
        //MAC Side signal
        //MAC Side signal
        .i_TxClk                (o_MIIClk),
        .i_TxClk                (o_MIIClk),
        .i_TxEN                 (i_TxEN ),
        .i_TxEN                 (i_TxEN ),
        .i_TxER                 (i_TxER ),
        .i_TxER                 (i_TxER ),
        .i8_TxD                 (i8_TxD ),
        .i8_TxD                 (i8_TxD ),
        .i_RxClk                (o_MIIClk),
        .i_RxClk                (o_MIIClk),
        .o_RxEN                 (o_RxDV),
        .o_RxEN                 (o_RxDV),
        .o_RxER                 (o_RxER),
        .o_RxER                 (o_RxER),
        .o8_RxD                 (o8_RxD),
        .o8_RxD                 (o8_RxD),
        .i2_Speed               (o2_SGMIISpeed),
        .i2_Speed               (o2_SGMIISpeed),
        //SGMII PHY side
        //SGMII PHY side
        .i_SamplingClk  (w_SamplingClk),
        .i_SamplingClk  (w_SamplingClk),
        .i_GClk                 (w_ClkSys),
        .i_GClk                 (w_ClkSys),
        .o_TxEN                 (w_TxEN),
        .o_TxEN                 (w_TxEN),
        .o_TxER                 (w_TxER),
        .o_TxER                 (w_TxER),
        .o8_TxD                 (w8_TxD),
        .o8_TxD                 (w8_TxD),
        .i_RxEN                 (w_RxDV),
        .i_RxEN                 (w_RxDV),
        .i_RxER                 (w_RxER),
        .i_RxER                 (w_RxER),
        .i8_RxD                 (w8_RxD));
        .i8_RxD                 (w8_RxD));
 
 
        generate
        generate
                genvar STAGE;
                genvar STAGE;
                for(STAGE=0;STAGE<3;STAGE=STAGE+1)
                for(STAGE=0;STAGE<3;STAGE=STAGE+1)
                begin:PreCheck
                begin:PreCheck
                        assign w3_PreCheckIsComma[STAGE]        = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K28_5)?1'b1:1'b0;
                        assign w3_PreCheckIsComma[STAGE]        = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K28_5)?1'b1:1'b0;
                        assign w3_PreCheckIsTSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K29_7)?1'b1:1'b0;
                        assign w3_PreCheckIsTSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K29_7)?1'b1:1'b0;
                        assign w3_PreCheckIsRSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K23_7)?1'b1:1'b0;
                        assign w3_PreCheckIsRSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K23_7)?1'b1:1'b0;
                        assign w3_PreCheckIsD21_5[STAGE]        = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D21_5)?1'b1:1'b0;
                        assign w3_PreCheckIsD21_5[STAGE]        = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D21_5)?1'b1:1'b0;
                        assign w3_PreCheckIsD2_2[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D2_2)?1'b1:1'b0;
                        assign w3_PreCheckIsD2_2[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D2_2)?1'b1:1'b0;
                        assign w3_PreCheckIsD[STAGE]            = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0)?1'b1:1'b0;
                        assign w3_PreCheckIsD[STAGE]            = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0)?1'b1:1'b0;
                        assign w3_PreCheckIsD0_0[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D0_0)?1'b1:1'b0;
                        assign w3_PreCheckIsD0_0[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D0_0)?1'b1:1'b0;
                        assign w3_PreCheckIsSSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K27_7)?1'b1:1'b0;
                        assign w3_PreCheckIsSSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K27_7)?1'b1:1'b0;
                end
                end
        endgenerate
        endgenerate
 
 
        assign w_CheckEndKDK            = w3_PreCheckIsComma[2] & w3_PreCheckIsD[1]&w3_PreCheckIsComma[0];
        assign w_CheckEndKDK            = w3_PreCheckIsComma[2] & w3_PreCheckIsD[1]&w3_PreCheckIsComma[0];
        assign w_CheckEndRRR            = &(w3_PreCheckIsRSet);
        assign w_CheckEndRRR            = &(w3_PreCheckIsRSet);
        assign w_CheckEndTRK            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
        assign w_CheckEndTRK            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
        assign w_CheckEndTRR            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsRSet[0];
        assign w_CheckEndTRR            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsRSet[0];
        assign w_CheckEndKD21_5D0_0     = w3_PreCheckIsComma[2] & w3_PreCheckIsD21_5[1] & w3_PreCheckIsD2_2[0];
        assign w_CheckEndKD21_5D0_0     = w3_PreCheckIsComma[2] & w3_PreCheckIsD21_5[1] & w3_PreCheckIsD2_2[0];
        assign w_CheckEndKD2_2D0_0      = w3_PreCheckIsComma[2] & w3_PreCheckIsD2_2[1] & w3_PreCheckIsD2_2[0];
        assign w_CheckEndKD2_2D0_0      = w3_PreCheckIsComma[2] & w3_PreCheckIsD2_2[1] & w3_PreCheckIsD2_2[0];
        assign w_CheckEndRRK            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
        assign w_CheckEndRRK            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
        assign w_CheckEndRRS            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsSSet[0];
        assign w_CheckEndRRS            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsSSet[0];
 
 
        always@(posedge w_ClkSys)
        always@(posedge w_ClkRx)
                begin
                begin
                        r8_RxCodeGroup[0]        <= w8_RxCode;
                        r8_RxCodeGroup[0]        <= w8_RxCode;
                        r_RxCgCtrl[0]            <= w_RxCodeCtrl;
                        r_RxCgCtrl[0]            <= w_RxCodeCtrl;
                        r_RxCgInvalid[0]         <= w_RxCodeInvalid;
                        r_RxCgInvalid[0]         <= w_RxCodeInvalid;
                        for(DELAY=1;DELAY<3;DELAY=DELAY+1)
                        for(DELAY=1;DELAY<3;DELAY=DELAY+1)
                                begin
                                begin
                                r8_RxCodeGroup[DELAY]   <= r8_RxCodeGroup[DELAY-1];
                                r8_RxCodeGroup[DELAY]   <= r8_RxCodeGroup[DELAY-1];
                                r_RxCgInvalid[DELAY]    <= r_RxCgInvalid[DELAY-1];
                                r_RxCgInvalid[DELAY]    <= r_RxCgInvalid[DELAY-1];
                                r_RxCgCtrl[DELAY]               <= r_RxCgCtrl[DELAY-1];
                                r_RxCgCtrl[DELAY]               <= r_RxCgCtrl[DELAY-1];
                                end
                                end
                end
                end
 
 
        assign o_Col = w_Transmitting & w_Receiving;
        assign o_Col = w_Transmitting & w_Receiving;
        assign o_Crs = 1'b0;
        assign o_Crs = 1'b0;
        assign w_ARstLogic_L    = w_PllLocked & i_ARstHardware_L & (w_MIIRst_L);
        assign w_ARstLogic_L    = w_PllLocked & i_ARstHardware_L & (w_MIIRst_L);
        mRegisters      u0Registers(
        mRegisters      u0Registers(
        .w_ARstLogic_L  (w_ARstLogic_L),
        .w_ARstLogic_L  (w_ARstLogic_L),
        .i_Clk                  (w_ClkSys),
        .i_Clk                  (w_ClkSys),
        .i_Cyc                  (i_Cyc),
        .i_Cyc                  (i_Cyc),
        .i_Stb                  (i_Stb),
        .i_Stb                  (i_Stb),
        .i_WEn                  (i_WEn),
        .i_WEn                  (i_WEn),
        .i8_Addr                (iv_Addr),
        .i8_Addr                (iv_Addr),
        .i32_WrData             (i32_WrData),
        .i32_WrData             (i32_WrData),
        .o32_RdData             (o32_RdData),
        .o32_RdData             (o32_RdData),
        .o_Ack                  (o_Ack),
        .o_Ack                  (o_Ack),
        .o_Stall                (),
        .o_Stall                (),
 
 
        .io_Mdio                (io_Mdio),
        .io_Mdio                (io_Mdio),
        .i_Mdc                  (i_Mdc),
        .i_Mdc                  (i_Mdc),
 
 
        //Register in and out,
        //Register in and out,
 
 
        //MAC-Side SGMII
        //MAC-Side SGMII
        .o2_SGMIISpeed          (o2_SGMIISpeed),
        .o2_SGMIISpeed          (o2_SGMIISpeed),
        .o_SGMIIDuplex          (o_SGMIIDuplex),
        .o_SGMIIDuplex          (o_SGMIIDuplex),
 
 
        //Phy-Side SGMII
        //Phy-Side SGMII
        .i_PhyLink                      (i_PhyLink      ),
        .i_PhyLink                      (i_PhyLink      ),
        .i_PhyDuplex            (i_PhyDuplex),
        .i_PhyDuplex            (i_PhyDuplex),
        .i2_PhySpeed            (i2_PhySpeed),
        .i2_PhySpeed            (i2_PhySpeed),
        .o21_LinkTimer          (w21_LinkTimer),
        .o21_LinkTimer          (w21_LinkTimer),
 
 
        .i16_TxConfigReg        (w16_TxConfigReg),
        .i16_TxConfigReg        (w16_TxConfigReg),
        .o_MIIRst_L                     (w_MIIRst_L),
        .o_MIIRst_L                     (w_MIIRst_L),
        .o_ANEnable                     (w_ANEnable),
        .o_ANEnable                     (w_ANEnable),
        .o_ANRestart            (w_ANRestart),
        .o_ANRestart            (w_ANRestart),
        .o_Loopback                     (w_Loopback),
        .o_Loopback                     (w_Loopback),
        .o_GXBPowerDown         (w_GxBPowerDown),
        .o_GXBPowerDown         (w_GxBPowerDown),
        .o16_LcAdvAbility       (w16_LcAdvAbility),
        .o16_LcAdvAbility       (w16_LcAdvAbility),
        .i3_XmitState           (w3_XmitState),
        .i3_XmitState           (w3_XmitState),
        .i_SyncStatus           (w_SyncStatus),
        .i_SyncStatus           (w_SyncStatus),
        .i_ANComplete           (w_ANComplete),
        .i_ANComplete           (w_ANComplete),
        .i16_LpAdvAbility       (w16_LpAdvAbility));
        .i16_LpAdvAbility       (w16_LpAdvAbility));
 
 
         mSyncCtrl u0SyncCtrl(
         mSyncCtrl u0SyncCtrl(
        .i_Clk                          (w_ClkSys               ),
        .i_Clk                          (w_ClkRx                ),
        .i_Cke                          ((~w_GxBPowerDown)      ),
        .i_Cke                          ((~w_GxBPowerDown)      ),
        .i_ARst_L                       (w_ARstLogic_L  ),
        .i_ARst_L                       (w_ARstLogic_L  ),
        .i_CtrlLoopBack         (w_Loopback             ),
        .i_CtrlLoopBack         (w_Loopback             ),
 
 
        .i8_RxCodeGroupIn       (r8_RxCodeGroup[2]      ),
        .i8_RxCodeGroupIn       (r8_RxCodeGroup[2]      ),
        .i_RxCodeInvalid        (r_RxCgInvalid[2]       ),
        .i_RxCodeInvalid        (r_RxCgInvalid[2]       ),
        .i_RxCodeCtrl           (r_RxCgCtrl[2]          ),
        .i_RxCodeCtrl           (r_RxCgCtrl[2]          ),
        .i_SignalDetect         (w_SignalDetect         ),
        .i_SignalDetect         (w_SignalDetect         ),
 
 
        .o8_RxCodeGroupOut      (w8_RxCG_SyncToRxver    ),
        .o8_RxCodeGroupOut      (w8_RxCG_SyncToRxver    ),
        .o_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
        .o_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
        .o_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
        .o_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
        .o_RxEven                       (w_RxEven                               ),
        .o_RxEven                       (w_RxEven                               ),
        .o_SyncStatus           (w_SyncStatus                   ),
        .o_SyncStatus           (w_SyncStatus                   ),
        .o_BitSlip                      (w_BitSlip),
        .o_BitSlip                      (w_BitSlip),
        .o_IsComma                      (w_IsComma      ),
        .o_IsComma                      (w_IsComma      ),
        .o_OrderedSetValid      (w_OSValid      ),
        .o_OrderedSetValid      (w_OSValid      ),
        .o_IsI1Set                      (w_IsI1Set      ),
        .o_IsI1Set                      (w_IsI1Set      ),
        .o_IsI2Set                      (w_IsI2Set      ),
        .o_IsI2Set                      (w_IsI2Set      ),
        .o_IsC1Set                      (w_IsC1Set      ),
        .o_IsC1Set                      (w_IsC1Set      ),
        .o_IsC2Set                      (w_IsC2Set      ),
        .o_IsC2Set                      (w_IsC2Set      ),
        .o_IsTSet                       (w_IsTSet       ),
        .o_IsTSet                       (w_IsTSet       ),
        .o_IsVSet                       (w_IsVSet       ),
        .o_IsVSet                       (w_IsVSet       ),
        .o_IsSSet                       (w_IsSSet       ),
        .o_IsSSet                       (w_IsSSet       ),
        .o_IsRSet                       (w_IsRSet       ));
        .o_IsRSet                       (w_IsRSet       ));
 
 
        always@(posedge w_ClkSys)
        always@(posedge w_ClkRx)
        begin
        begin
        r_CheckEndKDK                   <= w_CheckEndKDK;
        r_CheckEndKDK                   <= w_CheckEndKDK;
        r_CheckEndKD21_5D0_0    <= w_CheckEndKD21_5D0_0;
        r_CheckEndKD21_5D0_0    <= w_CheckEndKD21_5D0_0;
        r_CheckEndKD2_2D0_0         <= w_CheckEndKD2_2D0_0;
        r_CheckEndKD2_2D0_0         <= w_CheckEndKD2_2D0_0;
        r_CheckEndTRK                   <= w_CheckEndTRK;
        r_CheckEndTRK                   <= w_CheckEndTRK;
        r_CheckEndTRR                   <= w_CheckEndTRR;
        r_CheckEndTRR                   <= w_CheckEndTRR;
        r_CheckEndRRR                   <= w_CheckEndRRR;
        r_CheckEndRRR                   <= w_CheckEndRRR;
        r_CheckEndRRK                   <= w_CheckEndRRK;
        r_CheckEndRRK                   <= w_CheckEndRRK;
        r_CheckEndRRS                   <= w_CheckEndRRS;
        r_CheckEndRRS                   <= w_CheckEndRRS;
        end
        end
 
 
        mReceive        u0Receive(
        mReceive        u0Receive(
        .i8_RxCodeGroupIn               (w8_RxCG_SyncToRxver    ),
        .i8_RxCodeGroupIn               (w8_RxCG_SyncToRxver    ),
        .i_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
        .i_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
        .i_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
        .i_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
        .i_RxEven                       (w_RxEven                               ),
        .i_RxEven                       (w_RxEven                               ),
 
 
        .i3_Xmit                                (w3_XmitState),
        .i3_Xmit                                (w3_XmitState),
 
 
        .i_IsComma                              (w_IsComma      ),
        .i_IsComma                              (w_IsComma      ),
        .i_OrderedSetValid      (w_OSValid      ),
        .i_OrderedSetValid      (w_OSValid      ),
        .i_IsI1Set              (w_IsI1Set      ),
        .i_IsI1Set              (w_IsI1Set      ),
        .i_IsI2Set              (w_IsI2Set      ),
        .i_IsI2Set              (w_IsI2Set      ),
        .i_IsC1Set              (w_IsC1Set      ),
        .i_IsC1Set              (w_IsC1Set      ),
        .i_IsC2Set              (w_IsC2Set      ),
        .i_IsC2Set              (w_IsC2Set      ),
        .i_IsTSet               (w_IsTSet       ),
        .i_IsTSet               (w_IsTSet       ),
        .i_IsVSet               (w_IsVSet       ),
        .i_IsVSet               (w_IsVSet       ),
        .i_IsSSet               (w_IsSSet       ),
        .i_IsSSet               (w_IsSSet       ),
        .i_IsRSet               (w_IsRSet       ),
        .i_IsRSet               (w_IsRSet       ),
 
 
        .i_CheckEndKDK                  (r_CheckEndKDK                  ),
        .i_CheckEndKDK                  (r_CheckEndKDK                  ),
        .i_CheckEndKD21_5D0_0   (r_CheckEndKD21_5D0_0   ),
        .i_CheckEndKD21_5D0_0   (r_CheckEndKD21_5D0_0   ),
        .i_CheckEndKD2_2D0_0    (r_CheckEndKD2_2D0_0    ),
        .i_CheckEndKD2_2D0_0    (r_CheckEndKD2_2D0_0    ),
        .i_CheckEndTRK                  (r_CheckEndTRK                  ),
        .i_CheckEndTRK                  (r_CheckEndTRK                  ),
        .i_CheckEndTRR                  (r_CheckEndTRR                  ),
        .i_CheckEndTRR                  (r_CheckEndTRR                  ),
        .i_CheckEndRRR                  (r_CheckEndRRR                  ),
        .i_CheckEndRRR                  (r_CheckEndRRR                  ),
        .i_CheckEndRRK                  (r_CheckEndRRK                  ),
        .i_CheckEndRRK                  (r_CheckEndRRK                  ),
        .i_CheckEndRRS                  (r_CheckEndRRS                  ),
        .i_CheckEndRRS                  (r_CheckEndRRS                  ),
 
 
        .o16_RxConfigReg        (w16_RxConfigReg),
        .o16_RxConfigReg        (w16_RxConfigReg),
        .o_RUDIConfig           (w_RUDIConfig),
        .o_RUDIConfig           (w_RUDIConfig),
        .o_RUDIIdle                     (w_RUDIIdle),
        .o_RUDIIdle                     (w_RUDIIdle),
        .o_RUDIInvalid          (w_RUDIInvalid),
        .o_RUDIInvalid          (w_RUDIInvalid),
 
 
        .o_RxDV                         (w_RxDV ),
        .o_RxDV                         (w_RxDV ),
        .o_RxER                         (w_RxER ),
        .o_RxER                         (w_RxER ),
        .o8_RxD                         (w8_RxD ),
        .o8_RxD                         (w8_RxD ),
        .o_Invalid                      (w_Invalid),
        .o_Invalid                      (w_Invalid),
        .o_Receiving            (w_Receiving),
        .o_Receiving            (w_Receiving),
        .i_Clk                          (w_ClkSys),
        .i_Clk                          (w_ClkRx),
        .i_ARst_L                       (w_ARstLogic_L));
        .i_ARst_L                       (w_ARstLogic_L));
 
 
        mANCtrl u0ANCtrl(
        mANCtrl u0ANCtrl(
        .i_Clk                          (w_ClkSys                       ),
        .i_Clk                          (w_ClkRx                        ),
        .i_ARst_L                       (w_ARstLogic_L          ),
        .i_ARst_L                       (w_ARstLogic_L          ),
        .i_Cke                          ((~w_GxBPowerDown)              ),
        .i_Cke                          ((~w_GxBPowerDown)              ),
        .i_RestartAN            (w_ANRestart            ),
        .i_RestartAN            (w_ANRestart            ),
        .i_SyncStatus           (w_SyncStatus           ),
        .i_SyncStatus           (w_SyncStatus           ),
        .i_ANEnable                     (w_ANEnable                     ),
        .i_ANEnable                     (w_ANEnable                     ),
        .i21_LinkTimer          (w21_LinkTimer          ),
        .i21_LinkTimer          (w21_LinkTimer          ),
        .i16_LcAdvAbility       (w16_LcAdvAbility       ),
        .i16_LcAdvAbility       (w16_LcAdvAbility       ),
        .o16_LpAdvAbility       (w16_LpAdvAbility       ),
        .o16_LpAdvAbility       (w16_LpAdvAbility       ),
        .o_ANComplete           (w_ANComplete           ),
        .o_ANComplete           (w_ANComplete           ),
        .i16_RxConfigReg        (w16_RxConfigReg        ),
        .i16_RxConfigReg        (w16_RxConfigReg        ),
        .i_RUDIConfig           (w_RUDIConfig           ),
        .i_RUDIConfig           (w_RUDIConfig           ),
        .i_RUDIIdle                     (w_RUDIIdle                     ),
        .i_RUDIIdle                     (w_RUDIIdle                     ),
        .i_RUDIInvalid          (w_RUDIInvalid          ),
        .i_RUDIInvalid          (w_RUDIInvalid          ),
        .o3_Xmit                        (w3_XmitState           ),
        .o3_Xmit                        (w3_XmitState           ),
        .o16_TxConfigReg        (w16_TxConfigReg        ));
        .o16_TxConfigReg        (w16_TxConfigReg        ));
 
 
        mTransmit       u0Transmit(
        mTransmit       u0Transmit(
        .i3_Xmit                        (w3_XmitState           ),
        .i3_Xmit                        (w3_XmitState           ),
        .i16_ConfigReg          (w16_TxConfigReg        ),
        .i16_ConfigReg          (w16_TxConfigReg        ),
 
 
        .i_TxEN                         (w_TxEN                         ),
        .i_TxEN                         (w_TxEN                         ),
        .i_TxER                         (w_TxER                         ),
        .i_TxER                         (w_TxER                         ),
        .i8_TxD                         (w8_TxD                         ),
        .i8_TxD                         (w8_TxD                         ),
 
 
 
 
        .o_Xmitting                     (w_Transmitting         ),
        .o_Xmitting                     (w_Transmitting         ),
        .o_TxEven                       (w_TxEven                       ),
        .o_TxEven                       (w_TxEven                       ),
        .o8_TxCodeGroupOut      (w8_TxCode                      ),
        .o8_TxCodeGroupOut      (w8_TxCode                      ),
        .o_TxCodeValid          (w_TxCodeValid          ),
        .o_TxCodeValid          (w_TxCodeValid          ),
        .o_TxCodeCtrl           (w_TxCodeCtrl           ),
        .o_TxCodeCtrl           (w_TxCodeCtrl           ),
        .i_CurrentParity        (w_CurrentParity        ),
        .i_CurrentParity        (w_CurrentParity        ),
 
 
        .i_Clk                          (w_ClkSys                       ),
        .i_Clk                          (w_ClkTx                        ),
        .i_ARst_L                       (w_ARstLogic_L          ));
        .i_ARst_L                       (w_ARstLogic_L          ));
 
 
        assign w_SignalDetect=~w_RxCodeInvalid;
        assign w_SignalDetect=~w_RxCodeInvalid;
 
 
        /*mXcver #(.pXcverName("AltArriaV"))u0Xcver(
        /*mXcver #(.pXcverName("AltArriaV"))u0Xcver(
 
 
        .i_SerRx                        (i_SerRx                        ),
        .i_SerRx                        (i_SerRx                        ),
        .o_SerTx                        (o_SerTx                        ),
        .o_SerTx                        (o_SerTx                        ),
 
 
        .i_RefClk125M           (i_RefClk125M           ),
        .i_RefClk125M           (i_RefClk125M           ),
        .o_TxClk                        (w_ClkSys                       ),
        .o_TxClk                        (w_ClkSys                       ),
        .i_CalClk                       (i_RefClk125M           ),
        .i_CalClk                       (i_RefClk125M           ),
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
        .i_XcverDigitalRst      (~w_ARstLogic_L         ),
        .i_XcverDigitalRst      (~w_ARstLogic_L         ),
        .o_PllLocked            (w_PllLocked            ),
        .o_PllLocked            (w_PllLocked            ),
 
 
        .o_SignalDetect         (),
        .o_SignalDetect         (),
        .o8_RxCodeGroup         (w8_RxCode                      ),
        .o8_RxCodeGroup         (w8_RxCode                      ),
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
 
 
        .i8_TxCodeGroup         (w8_TxCode                      ),
        .i8_TxCodeGroup         (w8_TxCode                      ),
        .i_TxCodeValid          (w_TxCodeValid          ),
        .i_TxCodeValid          (w_TxCodeValid          ),
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
        .i_TxForceNegDisp       (w_TxForceNegDisp       ),
        .i_TxForceNegDisp       (w_TxForceNegDisp       ),
        .o_RunningDisparity     (w_CurrentParity));*/
        .o_RunningDisparity     (w_CurrentParity));*/
 
 
 
 
        mAltA5GXlvds u0Xcverlvds(
        mAltA5GXlvds u0Xcverlvds(
        .i_SerRx                        (i_SerRx                        ),
        .i_SerRx                        (i_SerRx                        ),
        .o_SerTx                        (o_SerTx                        ),
        .o_SerTx                        (o_SerTx                        ),
 
 
        .i_RefClk125M           (i_RefClk125M           ),
        .i_RefClk125M           (i_RefClk125M           ),
        .o_CoreClk                      (w_ClkSys                       ),
        .o_TxClk                        (w_ClkTx                        ),
 
        .o_RxClk                        (w_ClkRx                        ),
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
        .i_XcverDigitalRst      (~i_ARstHardware_L      ),
        .i_XcverDigitalRst      (~i_ARstHardware_L      ),
        .o_PllLocked            (w_PllLocked            ),
        .o_PllLocked            (w_PllLocked            ),
        .i_RxBitSlip            (w_BitSlip                      ),
        .i_RxBitSlip            (w_BitSlip                      ),
 
 
        .o_SignalDetect         (),
        .o_SignalDetect         (),
        .o8_RxCodeGroup         (w8_RxCode                      ),
        .o8_RxCodeGroup         (w8_RxCode                      ),
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
 
 
        .i8_TxCodeGroup         (w8_TxCode                      ),
        .i8_TxCodeGroup         (w8_TxCode                      ),
        .i_TxCodeValid          (w_TxCodeValid          ),
        .i_TxCodeValid          (w_TxCodeValid          ),
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
        .i_TxForceNegDisp       (1'b0   ),
        .i_TxForceNegDisp       (1'b0   ),
        .o_RunningDisparity     (w_CurrentParity));
        .o_RunningDisparity     (w_CurrentParity));
 
 
 
        assign w_ClkSys  = w_ClkTx;
        assign o_GMIIClk = w_ClkSys;
        assign o_GMIIClk = w_ClkSys;
 
 
        always@(posedge w_ClkSys or negedge i_ARstHardware_L )
        always@(posedge w_ClkSys or negedge i_ARstHardware_L )
        if(~i_ARstHardware_L)
        if(~i_ARstHardware_L)
        begin
        begin
                r7_Cntr         <= 7'h0;
                r7_Cntr         <= 7'h0;
                r_MIIClk        <= 1'b0;
                r_MIIClk        <= 1'b0;
        end else
        end else
        begin
        begin
                if(o2_SGMIISpeed==2'b01)
                if(o2_SGMIISpeed==2'b01)
                        begin
                        begin
                        if(r7_Cntr==7'h4) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
                        if(r7_Cntr==7'h4) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
                        if(r7_Cntr==7'h4) r_MIIClk<=1'b1; else if(r7_Cntr==7'h1) r_MIIClk<=1'b0;
                        if(r7_Cntr==7'h4) r_MIIClk<=1'b1; else if(r7_Cntr==7'h1) r_MIIClk<=1'b0;
                        end
                        end
                else if(o2_SGMIISpeed==2'b00)
                else if(o2_SGMIISpeed==2'b00)
                        begin
                        begin
                        if(r7_Cntr==7'h49) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
                        if(r7_Cntr==7'h49) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
                        if(r7_Cntr==7'h49) r_MIIClk<=1'b1; else if(r7_Cntr==7'h24) r_MIIClk<=1'b0;
                        if(r7_Cntr==7'h49) r_MIIClk<=1'b1; else if(r7_Cntr==7'h24) r_MIIClk<=1'b0;
                        end
                        end
                r_MIIClk_D <= r_MIIClk;
                r_MIIClk_D <= r_MIIClk;
        end
        end
        assign w_SamplingClk = (r_MIIClk_D & (~r_MIIClk));
        assign w_SamplingClk = (r_MIIClk_D & (~r_MIIClk));
 
 
        //Insert Clock Buffer or PLL if necessary
        //Insert Clock Buffer or PLL if necessary
        mClkBuf u0ClkBuf(.i_Clk(r_MIIClk),.o_Clk(o_MIIClk));
        mClkBuf u0ClkBuf(.i_Clk(r_MIIClk),.o_Clk(o_MIIClk));
 
 
endmodule
endmodule
 
 
 
 
 
 
 
 
 
 
 
 

powered by: WebSVN 2.1.0

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