TDT4255/src/main/scala/EXBarrier.scala

41 lines
1 KiB
Scala

package FiveStage
import chisel3._
import chisel3.experimental.MultiIOModule
class EXBarrierIO extends Bundle {
val ALUResult = UInt(32.W)
val returnAddr = UInt(32.W)
val r2Value = UInt(32.W)
val writeAddr = UInt(5.W)
val writeEnable = Bool()
val memRead = Bool()
val memWrite = Bool()
val jump = Bool()
}
class EXBarrier extends MultiIOModule {
val io = IO(
new Bundle {
val in = Input(new EXBarrierIO)
val out = Output(new EXBarrierIO)
val flush = Output(Bool())
val branchIn = Input(Bool())
val branchOut = Output(Bool())
val branchAddrIn = Input(UInt(32.W))
val branchAddrOut = Output(UInt(32.W))
val forwardEx = Output(new Forwarding)
})
val delay = Reg(new EXBarrierIO)
delay := io.in
io.out := delay
io.flush := io.branchIn
io.branchOut := io.branchIn
io.branchAddrOut := io.branchAddrIn
io.forwardEx.write := io.in.writeEnable
io.forwardEx.writeAddr := io.in.writeAddr
io.forwardEx.writeData := Mux(io.in.jump, io.in.returnAddr, io.in.ALUResult)
}