增加看门狗17,加强看门狗中断条件

This commit is contained in:
Ruige Lee
2025-08-06 11:04:22 +08:00
committed by bacon
parent 32a6a1df0b
commit 41b83b83bc
2 changed files with 37 additions and 21 deletions

View File

@@ -377,7 +377,7 @@ trait ShinTopSlave{ this: ShinTopBase =>
trait ShinTopWatchDog{ this: ShinTopBase =>
//看门狗1~16SM监控
val isWdtSMEnable = for( _ <- 0 until 16 ) yield { RegInit(false.B) }
val wdtSMCnt = for( _ <- 0 until 16 ) yield { Reg(UInt(32.W)) }
@@ -407,27 +407,42 @@ trait ShinTopWatchDog{ this: ShinTopBase =>
interface.io.wdtTrigger(i+1) := wdtSMCnt(i) === interface.io.cReg.wdtTarCnt(i+1)
}
//看门狗0 发送后回包是否超时
val isWdtRec2RtnEnable = RegInit(false.B)
val wdtRec2RtnCnt = Reg(UInt(32.W))
val isWdtRecEnable = RegInit(false.B)
val wdtRecCnt = Reg(UInt(32.W))
when( upCDRIn.io.axis.fire & upCDRIn.io.axis.bits.tlast ){
isWdtRecEnable := false.B
} .elsewhen( ~isWdtRecEnable & downCDROut.io.axis.fire & interface.io.cReg.wdtEnable.extract(0) ){
isWdtRecEnable := true.B
when(
(upCDRIn.io.axis.fire & upCDRIn.io.axis.bits.tlast) |
~interface.io.cReg.wdtEnable.extract(0)
){
isWdtRec2RtnEnable := false.B
} .elsewhen( ~isWdtRec2RtnEnable & downCDROut.io.axis.fire & interface.io.cReg.wdtEnable.extract(0) ){
isWdtRec2RtnEnable := true.B
}
when( isWdtRecEnable & (wdtRecCnt < interface.io.cReg.wdtTarCnt(0)) ){
wdtRecCnt := wdtRecCnt + 1.U
} .elsewhen( ~isWdtRecEnable ){
wdtRecCnt := 0.U
when( isWdtRec2RtnEnable & (wdtRec2RtnCnt < interface.io.cReg.wdtTarCnt(0)) ){
wdtRec2RtnCnt := wdtRec2RtnCnt + 1.U
} .elsewhen( ~isWdtRec2RtnEnable ){
wdtRec2RtnCnt := 0.U
}
// assert( wdtRecCnt < interface.io.cReg.wdtTarCnt(0), "Assert Failed! wdtRecCnt is larger than wdtTarCnt, Special situation?" )
interface.io.wdtTrigger(0) := wdtRecCnt === interface.io.cReg.wdtTarCnt(0)
interface.io.wdtTrigger(0) := wdtRec2RtnCnt === interface.io.cReg.wdtTarCnt(0)
//看门狗17
val wdtRec2RecCnt = Reg(UInt(32.W))
when( interface.io.cReg.wdtEnable.extract(17) & (wdtRec2RecCnt < interface.io.cReg.wdtTarCnt(17)) ){
wdtRec2RecCnt := wdtRec2RecCnt + 1.U
} .elsewhen(
~interface.io.cReg.wdtEnable.extract(17) |
downCDRIn.io.axis.fire
){
wdtRec2RecCnt := 0.U
}
interface.io.wdtTrigger(17) := wdtRec2RecCnt === interface.io.cReg.wdtTarCnt(17)
}