diff --git a/src/main/scala/noop/fu/MDU.scala b/src/main/scala/noop/fu/MDU.scala index 460c2bfffe0e0ed98c9caaadb771123d8afa0788..0cddaf51eb1fc43000c7d2ed84c8993c8d96c4fc 100644 --- a/src/main/scala/noop/fu/MDU.scala +++ b/src/main/scala/noop/fu/MDU.scala @@ -34,6 +34,7 @@ object MDUInstr extends HasDecodeConst { class MDU extends Module with HasMDUOpType { val io = IO(new FunctionUnitIO) + val mulLatency = 4 val (valid, src1, src2, func) = (io.in.valid, io.in.bits.src1, io.in.bits.src2, io.in.bits.func) def access(valid: Bool, src1: UInt, src2: UInt, func: UInt): UInt = { @@ -45,7 +46,7 @@ class MDU extends Module with HasMDUOpType { } val mulRes = (src1.asSInt * src2.asSInt).asUInt - val mulPipeOut = Pipe(io.in.fire(), mulRes, 4) + val mulPipeOut = Pipe(io.in.fire(), mulRes, mulLatency) io.out.bits := LookupTree(func, 0.U, List( MduMul -> mulPipeOut.bits(31, 0), MduMulh -> mulPipeOut.bits(63, 32) @@ -59,6 +60,6 @@ class MDU extends Module with HasMDUOpType { when (io.in.valid && !busy) { busy := true.B } when (mulPipeOut.valid) { busy := false.B } - io.in.ready := !busy + io.in.ready := (if (mulLatency == 0) true.B else !busy) io.out.valid := mulPipeOut.valid }