转发延迟缩减至126个cycle

This commit is contained in:
Ruige Lee
2025-05-20 11:35:11 +08:00
parent cb30c29e07
commit 4b2a52fa9b
3 changed files with 45 additions and 48 deletions

View File

@@ -115,47 +115,36 @@ abstract class SlaveParserBase extends Module{
// val downSinkSel = Reg(Bool())
// val upSinkSel = Reg(Bool())
val downFrameInfo = Reg(new FrameHeader) //下行大包头
val upFrameInfo = Reg(new FrameHeader) //上行大包头
// val downFrameInfo = Reg(new FrameHeader) //下行大包头
// val upFrameInfo = Reg(new FrameHeader) //上行大包头
// val isDownSendBusy = downSendGen.io.frameReq.ready
// val isUpSendBusy = upSendGen.io.frameReq.ready
val isDownSendPend = RegInit(false.B)
val isUpSendPend = RegInit(false.B)
// val isUpProbePending
//处理主报文
when( downSendGen.io.frameReq.fire ){
isDownSendPend := false.B
} .elsewhen( downRecParser.io.frameReq.fire & downRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_COMMON ){//下行来了一个普通包
isDownSendPend := true.B
downFrameInfo := downRecParser.io.frameReq.bits
} .elsewhen( downRecParser.io.frameReq.fire & downRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){//下行来了一个嗅探包
isDownSendPend := true.B
downFrameInfo := downRecParser.io.frameReq.bits
}
// when( downSendGen.io.frameReq.fire ){
// } .elsewhen( downRecParser.io.frameReq.fire & downRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_COMMON ){//下行来了一个普通包
// downFrameInfo := downRecParser.io.frameReq.bits
// } .elsewhen( downRecParser.io.frameReq.fire & downRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){//下行来了一个嗅探包
// downFrameInfo := downRecParser.io.frameReq.bits
// }
when( upSendGen.io.frameReq.fire ){
isUpSendPend := false.B
} .elsewhen( upRecParser.io.frameReq.fire & upRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_COMMON ){ //上行来了一个普通包
isUpSendPend := true.B
upFrameInfo := upRecParser.io.frameReq.bits
// upFrameInfo := upRecParser.io.frameReq.bits
}
downSendGen.io.frameReq.valid :=
isDownSendPend & downFrameInfo.frameStyle === FRAME_STYLE_COMMON & downRecParser.io.subMsgReq.fire | //下行转发
isDownSendPend & downFrameInfo.frameStyle === FRAME_STYLE_PROBE //下行探针
downSendGen.io.frameReq.valid := downRecParser.io.frameReq.fire
assert( ~(downSendGen.io.frameReq.valid & ~downSendGen.io.frameReq.ready) )
// assert( OneHot(isDownSendPend, isDownSendProbe) )
downSendGen.io.frameReq.bits := Mux1H(Seq(
isDownSendPend -> downFrameInfo, //下行转发
//isDownSendProbe -> probeFrame, //下行探针
))
downSendGen.io.frameReq.bits := downRecParser.io.frameReq.bits
val upFrameProbeInfo: FrameHeader = Wire(new FrameHeader)
@@ -164,14 +153,17 @@ abstract class SlaveParserBase extends Module{
upFrameProbeInfo.frameInfo := localDevIndex //其它信息如probe
upSendGen.io.frameReq.valid :=
isUpSendPend & upRecParser.io.subMsgReq.fire | //上行转发
isAckProbe // 上行探针
(upRecParser.io.frameReq.fire & upRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_COMMON) |
isAckProbe
assert( ~(isUpSendPend & isAckProbe), "Assert Failed, Check Softwave, Probe is Sent while transfering!\n" )
assert( ~(upSendGen.io.frameReq.valid & ~upSendGen.io.frameReq.ready) )
assert( ~(upRecParser.io.frameReq.fire & isAckProbe), "Assert Failed, Check Softwave, Probe is Sent while transfering!\n" )
upSendGen.io.frameReq.bits := Mux1H(Seq(
isUpSendPend -> upFrameInfo, //上行转发
isAckProbe -> upFrameProbeInfo, //上行探针
upRecParser.io.frameReq.fire -> upRecParser.io.frameReq.bits, //上行转发
isAckProbe -> upFrameProbeInfo, //上行探针
))
@@ -678,14 +670,15 @@ trait SlaveParserProbe{ this: SlaveParserBase =>
val isReadyToProbe_Pending = RegInit(false.B)
// val isReadyToProbe_Pending = RegInit(false.B)
when( downRecParser.io.frameReq.fire & downRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){ //下行来了一个嗅探包
isReadyToProbe_Pending := true.B
isReadyToProbe := true.B
assert( downSendGen.io.stateCurr === STATE_IDLE )
} .elsewhen( upRecParser.io.frameReq.fire & upRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){ //上行来了一个嗅探包
isReadyToProbe_Pending := false.B
isReadyToProbe := false.B
} .elsewhen( isWatchDogOverflow ){
isReadyToProbe_Pending := false.B
isReadyToProbe := false.B
}
when( downRecParser.io.frameReq.fire & downRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){ //下行来了一个嗅探包
@@ -696,12 +689,12 @@ trait SlaveParserProbe{ this: SlaveParserBase =>
val isLastDevice_Pending = RegInit(true.B)
// val isLastDevice = RegInit(true.B)
when( upRecParser.io.frameReq.fire & upRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){ //上行来了一个嗅探包
isLastDevice_Pending := false.B
isLastDevice := false.B
} .elsewhen( isWatchDogOverflow ){
isLastDevice_Pending := true.B
isLastDevice := true.B
}
@@ -749,13 +742,13 @@ trait SlaveParserProbe{ this: SlaveParserBase =>
io.isLoop := isLastDevice & ~isReadyToProbe
when( isLastDevice =/= isLastDevice_Pending & ~downSendGen.io.send.valid & ~io.downOut.valid & ~io.upIn.valid ){
isLastDevice := isLastDevice_Pending
}
// when( isLastDevice =/= isLastDevice_Pending & ~downSendGen.io.send.valid & ~io.downOut.valid & ~io.upIn.valid ){
// isLastDevice := isLastDevice_Pending
// }
when( isReadyToProbe =/= isReadyToProbe_Pending & ~downSendGen.io.send.valid & ~io.downOut.valid & ~io.upIn.valid ){
isReadyToProbe := isReadyToProbe_Pending
}
// when( isReadyToProbe =/= isReadyToProbe_Pending & ~downSendGen.io.send.valid & ~io.downOut.valid & ~io.upIn.valid ){
// isReadyToProbe := isReadyToProbe_Pending
// }
}
class SlaveParser extends SlaveParserBase