Fix iBusSimplePlugin MMU integration

This commit is contained in:
Charles Papon 2020-02-21 13:28:42 +01:00
parent befc54a444
commit 4ad1215873
1 changed files with 11 additions and 9 deletions

View File

@ -317,15 +317,16 @@ class IBusSimplePlugin( resetVector : BigInt,
cmd.pc := mmuBus.rsp.physicalAddress(31 downto 2) @@ U"00" cmd.pc := mmuBus.rsp.physicalAddress(31 downto 2) @@ U"00"
//do not emit memory request if MMU miss //do not emit memory request if MMU had issues
when(mmuBus.rsp.exception || mmuBus.rsp.refilling){ when(cmdForkStage.input.valid) {
when(mmuBus.rsp.refilling) {
cmdForkStage.halt := True
cmd.valid := False
}
when(mmuBus.rsp.exception) {
cmdForkStage.halt := False cmdForkStage.halt := False
cmd.valid := False cmd.valid := False
} }
when(mmuBus.busy){
cmdForkStage.input.valid := False
cmdForkStage.input.ready := False
} }
val joinCtx = stageXToIBusRsp(cmdForkStage, mmuBus.rsp) val joinCtx = stageXToIBusRsp(cmdForkStage, mmuBus.rsp)
@ -354,6 +355,7 @@ class IBusSimplePlugin( resetVector : BigInt,
c.io.push << iBus.rsp.throwWhen(discardCounter =/= 0).toStream c.io.push << iBus.rsp.throwWhen(discardCounter =/= 0).toStream
c.io.flush := iBusRsp.stages.last.flush c.io.flush := iBusRsp.stages.last.flush
if(compressedGen) c.io.flush setWhen(decompressor.consumeCurrent) if(compressedGen) c.io.flush setWhen(decompressor.consumeCurrent)
if(!compressedGen && isDrivingDecode(IBUS_RSP)) c.io.flush setWhen(decode.arbitration.flushNext && iBusRsp.output.ready)
rspBufferOutput << c.io.pop rspBufferOutput << c.io.pop
} else new Area{ } else new Area{
val rspStream = iBus.rsp.throwWhen(discardCounter =/= 0).toStream val rspStream = iBus.rsp.throwWhen(discardCounter =/= 0).toStream