Lower branch cycles to two.
This commit is contained in:
parent
cfce1b6b54
commit
9e12c60d27
4 changed files with 10 additions and 6 deletions
|
@ -106,7 +106,7 @@ class CPU extends MultiIOModule {
|
||||||
|
|
||||||
EXBarrier.in.r2Value := EX.io.rs2ValueOut.asUInt()
|
EXBarrier.in.r2Value := EX.io.rs2ValueOut.asUInt()
|
||||||
EXBarrier.in.ALUResult := EX.io.ALUResult.asUInt()
|
EXBarrier.in.ALUResult := EX.io.ALUResult.asUInt()
|
||||||
EXBarrier.in.branch := EX.io.branch
|
EXBarrier.branchIn := EX.io.branch
|
||||||
EXBarrier.in.jump := IDBarrier.out.jump
|
EXBarrier.in.jump := IDBarrier.out.jump
|
||||||
EXBarrier.in.returnAddr := IDBarrier.out.returnAddr
|
EXBarrier.in.returnAddr := IDBarrier.out.returnAddr
|
||||||
EXBarrier.in.writeEnable := IDBarrier.out.writeEnable
|
EXBarrier.in.writeEnable := IDBarrier.out.writeEnable
|
||||||
|
@ -132,8 +132,8 @@ class CPU extends MultiIOModule {
|
||||||
ID.io.writeAddrIn := MEMBarrier.out.writeAddr
|
ID.io.writeAddrIn := MEMBarrier.out.writeAddr
|
||||||
|
|
||||||
// Branching
|
// Branching
|
||||||
IF.io.branch := EXBarrier.out.branch
|
IF.io.branch := EXBarrier.branchOut
|
||||||
IF.io.branchAddress := EXBarrier.out.ALUResult
|
IF.io.branchAddress := EXBarrier.branchAddr
|
||||||
|
|
||||||
// Stall
|
// Stall
|
||||||
IF.io.stall := IDBarrier.stall
|
IF.io.stall := IDBarrier.stall
|
||||||
|
|
|
@ -11,7 +11,6 @@ class EXBarrierIO extends Bundle {
|
||||||
val writeEnable = Bool()
|
val writeEnable = Bool()
|
||||||
val memRead = Bool()
|
val memRead = Bool()
|
||||||
val memWrite = Bool()
|
val memWrite = Bool()
|
||||||
val branch = Bool()
|
|
||||||
val jump = Bool()
|
val jump = Bool()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,11 +20,16 @@ class EXBarrier extends MultiIOModule {
|
||||||
val in = Input(new EXBarrierIO)
|
val in = Input(new EXBarrierIO)
|
||||||
val out = Output(new EXBarrierIO)
|
val out = Output(new EXBarrierIO)
|
||||||
val flush = Output(Bool())
|
val flush = Output(Bool())
|
||||||
|
val branchAddr = Output(UInt(32.W))
|
||||||
|
val branchIn = Input(Bool())
|
||||||
|
val branchOut = Output(Bool())
|
||||||
})
|
})
|
||||||
|
|
||||||
val delay = Reg(new EXBarrierIO)
|
val delay = Reg(new EXBarrierIO)
|
||||||
delay := io.in
|
delay := io.in
|
||||||
io.out := delay
|
io.out := delay
|
||||||
|
|
||||||
io.flush := io.in.branch
|
io.flush := io.branchIn
|
||||||
|
io.branchOut := io.branchIn
|
||||||
|
io.branchAddr := io.in.ALUResult
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ class IFBarrier extends MultiIOModule {
|
||||||
val flushRemaining = RegInit(UInt(2.W), 0.U)
|
val flushRemaining = RegInit(UInt(2.W), 0.U)
|
||||||
flushRemaining := Mux(
|
flushRemaining := Mux(
|
||||||
io.flush,
|
io.flush,
|
||||||
2.U,
|
1.U,
|
||||||
Mux(
|
Mux(
|
||||||
flushRemaining === 0.U,
|
flushRemaining === 0.U,
|
||||||
0.U,
|
0.U,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue