Update assertions in RvvFrontEnd.

Change-Id: Ib845de88bc7dadd0336c38c865055e7c5a35f325
diff --git a/hdl/verilog/rvv/design/RvvFrontEnd.sv b/hdl/verilog/rvv/design/RvvFrontEnd.sv
index fa90368..c37894b 100644
--- a/hdl/verilog/rvv/design/RvvFrontEnd.sv
+++ b/hdl/verilog/rvv/design/RvvFrontEnd.sv
@@ -198,21 +198,40 @@
 
   // Assertions
 `ifndef SYNTHESIS
-  logic [N-1:0] requires_reg_read;
+  logic [N-1:0] lsu_requires_rs1_read;
+  logic [N-1:0] non_lsu_requires_rs1_read;
+  logic [N-1:0] requires_rs1_read;
+  logic [N-1:0] lsu_requires_rs2_read;
+  logic [N-1:0] non_lsu_requires_rs2_read;
+  logic [N-1:0] requires_rs2_read;
   always_comb begin
     for (int i = 0; i < N; i++) begin
-      requires_reg_read[i] = valid_inst_q && (
-          (inst_q[i].opcode != RVV) ||  // LOAD/STORE
-          (inst_q[i].bits[7] && inst_q[i].bits[6:5] != 2'b11) ||  // non vset
-          // vset instructions
-          ((inst_q[i].bits[7:5] == 3'b111) && (inst_q[i].bits[24:23] != 2'b11))
-      );
+      // All LSU instructions read from rs1
+      lsu_requires_rs1_read[i] = (inst_q[i].opcode != RVV);
+      // Non LSU rs1 check
+      non_lsu_requires_rs1_read[i] = (inst_q[i].opcode == RVV) &&
+          (inst_q[i].bits[7] && inst_q[i].bits[6:5] != 2'b11);
+      requires_rs1_read[i] =
+          lsu_requires_rs1_read[i] || non_lsu_requires_rs1_read[i];
+
+      // Only strided loads/stores (mop=0b10) read rs2
+      lsu_requires_rs2_read[i] = (inst_q[i].opcode != RVV) &&
+          (inst_q[i].bits[20:19] == 2'b10);
+      // vsetvl is only non LSU instruction that reads rs2
+      non_lsu_requires_rs2_read[i] = (inst_q[i].opcode == RVV) &&
+          (inst_q[i].bits[7:5] == 3'b111) &&
+          (inst_q[i].bits[24:18] == 7'b1000000);
+      requires_rs2_read[i] =
+          lsu_requires_rs2_read[i] || non_lsu_requires_rs2_read[i];
     end
   end
 
   always @(posedge clk) begin
     for (int i = 0; i < N; i++) begin
-      assert(!requires_reg_read[i] || reg_read_valid_i[i]);
+      assert(!valid_inst_q[i] || !requires_rs1_read[i] ||
+              reg_read_valid_i[2*i]);
+      assert(!valid_inst_q[i] || !requires_rs2_read[i] ||
+              reg_read_valid_i[(2*i) + 1]);
     end
   end
 `endif  // not def SYNTHESIS