📄 eth_top.v
字号:
assign MRxDV_Lb = r_LoopBck? mtxen_pad_o : mrxdv_pad_i & RxEnSync;// Muxed MII Receive Errorassign MRxErr_Lb = r_LoopBck? mtxerr_pad_o : mrxerr_pad_i & RxEnSync;// Muxed MII Receive Dataassign MRxD_Lb[3:0] = r_LoopBck? mtxd_pad_o[3:0] : mrxd_pad_i[3:0];// Connecting TxEthMACeth_txethmac txethmac1( .MTxClk(mtx_clk_pad_i), .Reset(wb_rst_i), .CarrierSense(TxCarrierSense), .Collision(Collision), .TxData(TxDataOut), .TxStartFrm(TxStartFrmOut), .TxUnderRun(TxUnderRun), .TxEndFrm(TxEndFrmOut), .Pad(PadOut), .MinFL(r_MinFL), .CrcEn(CrcEnOut), .FullD(r_FullD), .HugEn(r_HugEn), .DlyCrcEn(r_DlyCrcEn), .IPGT(r_IPGT), .IPGR1(r_IPGR1), .IPGR2(r_IPGR2), .CollValid(r_CollValid), .MaxRet(r_MaxRet), .NoBckof(r_NoBckof), .ExDfrEn(r_ExDfrEn), .MaxFL(r_MaxFL), .MTxEn(mtxen_pad_o), .MTxD(mtxd_pad_o), .MTxErr(mtxerr_pad_o), .TxUsedData(TxUsedDataIn), .TxDone(TxDoneIn), .TxRetry(TxRetry), .TxAbort(TxAbortIn), .WillTransmit(WillTransmit), .ResetCollision(ResetCollision), .RetryCnt(RetryCnt), .StartTxDone(StartTxDone), .StartTxAbort(StartTxAbort), .MaxCollisionOccured(MaxCollisionOccured), .LateCollision(LateCollision), .DeferIndication(DeferIndication), .StatePreamble(StatePreamble), .StateData(StateData) );wire [15:0] RxByteCnt;wire RxByteCntEq0;wire RxByteCntGreat2;wire RxByteCntMaxFrame;wire RxCrcError;wire RxStateIdle;wire RxStatePreamble;wire RxStateSFD;wire [1:0] RxStateData;wire AddressMiss;// Connecting RxEthMACeth_rxethmac rxethmac1( .MRxClk(mrx_clk_pad_i), .MRxDV(MRxDV_Lb), .MRxD(MRxD_Lb), .Transmitting(Transmitting), .HugEn(r_HugEn), .DlyCrcEn(r_DlyCrcEn), .MaxFL(r_MaxFL), .r_IFG(r_IFG), .Reset(wb_rst_i), .RxData(RxData), .RxValid(RxValid), .RxStartFrm(RxStartFrm), .RxEndFrm(RxEndFrm), .ByteCnt(RxByteCnt), .ByteCntEq0(RxByteCntEq0), .ByteCntGreat2(RxByteCntGreat2), .ByteCntMaxFrame(RxByteCntMaxFrame), .CrcError(RxCrcError), .StateIdle(RxStateIdle), .StatePreamble(RxStatePreamble), .StateSFD(RxStateSFD), .StateData(RxStateData), .MAC(r_MAC), .r_Pro(r_Pro), .r_Bro(r_Bro), .r_HASH0(r_HASH0), .r_HASH1(r_HASH1), .RxAbort(RxAbort), .AddressMiss(AddressMiss), .PassAll(r_PassAll), .ControlFrmAddressOK(ControlFrmAddressOK));// MII Carrier Sense Synchronizationalways @ (posedge mtx_clk_pad_i or posedge wb_rst_i)begin if(wb_rst_i) begin CarrierSense_Tx1 <= #Tp 1'b0; CarrierSense_Tx2 <= #Tp 1'b0; end else begin CarrierSense_Tx1 <= #Tp mcrs_pad_i; CarrierSense_Tx2 <= #Tp CarrierSense_Tx1; endendassign TxCarrierSense = ~r_FullD & CarrierSense_Tx2;// MII Collision Synchronizationalways @ (posedge mtx_clk_pad_i or posedge wb_rst_i)begin if(wb_rst_i) begin Collision_Tx1 <= #Tp 1'b0; Collision_Tx2 <= #Tp 1'b0; end else begin Collision_Tx1 <= #Tp mcoll_pad_i; if(ResetCollision) Collision_Tx2 <= #Tp 1'b0; else if(Collision_Tx1) Collision_Tx2 <= #Tp 1'b1; endend// Synchronized Collisionassign Collision = ~r_FullD & Collision_Tx2;// Delayed WillTransmitalways @ (posedge mrx_clk_pad_i)begin WillTransmit_q <= #Tp WillTransmit; WillTransmit_q2 <= #Tp WillTransmit_q;end assign Transmitting = ~r_FullD & WillTransmit_q2;// Synchronized Receive Enablealways @ (posedge mrx_clk_pad_i or posedge wb_rst_i)begin if(wb_rst_i) RxEnSync <= #Tp 1'b0; else if(~mrxdv_pad_i) RxEnSync <= #Tp r_RxEn;end // Synchronizing WillSendControlFrame to WB_CLK;always @ (posedge wb_clk_i or posedge wb_rst_i)begin if(wb_rst_i) WillSendControlFrame_sync1 <= 1'b0; else WillSendControlFrame_sync1 <=#Tp WillSendControlFrame;endalways @ (posedge wb_clk_i or posedge wb_rst_i)begin if(wb_rst_i) WillSendControlFrame_sync2 <= 1'b0; else WillSendControlFrame_sync2 <=#Tp WillSendControlFrame_sync1;endalways @ (posedge wb_clk_i or posedge wb_rst_i)begin if(wb_rst_i) WillSendControlFrame_sync3 <= 1'b0; else WillSendControlFrame_sync3 <=#Tp WillSendControlFrame_sync2;endalways @ (posedge wb_clk_i or posedge wb_rst_i)begin if(wb_rst_i) RstTxPauseRq <= 1'b0; else RstTxPauseRq <=#Tp WillSendControlFrame_sync2 & ~WillSendControlFrame_sync3;end// TX Pause request Synchronizationalways @ (posedge mtx_clk_pad_i or posedge wb_rst_i)begin if(wb_rst_i) begin TxPauseRq_sync1 <= #Tp 1'b0; TxPauseRq_sync2 <= #Tp 1'b0; TxPauseRq_sync3 <= #Tp 1'b0; end else begin TxPauseRq_sync1 <= #Tp (r_TxPauseRq & r_TxFlow); TxPauseRq_sync2 <= #Tp TxPauseRq_sync1; TxPauseRq_sync3 <= #Tp TxPauseRq_sync2; endendalways @ (posedge mtx_clk_pad_i or posedge wb_rst_i)begin if(wb_rst_i) TPauseRq <= #Tp 1'b0; else TPauseRq <= #Tp TxPauseRq_sync2 & (~TxPauseRq_sync3);endwire LatchedMRxErr;reg RxAbort_latch;reg RxAbort_sync1;reg RxAbort_wb;reg RxAbortRst_sync1;reg RxAbortRst;// Synchronizing RxAbort to the WISHBONE clockalways @ (posedge mrx_clk_pad_i or posedge wb_rst_i)begin if(wb_rst_i) RxAbort_latch <= #Tp 1'b0; else if(RxAbort | (ShortFrame & ~r_RecSmall) | LatchedMRxErr & ~InvalidSymbol | (ReceivedPauseFrm & (~r_PassAll))) RxAbort_latch <= #Tp 1'b1; else if(RxAbortRst) RxAbort_latch <= #Tp 1'b0;endalways @ (posedge wb_clk_i or posedge wb_rst_i)begin if(wb_rst_i) begin RxAbort_sync1 <= #Tp 1'b0; RxAbort_wb <= #Tp 1'b0; RxAbort_wb <= #Tp 1'b0; end else begin RxAbort_sync1 <= #Tp RxAbort_latch; RxAbort_wb <= #Tp RxAbort_sync1; endendalways @ (posedge mrx_clk_pad_i or posedge wb_rst_i)begin if(wb_rst_i) begin RxAbortRst_sync1 <= #Tp 1'b0; RxAbortRst <= #Tp 1'b0; end else begin RxAbortRst_sync1 <= #Tp RxAbort_wb; RxAbortRst <= #Tp RxAbortRst_sync1; endend// Connecting Wishbone moduleeth_wishbone wishbone( .WB_CLK_I(wb_clk_i), .WB_DAT_I(wb_dat_i), .WB_DAT_O(BD_WB_DAT_O), // WISHBONE slave .WB_ADR_I(wb_adr_i[9:2]), .WB_WE_I(wb_we_i), .BDCs(BDCs), .WB_ACK_O(BDAck), .Reset(wb_rst_i), // WISHBONE master .m_wb_adr_o(m_wb_adr_tmp), .m_wb_sel_o(m_wb_sel_o), .m_wb_we_o(m_wb_we_o), .m_wb_dat_i(m_wb_dat_i), .m_wb_dat_o(m_wb_dat_o), .m_wb_cyc_o(m_wb_cyc_o), .m_wb_stb_o(m_wb_stb_o), .m_wb_ack_i(m_wb_ack_i), .m_wb_err_i(m_wb_err_i), `ifdef ETH_WISHBONE_B3 .m_wb_cti_o(m_wb_cti_o), .m_wb_bte_o(m_wb_bte_o), `endif //TX .MTxClk(mtx_clk_pad_i), .TxStartFrm(TxStartFrm), .TxEndFrm(TxEndFrm), .TxUsedData(TxUsedData), .TxData(TxData), .TxRetry(TxRetry), .TxAbort(TxAbort), .TxUnderRun(TxUnderRun), .TxDone(TxDone), .PerPacketCrcEn(PerPacketCrcEn), .PerPacketPad(PerPacketPad), // Register .r_TxEn(r_TxEn), .r_RxEn(r_RxEn), .r_TxBDNum(r_TxBDNum), .r_RxFlow(r_RxFlow), .r_PassAll(r_PassAll), //RX .MRxClk(mrx_clk_pad_i), .RxData(RxData), .RxValid(RxValid), .RxStartFrm(RxStartFrm), .RxEndFrm(RxEndFrm), .Busy_IRQ(Busy_IRQ), .RxE_IRQ(RxE_IRQ), .RxB_IRQ(RxB_IRQ), .TxE_IRQ(TxE_IRQ), .TxB_IRQ(TxB_IRQ), .RxAbort(RxAbort_wb), .RxStatusWriteLatched_sync2(RxStatusWriteLatched_sync2), .InvalidSymbol(InvalidSymbol), .LatchedCrcError(LatchedCrcError), .RxLength(RxByteCnt), .RxLateCollision(RxLateCollision), .ShortFrame(ShortFrame), .DribbleNibble(DribbleNibble), .ReceivedPacketTooBig(ReceivedPacketTooBig), .LoadRxStatus(LoadRxStatus), .RetryCntLatched(RetryCntLatched), .RetryLimit(RetryLimit), .LateCollLatched(LateCollLatched), .DeferLatched(DeferLatched), .RstDeferLatched(RstDeferLatched), .CarrierSenseLost(CarrierSenseLost),.ReceivedPacketGood(ReceivedPacketGood), .AddressMiss(AddressMiss), .ReceivedPauseFrm(ReceivedPauseFrm) `ifdef ETH_BIST , .mbist_si_i (mbist_si_i), .mbist_so_o (mbist_so_o), .mbist_ctrl_i (mbist_ctrl_i)`endif);assign m_wb_adr_o = {m_wb_adr_tmp, 2'h0};// Connecting MacStatus moduleeth_macstatus macstatus1 ( .MRxClk(mrx_clk_pad_i), .Reset(wb_rst_i), .ReceiveEnd(ReceiveEnd), .ReceivedPacketGood(ReceivedPacketGood), .ReceivedLengthOK(ReceivedLengthOK), .RxCrcError(RxCrcError), .MRxErr(MRxErr_Lb), .MRxDV(MRxDV_Lb), .RxStateSFD(RxStateSFD), .RxStateData(RxStateData), .RxStatePreamble(RxStatePreamble), .RxStateIdle(RxStateIdle), .Transmitting(Transmitting), .RxByteCnt(RxByteCnt), .RxByteCntEq0(RxByteCntEq0), .RxByteCntGreat2(RxByteCntGreat2), .RxByteCntMaxFrame(RxByteCntMaxFrame), .InvalidSymbol(InvalidSymbol), .MRxD(MRxD_Lb), .LatchedCrcError(LatchedCrcError), .Collision(mcoll_pad_i), .CollValid(r_CollValid), .RxLateCollision(RxLateCollision), .r_RecSmall(r_RecSmall), .r_MinFL(r_MinFL), .r_MaxFL(r_MaxFL), .ShortFrame(ShortFrame), .DribbleNibble(DribbleNibble), .ReceivedPacketTooBig(ReceivedPacketTooBig), .r_HugEn(r_HugEn), .LoadRxStatus(LoadRxStatus), .RetryCnt(RetryCnt), .StartTxDone(StartTxDone), .StartTxAbort(StartTxAbort), .RetryCntLatched(RetryCntLatched), .MTxClk(mtx_clk_pad_i), .MaxCollisionOccured(MaxCollisionOccured), .RetryLimit(RetryLimit), .LateCollision(LateCollision), .LateCollLatched(LateCollLatched), .DeferIndication(DeferIndication), .DeferLatched(DeferLatched), .RstDeferLatched(RstDeferLatched), .TxStartFrm(TxStartFrmOut), .StatePreamble(StatePreamble), .StateData(StateData), .CarrierSense(CarrierSense_Tx2), .CarrierSenseLost(CarrierSenseLost), .TxUsedData(TxUsedDataIn), .LatchedMRxErr(LatchedMRxErr), .Loopback(r_LoopBck), .r_FullD(r_FullD));endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -