Fix scoreboarding issue in vsetvli.

Update writescoreboard when instruction is dispatched, not
decoded.

Change-Id: Ia7893de02155ea251fbc9c63fbab96dd39be3465
diff --git a/hdl/chisel/src/kelvin/scalar/Decode.scala b/hdl/chisel/src/kelvin/scalar/Decode.scala
index 6e05ab4..c5f5f77 100644
--- a/hdl/chisel/src/kelvin/scalar/Decode.scala
+++ b/hdl/chisel/src/kelvin/scalar/Decode.scala
@@ -368,6 +368,7 @@
       (d.isFloat() && d.floatWritesRd()) ||
       d.rvvWritesRd()
   )
+
   val rdScoreboard = (0 until p.instructionLanes).map(i =>
       Mux(writesRd(i), UIntToOH(rdAddr(i), 32), 0.U(32.W)))
   val scoreboardScan = rdScoreboard.scan(0.U(32.W))(_ | _)
@@ -738,7 +739,7 @@
         io.alu(i).fire || io.mlu(i).fire || io.dvu(i).fire ||
         io.lsu(i).fire && d.isScalarLoad() ||
         (if (i == 0) { io.csr.valid } else { false.B }) ||
-        d.rvv.map(x => x.fire && x.bits.writesRd()).getOrElse(false.B) ||
+        io.rvv.map(x => x(i).fire && x(i).bits.writesRd()).getOrElse(false.B) ||
         (if (i == 0) { io.float.map(x => x.fire && x.bits.scalar_rd).getOrElse(false.B) } else { false.B }) ||
         (io.bru(i).valid && (io.bru(i).bits.op.isOneOf(BruOp.JAL, BruOp.JALR)) && rdAddr(i) =/= 0.U)