用异步握手方式,提高了成功率,但还是有失败情形

This commit is contained in:
RuigeLee
2024-03-21 15:17:37 +08:00
parent 59103b6848
commit b271a1c85f

View File

@@ -94,7 +94,8 @@ class BackBoardMstBase extends Module{ //10M
trait BackBoardMstFSMC{ this: BackBoardMstBase => trait BackBoardMstFSMC{ this: BackBoardMstBase =>
val isRegRefleshFlip = withClockAndReset( io.ides_pclk.asClock, reset ){ RegInit(false.B) } //100M val isReqValid = withClockAndReset( io.ides_pclk.asClock, reset ){ RegInit(false.B) } //100M
val isAckReady = RegInit(false.B)
val wrRegAddr = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(10.W)) } //100M val wrRegAddr = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(10.W)) } //100M
val wrRegData = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(16.W)) } //100M val wrRegData = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(16.W)) } //100M
@@ -155,10 +156,13 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
when( isAccessReg & ~io.FSMC.csn & ~io.FSMC.wrn ){ //fsmcCSSync(0) & ~fsmcWRSync(1) & fsmcWRSync(0) ){ //~fsmcCSWRSync(2) & fsmcCSWRSync(1) ){ when( isAccessReg & ~io.FSMC.csn & ~io.FSMC.wrn ){ //fsmcCSSync(0) & ~fsmcWRSync(1) & fsmcWRSync(0) ){ //~fsmcCSWRSync(2) & fsmcCSWRSync(1) ){
isRegRefleshFlip := ~isRegRefleshFlip isReqValid := true.B
wrRegAddr := activeAddr wrRegAddr := activeAddr
wrRegData := io.FSMC.ADIn wrRegData := io.FSMC.ADIn
}
when( isReqValid & isAckReady ){
isReqValid := false.B
} }
@@ -166,10 +170,12 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
} }
//10M //10M
val isChkRegReflesh = RegInit(false.B) when( isAckReady ){
isAckReady := false.B
}
when( isChkRegReflesh =/= isRegRefleshFlip ){ when( isReqValid ){
isChkRegReflesh := ~isChkRegReflesh isAckReady := true.B
when( wrRegAddr === 0.U ){ when( wrRegAddr === 0.U ){
when( wrRegData.extract(4) ){ when( wrRegData.extract(4) ){