看门狗特性
This commit is contained in:
@@ -387,10 +387,45 @@ trait ShinTopSlave{ this: ShinTopBase =>
|
||||
}
|
||||
|
||||
|
||||
trait ShinTopWatchDog{ this: ShinTopBase =>
|
||||
|
||||
|
||||
val isWdtSMEnable = for( _ <- 0 until 16 ) yield { RegInit(false.B) }
|
||||
val wdtSMCnt = for( _ <- 0 until 16 ) yield { Reg(UInt(32.W)) }
|
||||
|
||||
for( i <- 0 until 8 ){
|
||||
when( smUnit(i).io.enq ){
|
||||
isWdtSMEnable(2*i) := false.B
|
||||
} .elsewhen( ~isWdtSMEnable(2*i) & smUnit(i).io.sram_w.enw & interface.io.cReg.wdtEnable.extract(i+1) ){
|
||||
isWdtSMEnable(2*i) := true.B
|
||||
}
|
||||
|
||||
when( smUnit(i).io.deq ){
|
||||
isWdtSMEnable(2*i + 1) := false.B
|
||||
} .elsewhen( ~isWdtSMEnable(2*i + 1) & smUnit(i).io.sram_r.enr & interface.io.cReg.wdtEnable.extract(i+1) ){
|
||||
isWdtSMEnable(2*i + 1) := true.B
|
||||
}
|
||||
}
|
||||
|
||||
for( i <- 0 until 16 ){
|
||||
when( isWdtSMEnable(i) & (wdtSMCnt(i) < interface.io.cReg.wdtTarCnt(i+1)) ){
|
||||
wdtSMCnt(i) := wdtSMCnt(i) + 1.U
|
||||
} .elsewhen( ~isWdtSMEnable(i) ){
|
||||
wdtSMCnt(i) := 0.U
|
||||
}
|
||||
|
||||
assert( wdtSMCnt(i) <= interface.io.cReg.wdtTarCnt(i+1), "Assert Failed! wdtSMCnt is larger than wdtTarCnt, Special situation?" )
|
||||
|
||||
interface.io.wdtTrigger(i+1) := wdtSMCnt(i) === interface.io.cReg.wdtTarCnt(i+1)
|
||||
}
|
||||
interface.io.wdtTrigger(0) := slaveParser.io.isRecWdtTrigger
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
class ShinTop extends ShinTopBase
|
||||
with ShinTopMaster
|
||||
with ShinTopSlave
|
||||
with ShinTopWatchDog
|
||||
|
||||
Reference in New Issue
Block a user