增加CDR的约束定时器

This commit is contained in:
Ruige Lee
2025-01-27 22:26:26 +08:00
parent 28e1f20abb
commit 313b7cc11b
2 changed files with 38 additions and 3 deletions

View File

@@ -76,7 +76,7 @@ abstract class TL2CDRBase(val edge: TLEdgeIn)(implicit p: Parameters) extends Ba
trait TL2CDRTx{ this: TL2CDRBase =>
val isTxFifoRelease = Wire(Bool())
// val isTLReadStatus = io.mem.fire & io.mem.addr(5,0) === "h0".U & ( io.mem.wstrb === 0.U )
// val isTLWriteTxLen = io.mem.fire & io.mem.addr(5,0) === "h4".U & ( io.mem.wstrb =/= 0.U )
// val isTLWriteTxFifo = io.mem.fire & io.mem.addr(5,0) === "h8".U & ( io.mem.wstrb =/= 0.U )
@@ -110,7 +110,7 @@ trait TL2CDRTx{ this: TL2CDRBase =>
}
txFifo.io.deq.ready :=
Mux( isTxBusy, CDROut.io.axis.fire & txCnt === 3.U, true.B )
isTxFifoRelease & Mux( isTxBusy, CDROut.io.axis.fire & txCnt === 3.U, true.B )
txFifo.reset := reset.asBool | isTLWriteTxLen | isTLWriteSoftReset
CDROut.reset := reset.asBool | isTLWriteTxLen | isTLWriteSoftReset
@@ -259,8 +259,41 @@ trait TL2CDRUserCRC{ this: TL2CDRBase =>
}
trait TL2CDRLimitTimmer{ this: TL2CDRBase =>
val intRxStart: Bool
val isTLWriteSoftReset: Bool
val isTLWriteLimitTimerAim = io.tla.fire & io.tla.bits.address(5,0) === "h2c".U & ( (io.tla.bits.opcode === 0.U) || (io.tla.bits.opcode === 1.U) )
val limitTimerCnt = RegInit(0.U(16.W))
val limitTimerAim = RegInit(0.U(16.W))
val isLimitTimerTrigger = RegInit(false.B)
when( isTLWriteSoftReset ){
limitTimerCnt := 0.U
} .elsewhen( limitTimerCnt =/= limitTimerAim ){
when( isLimitTimerTrigger ){
limitTimerCnt := limitTimerCnt + 1.U
}
}
when( isTLWriteLimitTimerAim ){
limitTimerAim := io.tla.bits.data
}
when( isTLWriteSoftReset ){
isLimitTimerTrigger := false.B
} .elsewhen( intRxStart ){
isLimitTimerTrigger := true.B
}
val isTxFifoRelease: Bool
isTxFifoRelease := limitTimerCnt === limitTimerAim
}
@@ -272,6 +305,7 @@ class TL2CDR(edge: TLEdgeIn)(implicit p: Parameters) extends TL2CDRBase(edge)
with TL2CDRTx with TL2CDRRx
with TL2CDRIsLast
with TL2CDRUserCRC
with TL2CDRLimitTimmer
{
// val isWriteTransDir = io.mem.fire & io.mem.addr(5,0) === "hc".U & io.mem.wstrb =/= 0.U
@@ -340,7 +374,7 @@ with TL2CDRUserCRC
} .elsewhen(isTLReadRxCrc){
rdata := rxCrc.io.crc
}
}

View File

@@ -25,6 +25,7 @@
#define CDR_ReadIsLast 0x20
#define CDR_ReadTxCrc 0x24
#define CDR_ReadRxCrc 0x28
#define CDR_WriteLimitTimer 0x2c
#define CDR_INT_TXEND 14
#define CDR_INT_RXERROR 15