用异步握手方式,提高了成功率,但还是有失败情形
This commit is contained in:
@@ -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) ){
|
||||||
|
|||||||
Reference in New Issue
Block a user