Do not allow status read if status.transferInProgress is going to change next cycle
This commit is contained in:
parent
6c5b80671c
commit
ef8139f18c
@ -514,11 +514,14 @@ trait HasI2CModuleContents extends MultiIOModule with HasRegMap {
|
|||||||
status.arbLost := false.B
|
status.arbLost := false.B
|
||||||
}
|
}
|
||||||
status.transferInProgress := cmd.read || cmd.write
|
status.transferInProgress := cmd.read || cmd.write
|
||||||
status.irqFlag := (cmdAck || arbLost || status.irqFlag) && !cmd.irqAck
|
status.irqFlag := (cmdAck || arbLost || status.irqFlag) && !cmd.irqAck // interrupt request flag is always generated
|
||||||
|
|
||||||
|
|
||||||
val statusReadReady = Reg(init = true.B)
|
val statusReadReady = Reg(init = true.B)
|
||||||
when (!statusReadReady) {
|
when (cmdAck || arbLost) { // => cmd.read or cmd.write deassert 1 cycle later => transferInProgress deassert 2 cycles later
|
||||||
|
statusReadReady := false.B // do not allow status read if status.transferInProgress is going to change
|
||||||
|
}
|
||||||
|
.elsewhen (!statusReadReady) {
|
||||||
statusReadReady := true.B
|
statusReadReady := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user