eth_ocm.v
来自「sopc builder 中网络的eth_ocm核」· Verilog 代码 · 共 944 行 · 第 1/3 页
V
944 行
.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 av_reset)begin if(av_reset) 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 av_reset)begin if(av_reset) 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 av_reset)begin if(av_reset) RxEnSync <= #Tp 1'b0; else if(~mrxdv_pad_i) RxEnSync <= #Tp r_RxEn;end // Synchronizing WillSendControlFrame to WB_CLK;always @ (posedge av_clk or posedge av_reset)begin if(av_reset) WillSendControlFrame_sync1 <= 1'b0; else WillSendControlFrame_sync1 <=#Tp WillSendControlFrame;endalways @ (posedge av_clk or posedge av_reset)begin if(av_reset) WillSendControlFrame_sync2 <= 1'b0; else WillSendControlFrame_sync2 <=#Tp WillSendControlFrame_sync1;endalways @ (posedge av_clk or posedge av_reset)begin if(av_reset) WillSendControlFrame_sync3 <= 1'b0; else WillSendControlFrame_sync3 <=#Tp WillSendControlFrame_sync2;endalways @ (posedge av_clk or posedge av_reset)begin if(av_reset) RstTxPauseRq <= 1'b0; else RstTxPauseRq <=#Tp WillSendControlFrame_sync2 & ~WillSendControlFrame_sync3;end// TX Pause request Synchronizationalways @ (posedge mtx_clk_pad_i or posedge av_reset)begin if(av_reset) 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 av_reset)begin if(av_reset) 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 av_reset)begin if(av_reset) 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 av_clk or posedge av_reset)begin if(av_reset) 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 av_reset)begin if(av_reset) 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_avalon #( .DESC_COUNT (TOTAL_DESCRIPTORS ), .RX_FIFO_DEPTH (RX_FIFO_SIZE_IN_BYTES ), .TX_FIFO_DEPTH (TX_FIFO_SIZE_IN_BYTES )) eth_avalon_inst ( .av_reset (av_reset ), .av_clk (av_clk ), //Avalon Control port //inputs .av_cs (BDCs ), .av_write (BDCs & av_write ), .av_read (BDCs & av_read ), .av_address (av_address[7:0] ), .av_writedata (av_writedata ), //outputs .av_readdata (BD_av_readdata ), .av_waitrequest_n (BDAck ), //Avalon TX memory port //inputs .av_tx_waitrequest (av_tx_waitrequest ), .av_tx_readdatavalid (av_tx_readdatavalid), .av_tx_readdata (av_tx_readdata ), //outputs .av_tx_address (av_tx_address ), .av_tx_read (av_tx_read ), //Avalon RX memory port //inputs .av_rx_waitrequest (av_rx_waitrequest ), //outputs .av_rx_address (av_rx_address ), .av_rx_write (av_rx_write ), .av_rx_writedata (av_rx_writedata ), .av_rx_byteenable (av_rx_byteenable ), //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);// Connecting MacStatus moduleeth_macstatus macstatus1 ( .MRxClk(mrx_clk_pad_i), .Reset(av_reset), .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 + =
减小字号Ctrl + -
显示快捷键?