Plumb rvv_idle output RvvCore.

Change-Id: I6252637a06289e23027e4be4fd12dea5156c9a76
diff --git a/hdl/chisel/src/kelvin/rvv/RvvCore.scala b/hdl/chisel/src/kelvin/rvv/RvvCore.scala
index 36d1976..4e57b99 100644
--- a/hdl/chisel/src/kelvin/rvv/RvvCore.scala
+++ b/hdl/chisel/src/kelvin/rvv/RvvCore.scala
@@ -111,6 +111,7 @@
         |    output [1:0] configXrm,
         |    output [2:0] configSew,
         |    output [2:0] configLmul,
+        |    output logic rvv_idle,
         |""".stripMargin.replaceAll("VSTART_LEN", (log2Ceil(vlen) - 1).toString)
 
 
@@ -254,7 +255,8 @@
         |      .vector_csr(vector_csr),
         |      .vcsr_ready(vcsr_ready),
         |      .config_state_valid(configStateValid),
-        |      .config_state(config_state)
+        |      .config_state(config_state),
+        |      .rvv_idle(rvv_idle)
         |""".stripMargin.replaceAll("GENN", instructionLanes.toString)
     coreInstantiation += "  );\n"
 
@@ -318,6 +320,7 @@
     val configXrm = Output(UInt(2.W))
     val configSew = Output(UInt(3.W))
     val configLmul = Output(UInt(3.W))
+    val rvv_idle = Output(Bool())
   })
 
   // Resources must be sorted topologically by dependency DAG
@@ -413,6 +416,7 @@
   io.configState.bits.xrm     := rvvCoreWrapper.io.configXrm
   io.configState.bits.sew     := rvvCoreWrapper.io.configSew
   io.configState.bits.lmul    := rvvCoreWrapper.io.configLmul
+  io.rvv_idle                 := rvvCoreWrapper.io.rvv_idle
 
   vstart := Mux(rvvCoreWrapper.io.vcsr_valid, rvvCoreWrapper.io.vcsr_vstart, vstart)
   vxrm := Mux(rvvCoreWrapper.io.vcsr_valid, rvvCoreWrapper.io.vcsr_xrm, vxrm)
diff --git a/hdl/chisel/src/kelvin/rvv/RvvInterface.scala b/hdl/chisel/src/kelvin/rvv/RvvInterface.scala
index e6346a6..139de23 100644
--- a/hdl/chisel/src/kelvin/rvv/RvvInterface.scala
+++ b/hdl/chisel/src/kelvin/rvv/RvvInterface.scala
@@ -63,4 +63,6 @@
 
     // Async scalar regfile writes.
     val async_rd = Decoupled(new RegfileWriteDataIO)
+
+    val rvv_idle = Output(Bool())
 }
\ No newline at end of file
diff --git a/hdl/chisel/src/kelvin/scalar/Decode.scala b/hdl/chisel/src/kelvin/scalar/Decode.scala
index 1cda259..8b0715d 100644
--- a/hdl/chisel/src/kelvin/scalar/Decode.scala
+++ b/hdl/chisel/src/kelvin/scalar/Decode.scala
@@ -295,6 +295,7 @@
     val rvv = Option.when(p.enableRvv)(
         Vec(p.instructionLanes, Decoupled(new RvvCompressedInstruction)))
     val rvvState = Option.when(p.enableRvv)(Input(Valid(new RvvConfigState(p))))
+    val rvvIdle = Option.when(p.enableRvv)(Input(Bool()))
 
     // Vector interface, to maintain interface compatibility with old dispatch
     // unit.
@@ -450,12 +451,11 @@
   // Evaluate whether the core is idle.
   // The general method of operation is to check that
   // scoreboards for register files are clear, and no LSU operation is active.
-  // TODO(atv): Extend this to consider vector operations.
   val coreIdle =
         (
           (io.scoreboard.regd === 0.U) &&
           (io.fscoreboard.getOrElse(0.U) === 0.U) &&
-          // /* vec scoreboard clear */ &&
+          io.rvvIdle.getOrElse(true.B) &&
           !io.lsuActive
         )
 
diff --git a/hdl/chisel/src/kelvin/scalar/SCore.scala b/hdl/chisel/src/kelvin/scalar/SCore.scala
index 1e37aa6..8905f2f 100644
--- a/hdl/chisel/src/kelvin/scalar/SCore.scala
+++ b/hdl/chisel/src/kelvin/scalar/SCore.scala
@@ -421,6 +421,7 @@
     // Connect dispatch
     dispatch.io.rvv.get <> io.rvvcore.get.inst
     dispatch.io.rvvState.get := io.rvvcore.get.configState
+    dispatch.io.rvvIdle.get := io.rvvcore.get.rvv_idle
 
     // Register inputs
     io.rvvcore.get.rs := regfile.io.readData
diff --git a/hdl/verilog/rvv/design/RvvCore.sv b/hdl/verilog/rvv/design/RvvCore.sv
index ecda31b..d1b9c8b 100644
--- a/hdl/verilog/rvv/design/RvvCore.sv
+++ b/hdl/verilog/rvv/design/RvvCore.sv
@@ -73,7 +73,10 @@
 
   // Config state
   output config_state_valid,
-  output RVVConfigState config_state
+  output RVVConfigState config_state,
+
+  // Idle
+  output logic rvv_idle
 );
   logic [N-1:0] frontend_cmd_valid;
   RVVCmd [N-1:0] frontend_cmd_data;
@@ -180,7 +183,6 @@
     trap_valid_rvs2rvv = 0;
   end
 
-  logic rvv_idle;
   logic   [`ISSUE_LANE-1:0] insts_ready_cq2rvs;
   rvv_backend backend(
       .clk(clk),