转发延迟缩减至126个cycle
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user