move out rx

This commit is contained in:
RuigeLee
2023-10-08 15:13:35 +08:00
parent 115f216139
commit 92a6f6b5c3
2 changed files with 147 additions and 80 deletions

View File

@@ -711,8 +711,6 @@ val rxethmac = withClockAndReset(io.mrx_clk_pad_i.asClock, io.asyncReset)( Modul
wishbone.io.ShortFrame := ShortFrame wishbone.io.ShortFrame := ShortFrame
wishbone.io.DribbleNibble := DribbleNibble wishbone.io.DribbleNibble := DribbleNibble
wishbone.io.ReceivedPacketTooBig := ReceivedPacketTooBig wishbone.io.ReceivedPacketTooBig := ReceivedPacketTooBig
wishbone.io.RxLength := RxByteCnt
wishbone.io.LoadRxStatus := LoadRxStatus
wishbone.io.ReceivedPacketGood := ReceivedPacketGood wishbone.io.ReceivedPacketGood := ReceivedPacketGood
wishbone.io.AddressMiss := AddressMiss wishbone.io.AddressMiss := AddressMiss
wishbone.io.r_RxFlow := r_RxFlow wishbone.io.r_RxFlow := r_RxFlow
@@ -730,11 +728,6 @@ val rxethmac = withClockAndReset(io.mrx_clk_pad_i.asClock, io.asyncReset)( Modul
PerPacketPad := wishbone.io.PerPacketPad PerPacketPad := wishbone.io.PerPacketPad
wishbone.io.MRxClk := io.mrx_clk_pad_i wishbone.io.MRxClk := io.mrx_clk_pad_i
wishbone.io.RxData := RxData
wishbone.io.RxValid := RxValid
wishbone.io.RxStartFrm := RxStartFrm
wishbone.io.RxEndFrm := RxEndFrm
wishbone.io.RxAbort := RxAbort_wb
RxStatusWriteLatched_sync2 := wishbone.io.RxStatusWriteLatched_sync2 RxStatusWriteLatched_sync2 := wishbone.io.RxStatusWriteLatched_sync2
wishbone.io.r_TxEn := r_TxEn wishbone.io.r_TxEn := r_TxEn
@@ -862,6 +855,84 @@ val rxethmac = withClockAndReset(io.mrx_clk_pad_i.asClock, io.asyncReset)( Modul
wishbone.io.TxAbortSync := ShiftRegister( TxAbort, 2, false.B, true.B ) wishbone.io.TxAbortSync := ShiftRegister( TxAbort, 2, false.B, true.B )
wishbone.io.TxDoneSync := ShiftRegister( TxDone, 2, false.B, true.B ) wishbone.io.TxDoneSync := ShiftRegister( TxDone, 2, false.B, true.B )
val macTileLinkRX = withClockAndReset( io.mrx_clk_pad_i.asClock, io.asyncReset ) ( Module(new MacTileLinkRX) )
wishbone.io.RxDataLatched2_rxclk := macTileLinkRX.io.RxDataLatched2
val WriteRxDataToFifoSync = ShiftRegister(macTileLinkRX.io.WriteRxDataToFifo, 2, false.B, true.B)
wishbone.io.WriteRxDataToFifoSync := WriteRxDataToFifoSync
val RxAbortSync = ShiftRegister( macTileLinkRX.io.RxAbortLatched, 2, false.B, true.B )
wishbone.io.RxAbortSync := RxAbortSync
val ShiftEndedSync = ShiftRegister( macTileLinkRX.io.ShiftEnded_rck, 2, false.B, true.B )
wishbone.io.ShiftEndedSync := ShiftEndedSync
val SyncRxStartFrmSync = ShiftRegister(macTileLinkRX.io.LatchedRxStartFrm, 2, false.B, true.B)
wishbone.io.SyncRxStartFrmSync := SyncRxStartFrmSync
wishbone.io.LatchedRxLength_rxclk := macTileLinkRX.io.LatchedRxLength
wishbone.io.RxStatusInLatched_rxclk := macTileLinkRX.io.RxStatusInLatched
// Busy Interrupt
val Busy_IRQ_sync = ShiftRegister(macTileLinkRX.io.Busy_IRQ_rck, 2)
wishbone.io.Busy_IRQ_sync := Busy_IRQ_sync
withClockAndReset( io.mrx_clk_pad_i.asClock, io.asyncReset ) {
macTileLinkRX.io.ShiftEndedSyncb := ShiftRegister( ShiftEndedSync, 2, false.B, true.B)
macTileLinkRX.io.RxAbortSyncb := ShiftRegister( RxAbortSync, 2, false.B, true.B )
macTileLinkRX.io.Busy_IRQ_syncb := ShiftRegister( Busy_IRQ_sync, 2, false.B, true.B )
macTileLinkRX.io.WriteRxDataToFifoSyncb := ShiftRegister( WriteRxDataToFifoSync, 2, false.B, true.B )
macTileLinkRX.io.SyncRxStartFrmSyncb := ShiftRegister( SyncRxStartFrmSync, 2, false.B, true.B )
macTileLinkRX.io.RxReady := ShiftRegister( wishbone.io.RxReady, 2, false.B, true.B )
}
macTileLinkRX.io.RxData := RxData
macTileLinkRX.io.RxAbort := RxAbort_latch_wire
macTileLinkRX.io.RxValid := RxValid
macTileLinkRX.io.RxStartFrm := RxStartFrm
macTileLinkRX.io.RxEndFrm := RxEndFrm
macTileLinkRX.io.RxLength := RxByteCnt
macTileLinkRX.io.LoadRxStatus := LoadRxStatus
macTileLinkRX.io.RxStatusIn := wishbone.io.RxStatusIn
} }

View File

@@ -38,8 +38,6 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val ShortFrame = Input(Bool()) // Frame shorter then the minimum size (r_MinFL) was received while small packets are enabled (r_RecSmall) val ShortFrame = Input(Bool()) // Frame shorter then the minimum size (r_MinFL) was received while small packets are enabled (r_RecSmall)
val DribbleNibble = Input(Bool()) // Extra nibble received val DribbleNibble = Input(Bool()) // Extra nibble received
val ReceivedPacketTooBig = Input(Bool()) // Received packet is bigger than r_MaxFL val ReceivedPacketTooBig = Input(Bool()) // Received packet is bigger than r_MaxFL
val RxLength = Input(UInt(16.W)) // Length of the incoming frame
val LoadRxStatus = Input(Bool()) // Rx status was loaded
val ReceivedPacketGood = Input(Bool()) // Received packet's length and CRC are good val ReceivedPacketGood = Input(Bool()) // Received packet's length and CRC are good
val AddressMiss = Input(Bool()) // When a packet is received AddressMiss status is written to the Rx BD val AddressMiss = Input(Bool()) // When a packet is received AddressMiss status is written to the Rx BD
val r_RxFlow = Input(Bool()) val r_RxFlow = Input(Bool())
@@ -62,11 +60,6 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
// Rx // Rx
val MRxClk = Input(Bool()) // Receive clock (from PHY) val MRxClk = Input(Bool()) // Receive clock (from PHY)
val RxData = Input(UInt(8.W)) // Received data byte (from PHY)
val RxValid = Input(Bool())
val RxStartFrm = Input(Bool())
val RxEndFrm = Input(Bool())
val RxAbort = Input(Bool()) // This signal is set when address doesn't match.
val RxStatusWriteLatched_sync2 = Output(Bool()) val RxStatusWriteLatched_sync2 = Output(Bool())
//Register //Register
@@ -98,6 +91,21 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val TxRetrySync = Input(Bool()) val TxRetrySync = Input(Bool())
val TxAbortSync = Input(Bool()) // Transmit packet abort val TxAbortSync = Input(Bool()) // Transmit packet abort
val TxDoneSync = Input(Bool()) // Transmission ended val TxDoneSync = Input(Bool()) // Transmission ended
val RxDataLatched2_rxclk = Input(UInt(32.W))
val WriteRxDataToFifoSync = Input(Bool())
val RxAbortSync = Input(Bool())
val LatchedRxLength_rxclk = Input(UInt(16.W))
val RxStatusInLatched_rxclk = Input(UInt(9.W))
val ShiftEndedSync = Input(Bool())
val SyncRxStartFrmSync = Input(Bool())
val Busy_IRQ_sync = Input(Bool())
val RxReady = Output(Bool())
val RxStatusIn = Output(UInt(9.W))
} }
@@ -148,7 +156,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val TxAbortPacket = RegInit(false.B) val TxAbortPacket = RegInit(false.B)
val TxAbortPacket_NotCleared = RegInit(false.B) val TxAbortPacket_NotCleared = RegInit(false.B)
val RxBDReady = RegInit(false.B) val RxBDReady = RegInit(false.B)
val RxReady = RegInit(false.B) val RxReady = RegInit(false.B); io.RxReady := RxReady
val TxBDReady = RegInit(false.B) val TxBDReady = RegInit(false.B)
val RxBDRead = RegInit(false.B) val RxBDRead = RegInit(false.B)
@@ -234,12 +242,9 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val RxPointerRead = RegInit(false.B) val RxPointerRead = RegInit(false.B)
// RX shift ending signals // RX shift ending signals
val ShiftEnded_rck_rxclk = Wire(Bool())
// val ShiftEndedSync1 = RegNext( ShiftEnded_rck_rxclk, false.B)
// val ShiftEndedSync2 = RegNext( ShiftEndedSync1, false.B)
val ShiftEndedSync3 = RegInit(false.B) val ShiftEndedSync3 = RegInit(false.B)
val ShiftEndedSync = ShiftRegisters( ShiftEnded_rck_rxclk, 2, false.B, true.B )
@@ -280,20 +285,18 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val RxAbortLatched_rxclk = Wire(Bool())
val RxAbortSync = ShiftRegisters( RxAbortLatched_rxclk, 4, false.B, true.B )
val WriteRxDataToFifo_rxclk = Wire(Bool()) val RxAbortPluse = io.RxAbortSync & RegNext(io.RxAbortSync, false.B)
val WriteRxDataToFifoSync = ShiftRegisters(WriteRxDataToFifo_rxclk, 3, false.B, true.B)
val LatchedRxStartFrm_rxclk = Wire(Bool())
val SyncRxStartFrmSync = ShiftRegisters(LatchedRxStartFrm_rxclk, 3, false.B, true.B)
val RxStatusWriteLatched = RegInit(false.B) val RxStatusWriteLatched = RegInit(false.B)
val RxStatusWriteLatched_syncb = ShiftRegister(io.RxStatusWriteLatched_sync2, 2, false.B, true.B) val RxStatusWriteLatched_syncb = ShiftRegister(io.RxStatusWriteLatched_sync2, 2, false.B, true.B)
io.RxStatusWriteLatched_sync2 := ShiftRegister(RxStatusWriteLatched, 2, false.B, true.B)
@@ -660,9 +663,9 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val TxStatusInLatched = Cat(io.TxUnderRun, io.RetryCntLatched, io.RetryLimit, io.LateCollLatched, io.DeferLatched, io.CarrierSenseLost) val TxStatusInLatched = Cat(io.TxUnderRun, io.RetryCntLatched, io.RetryLimit, io.LateCollLatched, io.DeferLatched, io.CarrierSenseLost)
val LatchedRxLength_rxclk = Wire(UInt(16.W))
val RxStatusInLatched_rxclk = Wire(UInt(9.W))
RxBDDataIn := Cat(LatchedRxLength_rxclk, 0.U(1.W), RxStatus, 0.U(4.W), RxStatusInLatched_rxclk) RxBDDataIn := Cat(io.LatchedRxLength_rxclk, 0.U(1.W), RxStatus, 0.U(4.W), io.RxStatusInLatched_rxclk)
TxBDDataIn := Cat(LatchedTxLength, 0.U(1.W), TxStatus, 0.U(2.W), TxStatusInLatched) TxBDDataIn := Cat(LatchedTxLength, 0.U(1.W), TxStatus, 0.U(2.W), TxStatusInLatched)
@@ -771,7 +774,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
ReadTxDataFromFifo_wb := io.ReadTxDataFromFifo_sync & ~RegNext(io.ReadTxDataFromFifo_sync, false.B) ReadTxDataFromFifo_wb := io.ReadTxDataFromFifo_sync & ~RegNext(io.ReadTxDataFromFifo_sync, false.B)
val StartRxBDRead = RxStatusWrite | (RxAbortSync(2) & ~RxAbortSync(3)) | (io.r_RxEn & ~r_RxEn_q) val StartRxBDRead = RxStatusWrite | RegNext(RxAbortPluse, false.B) | (io.r_RxEn & ~r_RxEn_q)
// Reading the Rx buffer descriptor // Reading the Rx buffer descriptor
when(StartRxBDRead & ~RxReady){ when(StartRxBDRead & ~RxReady){
@@ -800,7 +803,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
// RxReady generation // RxReady generation
when(ShiftEnded | RxAbortSync(1) & ~RxAbortSync(2) | ~io.r_RxEn & r_RxEn_q){ when(ShiftEnded | RxAbortPluse | ~io.r_RxEn & r_RxEn_q){
RxReady := false.B RxReady := false.B
} .elsewhen(stateNxt === StateRX & stateCur === StateRX & RxPointerRead){ } .elsewhen(stateNxt === StateRX & stateCur === StateRX & RxPointerRead){
RxReady := true.B RxReady := true.B
@@ -840,12 +843,12 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val WriteRxDataToFifo_wb = WriteRxDataToFifoSync(1) & ~WriteRxDataToFifoSync(2) val WriteRxDataToFifo_wb = io.WriteRxDataToFifoSync & ~RegNext(io.WriteRxDataToFifoSync, false.B)
val RxFifoReset = SyncRxStartFrmSync(1) & ~SyncRxStartFrmSync(2) val RxFifoReset = io.SyncRxStartFrmSync & ~RegNext(io.SyncRxStartFrmSync, false.B)
val rx_fifo = Module(new MacFifo(dw = 32, dp = 16)) val rx_fifo = Module(new MacFifo(dw = 32, dp = 16))
val RxDataLatched2_rxclk = Wire(UInt(32.W))
rx_fifo.io.data_in := RxDataLatched2_rxclk rx_fifo.io.data_in := io.RxDataLatched2_rxclk
rx_fifo.io.write := WriteRxDataToFifo_wb & ~RxBufferFull rx_fifo.io.write := WriteRxDataToFifo_wb & ~RxBufferFull
rx_fifo.io.read := MasterWbRX & io.tlMst.A.fire rx_fifo.io.read := MasterWbRX & io.tlMst.A.fire
rx_fifo.io.clear := RxFifoReset rx_fifo.io.clear := RxFifoReset
@@ -867,7 +870,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
when(ShiftEndedSync(0) & ~ShiftEndedSync(1)){ when( io.ShiftEndedSync & ~RegNext(io.ShiftEndedSync, false.B)){
ShiftEndedSync3 := true.B ShiftEndedSync3 := true.B
} .elsewhen(ShiftEnded){ } .elsewhen(ShiftEnded){
ShiftEndedSync3 := false.B ShiftEndedSync3 := false.B
@@ -884,7 +887,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
val RxStatusIn = Cat(io.ReceivedPauseFrm, io.AddressMiss, RxOverrun, io.InvalidSymbol, io.DribbleNibble, io.ReceivedPacketTooBig, io.ShortFrame, io.LatchedCrcError, io.RxLateCollision) io.RxStatusIn := Cat(io.ReceivedPauseFrm, io.AddressMiss, RxOverrun, io.InvalidSymbol, io.DribbleNibble, io.ReceivedPacketTooBig, io.ShortFrame, io.LatchedCrcError, io.RxLateCollision)
// Rx overrun // Rx overrun
@@ -901,7 +904,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
// ShortFrame (RxStatusInLatched[2]) can not set an error because short frames are aborted when signal r_RecSmall is set to 0 in MODER register. // ShortFrame (RxStatusInLatched[2]) can not set an error because short frames are aborted when signal r_RecSmall is set to 0 in MODER register.
// AddressMiss is identifying that a frame was received because of the promiscous mode and is not an error // AddressMiss is identifying that a frame was received because of the promiscous mode and is not an error
val RxError = (RxStatusInLatched_rxclk(6,3).orR) | (RxStatusInLatched_rxclk(1,0).orR) val RxError = (io.RxStatusInLatched_rxclk(6,3).orR) | (io.RxStatusInLatched_rxclk(1,0).orR)
// Latching and synchronizing RxStatusWrite signal. This signal is used for clearing the ReceivedPauseFrm signal // Latching and synchronizing RxStatusWrite signal. This signal is used for clearing the ReceivedPauseFrm signal
@@ -946,7 +949,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
io.Busy_IRQ := io.Busy_IRQ_sync & ~RegNext(io.Busy_IRQ_sync)
@@ -1119,50 +1122,43 @@ trait MacTileLinkTXClk{ this: MacTileLinkBase =>
trait MacTileLinkRXClk{ this: MacTileLinkBase => trait MacTileLinkRXClk{ this: MacTileLinkBase =>
val macTileLinkRX = withClockAndReset( io.MRxClk.asClock, io.asyncReset ) ( Module(new MacTileLinkRX) ) // val macTileLinkRX = withClockAndReset( io.MRxClk.asClock, io.asyncReset ) ( Module(new MacTileLinkRX) )
RxDataLatched2_rxclk := macTileLinkRX.io.RxDataLatched2 // RxDataLatched2_rxclk := macTileLinkRX.io.RxDataLatched2
WriteRxDataToFifo_rxclk := macTileLinkRX.io.WriteRxDataToFifo // WriteRxDataToFifo_rxclk := macTileLinkRX.io.WriteRxDataToFifo
RxAbortLatched_rxclk := macTileLinkRX.io.RxAbortLatched // RxAbortLatched_rxclk := macTileLinkRX.io.RxAbortLatched
LatchedRxLength_rxclk := macTileLinkRX.io.LatchedRxLength // LatchedRxLength_rxclk := macTileLinkRX.io.LatchedRxLength
RxStatusInLatched_rxclk := macTileLinkRX.io.RxStatusInLatched // RxStatusInLatched_rxclk := macTileLinkRX.io.RxStatusInLatched
ShiftEnded_rck_rxclk := macTileLinkRX.io.ShiftEnded_rck // ShiftEnded_rck_rxclk := macTileLinkRX.io.ShiftEnded_rck
LatchedRxStartFrm_rxclk := macTileLinkRX.io.LatchedRxStartFrm // LatchedRxStartFrm_rxclk := macTileLinkRX.io.LatchedRxStartFrm
// Busy Interrupt // // Busy Interrupt
val Busy_IRQ_sync = ShiftRegisters(macTileLinkRX.io.Busy_IRQ_rck, 3) // val Busy_IRQ_sync = ShiftRegisters(macTileLinkRX.io.Busy_IRQ_rck, 3)
io.Busy_IRQ := Busy_IRQ_sync(1) & ~Busy_IRQ_sync(2) // io.Busy_IRQ := Busy_IRQ_sync(1) & ~Busy_IRQ_sync(2)
withClockAndReset( io.MRxClk.asClock, io.asyncReset ) { // withClockAndReset( io.MRxClk.asClock, io.asyncReset ) {
macTileLinkRX.io.ShiftEndedSync := ShiftRegisters(ShiftEndedSync(1), 2, false.B, true.B) // macTileLinkRX.io.ShiftEndedSync := ShiftRegisters(ShiftEndedSync(1), 2, false.B, true.B)
macTileLinkRX.io.RxAbortSyncb := ShiftRegister( RxAbortSync(1), 2, false.B, true.B ) // macTileLinkRX.io.RxAbortSyncb := ShiftRegister( RxAbortSync(1), 2, false.B, true.B )
io.RxStatusWriteLatched_sync2 := ShiftRegister(RxStatusWriteLatched, 2, false.B, true.B) // io.RxStatusWriteLatched_sync2 := ShiftRegister(RxStatusWriteLatched, 2, false.B, true.B)
macTileLinkRX.io.Busy_IRQ_syncb := ShiftRegister( Busy_IRQ_sync(1), 2, false.B, true.B ) // macTileLinkRX.io.Busy_IRQ_syncb := ShiftRegister( Busy_IRQ_sync(1), 2, false.B, true.B )
macTileLinkRX.io.WriteRxDataToFifoSyncb := ShiftRegister( WriteRxDataToFifoSync(1), 2, false.B, true.B )
macTileLinkRX.io.SyncRxStartFrmSyncb := ShiftRegister( SyncRxStartFrmSync(1), 2, false.B, true.B )
macTileLinkRX.io.RxReady := ShiftRegister( RxReady, 2, false.B, true.B )
}
macTileLinkRX.io.RxData := io.RxData
macTileLinkRX.io.RxAbort := io.RxAbort
macTileLinkRX.io.RxValid := io.RxValid
macTileLinkRX.io.RxStartFrm := io.RxStartFrm
macTileLinkRX.io.RxEndFrm := io.RxEndFrm
macTileLinkRX.io.RxLength := io.RxLength
macTileLinkRX.io.LoadRxStatus := io.LoadRxStatus
macTileLinkRX.io.RxStatusIn := RxStatusIn
// macTileLinkRX.io.WriteRxDataToFifoSyncb := ShiftRegister( WriteRxDataToFifoSync(1), 2, false.B, true.B )
// macTileLinkRX.io.SyncRxStartFrmSyncb := ShiftRegister( SyncRxStartFrmSync(1), 2, false.B, true.B )
// macTileLinkRX.io.RxReady := ShiftRegister( RxReady, 2, false.B, true.B )
// }
// macTileLinkRX.io.RxData := io.RxData
// macTileLinkRX.io.RxAbort := io.RxAbort
// macTileLinkRX.io.RxValid := io.RxValid
// macTileLinkRX.io.RxStartFrm := io.RxStartFrm
// macTileLinkRX.io.RxEndFrm := io.RxEndFrm
// macTileLinkRX.io.RxLength := io.RxLength
// macTileLinkRX.io.LoadRxStatus := io.LoadRxStatus
// macTileLinkRX.io.RxStatusIn := RxStatusIn
} }
@@ -1460,7 +1456,7 @@ class MacTileLinkRXIO extends Bundle{
val RxLength = Input(UInt(16.W)) val RxLength = Input(UInt(16.W))
val LoadRxStatus = Input(Bool()) val LoadRxStatus = Input(Bool())
val RxStatusIn = Input(UInt(9.W)) val RxStatusIn = Input(UInt(9.W))
val ShiftEndedSync = Input(Vec(2,Bool()) ) val ShiftEndedSyncb = Input(Bool())
val RxAbortSyncb = Input(Bool()) val RxAbortSyncb = Input(Bool())
val WriteRxDataToFifoSyncb = Input(Bool()) val WriteRxDataToFifoSyncb = Input(Bool())
val SyncRxStartFrmSyncb = Input(Bool()) val SyncRxStartFrmSyncb = Input(Bool())
@@ -1580,7 +1576,7 @@ class MacTileLinkRX extends Module with RequireAsyncReset{
// Generation of the end-of-frame signal // Generation of the end-of-frame signal
when(~io.RxAbort & SetWriteRxDataToFifo & StartShiftWillEnd){ when(~io.RxAbort & SetWriteRxDataToFifo & StartShiftWillEnd){
ShiftEnded_rck := true.B ShiftEnded_rck := true.B
} .elsewhen(io.RxAbort | io.ShiftEndedSync(0) & io.ShiftEndedSync(1)){ } .elsewhen(io.RxAbort | io.ShiftEndedSyncb & RegNext(io.ShiftEndedSyncb, false.B) ){
ShiftEnded_rck := false.B ShiftEnded_rck := false.B
} }
@@ -1647,7 +1643,7 @@ class MacTileLinkRX extends Module with RequireAsyncReset{
// val RxStatusInLatched = RegEnable(RxStatusIn, 0.U(9.W), io.LoadRxStatus); RxStatusInLatched_rxclk := RxStatusInLatched // val RxStatusInLatched = RegEnable(RxStatusIn, 0.U(9.W), io.LoadRxStatus); RxStatusInLatched_rxclk := RxStatusInLatched
// val ShiftEnded_rck = RegInit(false.B); ShiftEnded_rck_txclk := ShiftEnded_rck // val ShiftEnded_rck = RegInit(false.B); ShiftEnded_rck_txclk := ShiftEnded_rck
// val ShiftEndedSync = ShiftRegisters(ShiftEndedSync2, 2, false.B, true.B) // val ShiftEndedSyncb = ShiftRegisters(ShiftEndedSync2, 2, false.B, true.B)
// val RxAbortSyncb = ShiftRegister( RxAbortSync(1), 2, false.B, true.B ) // val RxAbortSyncb = ShiftRegister( RxAbortSync(1), 2, false.B, true.B )
@@ -1729,7 +1725,7 @@ class MacTileLinkRX extends Module with RequireAsyncReset{
// // Generation of the end-of-frame signal // // Generation of the end-of-frame signal
// when(~io.RxAbort & SetWriteRxDataToFifo & StartShiftWillEnd){ // when(~io.RxAbort & SetWriteRxDataToFifo & StartShiftWillEnd){
// ShiftEnded_rck := true.B // ShiftEnded_rck := true.B
// } .elsewhen(io.RxAbort | ShiftEndedSync(0) & ShiftEndedSync(1)){ // } .elsewhen(io.RxAbort | ShiftEndedSyncb(0) & ShiftEndedSyncb(1)){
// ShiftEnded_rck := false.B // ShiftEnded_rck := false.B
// } // }