MulPlugin fix buffer interraction with partial regfile bypass
This commit is contained in:
parent
8b2a2afb6f
commit
06b7a91de4
|
@ -31,6 +31,8 @@ class HazardSimplePlugin(bypassExecute : Boolean = false,
|
||||||
override def build(pipeline: VexRiscv): Unit = {
|
override def build(pipeline: VexRiscv): Unit = {
|
||||||
import pipeline._
|
import pipeline._
|
||||||
import pipeline.config._
|
import pipeline.config._
|
||||||
|
|
||||||
|
pipeline plug new Area {
|
||||||
val src0Hazard = False
|
val src0Hazard = False
|
||||||
val src1Hazard = False
|
val src1Hazard = False
|
||||||
|
|
||||||
|
@ -113,6 +115,7 @@ class HazardSimplePlugin(bypassExecute : Boolean = false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class NoHazardPlugin extends Plugin[VexRiscv] with HazardService {
|
class NoHazardPlugin extends Plugin[VexRiscv] with HazardService {
|
||||||
|
|
|
@ -61,10 +61,9 @@ class MulPlugin(var inputBuffer : Boolean = false,
|
||||||
when(arbitration.isValid && input(IS_MUL) && counter =/= delay){
|
when(arbitration.isValid && input(IS_MUL) && counter =/= delay){
|
||||||
arbitration.haltItself := True
|
arbitration.haltItself := True
|
||||||
}
|
}
|
||||||
when(!arbitration.isStuckByOthers){
|
|
||||||
counter := counter + 1
|
counter := counter + 1
|
||||||
}
|
when(!arbitration.isStuck || arbitration.isStuckByOthers){
|
||||||
when(!arbitration.isStuck){
|
|
||||||
counter := 0
|
counter := 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue