diff --git a/t1/src/mask/MaskUnit.scala b/t1/src/mask/MaskUnit.scala index 4a4c61203..29da5c953 100644 --- a/t1/src/mask/MaskUnit.scala +++ b/t1/src/mask/MaskUnit.scala @@ -202,7 +202,7 @@ class MaskUnit(parameter: T1Parameter) extends Module { gatherIndex(instReq.bits.readFromScala, instReq.bits.vlmul, instReq.bits.sew) val idle :: sRead :: wRead :: sResponse :: Nil = Enum(4) val gatherReadState: UInt = RegInit(idle) - val gatherRequestFire: Bool = gatherReadState === idle && gatherRead + val gatherRequestFire: Bool = Wire(Bool()) val gatherSRead: Bool = gatherReadState === sRead val gatherWaiteRead: Bool = gatherReadState === wRead val gatherResponse: Bool = gatherReadState === sResponse @@ -215,6 +215,7 @@ class MaskUnit(parameter: T1Parameter) extends Module { val enqMvRD: Bool = instReq.bits.decodeResult(Decoder.topUop) === BitPat("b01011") val instVlValid: Bool = RegEnable((instReq.bits.vl.orR || enqMvRD) && instReq.valid, false.B, instReq.valid || lastReport.orR) + gatherRequestFire := gatherReadState === idle && gatherRead && !instVlValid // viota mask read vs2. Also pretending to be reading vs1 val viotaReq: Bool = instReq.bits.decodeResult(Decoder.topUop) === "b01000".U when(instReq.valid && (viotaReq || enqMvRD) || gatherRequestFire) {