moveout tx
This commit is contained in:
@@ -723,18 +723,9 @@ val rxethmac = withClockAndReset(io.mrx_clk_pad_i.asClock, io.asyncReset)( Modul
|
|||||||
wishbone.io.RetryLimit := RetryLimit
|
wishbone.io.RetryLimit := RetryLimit
|
||||||
wishbone.io.LateCollLatched := LateCollLatched
|
wishbone.io.LateCollLatched := LateCollLatched
|
||||||
wishbone.io.DeferLatched := DeferLatched
|
wishbone.io.DeferLatched := DeferLatched
|
||||||
RstDeferLatched := wishbone.io.RstDeferLatched
|
|
||||||
wishbone.io.CarrierSenseLost := CarrierSenseLost
|
wishbone.io.CarrierSenseLost := CarrierSenseLost
|
||||||
|
|
||||||
wishbone.io.MTxClk := io.mtx_clk_pad_i
|
wishbone.io.MTxClk := io.mtx_clk_pad_i
|
||||||
wishbone.io.TxUsedData := TxUsedData
|
|
||||||
wishbone.io.TxRetry := TxRetry
|
|
||||||
wishbone.io.TxAbort := TxAbort
|
|
||||||
wishbone.io.TxDone := TxDone
|
|
||||||
TxStartFrm := wishbone.io.TxStartFrm
|
|
||||||
TxEndFrm := wishbone.io.TxEndFrm
|
|
||||||
TxData := wishbone.io.TxData
|
|
||||||
TxUnderRun := wishbone.io.TxUnderRun
|
|
||||||
PerPacketCrcEn := wishbone.io.PerPacketCrcEn
|
PerPacketCrcEn := wishbone.io.PerPacketCrcEn
|
||||||
PerPacketPad := wishbone.io.PerPacketPad
|
PerPacketPad := wishbone.io.PerPacketPad
|
||||||
|
|
||||||
@@ -815,6 +806,63 @@ val rxethmac = withClockAndReset(io.mrx_clk_pad_i.asClock, io.asyncReset)( Modul
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val macTileLinkTX = withClockAndReset( io.mtx_clk_pad_i.asClock, io.asyncReset ) (Module(new MacTileLinkTX))
|
||||||
|
|
||||||
|
// Start: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
|
||||||
|
val ReadTxDataFromFifo_sync = ShiftRegister( macTileLinkTX.io.ReadTxDataFromFifo_tck, 2, false.B, true.B)
|
||||||
|
wishbone.io.ReadTxDataFromFifo_sync := ReadTxDataFromFifo_sync
|
||||||
|
|
||||||
|
withClockAndReset( io.mtx_clk_pad_i.asClock, io.asyncReset ){
|
||||||
|
macTileLinkTX.io.BlockingTxStatusWrite_sync := ShiftRegister( wishbone.io.BlockingTxStatusWrite, 2, false.B, true.B)
|
||||||
|
macTileLinkTX.io.TxStartFrm_sync := ShiftRegister( wishbone.io.TxStartFrm_wb, 2, false.B, true.B ) // Synchronizing TxStartFrm_wb to MTxClk
|
||||||
|
macTileLinkTX.io.ReadTxDataFromFifo_syncb := ShiftRegister( ReadTxDataFromFifo_sync, 2, false.B, true.B)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wishbone.io.TxStartFrm_syncb := ShiftRegister( macTileLinkTX.io.TxStartFrm_sync, 2, false.B, true.B )
|
||||||
|
|
||||||
|
RstDeferLatched := macTileLinkTX.io.RstDeferLatched
|
||||||
|
TxStartFrm := macTileLinkTX.io.TxStartFrm
|
||||||
|
TxEndFrm := macTileLinkTX.io.TxEndFrm
|
||||||
|
TxData := macTileLinkTX.io.TxData
|
||||||
|
|
||||||
|
wishbone.io.TxUnderRun := TxUnderRun
|
||||||
|
TxUnderRun := macTileLinkTX.io.TxUnderRun
|
||||||
|
macTileLinkTX.io.TxUnderRun_wb := wishbone.io.TxUnderRun_wb
|
||||||
|
|
||||||
|
macTileLinkTX.io.TxData_wb := wishbone.io.TxData_wb
|
||||||
|
macTileLinkTX.io.TxValidBytesLatched := wishbone.io.TxValidBytesLatched
|
||||||
|
macTileLinkTX.io.TxEndFrm_wb := wishbone.io.TxEndFrm_wb
|
||||||
|
|
||||||
|
wishbone.io.TxUsedData := TxUsedData
|
||||||
|
macTileLinkTX.io.TxUsedData := TxUsedData
|
||||||
|
|
||||||
|
macTileLinkTX.io.TxRetry := TxRetry
|
||||||
|
macTileLinkTX.io.TxAbort := TxAbort
|
||||||
|
macTileLinkTX.io.TxDone := TxDone
|
||||||
|
|
||||||
|
wishbone.io.TxRetrySync := ShiftRegister( TxRetry, 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 )
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -51,19 +51,12 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
val RetryLimit = Input(Bool()) // Retry limit reached (Retry Max value +1 attempts were made)
|
val RetryLimit = Input(Bool()) // Retry limit reached (Retry Max value +1 attempts were made)
|
||||||
val LateCollLatched = Input(Bool()) // Late collision occured
|
val LateCollLatched = Input(Bool()) // Late collision occured
|
||||||
val DeferLatched = Input(Bool()) // Defer indication (Frame was defered before sucessfully sent)
|
val DeferLatched = Input(Bool()) // Defer indication (Frame was defered before sucessfully sent)
|
||||||
val RstDeferLatched = Output(Bool())
|
|
||||||
val CarrierSenseLost = Input(Bool()) // Carrier Sense was lost during the frame transmission
|
val CarrierSenseLost = Input(Bool()) // Carrier Sense was lost during the frame transmission
|
||||||
|
|
||||||
// Tx
|
// Tx
|
||||||
val MTxClk = Input(Bool()) // Transmit clock (from PHY)
|
val MTxClk = Input(Bool()) // Transmit clock (from PHY)
|
||||||
val TxUsedData = Input(Bool()) // Transmit packet used data
|
val TxUsedData = Input(Bool()) // Transmit packet used data
|
||||||
val TxRetry = Input(Bool()) // Transmit packet retry
|
val TxUnderRun = Input(Bool()) // Transmit packet under-run
|
||||||
val TxAbort = Input(Bool()) // Transmit packet abort
|
|
||||||
val TxDone = Input(Bool()) // Transmission ended
|
|
||||||
val TxStartFrm = Output(Bool()) // Transmit packet start frame
|
|
||||||
val TxEndFrm = Output(Bool()) // Transmit packet end frame
|
|
||||||
val TxData = Output(UInt(8.W)) // Transmit packet data byte
|
|
||||||
val TxUnderRun = Output(Bool()) // Transmit packet under-run
|
|
||||||
val PerPacketCrcEn = Output(Bool()) // Per packet crc enable
|
val PerPacketCrcEn = Output(Bool()) // Per packet crc enable
|
||||||
val PerPacketPad = Output(Bool()) // Per packet pading
|
val PerPacketPad = Output(Bool()) // Per packet pading
|
||||||
|
|
||||||
@@ -89,6 +82,22 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
val Busy_IRQ = Output(Bool())
|
val Busy_IRQ = Output(Bool())
|
||||||
|
|
||||||
val asyncReset = Input(AsyncReset())
|
val asyncReset = Input(AsyncReset())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val BlockingTxStatusWrite = Output(Bool())
|
||||||
|
val TxStartFrm_wb = Output(Bool())
|
||||||
|
val ReadTxDataFromFifo_sync = Input(Bool())
|
||||||
|
|
||||||
|
val TxStartFrm_syncb = Input(Bool())
|
||||||
|
val TxUnderRun_wb = Output(Bool())
|
||||||
|
val TxData_wb = Output(UInt(32.W))
|
||||||
|
val TxValidBytesLatched = Output(UInt(2.W))
|
||||||
|
val TxEndFrm_wb = Output(Bool())
|
||||||
|
|
||||||
|
val TxRetrySync = Input(Bool())
|
||||||
|
val TxAbortSync = Input(Bool()) // Transmit packet abort
|
||||||
|
val TxDoneSync = Input(Bool()) // Transmission ended
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -109,7 +118,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
val TxUnderRun_wb = RegInit(false.B)
|
val TxUnderRun_wb = RegInit(false.B); io.TxUnderRun_wb := TxUnderRun_wb
|
||||||
|
|
||||||
val TxBDRead = RegInit(true.B)
|
val TxBDRead = RegInit(true.B)
|
||||||
val TxStatusWrite = Wire(Bool())
|
val TxStatusWrite = Wire(Bool())
|
||||||
@@ -124,17 +133,13 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
val TxStartFrm_wb = RegInit(false.B)
|
val TxStartFrm_wb = RegInit(false.B); io.TxStartFrm_wb := TxStartFrm_wb
|
||||||
|
|
||||||
// Synchronizing TxRetry TxDone_wb TxAbort signal (synchronized to WISHBONE clock)
|
|
||||||
val TxRetry_wb = ShiftRegisters( io.TxRetry, 3, false.B, true.B )
|
|
||||||
val TxAbort_wb = ShiftRegisters( io.TxAbort, 3, false.B, true.B )
|
|
||||||
val TxDone_wb = ShiftRegisters( io.TxDone, 3, false.B, true.B )
|
|
||||||
|
|
||||||
// Signals used for various purposes
|
// Signals used for various purposes
|
||||||
val TxRetryPulse = TxRetry_wb(1) & ~TxRetry_wb(2)
|
val TxRetryPulse = io.TxRetrySync & ~RegNext(io.TxRetrySync, false.B)
|
||||||
val TxDonePulse = TxDone_wb(1) & ~TxDone_wb(2)
|
val TxDonePulse = io.TxDoneSync & ~RegNext(io.TxDoneSync, false.B)
|
||||||
val TxAbortPulse = TxAbort_wb(1) & ~TxAbort_wb(2)
|
val TxAbortPulse = io.TxAbortSync & ~RegNext(io.TxAbortSync, false.B)
|
||||||
|
|
||||||
val TxRetryPacket = RegInit(false.B)
|
val TxRetryPacket = RegInit(false.B)
|
||||||
val TxRetryPacket_NotCleared = RegInit(false.B)
|
val TxRetryPacket_NotCleared = RegInit(false.B)
|
||||||
@@ -150,7 +155,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
val BlockingTxStatusWrite = RegInit(false.B)
|
val BlockingTxStatusWrite = RegInit(false.B); io.BlockingTxStatusWrite := BlockingTxStatusWrite
|
||||||
val BlockingTxBDRead = RegInit(false.B)
|
val BlockingTxBDRead = RegInit(false.B)
|
||||||
|
|
||||||
|
|
||||||
@@ -170,7 +175,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
val RxBDDataIn = Wire(UInt(32.W)) // Rx BD data in
|
val RxBDDataIn = Wire(UInt(32.W)) // Rx BD data in
|
||||||
val TxBDDataIn = Wire(UInt(32.W)) // Tx BD data in
|
val TxBDDataIn = Wire(UInt(32.W)) // Tx BD data in
|
||||||
|
|
||||||
val TxEndFrm_wb = RegInit(false.B)
|
val TxEndFrm_wb = RegInit(false.B); io.TxEndFrm_wb := TxEndFrm_wb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -240,8 +245,6 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
val StartOccured = RegInit(false.B)
|
val StartOccured = RegInit(false.B)
|
||||||
|
|
||||||
val TxStartFrm_syncb2 = Wire(Bool())
|
|
||||||
|
|
||||||
val TxFifoClear = Wire(Bool())
|
val TxFifoClear = Wire(Bool())
|
||||||
val TxBufferAlmostFull = Wire(Bool())
|
val TxBufferAlmostFull = Wire(Bool())
|
||||||
val TxBufferFull = Wire(Bool())
|
val TxBufferFull = Wire(Bool())
|
||||||
@@ -250,7 +253,6 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
val BlockReadTxDataFromMemory = RegInit(false.B)
|
val BlockReadTxDataFromMemory = RegInit(false.B)
|
||||||
|
|
||||||
|
|
||||||
val TxData_wb = Wire(UInt(32.W))
|
|
||||||
val ReadTxDataFromFifo_wb = Wire(Bool())
|
val ReadTxDataFromFifo_wb = Wire(Bool())
|
||||||
|
|
||||||
val txfifo_cnt = Wire(UInt(5.W))
|
val txfifo_cnt = Wire(UInt(5.W))
|
||||||
@@ -277,9 +279,6 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Start: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
|
|
||||||
val ReadTxDataFromFifo_tck_txclk = Wire(Bool())
|
|
||||||
val ReadTxDataFromFifo_sync = ShiftRegisters( ReadTxDataFromFifo_tck_txclk, 3, false.B, true.B)
|
|
||||||
|
|
||||||
val RxAbortLatched_rxclk = Wire(Bool())
|
val RxAbortLatched_rxclk = Wire(Bool())
|
||||||
val RxAbortSync = ShiftRegisters( RxAbortLatched_rxclk, 4, false.B, true.B )
|
val RxAbortSync = ShiftRegisters( RxAbortLatched_rxclk, 4, false.B, true.B )
|
||||||
@@ -431,7 +430,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
|
|
||||||
// Status writing must occur only once. Meanwhile it is blocked.
|
// Status writing must occur only once. Meanwhile it is blocked.
|
||||||
when(~TxDone_wb(1) & ~TxAbort_wb(1)){
|
when(~io.TxDoneSync & ~io.TxAbortSync){
|
||||||
BlockingTxStatusWrite := false.B
|
BlockingTxStatusWrite := false.B
|
||||||
} .elsewhen(TxStatusWrite){
|
} .elsewhen(TxStatusWrite){
|
||||||
BlockingTxStatusWrite := true.B
|
BlockingTxStatusWrite := true.B
|
||||||
@@ -582,7 +581,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
tx_fifo.io.read := ReadTxDataFromFifo_wb & ~TxBufferEmpty
|
tx_fifo.io.read := ReadTxDataFromFifo_wb & ~TxBufferEmpty
|
||||||
tx_fifo.io.clear := TxFifoClear
|
tx_fifo.io.clear := TxFifoClear
|
||||||
TxData_wb := tx_fifo.io.data_out
|
io.TxData_wb := tx_fifo.io.data_out
|
||||||
TxBufferFull := tx_fifo.io.full
|
TxBufferFull := tx_fifo.io.full
|
||||||
TxBufferAlmostFull := tx_fifo.io.almost_full
|
TxBufferAlmostFull := tx_fifo.io.almost_full
|
||||||
TxBufferAlmostEmpty := tx_fifo.io.almost_empty
|
TxBufferAlmostEmpty := tx_fifo.io.almost_empty
|
||||||
@@ -594,7 +593,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
// Start: Generation of the TxStartFrm_wb which is then synchronized to the MTxClk
|
// Start: Generation of the TxStartFrm_wb which is then synchronized to the MTxClk
|
||||||
when(TxBDReady & ~StartOccured & (TxBufferFull | TxLength === 0.U)){
|
when(TxBDReady & ~StartOccured & (TxBufferFull | TxLength === 0.U)){
|
||||||
TxStartFrm_wb := true.B
|
TxStartFrm_wb := true.B
|
||||||
} .elsewhen(TxStartFrm_syncb2){
|
} .elsewhen(io.TxStartFrm_syncb){
|
||||||
TxStartFrm_wb := false.B
|
TxStartFrm_wb := false.B
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,7 +616,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
// Marks which bytes are valid within the word.
|
// Marks which bytes are valid within the word.
|
||||||
val TxValidBytes = Mux(TxLength < 4.U, TxLength(1,0), 0.U)
|
val TxValidBytes = Mux(TxLength < 4.U, TxLength(1,0), 0.U)
|
||||||
val TxValidBytesLatched = RegInit(0.U(2.W))
|
val TxValidBytesLatched = RegInit(0.U(2.W)); io.TxValidBytesLatched := TxValidBytesLatched
|
||||||
|
|
||||||
|
|
||||||
val LatchValidBytes = ShiftRegisters((TxLength < 4.U) & TxBDReady, 2, false.B, true.B)
|
val LatchValidBytes = ShiftRegisters((TxLength < 4.U) & TxBDReady, 2, false.B, true.B)
|
||||||
@@ -680,8 +679,8 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
val TxAbortPacketBlocked = RegInit(false.B)
|
val TxAbortPacketBlocked = RegInit(false.B)
|
||||||
|
|
||||||
when(
|
when(
|
||||||
TxAbort_wb(1) & (~TxAbortPacketBlocked) & MasterWbTX & io.tlMst.D.fire & isLastD |
|
io.TxAbortSync & (~TxAbortPacketBlocked) & MasterWbTX & io.tlMst.D.fire & isLastD |
|
||||||
TxAbort_wb(1) & (~TxAbortPacketBlocked) & (~MasterWbTX) ){
|
io.TxAbortSync & (~TxAbortPacketBlocked) & (~MasterWbTX) ){
|
||||||
TxAbortPacket := true.B
|
TxAbortPacket := true.B
|
||||||
} .otherwise{
|
} .otherwise{
|
||||||
TxAbortPacket := false.B
|
TxAbortPacket := false.B
|
||||||
@@ -691,12 +690,12 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
when(stateNxt === StateTX & stateCur === StateTX & TxAbortPacket_NotCleared){
|
when(stateNxt === StateTX & stateCur === StateTX & TxAbortPacket_NotCleared){
|
||||||
TxAbortPacket_NotCleared := false.B
|
TxAbortPacket_NotCleared := false.B
|
||||||
} .elsewhen(
|
} .elsewhen(
|
||||||
TxAbort_wb(1) & (~TxAbortPacketBlocked) & MasterWbTX & io.tlMst.D.fire & isLastD |
|
io.TxAbortSync & (~TxAbortPacketBlocked) & MasterWbTX & io.tlMst.D.fire & isLastD |
|
||||||
TxAbort_wb(1) & (~TxAbortPacketBlocked) & (~MasterWbTX) ){
|
io.TxAbortSync & (~TxAbortPacketBlocked) & (~MasterWbTX) ){
|
||||||
TxAbortPacket_NotCleared := true.B
|
TxAbortPacket_NotCleared := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
when(~TxAbort_wb(1) & TxAbort_wb(2)){
|
when(~io.TxAbortSync & RegNext(io.TxAbortSync, false.B)){
|
||||||
TxAbortPacketBlocked := false.B
|
TxAbortPacketBlocked := false.B
|
||||||
} .elsewhen(TxAbortPacket){
|
} .elsewhen(TxAbortPacket){
|
||||||
TxAbortPacketBlocked := true.B
|
TxAbortPacketBlocked := true.B
|
||||||
@@ -707,8 +706,8 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
val TxRetryPacketBlocked = RegInit(false.B)
|
val TxRetryPacketBlocked = RegInit(false.B)
|
||||||
|
|
||||||
when(
|
when(
|
||||||
TxRetry_wb(1) & ~TxRetryPacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
io.TxRetrySync & ~TxRetryPacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
||||||
TxRetry_wb(1) & ~TxRetryPacketBlocked & ~MasterWbTX ){
|
io.TxRetrySync & ~TxRetryPacketBlocked & ~MasterWbTX ){
|
||||||
TxRetryPacket := true.B
|
TxRetryPacket := true.B
|
||||||
} .otherwise{
|
} .otherwise{
|
||||||
TxRetryPacket := false.B
|
TxRetryPacket := false.B
|
||||||
@@ -721,13 +720,13 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
when(StartTxBDRead){
|
when(StartTxBDRead){
|
||||||
TxRetryPacket_NotCleared := false.B
|
TxRetryPacket_NotCleared := false.B
|
||||||
} .elsewhen(
|
} .elsewhen(
|
||||||
TxRetry_wb(1) & ~TxRetryPacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
io.TxRetrySync & ~TxRetryPacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
||||||
TxRetry_wb(1) & ~TxRetryPacketBlocked & ~MasterWbTX ){
|
io.TxRetrySync & ~TxRetryPacketBlocked & ~MasterWbTX ){
|
||||||
TxRetryPacket_NotCleared := true.B
|
TxRetryPacket_NotCleared := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
when(~TxRetry_wb(1) & TxRetry_wb(2)){
|
when( ~io.TxRetrySync & RegNext(io.TxRetrySync, false.B) ){
|
||||||
TxRetryPacketBlocked := false.B
|
TxRetryPacketBlocked := false.B
|
||||||
} .elsewhen(TxRetryPacket){
|
} .elsewhen(TxRetryPacket){
|
||||||
TxRetryPacketBlocked := true.B
|
TxRetryPacketBlocked := true.B
|
||||||
@@ -738,8 +737,8 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
val TxDonePacketBlocked = RegInit(false.B)
|
val TxDonePacketBlocked = RegInit(false.B)
|
||||||
|
|
||||||
when(
|
when(
|
||||||
TxDone_wb(1) & ~TxDonePacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
io.TxDoneSync & ~TxDonePacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
||||||
TxDone_wb(1) & ~TxDonePacketBlocked & ~MasterWbTX ){
|
io.TxDoneSync & ~TxDonePacketBlocked & ~MasterWbTX ){
|
||||||
TxDonePacket := true.B
|
TxDonePacket := true.B
|
||||||
}.otherwise{
|
}.otherwise{
|
||||||
TxDonePacket := false.B
|
TxDonePacket := false.B
|
||||||
@@ -748,13 +747,13 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
when(stateNxt === StateTX & stateCur === StateTX & TxDonePacket_NotCleared){
|
when(stateNxt === StateTX & stateCur === StateTX & TxDonePacket_NotCleared){
|
||||||
TxDonePacket_NotCleared := false.B
|
TxDonePacket_NotCleared := false.B
|
||||||
} .elsewhen(
|
} .elsewhen(
|
||||||
TxDone_wb(1) & ~TxDonePacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
io.TxDoneSync & ~TxDonePacketBlocked & MasterWbTX & io.tlMst.D.fire & isLastD |
|
||||||
TxDone_wb(1) & ~TxDonePacketBlocked & ~MasterWbTX ){
|
io.TxDoneSync & ~TxDonePacketBlocked & ~MasterWbTX ){
|
||||||
TxDonePacket_NotCleared := true.B
|
TxDonePacket_NotCleared := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
when(~TxDone_wb(1) & TxDone_wb(2)){
|
when(~io.TxDoneSync & RegNext(io.TxDoneSync, false.B)){
|
||||||
TxDonePacketBlocked := false.B
|
TxDonePacketBlocked := false.B
|
||||||
} .elsewhen(TxDonePacket){
|
} .elsewhen(TxDonePacket){
|
||||||
TxDonePacketBlocked := true.B
|
TxDonePacketBlocked := true.B
|
||||||
@@ -770,7 +769,7 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ReadTxDataFromFifo_wb := ReadTxDataFromFifo_sync(1) & ~ReadTxDataFromFifo_sync(2)
|
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 | (RxAbortSync(2) & ~RxAbortSync(3)) | (io.r_RxEn & ~r_RxEn_q)
|
||||||
|
|
||||||
@@ -1086,34 +1085,34 @@ abstract class MacTileLinkBase(edgeIn: TLEdgeIn, edgeOut: TLEdgeOut) extends Mod
|
|||||||
|
|
||||||
trait MacTileLinkTXClk{ this: MacTileLinkBase =>
|
trait MacTileLinkTXClk{ this: MacTileLinkBase =>
|
||||||
|
|
||||||
val macTileLinkTX = withClockAndReset( io.MTxClk.asClock, io.asyncReset ) (Module(new MacTileLinkTX))
|
// val macTileLinkTX = withClockAndReset( io.MTxClk.asClock, io.asyncReset ) (Module(new MacTileLinkTX))
|
||||||
|
|
||||||
withClockAndReset( io.MTxClk.asClock, io.asyncReset ){
|
// withClockAndReset( io.MTxClk.asClock, io.asyncReset ){
|
||||||
macTileLinkTX.io.BlockingTxStatusWrite_sync := ShiftRegister(BlockingTxStatusWrite, 2, false.B, true.B)
|
// macTileLinkTX.io.BlockingTxStatusWrite_sync := ShiftRegister(BlockingTxStatusWrite, 2, false.B, true.B)
|
||||||
macTileLinkTX.io.TxStartFrm_sync := ShiftRegister( TxStartFrm_wb, 2, false.B, true.B ) // Synchronizing TxStartFrm_wb to MTxClk
|
// macTileLinkTX.io.TxStartFrm_sync := ShiftRegister( TxStartFrm_wb, 2, false.B, true.B ) // Synchronizing TxStartFrm_wb to MTxClk
|
||||||
macTileLinkTX.io.ReadTxDataFromFifo_syncb := ShiftRegister(ReadTxDataFromFifo_sync(1), 2, false.B, true.B)
|
// macTileLinkTX.io.ReadTxDataFromFifo_syncb := ShiftRegister(ReadTxDataFromFifo_sync(1), 2, false.B, true.B)
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
TxStartFrm_syncb2 := ShiftRegister( macTileLinkTX.io.TxStartFrm_sync, 2, false.B, true.B )
|
// TxStartFrm_syncb := ShiftRegister( macTileLinkTX.io.TxStartFrm_sync, 2, false.B, true.B )
|
||||||
|
|
||||||
io.RstDeferLatched := macTileLinkTX.io.RstDeferLatched
|
// io.RstDeferLatched := macTileLinkTX.io.RstDeferLatched
|
||||||
io.TxStartFrm := macTileLinkTX.io.TxStartFrm
|
// io.TxStartFrm := macTileLinkTX.io.TxStartFrm
|
||||||
io.TxEndFrm := macTileLinkTX.io.TxEndFrm
|
// io.TxEndFrm := macTileLinkTX.io.TxEndFrm
|
||||||
io.TxData := macTileLinkTX.io.TxData
|
// io.TxData := macTileLinkTX.io.TxData
|
||||||
io.TxUnderRun := macTileLinkTX.io.TxUnderRun
|
// io.TxUnderRun := macTileLinkTX.io.TxUnderRun
|
||||||
|
|
||||||
macTileLinkTX.io.TxUnderRun_wb := TxUnderRun_wb
|
// macTileLinkTX.io.TxUnderRun_wb := TxUnderRun_wb
|
||||||
macTileLinkTX.io.TxData_wb := TxData_wb
|
// macTileLinkTX.io.TxData_wb := TxData_wb
|
||||||
macTileLinkTX.io.TxValidBytesLatched := TxValidBytesLatched
|
// macTileLinkTX.io.TxValidBytesLatched := TxValidBytesLatched
|
||||||
macTileLinkTX.io.TxEndFrm_wb := TxEndFrm_wb
|
// macTileLinkTX.io.TxEndFrm_wb := TxEndFrm_wb
|
||||||
|
|
||||||
ReadTxDataFromFifo_tck_txclk := macTileLinkTX.io.ReadTxDataFromFifo_tck
|
// ReadTxDataFromFifo_tck_txclk := macTileLinkTX.io.ReadTxDataFromFifo_tck
|
||||||
|
|
||||||
macTileLinkTX.io.TxUsedData := io.TxUsedData
|
// macTileLinkTX.io.TxUsedData := io.TxUsedData
|
||||||
macTileLinkTX.io.TxRetry := io.TxRetry
|
// macTileLinkTX.io.TxRetry := io.TxRetry
|
||||||
macTileLinkTX.io.TxAbort := io.TxAbort
|
// macTileLinkTX.io.TxAbort := io.TxAbort
|
||||||
macTileLinkTX.io.TxDone := io.TxDone
|
// macTileLinkTX.io.TxDone := io.TxDone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user