Line 1... |
Line 1... |
/*
|
/*
|
Developed By Jeff Lieu (lieumychuong@gmail.com)
|
Copyright � 2012 JeffLieu-lieumychuong@gmail.com
|
|
|
|
This file is part of SGMII-IP-Core.
|
|
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
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
SGMII-IP-Core 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 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
|
Line 108... |
Line 123... |
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_Invalid;//Not Used
|
|
wire w_TxEven;//Not Used
|
|
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;
|
Line 144... |
Line 163... |
.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
|
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;
|
Line 191... |
Line 210... |
.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),
|
.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,
|
Line 296... |
Line 315... |
.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 (o_Invalid),
|
.o_Invalid (w_Invalid),
|
.o_Receiving (w_Receiving),
|
.o_Receiving (w_Receiving),
|
.i_Clk (w_ClkSys),
|
.i_Clk (w_ClkSys),
|
.i_ARst_L (w_ARstLogic_L));
|
.i_ARst_L (w_ARstLogic_L));
|
|
|
mANCtrl u0ANCtrl(
|
mANCtrl u0ANCtrl(
|
Line 370... |
Line 389... |
.o_SerTx (o_SerTx ),
|
.o_SerTx (o_SerTx ),
|
|
|
.i_RefClk125M (i_RefClk125M ),
|
.i_RefClk125M (i_RefClk125M ),
|
.o_CoreClk (w_ClkSys ),
|
.o_CoreClk (w_ClkSys ),
|
.i_GxBPwrDwn (w_GxBPowerDown ),
|
.i_GxBPwrDwn (w_GxBPowerDown ),
|
.i_XcverDigitalRst (~w_ARstLogic_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 ),
|
Line 382... |
Line 401... |
.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 (1'b0 ),
|
.o_RunningDisparity (w_CurrentParity));
|
.o_RunningDisparity (w_CurrentParity));
|
|
|
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 )
|