增加看门狗17,加强看门狗中断条件
This commit is contained in:
@@ -375,7 +375,7 @@ trait ShinTopSlave{ this: ShinTopBase =>
|
||||
|
||||
trait ShinTopWatchDog{ this: ShinTopBase =>
|
||||
|
||||
|
||||
//看门狗1~16,SM监控
|
||||
val isWdtSMEnable = for( _ <- 0 until 16 ) yield { RegInit(false.B) }
|
||||
val wdtSMCnt = for( _ <- 0 until 16 ) yield { Reg(UInt(32.W)) }
|
||||
|
||||
@@ -405,27 +405,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)
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user