开放链路寄存器给spi访问读取

This commit is contained in:
Ruige Lee
2025-05-16 18:56:49 +08:00
parent 0a772e4efc
commit 5c729658d1
3 changed files with 76 additions and 10 deletions

View File

@@ -46,6 +46,15 @@ class SlaveParserIO extends Bundle{
val trigAddr = Input( Vec(8, UInt(15.W)) )
//开放链路寄存器组给interface
// val isDevOnLeft = Output(UInt(2.W))
val isDevOnLeftModify = Output(Bool())
val indexOfLeftDev = Output(UInt(14.W))
val isDevOnRight = Output(UInt(2.W))
val isDevOnRightModify = Output(Bool())
val indexOfRightDev = Output(UInt(14.W))
val mstDeltaTimeStamp = Output(UInt(32.W))
val slvDeltaTime = Output(UInt(32.W))
val deltaFinal = Output(UInt(32.W))
@@ -84,10 +93,18 @@ abstract class SlaveParserBase extends Module{
val isReadyToProbe = RegInit(false.B)
val isAckProbe = RegInit(false.B)
val isLastDevice: Bool = RegInit(true.B)
val isDeviceModified: Bool = RegInit(true.B)
// val isDevOnLeft = RegInit(0.U(2.W)); io.isDevOnLeft := isDevOnLeft
val isDevOnLeftModify = RegInit(false.B); io.isDevOnLeftModify := isDevOnLeftModify
val indexOfLeftDev = RegInit(0.U(14.W)); io.indexOfLeftDev := indexOfLeftDev
io.isDevOnRight := Mux( isLastDevice, "b01".U, "b10".U )
val isDevOnRightModify = RegInit(false.B); io.isDevOnRightModify := isDevOnRightModify
val indexOfRightDev = RegInit(0.U(14.W)); io.indexOfRightDev := indexOfRightDev
// val isDeviceModified: Bool = RegInit(true.B)
val localDevIndex = RegInit(0.U(14.W)) //当前设备索引
dontTouch(localDevIndex)
// dontTouch(localDevIndex)
@@ -354,7 +371,10 @@ trait SlaveParserIndex{ this: SlaveParserBase =>
downRecParser.io.subMsgReq.bits.style === 0.U &
downRecParser.io.subMsgReq.bits.operator === "hd".U ){ //设置顺序地址
localDevIndex := downRecParser.io.subMsgReq.bits.workCnt + 1.U
isDeviceModified := false.B
isDevOnLeftModify := false.B
indexOfLeftDev := downRecParser.io.subMsgReq.bits.workCnt
isDevOnRightModify := false.B
when( isDownRecPing ){
downSubMsgInfo(0).workCnt := downRecParser.io.subMsgReq.bits.workCnt + 1.U
} .otherwise{ //pong
@@ -689,12 +709,23 @@ trait SlaveParserProbe{ this: SlaveParserBase =>
}
when( upRecParser.io.frameReq.fire & upRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){ //上行来了一个嗅探包
when( upRecParser.io.frameReq.bits.frameInfo =/= localDevIndex + 1.U ){ //索引不对
isDeviceModified := true.B
when( downRecParser.io.frameReq.fire & downRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){ //下行来了一个嗅探包
when( downRecParser.io.frameReq.bits.frameInfo =/= localDevIndex - 1.U ){ //索引不对
isDevOnLeftModify := true.B
indexOfLeftDev := downRecParser.io.frameReq.bits.frameInfo
}
}
when( upRecParser.io.frameReq.fire & upRecParser.io.frameReq.bits.frameStyle === FRAME_STYLE_PROBE ){ //上行来了一个嗅探包
when( upRecParser.io.frameReq.bits.frameInfo =/= localDevIndex + 1.U ){ //索引不对
isDevOnRightModify := true.B
indexOfRightDev := upRecParser.io.frameReq.bits.frameInfo
}
}