Refactor testbenches to scale w/ instructionLanes

- Using the exported parameters from the HDL, refactor the test benches
  to use the specified count of instruction lanes. This should allow us
  to compile the testbenches against verilated models with different
  parameters, without additional source changes.
- Define a few handy utility macros to help with this.

Change-Id: I75dbf43d6f8edfcdf84688a9e05de400f8a8e0fa
diff --git a/tests/verilator_sim/BUILD b/tests/verilator_sim/BUILD
index 65963de..e17992f 100644
--- a/tests/verilator_sim/BUILD
+++ b/tests/verilator_sim/BUILD
@@ -13,6 +13,13 @@
 # limitations under the License.
 
 cc_library(
+    name = "util",
+    hdrs = [
+        "util.h",
+    ],
+)
+
+cc_library(
     name = "sim_libs",
     hdrs = [
         "fifo.h",
@@ -47,6 +54,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         "//hdl/chisel/src/kelvin:core_cc_library",
         "@com_google_absl//absl/flags:flag",
         "@com_google_absl//absl/flags:parse",
@@ -158,6 +166,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         ":valu",
         "//hdl/chisel/src/kelvin:valu_cc_library",
     ],
@@ -210,6 +219,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         ":vencodeop",
         "//hdl/chisel/src/kelvin:vcmdq_cc_library",
     ],
@@ -236,6 +246,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         ":vencodeop",
         "//hdl/chisel/src/kelvin:vconvctrl_cc_library",
     ],
@@ -263,6 +274,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         ":vdecode",
         "//hdl/chisel/src/kelvin:vdecode_cc_library",
     ],
@@ -276,6 +288,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         ":vencodeop",
         "//hdl/chisel/src/kelvin:vldst_cc_library",
     ],
@@ -290,6 +303,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         ":vencodeop",
         "//hdl/chisel/src/kelvin:vld_cc_library",
     ],
@@ -328,6 +342,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
+        ":util",
         ":vencodeop",
         "//hdl/chisel/src/kelvin:vst_cc_library",
     ],
diff --git a/tests/verilator_sim/kelvin/core_tb.cc b/tests/verilator_sim/kelvin/core_tb.cc
index 73396ab..140d0d5 100644
--- a/tests/verilator_sim/kelvin/core_tb.cc
+++ b/tests/verilator_sim/kelvin/core_tb.cc
@@ -16,10 +16,12 @@
 #include "absl/flags/flag.h"
 #include "absl/flags/parse.h"
 #include "absl/flags/usage.h"
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/kelvin/core_if.h"
 #include "tests/verilator_sim/kelvin/debug_if.h"
 #include "tests/verilator_sim/kelvin/kelvin_cfg.h"
 #include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 ABSL_FLAG(int, cycles, 100000000, "Simulation cycles");
 ABSL_FLAG(bool, trace, false, "Dump VCD trace");
@@ -89,14 +91,6 @@
   sc_signal<sc_bv<5> > io_slog_addr;
   sc_signal<sc_bv<32> > io_slog_data;
   sc_signal<sc_bv<4> > io_debug_en;
-  sc_signal<sc_bv<32> > io_debug_addr0;
-  sc_signal<sc_bv<32> > io_debug_addr1;
-  sc_signal<sc_bv<32> > io_debug_addr2;
-  sc_signal<sc_bv<32> > io_debug_addr3;
-  sc_signal<sc_bv<32> > io_debug_inst0;
-  sc_signal<sc_bv<32> > io_debug_inst1;
-  sc_signal<sc_bv<32> > io_debug_inst2;
-  sc_signal<sc_bv<32> > io_debug_inst3;
   sc_signal<sc_bv<32> > io_debug_cycles;
   sc_signal<bool> io_axi0_write_addr_ready;
   sc_signal<bool> io_axi0_write_addr_valid;
@@ -141,6 +135,12 @@
   sc_signal<sc_bv<kUncId> > io_axi1_read_data_bits_id;
   sc_signal<sc_bv<kUncBits> > io_axi1_read_data_bits_data;
 
+#define IO_DEBUG(x)                       \
+  sc_signal<sc_bv<32> > io_debug_addr##x; \
+  sc_signal<sc_bv<32> > io_debug_inst##x;
+  REPEAT(IO_DEBUG, KP_instructionLanes);
+#undef IO_DEBUG
+
   io_iflush_ready = 1;
   io_dflush_ready = 1;
 
@@ -195,16 +195,14 @@
   core.io_slog_addr(io_slog_addr);
   core.io_slog_data(io_slog_data);
   core.io_debug_en(io_debug_en);
-  core.io_debug_addr_0(io_debug_addr0);
-  core.io_debug_addr_1(io_debug_addr1);
-  core.io_debug_addr_2(io_debug_addr2);
-  core.io_debug_addr_3(io_debug_addr3);
-  core.io_debug_inst_0(io_debug_inst0);
-  core.io_debug_inst_1(io_debug_inst1);
-  core.io_debug_inst_2(io_debug_inst2);
-  core.io_debug_inst_3(io_debug_inst3);
   core.io_debug_cycles(io_debug_cycles);
 
+#define BIND_DEBUG(x)                       \
+  core.io_debug_addr_##x(io_debug_addr##x); \
+  core.io_debug_inst_##x(io_debug_inst##x);
+  REPEAT(BIND_DEBUG, KP_instructionLanes);
+#undef BIND_DEBUG
+
   mif.clock(tb.clock);
   mif.reset(tb.reset);
   mif.io_ibus_valid(io_ibus_valid);
diff --git a/tests/verilator_sim/kelvin/valu_tb.cc b/tests/verilator_sim/kelvin/valu_tb.cc
index 0a4d25e..8909c57 100644
--- a/tests/verilator_sim/kelvin/valu_tb.cc
+++ b/tests/verilator_sim/kelvin/valu_tb.cc
@@ -13,68 +13,14 @@
 // limitations under the License.
 
 #include "VVAlu.h"
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/kelvin/valu.h"
 #include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 struct VAlu_tb : Sysc_tb {
   sc_in<bool> io_in_ready;
   sc_out<bool> io_in_valid;
-  sc_out<bool> io_in_bits_0_valid;
-  sc_out<bool> io_in_bits_0_bits_m;
-  sc_out<bool> io_in_bits_0_bits_vd_valid;
-  sc_out<bool> io_in_bits_0_bits_ve_valid;
-  sc_out<bool> io_in_bits_0_bits_vf_valid;
-  sc_out<bool> io_in_bits_0_bits_vg_valid;
-  sc_out<bool> io_in_bits_0_bits_vs_valid;
-  sc_out<bool> io_in_bits_0_bits_vt_valid;
-  sc_out<bool> io_in_bits_0_bits_vu_valid;
-  sc_out<bool> io_in_bits_0_bits_vx_valid;
-  sc_out<bool> io_in_bits_0_bits_vy_valid;
-  sc_out<bool> io_in_bits_0_bits_vz_valid;
-  sc_out<bool> io_in_bits_0_bits_sv_valid;
-  sc_out<bool> io_in_bits_0_bits_cmdsync;
-  sc_out<bool> io_in_bits_1_valid;
-  sc_out<bool> io_in_bits_1_bits_m;
-  sc_out<bool> io_in_bits_1_bits_vd_valid;
-  sc_out<bool> io_in_bits_1_bits_ve_valid;
-  sc_out<bool> io_in_bits_1_bits_vf_valid;
-  sc_out<bool> io_in_bits_1_bits_vg_valid;
-  sc_out<bool> io_in_bits_1_bits_vs_valid;
-  sc_out<bool> io_in_bits_1_bits_vt_valid;
-  sc_out<bool> io_in_bits_1_bits_vu_valid;
-  sc_out<bool> io_in_bits_1_bits_vx_valid;
-  sc_out<bool> io_in_bits_1_bits_vy_valid;
-  sc_out<bool> io_in_bits_1_bits_vz_valid;
-  sc_out<bool> io_in_bits_1_bits_sv_valid;
-  sc_out<bool> io_in_bits_1_bits_cmdsync;
-  sc_out<bool> io_in_bits_2_valid;
-  sc_out<bool> io_in_bits_2_bits_m;
-  sc_out<bool> io_in_bits_2_bits_vd_valid;
-  sc_out<bool> io_in_bits_2_bits_ve_valid;
-  sc_out<bool> io_in_bits_2_bits_vf_valid;
-  sc_out<bool> io_in_bits_2_bits_vg_valid;
-  sc_out<bool> io_in_bits_2_bits_vs_valid;
-  sc_out<bool> io_in_bits_2_bits_vt_valid;
-  sc_out<bool> io_in_bits_2_bits_vu_valid;
-  sc_out<bool> io_in_bits_2_bits_vx_valid;
-  sc_out<bool> io_in_bits_2_bits_vy_valid;
-  sc_out<bool> io_in_bits_2_bits_vz_valid;
-  sc_out<bool> io_in_bits_2_bits_sv_valid;
-  sc_out<bool> io_in_bits_2_bits_cmdsync;
-  sc_out<bool> io_in_bits_3_valid;
-  sc_out<bool> io_in_bits_3_bits_m;
-  sc_out<bool> io_in_bits_3_bits_vd_valid;
-  sc_out<bool> io_in_bits_3_bits_ve_valid;
-  sc_out<bool> io_in_bits_3_bits_vf_valid;
-  sc_out<bool> io_in_bits_3_bits_vg_valid;
-  sc_out<bool> io_in_bits_3_bits_vs_valid;
-  sc_out<bool> io_in_bits_3_bits_vt_valid;
-  sc_out<bool> io_in_bits_3_bits_vu_valid;
-  sc_out<bool> io_in_bits_3_bits_vx_valid;
-  sc_out<bool> io_in_bits_3_bits_vy_valid;
-  sc_out<bool> io_in_bits_3_bits_vz_valid;
-  sc_out<bool> io_in_bits_3_bits_sv_valid;
-  sc_out<bool> io_in_bits_3_bits_cmdsync;
   sc_in<bool> io_read_0_valid;
   sc_in<bool> io_read_1_valid;
   sc_in<bool> io_read_2_valid;
@@ -99,90 +45,6 @@
   sc_in<bool> io_whint_3_valid;
   sc_in<bool> io_scalar_0_valid;
   sc_in<bool> io_scalar_1_valid;
-  sc_out<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_in<sc_bv<64> > io_active;
   sc_out<sc_bv<128> > io_vrfsb;
   sc_in<sc_bv<6> > io_read_0_addr;
@@ -220,6 +82,44 @@
   sc_in<sc_bv<6> > io_whint_3_addr;
   sc_in<sc_bv<32> > io_scalar_0_data;
   sc_in<sc_bv<32> > io_scalar_1_data;
+#define IO_BITS(x)                                  \
+  sc_out<bool> io_in_bits_##x##_valid;              \
+  sc_out<bool> io_in_bits_##x##_bits_m;             \
+  sc_out<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_out<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   using Sysc_tb::Sysc_tb;
 
@@ -261,10 +161,9 @@
 
     //-------------------------------------------------------------------------
     // Inputs.
-    ProcessInputs(0);
-    ProcessInputs(1);
-    ProcessInputs(2);
-    ProcessInputs(3);
+    for (int i = 0; i < KP_instructionLanes; ++i) {
+      ProcessInputs(i);
+    }
 
 #if 0
     printf("wactive ");
@@ -275,10 +174,9 @@
 #endif
     // -------------------------------------------------------------------------
     // Outputs.
-    ProcessOutputs(0);
-    ProcessOutputs(1);
-    ProcessOutputs(2);
-    ProcessOutputs(3);
+    for (int i = 0; i < 4; ++i) {
+      ProcessOutputs(i);
+    }
 
     // -------------------------------------------------------------------------
     // Scoreboard.
@@ -295,10 +193,9 @@
 
     // Speculatively set wactive in cycle. Will be updated above in write cycle.
     uint64_t wactive = wactive_;
-    PrepareInputs(0, wactive);
-    PrepareInputs(1, wactive);
-    PrepareInputs(2, wactive);
-    PrepareInputs(3, wactive);
+    for (int i = 0; i < KP_instructionLanes; ++i) {
+      PrepareInputs(i, wactive);
+    }
 
     // -----------------------------------------------------------------------------
     // Register reads.
@@ -312,7 +209,7 @@
   }
 
  private:
-  fifo_t<valu_t> cmdq_[4];
+  fifo_t<valu_t> cmdq_[KP_instructionLanes];
 
   uint32_t regs_[64][kLanes];  // read-only
   uint32_t scalar_[kLanes];    // read-only
@@ -438,6 +335,7 @@
     if (idx == 5) READ_DATA(5);
     if (idx == 6) READ_DATA(6);
   }
+#undef READ_DATA
 
   void PrepareInputs(const int idx, uint64_t& wactive) {
     bool valid = rand_int(0, 3);
@@ -662,62 +560,57 @@
       }
     }
 
-#define IN_BITS(idx)                                  \
-  {                                                   \
-    io_in_bits_##idx##_valid = valid;                 \
-    io_in_bits_##idx##_bits_op = in.op;               \
-    io_in_bits_##idx##_bits_f2 = in.f2;               \
-    io_in_bits_##idx##_bits_sz = in.sz;               \
-    io_in_bits_##idx##_bits_m = in.m;                 \
-    io_in_bits_##idx##_bits_vd_valid = in.w[0].valid; \
-    io_in_bits_##idx##_bits_ve_valid = in.w[1].valid; \
-    io_in_bits_##idx##_bits_vf_valid = in.w[2].valid; \
-    io_in_bits_##idx##_bits_vg_valid = in.w[3].valid; \
-    io_in_bits_##idx##_bits_vs_valid = in.r[0].valid; \
-    io_in_bits_##idx##_bits_vt_valid = in.r[1].valid; \
-    io_in_bits_##idx##_bits_vu_valid = in.r[2].valid; \
-    io_in_bits_##idx##_bits_vx_valid = in.r[3].valid; \
-    io_in_bits_##idx##_bits_vy_valid = in.r[4].valid; \
-    io_in_bits_##idx##_bits_vz_valid = in.r[5].valid; \
-    io_in_bits_##idx##_bits_vd_addr = in.w[0].addr;   \
-    io_in_bits_##idx##_bits_ve_addr = in.w[1].addr;   \
-    io_in_bits_##idx##_bits_vf_addr = in.w[2].addr;   \
-    io_in_bits_##idx##_bits_vg_addr = in.w[3].addr;   \
-    io_in_bits_##idx##_bits_vs_addr = in.r[0].addr;   \
-    io_in_bits_##idx##_bits_vt_addr = in.r[1].addr;   \
-    io_in_bits_##idx##_bits_vu_addr = in.r[2].addr;   \
-    io_in_bits_##idx##_bits_vx_addr = in.r[3].addr;   \
-    io_in_bits_##idx##_bits_vy_addr = in.r[4].addr;   \
-    io_in_bits_##idx##_bits_vz_addr = in.r[5].addr;   \
-    io_in_bits_##idx##_bits_vs_tag = in.r[0].tag;     \
-    io_in_bits_##idx##_bits_vt_tag = in.r[1].tag;     \
-    io_in_bits_##idx##_bits_vu_tag = in.r[2].tag;     \
-    io_in_bits_##idx##_bits_vx_tag = in.r[3].tag;     \
-    io_in_bits_##idx##_bits_vy_tag = in.r[4].tag;     \
-    io_in_bits_##idx##_bits_vz_tag = in.r[5].tag;     \
-    io_in_bits_##idx##_bits_sv_valid = in.sv.valid;   \
-    io_in_bits_##idx##_bits_sv_addr = in.sv.addr;     \
-    io_in_bits_##idx##_bits_sv_data = in.sv.data;     \
-    io_in_bits_##idx##_bits_cmdsync = in.cmdsync;     \
+#define IN_BITS(x)                                  \
+  if (idx == x) {                                   \
+    io_in_bits_##x##_valid = valid;                 \
+    io_in_bits_##x##_bits_op = in.op;               \
+    io_in_bits_##x##_bits_f2 = in.f2;               \
+    io_in_bits_##x##_bits_sz = in.sz;               \
+    io_in_bits_##x##_bits_m = in.m;                 \
+    io_in_bits_##x##_bits_vd_valid = in.w[0].valid; \
+    io_in_bits_##x##_bits_ve_valid = in.w[1].valid; \
+    io_in_bits_##x##_bits_vf_valid = in.w[2].valid; \
+    io_in_bits_##x##_bits_vg_valid = in.w[3].valid; \
+    io_in_bits_##x##_bits_vs_valid = in.r[0].valid; \
+    io_in_bits_##x##_bits_vt_valid = in.r[1].valid; \
+    io_in_bits_##x##_bits_vu_valid = in.r[2].valid; \
+    io_in_bits_##x##_bits_vx_valid = in.r[3].valid; \
+    io_in_bits_##x##_bits_vy_valid = in.r[4].valid; \
+    io_in_bits_##x##_bits_vz_valid = in.r[5].valid; \
+    io_in_bits_##x##_bits_vd_addr = in.w[0].addr;   \
+    io_in_bits_##x##_bits_ve_addr = in.w[1].addr;   \
+    io_in_bits_##x##_bits_vf_addr = in.w[2].addr;   \
+    io_in_bits_##x##_bits_vg_addr = in.w[3].addr;   \
+    io_in_bits_##x##_bits_vs_addr = in.r[0].addr;   \
+    io_in_bits_##x##_bits_vt_addr = in.r[1].addr;   \
+    io_in_bits_##x##_bits_vu_addr = in.r[2].addr;   \
+    io_in_bits_##x##_bits_vx_addr = in.r[3].addr;   \
+    io_in_bits_##x##_bits_vy_addr = in.r[4].addr;   \
+    io_in_bits_##x##_bits_vz_addr = in.r[5].addr;   \
+    io_in_bits_##x##_bits_vs_tag = in.r[0].tag;     \
+    io_in_bits_##x##_bits_vt_tag = in.r[1].tag;     \
+    io_in_bits_##x##_bits_vu_tag = in.r[2].tag;     \
+    io_in_bits_##x##_bits_vx_tag = in.r[3].tag;     \
+    io_in_bits_##x##_bits_vy_tag = in.r[4].tag;     \
+    io_in_bits_##x##_bits_vz_tag = in.r[5].tag;     \
+    io_in_bits_##x##_bits_sv_valid = in.sv.valid;   \
+    io_in_bits_##x##_bits_sv_addr = in.sv.addr;     \
+    io_in_bits_##x##_bits_sv_data = in.sv.data;     \
+    io_in_bits_##x##_bits_cmdsync = in.cmdsync;     \
   }
-
-    if (idx == 0) IN_BITS(0);
-    if (idx == 1) IN_BITS(1);
-    if (idx == 2) IN_BITS(2);
-    if (idx == 3) IN_BITS(3);
+    REPEAT(IN_BITS, KP_instructionLanes);
   }
+#undef IN_BITS
 
+#define IDX_NOT_VALID(x) || ((idx == x) && !io_in_bits_##x##_valid)
   void ProcessInputs(const int idx) {
     // clang-format off
-    if (!(io_in_valid && io_in_ready) ||
-        (idx == 0 && !io_in_bits_0_valid) ||
-        (idx == 1 && !io_in_bits_1_valid) ||
-        (idx == 2 && !io_in_bits_2_valid) ||
-        (idx == 3 && !io_in_bits_3_valid)) {
+    if (!(io_in_valid && io_in_ready) REPEAT(IDX_NOT_VALID, KP_instructionLanes)) {
       cmdq_[idx].clear();
       return;
     }
     // clang-format on
+#undef IDX_NOT_VALID
 
     valu_t op;
     while (cmdq_[idx].read(op)) {
@@ -764,17 +657,15 @@
 
     int addr;
     uint32_t dut[kLanes];
-#define OUT_WRITE(idx)                                   \
-  {                                                      \
-    addr = io_write_##idx##_addr.read().get_word(0);     \
-    for (int i = 0; i < kLanes; ++i) {                   \
-      dut[i] = io_write_##idx##_data.read().get_word(i); \
-    }                                                    \
+#define OUT_WRITE(x)                                   \
+  if (idx == x) {                                      \
+    addr = io_write_##x##_addr.read().get_word(0);     \
+    for (int i = 0; i < kLanes; ++i) {                 \
+      dut[i] = io_write_##x##_data.read().get_word(i); \
+    }                                                  \
   }
-    if (idx == 0) OUT_WRITE(0);
-    if (idx == 1) OUT_WRITE(1);
-    if (idx == 2) OUT_WRITE(2);
-    if (idx == 3) OUT_WRITE(3);
+    REPEAT(OUT_WRITE, 4);
+#undef OUT_WRITE
 
     check(write_[addr].valid, "ProcessOutputs::io.write.valid");
     write_[addr].valid = false;
@@ -813,62 +704,6 @@
 static void VAlu_test(char* name, int loops, bool trace) {
   sc_signal<bool> io_in_ready;
   sc_signal<bool> io_in_valid;
-  sc_signal<bool> io_in_bits_0_valid;
-  sc_signal<bool> io_in_bits_0_bits_m;
-  sc_signal<bool> io_in_bits_0_bits_vd_valid;
-  sc_signal<bool> io_in_bits_0_bits_ve_valid;
-  sc_signal<bool> io_in_bits_0_bits_vf_valid;
-  sc_signal<bool> io_in_bits_0_bits_vg_valid;
-  sc_signal<bool> io_in_bits_0_bits_vs_valid;
-  sc_signal<bool> io_in_bits_0_bits_vt_valid;
-  sc_signal<bool> io_in_bits_0_bits_vu_valid;
-  sc_signal<bool> io_in_bits_0_bits_vx_valid;
-  sc_signal<bool> io_in_bits_0_bits_vy_valid;
-  sc_signal<bool> io_in_bits_0_bits_vz_valid;
-  sc_signal<bool> io_in_bits_0_bits_sv_valid;
-  sc_signal<bool> io_in_bits_0_bits_cmdsync;
-  sc_signal<bool> io_in_bits_1_valid;
-  sc_signal<bool> io_in_bits_1_bits_m;
-  sc_signal<bool> io_in_bits_1_bits_vd_valid;
-  sc_signal<bool> io_in_bits_1_bits_ve_valid;
-  sc_signal<bool> io_in_bits_1_bits_vf_valid;
-  sc_signal<bool> io_in_bits_1_bits_vg_valid;
-  sc_signal<bool> io_in_bits_1_bits_vs_valid;
-  sc_signal<bool> io_in_bits_1_bits_vt_valid;
-  sc_signal<bool> io_in_bits_1_bits_vu_valid;
-  sc_signal<bool> io_in_bits_1_bits_vx_valid;
-  sc_signal<bool> io_in_bits_1_bits_vy_valid;
-  sc_signal<bool> io_in_bits_1_bits_vz_valid;
-  sc_signal<bool> io_in_bits_1_bits_sv_valid;
-  sc_signal<bool> io_in_bits_1_bits_cmdsync;
-  sc_signal<bool> io_in_bits_2_valid;
-  sc_signal<bool> io_in_bits_2_bits_m;
-  sc_signal<bool> io_in_bits_2_bits_vd_valid;
-  sc_signal<bool> io_in_bits_2_bits_ve_valid;
-  sc_signal<bool> io_in_bits_2_bits_vf_valid;
-  sc_signal<bool> io_in_bits_2_bits_vg_valid;
-  sc_signal<bool> io_in_bits_2_bits_vs_valid;
-  sc_signal<bool> io_in_bits_2_bits_vt_valid;
-  sc_signal<bool> io_in_bits_2_bits_vu_valid;
-  sc_signal<bool> io_in_bits_2_bits_vx_valid;
-  sc_signal<bool> io_in_bits_2_bits_vy_valid;
-  sc_signal<bool> io_in_bits_2_bits_vz_valid;
-  sc_signal<bool> io_in_bits_2_bits_sv_valid;
-  sc_signal<bool> io_in_bits_2_bits_cmdsync;
-  sc_signal<bool> io_in_bits_3_valid;
-  sc_signal<bool> io_in_bits_3_bits_m;
-  sc_signal<bool> io_in_bits_3_bits_vd_valid;
-  sc_signal<bool> io_in_bits_3_bits_ve_valid;
-  sc_signal<bool> io_in_bits_3_bits_vf_valid;
-  sc_signal<bool> io_in_bits_3_bits_vg_valid;
-  sc_signal<bool> io_in_bits_3_bits_vs_valid;
-  sc_signal<bool> io_in_bits_3_bits_vt_valid;
-  sc_signal<bool> io_in_bits_3_bits_vu_valid;
-  sc_signal<bool> io_in_bits_3_bits_vx_valid;
-  sc_signal<bool> io_in_bits_3_bits_vy_valid;
-  sc_signal<bool> io_in_bits_3_bits_vz_valid;
-  sc_signal<bool> io_in_bits_3_bits_sv_valid;
-  sc_signal<bool> io_in_bits_3_bits_cmdsync;
   sc_signal<bool> io_read_0_valid;
   sc_signal<bool> io_read_1_valid;
   sc_signal<bool> io_read_2_valid;
@@ -893,90 +728,6 @@
   sc_signal<bool> io_whint_3_valid;
   sc_signal<bool> io_scalar_0_valid;
   sc_signal<bool> io_scalar_1_valid;
-  sc_signal<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_signal<sc_bv<64> > io_active;
   sc_signal<sc_bv<128> > io_vrfsb;
   sc_signal<sc_bv<6> > io_read_0_addr;
@@ -1014,6 +765,44 @@
   sc_signal<sc_bv<6> > io_whint_3_addr;
   sc_signal<sc_bv<32> > io_scalar_0_data;
   sc_signal<sc_bv<32> > io_scalar_1_data;
+#define IO_BITS(x)                                     \
+  sc_signal<bool> io_in_bits_##x##_valid;              \
+  sc_signal<bool> io_in_bits_##x##_bits_m;             \
+  sc_signal<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_signal<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   VAlu_tb tb("VAlu_tb", loops);
   VVAlu valu(name);
@@ -1026,62 +815,6 @@
   valu.reset(tb.reset);
   BIND2(tb, valu, io_in_ready);
   BIND2(tb, valu, io_in_valid);
-  BIND2(tb, valu, io_in_bits_0_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_m);
-  BIND2(tb, valu, io_in_bits_0_bits_vd_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_ve_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vf_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vg_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vs_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vt_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vu_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vx_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vy_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_vz_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_sv_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_cmdsync);
-  BIND2(tb, valu, io_in_bits_1_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_m);
-  BIND2(tb, valu, io_in_bits_1_bits_vd_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_ve_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vf_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vg_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vs_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vt_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vu_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vx_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vy_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_vz_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_sv_valid);
-  BIND2(tb, valu, io_in_bits_1_bits_cmdsync);
-  BIND2(tb, valu, io_in_bits_2_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_m);
-  BIND2(tb, valu, io_in_bits_2_bits_vd_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_ve_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vf_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vg_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vs_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vt_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vu_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vx_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vy_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_vz_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_sv_valid);
-  BIND2(tb, valu, io_in_bits_2_bits_cmdsync);
-  BIND2(tb, valu, io_in_bits_3_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_m);
-  BIND2(tb, valu, io_in_bits_3_bits_vd_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_ve_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vf_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vg_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vs_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vt_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vu_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vx_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vy_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_vz_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_sv_valid);
-  BIND2(tb, valu, io_in_bits_3_bits_cmdsync);
   BIND2(tb, valu, io_read_0_valid);
   BIND2(tb, valu, io_read_1_valid);
   BIND2(tb, valu, io_read_2_valid);
@@ -1106,90 +839,6 @@
   BIND2(tb, valu, io_whint_3_valid);
   BIND2(tb, valu, io_scalar_0_valid);
   BIND2(tb, valu, io_scalar_1_valid);
-  BIND2(tb, valu, io_in_bits_0_bits_op);
-  BIND2(tb, valu, io_in_bits_0_bits_f2);
-  BIND2(tb, valu, io_in_bits_0_bits_sz);
-  BIND2(tb, valu, io_in_bits_0_bits_vd_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_ve_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vf_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vg_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vs_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vt_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vu_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vx_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vy_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vz_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_vs_tag);
-  BIND2(tb, valu, io_in_bits_0_bits_vt_tag);
-  BIND2(tb, valu, io_in_bits_0_bits_vu_tag);
-  BIND2(tb, valu, io_in_bits_0_bits_vx_tag);
-  BIND2(tb, valu, io_in_bits_0_bits_vy_tag);
-  BIND2(tb, valu, io_in_bits_0_bits_vz_tag);
-  BIND2(tb, valu, io_in_bits_0_bits_sv_addr);
-  BIND2(tb, valu, io_in_bits_0_bits_sv_data);
-  BIND2(tb, valu, io_in_bits_1_bits_op);
-  BIND2(tb, valu, io_in_bits_1_bits_f2);
-  BIND2(tb, valu, io_in_bits_1_bits_sz);
-  BIND2(tb, valu, io_in_bits_1_bits_vd_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_ve_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vf_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vg_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vs_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vt_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vu_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vx_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vy_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vz_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_vs_tag);
-  BIND2(tb, valu, io_in_bits_1_bits_vt_tag);
-  BIND2(tb, valu, io_in_bits_1_bits_vu_tag);
-  BIND2(tb, valu, io_in_bits_1_bits_vx_tag);
-  BIND2(tb, valu, io_in_bits_1_bits_vy_tag);
-  BIND2(tb, valu, io_in_bits_1_bits_vz_tag);
-  BIND2(tb, valu, io_in_bits_1_bits_sv_addr);
-  BIND2(tb, valu, io_in_bits_1_bits_sv_data);
-  BIND2(tb, valu, io_in_bits_2_bits_op);
-  BIND2(tb, valu, io_in_bits_2_bits_f2);
-  BIND2(tb, valu, io_in_bits_2_bits_sz);
-  BIND2(tb, valu, io_in_bits_2_bits_vd_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_ve_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vf_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vg_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vs_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vt_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vu_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vx_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vy_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vz_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_vs_tag);
-  BIND2(tb, valu, io_in_bits_2_bits_vt_tag);
-  BIND2(tb, valu, io_in_bits_2_bits_vu_tag);
-  BIND2(tb, valu, io_in_bits_2_bits_vx_tag);
-  BIND2(tb, valu, io_in_bits_2_bits_vy_tag);
-  BIND2(tb, valu, io_in_bits_2_bits_vz_tag);
-  BIND2(tb, valu, io_in_bits_2_bits_sv_addr);
-  BIND2(tb, valu, io_in_bits_2_bits_sv_data);
-  BIND2(tb, valu, io_in_bits_3_bits_op);
-  BIND2(tb, valu, io_in_bits_3_bits_f2);
-  BIND2(tb, valu, io_in_bits_3_bits_sz);
-  BIND2(tb, valu, io_in_bits_3_bits_vd_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_ve_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vf_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vg_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vs_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vt_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vu_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vx_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vy_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vz_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_vs_tag);
-  BIND2(tb, valu, io_in_bits_3_bits_vt_tag);
-  BIND2(tb, valu, io_in_bits_3_bits_vu_tag);
-  BIND2(tb, valu, io_in_bits_3_bits_vx_tag);
-  BIND2(tb, valu, io_in_bits_3_bits_vy_tag);
-  BIND2(tb, valu, io_in_bits_3_bits_vz_tag);
-  BIND2(tb, valu, io_in_bits_3_bits_sv_addr);
-  BIND2(tb, valu, io_in_bits_3_bits_sv_data);
   BIND2(tb, valu, io_active);
   BIND2(tb, valu, io_vrfsb);
   BIND2(tb, valu, io_read_0_addr);
@@ -1227,6 +876,44 @@
   BIND2(tb, valu, io_whint_3_addr);
   BIND2(tb, valu, io_scalar_0_data);
   BIND2(tb, valu, io_scalar_1_data);
+#define IO_BIND(x)                                 \
+  BIND2(tb, valu, io_in_bits_##x##_valid);         \
+  BIND2(tb, valu, io_in_bits_##x##_bits_m);        \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vd_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_ve_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vf_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vg_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vs_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vt_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vu_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vx_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vy_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vz_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_sv_valid); \
+  BIND2(tb, valu, io_in_bits_##x##_bits_cmdsync);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_op);       \
+  BIND2(tb, valu, io_in_bits_##x##_bits_f2);       \
+  BIND2(tb, valu, io_in_bits_##x##_bits_sz);       \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vd_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_ve_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vf_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vg_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vs_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vt_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vu_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vx_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vy_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vz_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vs_tag);   \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vt_tag);   \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vu_tag);   \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vx_tag);   \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vy_tag);   \
+  BIND2(tb, valu, io_in_bits_##x##_bits_vz_tag);   \
+  BIND2(tb, valu, io_in_bits_##x##_bits_sv_addr);  \
+  BIND2(tb, valu, io_in_bits_##x##_bits_sv_data);
+  REPEAT(IO_BIND, KP_instructionLanes);
+#undef IO_BIND
 
   tb.start();
 }
diff --git a/tests/verilator_sim/kelvin/vcmdq_tb.cc b/tests/verilator_sim/kelvin/vcmdq_tb.cc
index aec9c50..0827e1c 100644
--- a/tests/verilator_sim/kelvin/vcmdq_tb.cc
+++ b/tests/verilator_sim/kelvin/vcmdq_tb.cc
@@ -13,156 +13,18 @@
 // limitations under the License.
 
 #include "VVCmdq.h"
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 struct VCmdq_tb : Sysc_tb {
   sc_in<bool> io_in_ready;
   sc_out<bool> io_in_valid;
-  sc_out<bool> io_in_bits_0_valid;
-  sc_out<bool> io_in_bits_0_bits_m;
-  sc_out<bool> io_in_bits_0_bits_vd_valid;
-  sc_out<bool> io_in_bits_0_bits_ve_valid;
-  sc_out<bool> io_in_bits_0_bits_vf_valid;
-  sc_out<bool> io_in_bits_0_bits_vg_valid;
-  sc_out<bool> io_in_bits_0_bits_vs_valid;
-  sc_out<bool> io_in_bits_0_bits_vt_valid;
-  sc_out<bool> io_in_bits_0_bits_vu_valid;
-  sc_out<bool> io_in_bits_0_bits_vx_valid;
-  sc_out<bool> io_in_bits_0_bits_vy_valid;
-  sc_out<bool> io_in_bits_0_bits_vz_valid;
-  sc_out<bool> io_in_bits_0_bits_sv_valid;
-  sc_out<bool> io_in_bits_0_bits_cmdsync;
-  sc_out<bool> io_in_bits_1_valid;
-  sc_out<bool> io_in_bits_1_bits_m;
-  sc_out<bool> io_in_bits_1_bits_vd_valid;
-  sc_out<bool> io_in_bits_1_bits_ve_valid;
-  sc_out<bool> io_in_bits_1_bits_vf_valid;
-  sc_out<bool> io_in_bits_1_bits_vg_valid;
-  sc_out<bool> io_in_bits_1_bits_vs_valid;
-  sc_out<bool> io_in_bits_1_bits_vt_valid;
-  sc_out<bool> io_in_bits_1_bits_vu_valid;
-  sc_out<bool> io_in_bits_1_bits_vx_valid;
-  sc_out<bool> io_in_bits_1_bits_vy_valid;
-  sc_out<bool> io_in_bits_1_bits_vz_valid;
-  sc_out<bool> io_in_bits_1_bits_sv_valid;
-  sc_out<bool> io_in_bits_1_bits_cmdsync;
-  sc_out<bool> io_in_bits_2_valid;
-  sc_out<bool> io_in_bits_2_bits_m;
-  sc_out<bool> io_in_bits_2_bits_vd_valid;
-  sc_out<bool> io_in_bits_2_bits_ve_valid;
-  sc_out<bool> io_in_bits_2_bits_vf_valid;
-  sc_out<bool> io_in_bits_2_bits_vg_valid;
-  sc_out<bool> io_in_bits_2_bits_vs_valid;
-  sc_out<bool> io_in_bits_2_bits_vt_valid;
-  sc_out<bool> io_in_bits_2_bits_vu_valid;
-  sc_out<bool> io_in_bits_2_bits_vx_valid;
-  sc_out<bool> io_in_bits_2_bits_vy_valid;
-  sc_out<bool> io_in_bits_2_bits_vz_valid;
-  sc_out<bool> io_in_bits_2_bits_sv_valid;
-  sc_out<bool> io_in_bits_2_bits_cmdsync;
-  sc_out<bool> io_in_bits_3_valid;
-  sc_out<bool> io_in_bits_3_bits_m;
-  sc_out<bool> io_in_bits_3_bits_vd_valid;
-  sc_out<bool> io_in_bits_3_bits_ve_valid;
-  sc_out<bool> io_in_bits_3_bits_vf_valid;
-  sc_out<bool> io_in_bits_3_bits_vg_valid;
-  sc_out<bool> io_in_bits_3_bits_vs_valid;
-  sc_out<bool> io_in_bits_3_bits_vt_valid;
-  sc_out<bool> io_in_bits_3_bits_vu_valid;
-  sc_out<bool> io_in_bits_3_bits_vx_valid;
-  sc_out<bool> io_in_bits_3_bits_vy_valid;
-  sc_out<bool> io_in_bits_3_bits_vz_valid;
-  sc_out<bool> io_in_bits_3_bits_sv_valid;
-  sc_out<bool> io_in_bits_3_bits_cmdsync;
   sc_out<bool> io_out_ready;
   sc_in<bool> io_out_valid;
   sc_in<bool> io_out_bits_vd_valid;
   sc_in<bool> io_out_bits_vs_valid;
   sc_in<bool> io_nempty;
-  sc_out<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_in<sc_bv<7> > io_out_bits_op;
   sc_in<sc_bv<3> > io_out_bits_sz;
   sc_in<sc_bv<6> > io_out_bits_vd_addr;
@@ -170,6 +32,44 @@
   sc_in<sc_bv<4> > io_out_bits_vs_tag;
   sc_in<sc_bv<32> > io_out_bits_data;
   sc_in<sc_bv<64> > io_active;
+#define IO_BITS(x)                                  \
+  sc_out<bool> io_in_bits_##x##_valid;              \
+  sc_out<bool> io_in_bits_##x##_bits_m;             \
+  sc_out<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_out<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   using Sysc_tb::Sysc_tb;
 
@@ -232,28 +132,27 @@
 
     io_in_valid = rand_int(0, 7) == 0;  // Try to hit both full and empty.
     io_out_ready = rand_bool();
-    IN_RAND(0);
-    IN_RAND(1);
-    IN_RAND(2);
-    IN_RAND(3);
 
-#define IN_READ(idx)                                        \
-  Input(io_in_bits_##idx##_bits_m,                          \
-        io_in_bits_##idx##_bits_op.read().get_word(0),      \
-        io_in_bits_##idx##_bits_sz.read().get_word(0),      \
-        io_in_bits_##idx##_bits_vd_valid,                   \
-        io_in_bits_##idx##_bits_vd_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_vs_valid,                   \
-        io_in_bits_##idx##_bits_vs_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_vs_tag.read().get_word(0),  \
-        io_in_bits_##idx##_bits_sv_data.read().get_word(0));
+    REPEAT(IN_RAND, KP_instructionLanes);
+#undef IN_RAND
+
+#define IN_READ(idx)                                           \
+  if (io_in_bits_##idx##_valid) {                              \
+    Input(io_in_bits_##idx##_bits_m,                           \
+          io_in_bits_##idx##_bits_op.read().get_word(0),       \
+          io_in_bits_##idx##_bits_sz.read().get_word(0),       \
+          io_in_bits_##idx##_bits_vd_valid,                    \
+          io_in_bits_##idx##_bits_vd_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_vs_valid,                    \
+          io_in_bits_##idx##_bits_vs_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_vs_tag.read().get_word(0),   \
+          io_in_bits_##idx##_bits_sv_data.read().get_word(0)); \
+  }
 
     if (io_in_valid && io_in_ready) {
-      if (io_in_bits_0_valid) IN_READ(0);
-      if (io_in_bits_1_valid) IN_READ(1);
-      if (io_in_bits_2_valid) IN_READ(2);
-      if (io_in_bits_3_valid) IN_READ(3);
+      REPEAT(IN_READ, KP_instructionLanes);
     }
+#undef IN_READ
 
     // Outputs.
     cmdq_t dut, ref;
@@ -362,151 +261,11 @@
 static void VCmdq_test(char* name, int loops, bool random, bool trace) {
   sc_signal<bool> io_in_ready;
   sc_signal<bool> io_in_valid;
-  sc_signal<bool> io_in_bits_0_valid;
-  sc_signal<bool> io_in_bits_0_bits_m;
-  sc_signal<bool> io_in_bits_0_bits_vd_valid;
-  sc_signal<bool> io_in_bits_0_bits_ve_valid;
-  sc_signal<bool> io_in_bits_0_bits_vf_valid;
-  sc_signal<bool> io_in_bits_0_bits_vg_valid;
-  sc_signal<bool> io_in_bits_0_bits_vs_valid;
-  sc_signal<bool> io_in_bits_0_bits_vt_valid;
-  sc_signal<bool> io_in_bits_0_bits_vu_valid;
-  sc_signal<bool> io_in_bits_0_bits_vx_valid;
-  sc_signal<bool> io_in_bits_0_bits_vy_valid;
-  sc_signal<bool> io_in_bits_0_bits_vz_valid;
-  sc_signal<bool> io_in_bits_0_bits_sv_valid;
-  sc_signal<bool> io_in_bits_0_bits_cmdsync;
-  sc_signal<bool> io_in_bits_1_valid;
-  sc_signal<bool> io_in_bits_1_bits_m;
-  sc_signal<bool> io_in_bits_1_bits_vd_valid;
-  sc_signal<bool> io_in_bits_1_bits_ve_valid;
-  sc_signal<bool> io_in_bits_1_bits_vf_valid;
-  sc_signal<bool> io_in_bits_1_bits_vg_valid;
-  sc_signal<bool> io_in_bits_1_bits_vs_valid;
-  sc_signal<bool> io_in_bits_1_bits_vt_valid;
-  sc_signal<bool> io_in_bits_1_bits_vu_valid;
-  sc_signal<bool> io_in_bits_1_bits_vx_valid;
-  sc_signal<bool> io_in_bits_1_bits_vy_valid;
-  sc_signal<bool> io_in_bits_1_bits_vz_valid;
-  sc_signal<bool> io_in_bits_1_bits_sv_valid;
-  sc_signal<bool> io_in_bits_1_bits_cmdsync;
-  sc_signal<bool> io_in_bits_2_valid;
-  sc_signal<bool> io_in_bits_2_bits_m;
-  sc_signal<bool> io_in_bits_2_bits_vd_valid;
-  sc_signal<bool> io_in_bits_2_bits_ve_valid;
-  sc_signal<bool> io_in_bits_2_bits_vf_valid;
-  sc_signal<bool> io_in_bits_2_bits_vg_valid;
-  sc_signal<bool> io_in_bits_2_bits_vs_valid;
-  sc_signal<bool> io_in_bits_2_bits_vt_valid;
-  sc_signal<bool> io_in_bits_2_bits_vu_valid;
-  sc_signal<bool> io_in_bits_2_bits_vx_valid;
-  sc_signal<bool> io_in_bits_2_bits_vy_valid;
-  sc_signal<bool> io_in_bits_2_bits_vz_valid;
-  sc_signal<bool> io_in_bits_2_bits_sv_valid;
-  sc_signal<bool> io_in_bits_2_bits_cmdsync;
-  sc_signal<bool> io_in_bits_3_valid;
-  sc_signal<bool> io_in_bits_3_bits_m;
-  sc_signal<bool> io_in_bits_3_bits_vd_valid;
-  sc_signal<bool> io_in_bits_3_bits_ve_valid;
-  sc_signal<bool> io_in_bits_3_bits_vf_valid;
-  sc_signal<bool> io_in_bits_3_bits_vg_valid;
-  sc_signal<bool> io_in_bits_3_bits_vs_valid;
-  sc_signal<bool> io_in_bits_3_bits_vt_valid;
-  sc_signal<bool> io_in_bits_3_bits_vu_valid;
-  sc_signal<bool> io_in_bits_3_bits_vx_valid;
-  sc_signal<bool> io_in_bits_3_bits_vy_valid;
-  sc_signal<bool> io_in_bits_3_bits_vz_valid;
-  sc_signal<bool> io_in_bits_3_bits_sv_valid;
-  sc_signal<bool> io_in_bits_3_bits_cmdsync;
   sc_signal<bool> io_out_ready;
   sc_signal<bool> io_out_valid;
   sc_signal<bool> io_out_bits_vd_valid;
   sc_signal<bool> io_out_bits_vs_valid;
   sc_signal<bool> io_nempty;
-  sc_signal<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_signal<sc_bv<7> > io_out_bits_op;
   sc_signal<sc_bv<3> > io_out_bits_sz;
   sc_signal<sc_bv<6> > io_out_bits_vd_addr;
@@ -514,6 +273,44 @@
   sc_signal<sc_bv<4> > io_out_bits_vs_tag;
   sc_signal<sc_bv<32> > io_out_bits_data;
   sc_signal<sc_bv<64> > io_active;
+#define IO_BITS(x)                                     \
+  sc_signal<bool> io_in_bits_##x##_valid;              \
+  sc_signal<bool> io_in_bits_##x##_bits_m;             \
+  sc_signal<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_signal<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   VCmdq_tb tb("VCmdq_tb", loops, random);
   VVCmdq cmdq(name);
@@ -522,151 +319,11 @@
   cmdq.reset(tb.reset);
   BIND2(tb, cmdq, io_in_ready);
   BIND2(tb, cmdq, io_in_valid);
-  BIND2(tb, cmdq, io_in_bits_0_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_m);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vd_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_ve_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vf_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vg_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vs_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vt_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vu_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vx_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vy_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vz_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_sv_valid);
-  BIND2(tb, cmdq, io_in_bits_0_bits_cmdsync);
-  BIND2(tb, cmdq, io_in_bits_1_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_m);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vd_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_ve_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vf_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vg_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vs_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vt_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vu_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vx_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vy_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vz_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_sv_valid);
-  BIND2(tb, cmdq, io_in_bits_1_bits_cmdsync);
-  BIND2(tb, cmdq, io_in_bits_2_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_m);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vd_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_ve_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vf_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vg_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vs_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vt_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vu_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vx_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vy_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vz_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_sv_valid);
-  BIND2(tb, cmdq, io_in_bits_2_bits_cmdsync);
-  BIND2(tb, cmdq, io_in_bits_3_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_m);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vd_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_ve_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vf_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vg_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vs_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vt_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vu_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vx_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vy_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vz_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_sv_valid);
-  BIND2(tb, cmdq, io_in_bits_3_bits_cmdsync);
   BIND2(tb, cmdq, io_out_ready);
   BIND2(tb, cmdq, io_out_valid);
   BIND2(tb, cmdq, io_out_bits_vd_valid);
   BIND2(tb, cmdq, io_out_bits_vs_valid);
   BIND2(tb, cmdq, io_nempty);
-  BIND2(tb, cmdq, io_in_bits_0_bits_op);
-  BIND2(tb, cmdq, io_in_bits_0_bits_f2);
-  BIND2(tb, cmdq, io_in_bits_0_bits_sz);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vd_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_ve_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vf_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vg_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vs_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vt_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vu_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vx_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vy_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vz_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vs_tag);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vt_tag);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vu_tag);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vx_tag);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vy_tag);
-  BIND2(tb, cmdq, io_in_bits_0_bits_vz_tag);
-  BIND2(tb, cmdq, io_in_bits_0_bits_sv_addr);
-  BIND2(tb, cmdq, io_in_bits_0_bits_sv_data);
-  BIND2(tb, cmdq, io_in_bits_1_bits_op);
-  BIND2(tb, cmdq, io_in_bits_1_bits_f2);
-  BIND2(tb, cmdq, io_in_bits_1_bits_sz);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vd_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_ve_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vf_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vg_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vs_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vt_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vu_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vx_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vy_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vz_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vs_tag);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vt_tag);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vu_tag);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vx_tag);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vy_tag);
-  BIND2(tb, cmdq, io_in_bits_1_bits_vz_tag);
-  BIND2(tb, cmdq, io_in_bits_1_bits_sv_addr);
-  BIND2(tb, cmdq, io_in_bits_1_bits_sv_data);
-  BIND2(tb, cmdq, io_in_bits_2_bits_op);
-  BIND2(tb, cmdq, io_in_bits_2_bits_f2);
-  BIND2(tb, cmdq, io_in_bits_2_bits_sz);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vd_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_ve_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vf_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vg_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vs_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vt_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vu_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vx_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vy_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vz_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vs_tag);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vt_tag);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vu_tag);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vx_tag);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vy_tag);
-  BIND2(tb, cmdq, io_in_bits_2_bits_vz_tag);
-  BIND2(tb, cmdq, io_in_bits_2_bits_sv_addr);
-  BIND2(tb, cmdq, io_in_bits_2_bits_sv_data);
-  BIND2(tb, cmdq, io_in_bits_3_bits_op);
-  BIND2(tb, cmdq, io_in_bits_3_bits_f2);
-  BIND2(tb, cmdq, io_in_bits_3_bits_sz);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vd_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_ve_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vf_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vg_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vs_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vt_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vu_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vx_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vy_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vz_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vs_tag);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vt_tag);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vu_tag);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vx_tag);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vy_tag);
-  BIND2(tb, cmdq, io_in_bits_3_bits_vz_tag);
-  BIND2(tb, cmdq, io_in_bits_3_bits_sv_addr);
-  BIND2(tb, cmdq, io_in_bits_3_bits_sv_data);
   BIND2(tb, cmdq, io_out_bits_op);
   BIND2(tb, cmdq, io_out_bits_sz);
   BIND2(tb, cmdq, io_out_bits_vd_addr);
@@ -674,6 +331,44 @@
   BIND2(tb, cmdq, io_out_bits_vs_tag);
   BIND2(tb, cmdq, io_out_bits_data);
   BIND2(tb, cmdq, io_active);
+#define IO_BIND(x)                                 \
+  BIND2(tb, cmdq, io_in_bits_##x##_valid);         \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_m);        \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vd_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_ve_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vf_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vg_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vs_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vt_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vu_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vx_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vy_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vz_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_sv_valid); \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_cmdsync);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_op);       \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_f2);       \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_sz);       \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vd_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_ve_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vf_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vg_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vs_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vt_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vu_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vx_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vy_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vz_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vs_tag);   \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vt_tag);   \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vu_tag);   \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vx_tag);   \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vy_tag);   \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_vz_tag);   \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_sv_addr);  \
+  BIND2(tb, cmdq, io_in_bits_##x##_bits_sv_data);
+  REPEAT(IO_BIND, KP_instructionLanes);
+#undef IO_BIND
 
   if (trace) {
     tb.trace(cmdq);
diff --git a/tests/verilator_sim/kelvin/vconvctrl_tb.cc b/tests/verilator_sim/kelvin/vconvctrl_tb.cc
index 47cfd41..d47d2a6 100644
--- a/tests/verilator_sim/kelvin/vconvctrl_tb.cc
+++ b/tests/verilator_sim/kelvin/vconvctrl_tb.cc
@@ -13,9 +13,11 @@
 // limitations under the License.
 
 #include "VVConvCtrl.h"
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/kelvin/kelvin_cfg.h"
-#include "tests/verilator_sim/sysc_tb.h"
 #include "tests/verilator_sim/kelvin/vencodeop.h"
+#include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 using encode::aconv;
 using encode::vcget;
@@ -27,62 +29,6 @@
 struct VConvCtrl_tb : Sysc_tb {
   sc_in<bool> io_in_ready;
   sc_out<bool> io_in_valid;
-  sc_out<bool> io_in_bits_0_valid;
-  sc_out<bool> io_in_bits_0_bits_m;
-  sc_out<bool> io_in_bits_0_bits_vd_valid;
-  sc_out<bool> io_in_bits_0_bits_ve_valid;
-  sc_out<bool> io_in_bits_0_bits_vf_valid;
-  sc_out<bool> io_in_bits_0_bits_vg_valid;
-  sc_out<bool> io_in_bits_0_bits_vs_valid;
-  sc_out<bool> io_in_bits_0_bits_vt_valid;
-  sc_out<bool> io_in_bits_0_bits_vu_valid;
-  sc_out<bool> io_in_bits_0_bits_vx_valid;
-  sc_out<bool> io_in_bits_0_bits_vy_valid;
-  sc_out<bool> io_in_bits_0_bits_vz_valid;
-  sc_out<bool> io_in_bits_0_bits_sv_valid;
-  sc_out<bool> io_in_bits_0_bits_cmdsync;
-  sc_out<bool> io_in_bits_1_valid;
-  sc_out<bool> io_in_bits_1_bits_m;
-  sc_out<bool> io_in_bits_1_bits_vd_valid;
-  sc_out<bool> io_in_bits_1_bits_ve_valid;
-  sc_out<bool> io_in_bits_1_bits_vf_valid;
-  sc_out<bool> io_in_bits_1_bits_vg_valid;
-  sc_out<bool> io_in_bits_1_bits_vs_valid;
-  sc_out<bool> io_in_bits_1_bits_vt_valid;
-  sc_out<bool> io_in_bits_1_bits_vu_valid;
-  sc_out<bool> io_in_bits_1_bits_vx_valid;
-  sc_out<bool> io_in_bits_1_bits_vy_valid;
-  sc_out<bool> io_in_bits_1_bits_vz_valid;
-  sc_out<bool> io_in_bits_1_bits_sv_valid;
-  sc_out<bool> io_in_bits_1_bits_cmdsync;
-  sc_out<bool> io_in_bits_2_valid;
-  sc_out<bool> io_in_bits_2_bits_m;
-  sc_out<bool> io_in_bits_2_bits_vd_valid;
-  sc_out<bool> io_in_bits_2_bits_ve_valid;
-  sc_out<bool> io_in_bits_2_bits_vf_valid;
-  sc_out<bool> io_in_bits_2_bits_vg_valid;
-  sc_out<bool> io_in_bits_2_bits_vs_valid;
-  sc_out<bool> io_in_bits_2_bits_vt_valid;
-  sc_out<bool> io_in_bits_2_bits_vu_valid;
-  sc_out<bool> io_in_bits_2_bits_vx_valid;
-  sc_out<bool> io_in_bits_2_bits_vy_valid;
-  sc_out<bool> io_in_bits_2_bits_vz_valid;
-  sc_out<bool> io_in_bits_2_bits_sv_valid;
-  sc_out<bool> io_in_bits_2_bits_cmdsync;
-  sc_out<bool> io_in_bits_3_valid;
-  sc_out<bool> io_in_bits_3_bits_m;
-  sc_out<bool> io_in_bits_3_bits_vd_valid;
-  sc_out<bool> io_in_bits_3_bits_ve_valid;
-  sc_out<bool> io_in_bits_3_bits_vf_valid;
-  sc_out<bool> io_in_bits_3_bits_vg_valid;
-  sc_out<bool> io_in_bits_3_bits_vs_valid;
-  sc_out<bool> io_in_bits_3_bits_vt_valid;
-  sc_out<bool> io_in_bits_3_bits_vu_valid;
-  sc_out<bool> io_in_bits_3_bits_vx_valid;
-  sc_out<bool> io_in_bits_3_bits_vy_valid;
-  sc_out<bool> io_in_bits_3_bits_vz_valid;
-  sc_out<bool> io_in_bits_3_bits_sv_valid;
-  sc_out<bool> io_in_bits_3_bits_cmdsync;
   sc_in<bool> io_out_valid;
   sc_in<bool> io_out_ready;
   sc_in<bool> io_out_op_conv;
@@ -93,96 +39,50 @@
   sc_in<bool> io_out_bsign;
   sc_in<sc_bv<64> > io_active;
   sc_out<sc_bv<128> > io_vrfsb;
-  sc_out<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_in<sc_bv<6> > io_out_addr1;
   sc_in<sc_bv<6> > io_out_addr2;
   sc_in<sc_bv<2> > io_out_mode;
   sc_in<sc_bv<kIndex> > io_out_index;
   sc_in<sc_bv<9> > io_out_abias;
   sc_in<sc_bv<9> > io_out_bbias;
+#define IO_BITS(x)                                  \
+  sc_out<bool> io_in_bits_##x##_valid;              \
+  sc_out<bool> io_in_bits_##x##_bits_m;             \
+  sc_out<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_out<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   using Sysc_tb::Sysc_tb;
 
@@ -237,10 +137,8 @@
 
     io_in_valid = rand_int(0, 7) == 0;  // Try to hit both full and empty.
 
-    IN_RAND(0);
-    IN_RAND(1);
-    IN_RAND(2);
-    IN_RAND(3);
+    REPEAT(IN_RAND, KP_instructionLanes);
+#undef IN_RAND
 
 #if 1
     // Scoreboard.
@@ -251,19 +149,19 @@
     io_vrfsb = vrfsb;
 #endif
 
-#define IN_READ(idx)                                        \
-  Input(io_in_bits_##idx##_bits_op.read().get_word(0),      \
-        io_in_bits_##idx##_bits_vd_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_vs_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_vu_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_sv_data.read().get_word(0));
+#define IN_READ(idx)                                           \
+  if (io_in_bits_##idx##_valid) {                              \
+    Input(io_in_bits_##idx##_bits_op.read().get_word(0),       \
+          io_in_bits_##idx##_bits_vd_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_vs_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_vu_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_sv_data.read().get_word(0)); \
+  }
 
     if (io_in_valid && io_in_ready) {
-      if (io_in_bits_0_valid) IN_READ(0);
-      if (io_in_bits_1_valid) IN_READ(1);
-      if (io_in_bits_2_valid) IN_READ(2);
-      if (io_in_bits_3_valid) IN_READ(3);
+      REPEAT(IN_READ, KP_instructionLanes);
     }
+#undef IN_READ
 
     // Outputs.
     conv_t dut, ref;
@@ -433,62 +331,6 @@
 static void VConvCtrl_test(char* name, int loops, bool trace) {
   sc_signal<bool> io_in_ready;
   sc_signal<bool> io_in_valid;
-  sc_signal<bool> io_in_bits_0_valid;
-  sc_signal<bool> io_in_bits_0_bits_m;
-  sc_signal<bool> io_in_bits_0_bits_vd_valid;
-  sc_signal<bool> io_in_bits_0_bits_ve_valid;
-  sc_signal<bool> io_in_bits_0_bits_vf_valid;
-  sc_signal<bool> io_in_bits_0_bits_vg_valid;
-  sc_signal<bool> io_in_bits_0_bits_vs_valid;
-  sc_signal<bool> io_in_bits_0_bits_vt_valid;
-  sc_signal<bool> io_in_bits_0_bits_vu_valid;
-  sc_signal<bool> io_in_bits_0_bits_vx_valid;
-  sc_signal<bool> io_in_bits_0_bits_vy_valid;
-  sc_signal<bool> io_in_bits_0_bits_vz_valid;
-  sc_signal<bool> io_in_bits_0_bits_sv_valid;
-  sc_signal<bool> io_in_bits_0_bits_cmdsync;
-  sc_signal<bool> io_in_bits_1_valid;
-  sc_signal<bool> io_in_bits_1_bits_m;
-  sc_signal<bool> io_in_bits_1_bits_vd_valid;
-  sc_signal<bool> io_in_bits_1_bits_ve_valid;
-  sc_signal<bool> io_in_bits_1_bits_vf_valid;
-  sc_signal<bool> io_in_bits_1_bits_vg_valid;
-  sc_signal<bool> io_in_bits_1_bits_vs_valid;
-  sc_signal<bool> io_in_bits_1_bits_vt_valid;
-  sc_signal<bool> io_in_bits_1_bits_vu_valid;
-  sc_signal<bool> io_in_bits_1_bits_vx_valid;
-  sc_signal<bool> io_in_bits_1_bits_vy_valid;
-  sc_signal<bool> io_in_bits_1_bits_vz_valid;
-  sc_signal<bool> io_in_bits_1_bits_sv_valid;
-  sc_signal<bool> io_in_bits_1_bits_cmdsync;
-  sc_signal<bool> io_in_bits_2_valid;
-  sc_signal<bool> io_in_bits_2_bits_m;
-  sc_signal<bool> io_in_bits_2_bits_vd_valid;
-  sc_signal<bool> io_in_bits_2_bits_ve_valid;
-  sc_signal<bool> io_in_bits_2_bits_vf_valid;
-  sc_signal<bool> io_in_bits_2_bits_vg_valid;
-  sc_signal<bool> io_in_bits_2_bits_vs_valid;
-  sc_signal<bool> io_in_bits_2_bits_vt_valid;
-  sc_signal<bool> io_in_bits_2_bits_vu_valid;
-  sc_signal<bool> io_in_bits_2_bits_vx_valid;
-  sc_signal<bool> io_in_bits_2_bits_vy_valid;
-  sc_signal<bool> io_in_bits_2_bits_vz_valid;
-  sc_signal<bool> io_in_bits_2_bits_sv_valid;
-  sc_signal<bool> io_in_bits_2_bits_cmdsync;
-  sc_signal<bool> io_in_bits_3_valid;
-  sc_signal<bool> io_in_bits_3_bits_m;
-  sc_signal<bool> io_in_bits_3_bits_vd_valid;
-  sc_signal<bool> io_in_bits_3_bits_ve_valid;
-  sc_signal<bool> io_in_bits_3_bits_vf_valid;
-  sc_signal<bool> io_in_bits_3_bits_vg_valid;
-  sc_signal<bool> io_in_bits_3_bits_vs_valid;
-  sc_signal<bool> io_in_bits_3_bits_vt_valid;
-  sc_signal<bool> io_in_bits_3_bits_vu_valid;
-  sc_signal<bool> io_in_bits_3_bits_vx_valid;
-  sc_signal<bool> io_in_bits_3_bits_vy_valid;
-  sc_signal<bool> io_in_bits_3_bits_vz_valid;
-  sc_signal<bool> io_in_bits_3_bits_sv_valid;
-  sc_signal<bool> io_in_bits_3_bits_cmdsync;
   sc_signal<bool> io_out_valid;
   sc_signal<bool> io_out_ready;
   sc_signal<bool> io_out_op_conv;
@@ -499,96 +341,50 @@
   sc_signal<bool> io_out_bsign;
   sc_signal<sc_bv<64> > io_active;
   sc_signal<sc_bv<128> > io_vrfsb;
-  sc_signal<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_signal<sc_bv<6> > io_out_addr1;
   sc_signal<sc_bv<6> > io_out_addr2;
   sc_signal<sc_bv<2> > io_out_mode;
   sc_signal<sc_bv<kIndex> > io_out_index;
   sc_signal<sc_bv<9> > io_out_abias;
   sc_signal<sc_bv<9> > io_out_bbias;
+#define IO_BITS(x)                                     \
+  sc_signal<bool> io_in_bits_##x##_valid;              \
+  sc_signal<bool> io_in_bits_##x##_bits_m;             \
+  sc_signal<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_signal<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   VConvCtrl_tb tb("VConvCtrl_tb", loops, true /*random*/);
   VVConvCtrl conv(name);
@@ -597,62 +393,6 @@
   conv.reset(tb.reset);
   BIND2(tb, conv, io_in_ready);
   BIND2(tb, conv, io_in_valid);
-  BIND2(tb, conv, io_in_bits_0_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_m);
-  BIND2(tb, conv, io_in_bits_0_bits_vd_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_ve_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vf_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vg_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vs_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vt_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vu_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vx_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vy_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_vz_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_sv_valid);
-  BIND2(tb, conv, io_in_bits_0_bits_cmdsync);
-  BIND2(tb, conv, io_in_bits_1_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_m);
-  BIND2(tb, conv, io_in_bits_1_bits_vd_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_ve_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vf_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vg_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vs_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vt_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vu_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vx_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vy_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_vz_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_sv_valid);
-  BIND2(tb, conv, io_in_bits_1_bits_cmdsync);
-  BIND2(tb, conv, io_in_bits_2_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_m);
-  BIND2(tb, conv, io_in_bits_2_bits_vd_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_ve_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vf_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vg_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vs_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vt_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vu_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vx_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vy_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_vz_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_sv_valid);
-  BIND2(tb, conv, io_in_bits_2_bits_cmdsync);
-  BIND2(tb, conv, io_in_bits_3_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_m);
-  BIND2(tb, conv, io_in_bits_3_bits_vd_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_ve_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vf_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vg_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vs_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vt_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vu_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vx_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vy_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_vz_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_sv_valid);
-  BIND2(tb, conv, io_in_bits_3_bits_cmdsync);
   BIND2(tb, conv, io_out_valid);
   BIND2(tb, conv, io_out_ready);
   BIND2(tb, conv, io_out_op_conv);
@@ -663,96 +403,50 @@
   BIND2(tb, conv, io_out_bsign);
   BIND2(tb, conv, io_active);
   BIND2(tb, conv, io_vrfsb);
-  BIND2(tb, conv, io_in_bits_0_bits_op);
-  BIND2(tb, conv, io_in_bits_0_bits_f2);
-  BIND2(tb, conv, io_in_bits_0_bits_sz);
-  BIND2(tb, conv, io_in_bits_0_bits_vd_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_ve_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vf_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vg_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vs_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vs_tag);
-  BIND2(tb, conv, io_in_bits_0_bits_vt_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vt_tag);
-  BIND2(tb, conv, io_in_bits_0_bits_vu_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vu_tag);
-  BIND2(tb, conv, io_in_bits_0_bits_vx_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vx_tag);
-  BIND2(tb, conv, io_in_bits_0_bits_vy_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vy_tag);
-  BIND2(tb, conv, io_in_bits_0_bits_vz_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_vz_tag);
-  BIND2(tb, conv, io_in_bits_0_bits_sv_addr);
-  BIND2(tb, conv, io_in_bits_0_bits_sv_data);
-  BIND2(tb, conv, io_in_bits_1_bits_op);
-  BIND2(tb, conv, io_in_bits_1_bits_f2);
-  BIND2(tb, conv, io_in_bits_1_bits_sz);
-  BIND2(tb, conv, io_in_bits_1_bits_vd_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_ve_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vf_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vg_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vs_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vs_tag);
-  BIND2(tb, conv, io_in_bits_1_bits_vt_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vt_tag);
-  BIND2(tb, conv, io_in_bits_1_bits_vu_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vu_tag);
-  BIND2(tb, conv, io_in_bits_1_bits_vx_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vx_tag);
-  BIND2(tb, conv, io_in_bits_1_bits_vy_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vy_tag);
-  BIND2(tb, conv, io_in_bits_1_bits_vz_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_vz_tag);
-  BIND2(tb, conv, io_in_bits_1_bits_sv_addr);
-  BIND2(tb, conv, io_in_bits_1_bits_sv_data);
-  BIND2(tb, conv, io_in_bits_2_bits_op);
-  BIND2(tb, conv, io_in_bits_2_bits_f2);
-  BIND2(tb, conv, io_in_bits_2_bits_sz);
-  BIND2(tb, conv, io_in_bits_2_bits_vd_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_ve_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vf_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vg_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vs_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vs_tag);
-  BIND2(tb, conv, io_in_bits_2_bits_vt_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vt_tag);
-  BIND2(tb, conv, io_in_bits_2_bits_vu_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vu_tag);
-  BIND2(tb, conv, io_in_bits_2_bits_vx_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vx_tag);
-  BIND2(tb, conv, io_in_bits_2_bits_vy_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vy_tag);
-  BIND2(tb, conv, io_in_bits_2_bits_vz_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_vz_tag);
-  BIND2(tb, conv, io_in_bits_2_bits_sv_addr);
-  BIND2(tb, conv, io_in_bits_2_bits_sv_data);
-  BIND2(tb, conv, io_in_bits_3_bits_op);
-  BIND2(tb, conv, io_in_bits_3_bits_f2);
-  BIND2(tb, conv, io_in_bits_3_bits_sz);
-  BIND2(tb, conv, io_in_bits_3_bits_vd_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_ve_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vf_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vg_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vs_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vs_tag);
-  BIND2(tb, conv, io_in_bits_3_bits_vt_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vt_tag);
-  BIND2(tb, conv, io_in_bits_3_bits_vu_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vu_tag);
-  BIND2(tb, conv, io_in_bits_3_bits_vx_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vx_tag);
-  BIND2(tb, conv, io_in_bits_3_bits_vy_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vy_tag);
-  BIND2(tb, conv, io_in_bits_3_bits_vz_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_vz_tag);
-  BIND2(tb, conv, io_in_bits_3_bits_sv_addr);
-  BIND2(tb, conv, io_in_bits_3_bits_sv_data);
   BIND2(tb, conv, io_out_addr1);
   BIND2(tb, conv, io_out_addr2);
   BIND2(tb, conv, io_out_mode);
   BIND2(tb, conv, io_out_index);
   BIND2(tb, conv, io_out_abias);
   BIND2(tb, conv, io_out_bbias);
+#define IO_BIND(x)                                 \
+  BIND2(tb, conv, io_in_bits_##x##_valid);         \
+  BIND2(tb, conv, io_in_bits_##x##_bits_m);        \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vd_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_ve_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vf_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vg_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vs_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vt_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vu_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vx_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vy_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vz_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_sv_valid); \
+  BIND2(tb, conv, io_in_bits_##x##_bits_cmdsync);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_op);       \
+  BIND2(tb, conv, io_in_bits_##x##_bits_f2);       \
+  BIND2(tb, conv, io_in_bits_##x##_bits_sz);       \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vd_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_ve_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vf_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vg_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vs_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vs_tag);   \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vt_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vt_tag);   \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vu_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vu_tag);   \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vx_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vx_tag);   \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vy_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vy_tag);   \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vz_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_vz_tag);   \
+  BIND2(tb, conv, io_in_bits_##x##_bits_sv_addr);  \
+  BIND2(tb, conv, io_in_bits_##x##_bits_sv_data);
+  REPEAT(IO_BIND, KP_instructionLanes);
+#undef IO_BIND
 
   if (trace) {
     tb.trace(conv);
diff --git a/tests/verilator_sim/kelvin/vdecode_tb.cc b/tests/verilator_sim/kelvin/vdecode_tb.cc
index 3d5c81d..1148058 100644
--- a/tests/verilator_sim/kelvin/vdecode_tb.cc
+++ b/tests/verilator_sim/kelvin/vdecode_tb.cc
@@ -13,221 +13,84 @@
 // limitations under the License.
 
 #include "VVDecode.h"
-#include "tests/verilator_sim/sysc_tb.h"
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/kelvin/vdecode.h"
+#include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 struct VDecode_tb : Sysc_tb {
   sc_in<bool> io_in_ready;
   sc_out<bool> io_in_valid;
-  sc_out<bool> io_in_bits_0_valid;
-  sc_out<bool> io_in_bits_1_valid;
-  sc_out<bool> io_in_bits_2_valid;
-  sc_out<bool> io_in_bits_3_valid;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_inst;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_addr;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_data;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_inst;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_addr;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_data;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_inst;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_addr;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_data;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_inst;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_addr;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_data;
   sc_in<bool> io_stall;
   sc_in<bool> io_undef;
   sc_in<bool> io_nempty;
-  sc_out<bool> io_out_0_ready;
-  sc_in<bool> io_out_0_valid;
-  sc_in<bool> io_out_0_bits_m;
-  sc_in<bool> io_out_0_bits_vd_valid;
-  sc_in<bool> io_out_0_bits_ve_valid;
-  sc_in<bool> io_out_0_bits_vf_valid;
-  sc_in<bool> io_out_0_bits_vg_valid;
-  sc_in<bool> io_out_0_bits_vs_valid;
-  sc_in<bool> io_out_0_bits_vt_valid;
-  sc_in<bool> io_out_0_bits_vu_valid;
-  sc_in<bool> io_out_0_bits_vx_valid;
-  sc_in<bool> io_out_0_bits_vy_valid;
-  sc_in<bool> io_out_0_bits_vz_valid;
-  sc_in<bool> io_out_0_bits_sv_valid;
-  sc_in<bool> io_cmdq_0_alu;
-  sc_in<bool> io_cmdq_0_conv;
-  sc_in<bool> io_cmdq_0_ldst;
-  sc_in<bool> io_cmdq_0_ld;
-  sc_in<bool> io_cmdq_0_st;
-  sc_in<bool> io_out_0_bits_cmdsync;
-  sc_out<bool> io_out_1_ready;
-  sc_in<bool> io_out_1_valid;
-  sc_in<bool> io_out_1_bits_m;
-  sc_in<bool> io_out_1_bits_vd_valid;
-  sc_in<bool> io_out_1_bits_ve_valid;
-  sc_in<bool> io_out_1_bits_vf_valid;
-  sc_in<bool> io_out_1_bits_vg_valid;
-  sc_in<bool> io_out_1_bits_vs_valid;
-  sc_in<bool> io_out_1_bits_vt_valid;
-  sc_in<bool> io_out_1_bits_vu_valid;
-  sc_in<bool> io_out_1_bits_vx_valid;
-  sc_in<bool> io_out_1_bits_vy_valid;
-  sc_in<bool> io_out_1_bits_vz_valid;
-  sc_in<bool> io_out_1_bits_sv_valid;
-  sc_in<bool> io_cmdq_1_alu;
-  sc_in<bool> io_cmdq_1_conv;
-  sc_in<bool> io_cmdq_1_ldst;
-  sc_in<bool> io_cmdq_1_ld;
-  sc_in<bool> io_cmdq_1_st;
-  sc_in<bool> io_out_1_bits_cmdsync;
-  sc_out<bool> io_out_2_ready;
-  sc_in<bool> io_out_2_valid;
-  sc_in<bool> io_out_2_bits_m;
-  sc_in<bool> io_out_2_bits_vd_valid;
-  sc_in<bool> io_out_2_bits_ve_valid;
-  sc_in<bool> io_out_2_bits_vf_valid;
-  sc_in<bool> io_out_2_bits_vg_valid;
-  sc_in<bool> io_out_2_bits_vs_valid;
-  sc_in<bool> io_out_2_bits_vt_valid;
-  sc_in<bool> io_out_2_bits_vu_valid;
-  sc_in<bool> io_out_2_bits_vx_valid;
-  sc_in<bool> io_out_2_bits_vy_valid;
-  sc_in<bool> io_out_2_bits_vz_valid;
-  sc_in<bool> io_out_2_bits_sv_valid;
-  sc_in<bool> io_cmdq_2_alu;
-  sc_in<bool> io_cmdq_2_conv;
-  sc_in<bool> io_cmdq_2_ldst;
-  sc_in<bool> io_cmdq_2_ld;
-  sc_in<bool> io_cmdq_2_st;
-  sc_in<bool> io_out_2_bits_cmdsync;
-  sc_out<bool> io_out_3_ready;
-  sc_in<bool> io_out_3_valid;
-  sc_in<bool> io_out_3_bits_m;
-  sc_in<bool> io_out_3_bits_vd_valid;
-  sc_in<bool> io_out_3_bits_ve_valid;
-  sc_in<bool> io_out_3_bits_vf_valid;
-  sc_in<bool> io_out_3_bits_vg_valid;
-  sc_in<bool> io_out_3_bits_vs_valid;
-  sc_in<bool> io_out_3_bits_vt_valid;
-  sc_in<bool> io_out_3_bits_vu_valid;
-  sc_in<bool> io_out_3_bits_vx_valid;
-  sc_in<bool> io_out_3_bits_vy_valid;
-  sc_in<bool> io_out_3_bits_vz_valid;
-  sc_in<bool> io_out_3_bits_sv_valid;
-  sc_in<bool> io_cmdq_3_alu;
-  sc_in<bool> io_cmdq_3_conv;
-  sc_in<bool> io_cmdq_3_ldst;
-  sc_in<bool> io_cmdq_3_ld;
-  sc_in<bool> io_cmdq_3_st;
-  sc_in<bool> io_out_3_bits_cmdsync;
-  sc_in<sc_bv<7> > io_out_0_bits_op;
-  sc_in<sc_bv<3> > io_out_0_bits_f2;
-  sc_in<sc_bv<3> > io_out_0_bits_sz;
-  sc_in<sc_bv<6> > io_out_0_bits_vd_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_ve_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vf_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vg_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vs_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vt_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vu_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vx_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vy_addr;
-  sc_in<sc_bv<6> > io_out_0_bits_vz_addr;
-  sc_in<sc_bv<4> > io_out_0_bits_vs_tag;
-  sc_in<sc_bv<4> > io_out_0_bits_vt_tag;
-  sc_in<sc_bv<4> > io_out_0_bits_vu_tag;
-  sc_in<sc_bv<4> > io_out_0_bits_vx_tag;
-  sc_in<sc_bv<4> > io_out_0_bits_vy_tag;
-  sc_in<sc_bv<4> > io_out_0_bits_vz_tag;
-  sc_in<sc_bv<32> > io_out_0_bits_sv_addr;
-  sc_in<sc_bv<32> > io_out_0_bits_sv_data;
-  sc_in<sc_bv<64> > io_actv_0_ractive;
-  sc_in<sc_bv<64> > io_actv_0_wactive;
-  sc_in<sc_bv<7> > io_out_1_bits_op;
-  sc_in<sc_bv<3> > io_out_1_bits_f2;
-  sc_in<sc_bv<3> > io_out_1_bits_sz;
-  sc_in<sc_bv<6> > io_out_1_bits_vd_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_ve_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vf_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vg_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vs_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vt_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vu_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vx_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vy_addr;
-  sc_in<sc_bv<6> > io_out_1_bits_vz_addr;
-  sc_in<sc_bv<4> > io_out_1_bits_vs_tag;
-  sc_in<sc_bv<4> > io_out_1_bits_vt_tag;
-  sc_in<sc_bv<4> > io_out_1_bits_vu_tag;
-  sc_in<sc_bv<4> > io_out_1_bits_vx_tag;
-  sc_in<sc_bv<4> > io_out_1_bits_vy_tag;
-  sc_in<sc_bv<4> > io_out_1_bits_vz_tag;
-  sc_in<sc_bv<32> > io_out_1_bits_sv_addr;
-  sc_in<sc_bv<32> > io_out_1_bits_sv_data;
-  sc_in<sc_bv<64> > io_actv_1_ractive;
-  sc_in<sc_bv<64> > io_actv_1_wactive;
-  sc_in<sc_bv<7> > io_out_2_bits_op;
-  sc_in<sc_bv<3> > io_out_2_bits_f2;
-  sc_in<sc_bv<3> > io_out_2_bits_sz;
-  sc_in<sc_bv<6> > io_out_2_bits_vd_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_ve_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vf_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vg_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vs_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vt_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vu_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vx_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vy_addr;
-  sc_in<sc_bv<6> > io_out_2_bits_vz_addr;
-  sc_in<sc_bv<4> > io_out_2_bits_vs_tag;
-  sc_in<sc_bv<4> > io_out_2_bits_vt_tag;
-  sc_in<sc_bv<4> > io_out_2_bits_vu_tag;
-  sc_in<sc_bv<4> > io_out_2_bits_vx_tag;
-  sc_in<sc_bv<4> > io_out_2_bits_vy_tag;
-  sc_in<sc_bv<4> > io_out_2_bits_vz_tag;
-  sc_in<sc_bv<32> > io_out_2_bits_sv_addr;
-  sc_in<sc_bv<32> > io_out_2_bits_sv_data;
-  sc_in<sc_bv<64> > io_actv_2_ractive;
-  sc_in<sc_bv<64> > io_actv_2_wactive;
-  sc_in<sc_bv<7> > io_out_3_bits_op;
-  sc_in<sc_bv<3> > io_out_3_bits_f2;
-  sc_in<sc_bv<3> > io_out_3_bits_sz;
-  sc_in<sc_bv<6> > io_out_3_bits_vd_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_ve_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vf_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vg_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vs_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vt_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vu_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vx_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vy_addr;
-  sc_in<sc_bv<6> > io_out_3_bits_vz_addr;
-  sc_in<sc_bv<4> > io_out_3_bits_vs_tag;
-  sc_in<sc_bv<4> > io_out_3_bits_vt_tag;
-  sc_in<sc_bv<4> > io_out_3_bits_vu_tag;
-  sc_in<sc_bv<4> > io_out_3_bits_vx_tag;
-  sc_in<sc_bv<4> > io_out_3_bits_vy_tag;
-  sc_in<sc_bv<4> > io_out_3_bits_vz_tag;
-  sc_in<sc_bv<32> > io_out_3_bits_sv_addr;
-  sc_in<sc_bv<32> > io_out_3_bits_sv_data;
-  sc_in<sc_bv<64> > io_actv_3_ractive;
-  sc_in<sc_bv<64> > io_actv_3_wactive;
   sc_in<bool> io_vrfsb_set_valid;
   sc_in<sc_bv<128> > io_vrfsb_set_bits;
   sc_out<sc_bv<128> > io_vrfsb_data;
   sc_out<sc_bv<64> > io_active;
+#define IO_BITS(x)                               \
+  sc_out<bool> io_in_bits_##x##_valid;           \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_inst; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_addr; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_data; \
+  sc_out<bool> io_out_##x##_ready;               \
+  sc_in<bool> io_out_##x##_valid;                \
+  sc_in<bool> io_out_##x##_bits_m;               \
+  sc_in<bool> io_out_##x##_bits_vd_valid;        \
+  sc_in<bool> io_out_##x##_bits_ve_valid;        \
+  sc_in<bool> io_out_##x##_bits_vf_valid;        \
+  sc_in<bool> io_out_##x##_bits_vg_valid;        \
+  sc_in<bool> io_out_##x##_bits_vs_valid;        \
+  sc_in<bool> io_out_##x##_bits_vt_valid;        \
+  sc_in<bool> io_out_##x##_bits_vu_valid;        \
+  sc_in<bool> io_out_##x##_bits_vx_valid;        \
+  sc_in<bool> io_out_##x##_bits_vy_valid;        \
+  sc_in<bool> io_out_##x##_bits_vz_valid;        \
+  sc_in<bool> io_out_##x##_bits_sv_valid;        \
+  sc_in<bool> io_cmdq_##x##_alu;                 \
+  sc_in<bool> io_cmdq_##x##_conv;                \
+  sc_in<bool> io_cmdq_##x##_ldst;                \
+  sc_in<bool> io_cmdq_##x##_ld;                  \
+  sc_in<bool> io_cmdq_##x##_st;                  \
+  sc_in<bool> io_out_##x##_bits_cmdsync;         \
+  sc_in<sc_bv<7> > io_out_##x##_bits_op;         \
+  sc_in<sc_bv<3> > io_out_##x##_bits_f2;         \
+  sc_in<sc_bv<3> > io_out_##x##_bits_sz;         \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vd_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_ve_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vf_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vg_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vs_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vt_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vu_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vx_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vy_addr;    \
+  sc_in<sc_bv<6> > io_out_##x##_bits_vz_addr;    \
+  sc_in<sc_bv<4> > io_out_##x##_bits_vs_tag;     \
+  sc_in<sc_bv<4> > io_out_##x##_bits_vt_tag;     \
+  sc_in<sc_bv<4> > io_out_##x##_bits_vu_tag;     \
+  sc_in<sc_bv<4> > io_out_##x##_bits_vx_tag;     \
+  sc_in<sc_bv<4> > io_out_##x##_bits_vy_tag;     \
+  sc_in<sc_bv<4> > io_out_##x##_bits_vz_tag;     \
+  sc_in<sc_bv<32> > io_out_##x##_bits_sv_addr;   \
+  sc_in<sc_bv<32> > io_out_##x##_bits_sv_data;   \
+  sc_in<sc_bv<64> > io_actv_##x##_ractive;       \
+  sc_in<sc_bv<64> > io_actv_##x##_wactive;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   using Sysc_tb::Sysc_tb;
 
   void posedge() {
     // Inputs.
     io_in_valid = rand_bool();
-    io_in_bits_0_valid = rand_bool();
-    io_in_bits_1_valid = rand_bool();
-    io_in_bits_2_valid = rand_bool();
-    io_in_bits_3_valid = rand_bool();
-    io_out_0_ready = rand_bool();
-    io_out_1_ready = rand_bool();
-    io_out_2_ready = rand_bool();
-    io_out_3_ready = rand_bool();
+
+#define RAND_IO(x)                      \
+  io_in_bits_##x##_valid = rand_bool(); \
+  io_out_##x##_ready = rand_bool();
+
+    REPEAT(RAND_IO, KP_instructionLanes);
+#undef RAND_IO
 
     int n = rand_int(0, 8);
     sc_bv<64> active = 0;
@@ -243,12 +106,12 @@
     }
     io_vrfsb_data = vrfsb_data;
 
-    uint32_t inst[4];
-    uint32_t addr[4];
-    uint32_t data[4];
-    uint32_t index[4];
+    uint32_t inst[KP_instructionLanes];
+    uint32_t addr[KP_instructionLanes];
+    uint32_t data[KP_instructionLanes];
+    uint32_t index[KP_instructionLanes];
 
-    for (int i = 0; i < 4; ++i) {
+    for (int i = 0; i < KP_instructionLanes; ++i) {
       inst[i] = rand_uint32();
       addr[i] = rand_uint32();
       data[i] = rand_uint32();
@@ -268,18 +131,13 @@
       }
     }
 
-    io_in_bits_0_bits_inst = inst[0];
-    io_in_bits_1_bits_inst = inst[1];
-    io_in_bits_2_bits_inst = inst[2];
-    io_in_bits_3_bits_inst = inst[3];
-    io_in_bits_0_bits_addr = addr[0];
-    io_in_bits_1_bits_addr = addr[1];
-    io_in_bits_2_bits_addr = addr[2];
-    io_in_bits_3_bits_addr = addr[3];
-    io_in_bits_0_bits_data = data[0];
-    io_in_bits_1_bits_data = data[1];
-    io_in_bits_2_bits_data = data[2];
-    io_in_bits_3_bits_data = data[3];
+#define INST_BITS(x)                    \
+  io_in_bits_##x##_bits_inst = inst[x]; \
+  io_in_bits_##x##_bits_addr = addr[x]; \
+  io_in_bits_##x##_bits_data = data[x];
+
+    REPEAT(INST_BITS, KP_instructionLanes);
+#undef INST_BITS
 
     check(count_ >= 0, "count");
 
@@ -288,37 +146,21 @@
     check(!(io_stall && count_ <= ((depth - 8) + 4)), "io.stall");
 
     if (io_in_valid && io_in_ready) {
-      for (int i = 0; i < 4; ++i) {
+      for (int i = 0; i < KP_instructionLanes; ++i) {
         bool valid = false;
         vdecode_in_t in;
-        if (i == 0 && io_in_bits_0_valid) {
-          valid = true;
-          count_++;
-          in = {io_in_bits_0_bits_inst.read().get_word(0),
-                io_in_bits_0_bits_addr.read().get_word(0),
-                io_in_bits_0_bits_data.read().get_word(0)};
-        }
-        if (i == 1 && io_in_bits_1_valid) {
-          valid = true;
-          count_++;
-          in = {io_in_bits_1_bits_inst.read().get_word(0),
-                io_in_bits_1_bits_addr.read().get_word(0),
-                io_in_bits_1_bits_data.read().get_word(0)};
-        }
-        if (i == 2 && io_in_bits_2_valid) {
-          valid = true;
-          count_++;
-          in = {io_in_bits_2_bits_inst.read().get_word(0),
-                io_in_bits_2_bits_addr.read().get_word(0),
-                io_in_bits_2_bits_data.read().get_word(0)};
-        }
-        if (i == 3 && io_in_bits_3_valid) {
-          valid = true;
-          count_++;
-          in = {io_in_bits_3_bits_inst.read().get_word(0),
-                io_in_bits_3_bits_addr.read().get_word(0),
-                io_in_bits_3_bits_data.read().get_word(0)};
-        }
+
+#define GET_WORDS(x)                                      \
+  if (i == x && io_in_bits_##x##_valid) {                 \
+    valid = true;                                         \
+    count_++;                                             \
+    in = {io_in_bits_##x##_bits_inst.read().get_word(0),  \
+          io_in_bits_##x##_bits_addr.read().get_word(0),  \
+          io_in_bits_##x##_bits_data.read().get_word(0)}; \
+  }
+
+        REPEAT(GET_WORDS, KP_instructionLanes);
+#undef GET_WORDS
 
         if (valid) {
           vdecode_out_t out;
@@ -335,29 +177,25 @@
     }
 
     // Outputs.
-    vdecode_out_t ref[4], dut[4];
-    bool dut_active[4];
-    bool ref_read[4];
+    vdecode_out_t ref[KP_instructionLanes], dut[KP_instructionLanes];
+    bool dut_active[KP_instructionLanes];
+    bool ref_read[KP_instructionLanes];
 
-    for (int i = 0; i < 4; ++i) {
+    for (int i = 0; i < KP_instructionLanes; ++i) {
       ref_read[i] = inst_.next(ref[i], i);
     }
 
-    dut_active[0] = io_out_0_valid && io_out_0_ready;
-    dut_active[1] = io_out_1_valid && io_out_1_ready;
-    dut_active[2] = io_out_2_valid && io_out_2_ready;
-    dut_active[3] = io_out_3_valid && io_out_3_ready;
+#define DUT_ACTIVE(x)                                       \
+  dut_active[x] = io_out_##x##_valid && io_out_##x##_ready; \
+  check(!(dut_active[x] && !ref_read[x]), "instruction fifo[" STRINGIFY(x) "]");
 
-    check(!(dut_active[0] && !ref_read[0]), "instruction fifo[0]");
-    check(!(dut_active[1] && !ref_read[1]), "instruction fifo[1]");
-    check(!(dut_active[2] && !ref_read[2]), "instruction fifo[2]");
-    check(!(dut_active[3] && !ref_read[3]), "instruction fifo[3]");
+    REPEAT(DUT_ACTIVE, KP_instructionLanes);
+#undef DUT_ACTIVE
 
     // Entries are not ordered, remove in reverse order so that index correct.
-    if (dut_active[3]) inst_.remove(3);
-    if (dut_active[2]) inst_.remove(2);
-    if (dut_active[1]) inst_.remove(1);
-    if (dut_active[0]) inst_.remove(0);
+    for (int i = KP_instructionLanes - 1; i >= 0; --i) {
+      if (dut_active[i]) inst_.remove(i);
+    }
 
 #define DUT_OUT(i)                                                            \
   if (io_out_##i##_valid && io_out_##i##_ready) {                             \
@@ -418,10 +256,8 @@
     }                                                                         \
   }
 
-    DUT_OUT(0);
-    DUT_OUT(1);
-    DUT_OUT(2);
-    DUT_OUT(3);
+    REPEAT(DUT_OUT, KP_instructionLanes);
+#undef DUT_OUT
 
     // Scoreboard Set.
     bool ref_vrfsbvalid = false;
@@ -444,10 +280,8 @@
     dut_vrfsbset[1] = io_vrfsb_set_bits.read().get_word(2) |
                       (uint64_t(io_vrfsb_set_bits.read().get_word(3)) << 32);
 
-    VRFSB_OUT(0);
-    VRFSB_OUT(1);
-    VRFSB_OUT(2);
-    VRFSB_OUT(3);
+    REPEAT(VRFSB_OUT, KP_instructionLanes);
+#undef VRFSB_OUT
 
     if (ref_vrfsbvalid != dut_vrfsbvalid) {
       printf("Error:Vrfsb %d %d\n", ref_vrfsbvalid, dut_vrfsbvalid);
@@ -470,9 +304,10 @@
                        (uint64_t(io_vrfsb_data.read().get_word(3)) << 32) |
                        io_active.read().get_word(0) |
                        uint64_t(io_active.read().get_word(1)) << 32;
-    bool wdepends[4] = {false, false, false, false};
+    // bool wdepends[4] = {false, false, false, false};
+    bool wdepends[KP_instructionLanes] = {};
 
-    for (int i = 0; i < 4; ++i) {
+    for (int i = 0; i < KP_instructionLanes; ++i) {
       wdepends[i] = ref[i].wactive & wactive;
       if (ref_read[i]) {
         wactive |= ref[i].ractive;
@@ -480,26 +315,28 @@
       }
     }
 
-    check(!(io_out_0_valid && wdepends[0]), "write dependency[0]");
-    check(!(io_out_1_valid && wdepends[1]), "write dependency[1]");
-    check(!(io_out_2_valid && wdepends[2]), "write dependency[2]");
-    check(!(io_out_3_valid && wdepends[3]), "write dependency[3]");
+#define WDEPEND(x)                            \
+  check(!(io_out_##x##_valid && wdepends[x]), \
+        "write dependency[" STRINGIFY(x) "]");
+    REPEAT(WDEPEND, KP_instructionLanes);
+#undef WDEPEND
 
     // Reads must not dispatch past previous write dispatch.
     uint64_t ractive = 0;
-    bool rdepends[4] = {false, false, false, false};
+    bool rdepends[KP_instructionLanes] = {};
 
-    for (int i = 0; i < 4; ++i) {
+    for (int i = 0; i < KP_instructionLanes; ++i) {
       rdepends[i] = ref[i].ractive & ractive;
       if (ref_read[i]) {
         ractive |= ref[i].wactive;
       }
     }
 
-    check(!(io_out_0_valid && rdepends[0]), "read dependency[0]");
-    check(!(io_out_1_valid && rdepends[1]), "read dependency[1]");
-    check(!(io_out_2_valid && rdepends[2]), "read dependency[2]");
-    check(!(io_out_3_valid && rdepends[3]), "read dependency[3]");
+#define RDEPEND(x)                            \
+  check(!(io_out_##x##_valid && rdepends[x]), \
+        "read dependency[" STRINGIFY(x) "]");
+    REPEAT(RDEPEND, KP_instructionLanes);
+#undef RDEPEND
   }
 
  private:
@@ -537,201 +374,63 @@
 static void VDecode_test(char* name, int loops, bool trace) {
   sc_signal<bool> io_in_ready;
   sc_signal<bool> io_in_valid;
-  sc_signal<bool> io_in_bits_0_valid;
-  sc_signal<bool> io_in_bits_1_valid;
-  sc_signal<bool> io_in_bits_2_valid;
-  sc_signal<bool> io_in_bits_3_valid;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_inst;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_addr;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_data;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_inst;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_addr;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_data;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_inst;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_addr;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_data;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_inst;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_addr;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_data;
   sc_signal<bool> io_stall;
   sc_signal<bool> io_undef;
   sc_signal<bool> io_nempty;
-  sc_signal<bool> io_out_0_ready;
-  sc_signal<bool> io_out_0_valid;
-  sc_signal<bool> io_out_0_bits_m;
-  sc_signal<bool> io_out_0_bits_vd_valid;
-  sc_signal<bool> io_out_0_bits_ve_valid;
-  sc_signal<bool> io_out_0_bits_vf_valid;
-  sc_signal<bool> io_out_0_bits_vg_valid;
-  sc_signal<bool> io_out_0_bits_vs_valid;
-  sc_signal<bool> io_out_0_bits_vt_valid;
-  sc_signal<bool> io_out_0_bits_vu_valid;
-  sc_signal<bool> io_out_0_bits_vx_valid;
-  sc_signal<bool> io_out_0_bits_vy_valid;
-  sc_signal<bool> io_out_0_bits_vz_valid;
-  sc_signal<bool> io_out_0_bits_sv_valid;
-  sc_signal<bool> io_cmdq_0_alu;
-  sc_signal<bool> io_cmdq_0_conv;
-  sc_signal<bool> io_cmdq_0_ldst;
-  sc_signal<bool> io_cmdq_0_ld;
-  sc_signal<bool> io_cmdq_0_st;
-  sc_signal<bool> io_out_0_bits_cmdsync;
-  sc_signal<bool> io_out_1_ready;
-  sc_signal<bool> io_out_1_valid;
-  sc_signal<bool> io_out_1_bits_m;
-  sc_signal<bool> io_out_1_bits_vd_valid;
-  sc_signal<bool> io_out_1_bits_ve_valid;
-  sc_signal<bool> io_out_1_bits_vf_valid;
-  sc_signal<bool> io_out_1_bits_vg_valid;
-  sc_signal<bool> io_out_1_bits_vs_valid;
-  sc_signal<bool> io_out_1_bits_vt_valid;
-  sc_signal<bool> io_out_1_bits_vu_valid;
-  sc_signal<bool> io_out_1_bits_vx_valid;
-  sc_signal<bool> io_out_1_bits_vy_valid;
-  sc_signal<bool> io_out_1_bits_vz_valid;
-  sc_signal<bool> io_out_1_bits_sv_valid;
-  sc_signal<bool> io_cmdq_1_alu;
-  sc_signal<bool> io_cmdq_1_conv;
-  sc_signal<bool> io_cmdq_1_ldst;
-  sc_signal<bool> io_cmdq_1_ld;
-  sc_signal<bool> io_cmdq_1_st;
-  sc_signal<bool> io_out_1_bits_cmdsync;
-  sc_signal<bool> io_out_2_ready;
-  sc_signal<bool> io_out_2_valid;
-  sc_signal<bool> io_out_2_bits_m;
-  sc_signal<bool> io_out_2_bits_vd_valid;
-  sc_signal<bool> io_out_2_bits_ve_valid;
-  sc_signal<bool> io_out_2_bits_vf_valid;
-  sc_signal<bool> io_out_2_bits_vg_valid;
-  sc_signal<bool> io_out_2_bits_vs_valid;
-  sc_signal<bool> io_out_2_bits_vt_valid;
-  sc_signal<bool> io_out_2_bits_vu_valid;
-  sc_signal<bool> io_out_2_bits_vx_valid;
-  sc_signal<bool> io_out_2_bits_vy_valid;
-  sc_signal<bool> io_out_2_bits_vz_valid;
-  sc_signal<bool> io_out_2_bits_sv_valid;
-  sc_signal<bool> io_cmdq_2_alu;
-  sc_signal<bool> io_cmdq_2_conv;
-  sc_signal<bool> io_cmdq_2_ldst;
-  sc_signal<bool> io_cmdq_2_ld;
-  sc_signal<bool> io_cmdq_2_st;
-  sc_signal<bool> io_out_2_bits_cmdsync;
-  sc_signal<bool> io_out_3_ready;
-  sc_signal<bool> io_out_3_valid;
-  sc_signal<bool> io_out_3_bits_m;
-  sc_signal<bool> io_out_3_bits_vd_valid;
-  sc_signal<bool> io_out_3_bits_ve_valid;
-  sc_signal<bool> io_out_3_bits_vf_valid;
-  sc_signal<bool> io_out_3_bits_vg_valid;
-  sc_signal<bool> io_out_3_bits_vs_valid;
-  sc_signal<bool> io_out_3_bits_vt_valid;
-  sc_signal<bool> io_out_3_bits_vu_valid;
-  sc_signal<bool> io_out_3_bits_vx_valid;
-  sc_signal<bool> io_out_3_bits_vy_valid;
-  sc_signal<bool> io_out_3_bits_vz_valid;
-  sc_signal<bool> io_out_3_bits_sv_valid;
-  sc_signal<bool> io_cmdq_3_alu;
-  sc_signal<bool> io_cmdq_3_conv;
-  sc_signal<bool> io_cmdq_3_ldst;
-  sc_signal<bool> io_cmdq_3_ld;
-  sc_signal<bool> io_cmdq_3_st;
-  sc_signal<bool> io_out_3_bits_cmdsync;
-  sc_signal<sc_bv<7> > io_out_0_bits_op;
-  sc_signal<sc_bv<3> > io_out_0_bits_f2;
-  sc_signal<sc_bv<3> > io_out_0_bits_sz;
-  sc_signal<sc_bv<6> > io_out_0_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_out_0_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_out_0_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_out_0_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_out_0_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_out_0_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_out_0_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_out_0_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_out_0_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_out_0_bits_sv_data;
-  sc_signal<sc_bv<64> > io_actv_0_ractive;
-  sc_signal<sc_bv<64> > io_actv_0_wactive;
-  sc_signal<sc_bv<7> > io_out_1_bits_op;
-  sc_signal<sc_bv<3> > io_out_1_bits_f2;
-  sc_signal<sc_bv<3> > io_out_1_bits_sz;
-  sc_signal<sc_bv<6> > io_out_1_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_out_1_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_out_1_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_out_1_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_out_1_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_out_1_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_out_1_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_out_1_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_out_1_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_out_1_bits_sv_data;
-  sc_signal<sc_bv<64> > io_actv_1_ractive;
-  sc_signal<sc_bv<64> > io_actv_1_wactive;
-  sc_signal<sc_bv<7> > io_out_2_bits_op;
-  sc_signal<sc_bv<3> > io_out_2_bits_f2;
-  sc_signal<sc_bv<3> > io_out_2_bits_sz;
-  sc_signal<sc_bv<6> > io_out_2_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_out_2_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_out_2_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_out_2_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_out_2_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_out_2_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_out_2_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_out_2_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_out_2_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_out_2_bits_sv_data;
-  sc_signal<sc_bv<64> > io_actv_2_ractive;
-  sc_signal<sc_bv<64> > io_actv_2_wactive;
-  sc_signal<sc_bv<7> > io_out_3_bits_op;
-  sc_signal<sc_bv<3> > io_out_3_bits_f2;
-  sc_signal<sc_bv<3> > io_out_3_bits_sz;
-  sc_signal<sc_bv<6> > io_out_3_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_out_3_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_out_3_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_out_3_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_out_3_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_out_3_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_out_3_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_out_3_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_out_3_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_out_3_bits_sv_data;
-  sc_signal<sc_bv<64> > io_actv_3_ractive;
-  sc_signal<sc_bv<64> > io_actv_3_wactive;
   sc_signal<bool> io_vrfsb_set_valid;
   sc_signal<sc_bv<128> > io_vrfsb_set_bits;
   sc_signal<sc_bv<128> > io_vrfsb_data;
   sc_signal<sc_bv<64> > io_active;
+#define IO_BITS(x)                                  \
+  sc_signal<bool> io_in_bits_##x##_valid;           \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_inst; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_addr; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_data; \
+  sc_signal<bool> io_out_##x##_ready;               \
+  sc_signal<bool> io_out_##x##_valid;               \
+  sc_signal<bool> io_out_##x##_bits_m;              \
+  sc_signal<bool> io_out_##x##_bits_vd_valid;       \
+  sc_signal<bool> io_out_##x##_bits_ve_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vf_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vg_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vs_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vt_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vu_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vx_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vy_valid;       \
+  sc_signal<bool> io_out_##x##_bits_vz_valid;       \
+  sc_signal<bool> io_out_##x##_bits_sv_valid;       \
+  sc_signal<bool> io_cmdq_##x##_alu;                \
+  sc_signal<bool> io_cmdq_##x##_conv;               \
+  sc_signal<bool> io_cmdq_##x##_ldst;               \
+  sc_signal<bool> io_cmdq_##x##_ld;                 \
+  sc_signal<bool> io_cmdq_##x##_st;                 \
+  sc_signal<bool> io_out_##x##_bits_cmdsync;        \
+  sc_signal<sc_bv<7> > io_out_##x##_bits_op;        \
+  sc_signal<sc_bv<3> > io_out_##x##_bits_f2;        \
+  sc_signal<sc_bv<3> > io_out_##x##_bits_sz;        \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vd_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_ve_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vf_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vg_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vs_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vt_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vu_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vx_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vy_addr;   \
+  sc_signal<sc_bv<6> > io_out_##x##_bits_vz_addr;   \
+  sc_signal<sc_bv<4> > io_out_##x##_bits_vs_tag;    \
+  sc_signal<sc_bv<4> > io_out_##x##_bits_vt_tag;    \
+  sc_signal<sc_bv<4> > io_out_##x##_bits_vu_tag;    \
+  sc_signal<sc_bv<4> > io_out_##x##_bits_vx_tag;    \
+  sc_signal<sc_bv<4> > io_out_##x##_bits_vy_tag;    \
+  sc_signal<sc_bv<4> > io_out_##x##_bits_vz_tag;    \
+  sc_signal<sc_bv<32> > io_out_##x##_bits_sv_addr;  \
+  sc_signal<sc_bv<32> > io_out_##x##_bits_sv_data;  \
+  sc_signal<sc_bv<64> > io_actv_##x##_ractive;      \
+  sc_signal<sc_bv<64> > io_actv_##x##_wactive;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   VDecode_tb tb("VDecode_tb", loops, true);
   VVDecode d(name);
@@ -741,201 +440,63 @@
 
   BIND2(tb, d, io_in_ready);
   BIND2(tb, d, io_in_valid);
-  BIND2(tb, d, io_in_bits_0_valid);
-  BIND2(tb, d, io_in_bits_1_valid);
-  BIND2(tb, d, io_in_bits_2_valid);
-  BIND2(tb, d, io_in_bits_3_valid);
-  BIND2(tb, d, io_in_bits_0_bits_inst);
-  BIND2(tb, d, io_in_bits_0_bits_addr);
-  BIND2(tb, d, io_in_bits_0_bits_data);
-  BIND2(tb, d, io_in_bits_1_bits_inst);
-  BIND2(tb, d, io_in_bits_1_bits_addr);
-  BIND2(tb, d, io_in_bits_1_bits_data);
-  BIND2(tb, d, io_in_bits_2_bits_inst);
-  BIND2(tb, d, io_in_bits_2_bits_addr);
-  BIND2(tb, d, io_in_bits_2_bits_data);
-  BIND2(tb, d, io_in_bits_3_bits_inst);
-  BIND2(tb, d, io_in_bits_3_bits_addr);
-  BIND2(tb, d, io_in_bits_3_bits_data);
   BIND2(tb, d, io_stall);
   BIND2(tb, d, io_undef);
   BIND2(tb, d, io_nempty);
-  BIND2(tb, d, io_out_0_ready);
-  BIND2(tb, d, io_out_0_valid);
-  BIND2(tb, d, io_out_0_bits_m);
-  BIND2(tb, d, io_out_0_bits_vd_valid);
-  BIND2(tb, d, io_out_0_bits_ve_valid);
-  BIND2(tb, d, io_out_0_bits_vf_valid);
-  BIND2(tb, d, io_out_0_bits_vg_valid);
-  BIND2(tb, d, io_out_0_bits_vs_valid);
-  BIND2(tb, d, io_out_0_bits_vt_valid);
-  BIND2(tb, d, io_out_0_bits_vu_valid);
-  BIND2(tb, d, io_out_0_bits_vx_valid);
-  BIND2(tb, d, io_out_0_bits_vy_valid);
-  BIND2(tb, d, io_out_0_bits_vz_valid);
-  BIND2(tb, d, io_out_0_bits_sv_valid);
-  BIND2(tb, d, io_cmdq_0_alu);
-  BIND2(tb, d, io_cmdq_0_conv);
-  BIND2(tb, d, io_cmdq_0_ldst);
-  BIND2(tb, d, io_cmdq_0_ld);
-  BIND2(tb, d, io_cmdq_0_st);
-  BIND2(tb, d, io_out_0_bits_cmdsync);
-  BIND2(tb, d, io_out_1_ready);
-  BIND2(tb, d, io_out_1_valid);
-  BIND2(tb, d, io_out_1_bits_m);
-  BIND2(tb, d, io_out_1_bits_vd_valid);
-  BIND2(tb, d, io_out_1_bits_ve_valid);
-  BIND2(tb, d, io_out_1_bits_vf_valid);
-  BIND2(tb, d, io_out_1_bits_vg_valid);
-  BIND2(tb, d, io_out_1_bits_vs_valid);
-  BIND2(tb, d, io_out_1_bits_vt_valid);
-  BIND2(tb, d, io_out_1_bits_vu_valid);
-  BIND2(tb, d, io_out_1_bits_vx_valid);
-  BIND2(tb, d, io_out_1_bits_vy_valid);
-  BIND2(tb, d, io_out_1_bits_vz_valid);
-  BIND2(tb, d, io_out_1_bits_sv_valid);
-  BIND2(tb, d, io_cmdq_1_alu);
-  BIND2(tb, d, io_cmdq_1_conv);
-  BIND2(tb, d, io_cmdq_1_ldst);
-  BIND2(tb, d, io_cmdq_1_ld);
-  BIND2(tb, d, io_cmdq_1_st);
-  BIND2(tb, d, io_out_1_bits_cmdsync);
-  BIND2(tb, d, io_out_2_ready);
-  BIND2(tb, d, io_out_2_valid);
-  BIND2(tb, d, io_out_2_bits_m);
-  BIND2(tb, d, io_out_2_bits_vd_valid);
-  BIND2(tb, d, io_out_2_bits_ve_valid);
-  BIND2(tb, d, io_out_2_bits_vf_valid);
-  BIND2(tb, d, io_out_2_bits_vg_valid);
-  BIND2(tb, d, io_out_2_bits_vs_valid);
-  BIND2(tb, d, io_out_2_bits_vt_valid);
-  BIND2(tb, d, io_out_2_bits_vu_valid);
-  BIND2(tb, d, io_out_2_bits_vx_valid);
-  BIND2(tb, d, io_out_2_bits_vy_valid);
-  BIND2(tb, d, io_out_2_bits_vz_valid);
-  BIND2(tb, d, io_out_2_bits_sv_valid);
-  BIND2(tb, d, io_cmdq_2_alu);
-  BIND2(tb, d, io_cmdq_2_conv);
-  BIND2(tb, d, io_cmdq_2_ldst);
-  BIND2(tb, d, io_cmdq_2_ld);
-  BIND2(tb, d, io_cmdq_2_st);
-  BIND2(tb, d, io_out_2_bits_cmdsync);
-  BIND2(tb, d, io_out_3_ready);
-  BIND2(tb, d, io_out_3_valid);
-  BIND2(tb, d, io_out_3_bits_m);
-  BIND2(tb, d, io_out_3_bits_vd_valid);
-  BIND2(tb, d, io_out_3_bits_ve_valid);
-  BIND2(tb, d, io_out_3_bits_vf_valid);
-  BIND2(tb, d, io_out_3_bits_vg_valid);
-  BIND2(tb, d, io_out_3_bits_vs_valid);
-  BIND2(tb, d, io_out_3_bits_vt_valid);
-  BIND2(tb, d, io_out_3_bits_vu_valid);
-  BIND2(tb, d, io_out_3_bits_vx_valid);
-  BIND2(tb, d, io_out_3_bits_vy_valid);
-  BIND2(tb, d, io_out_3_bits_vz_valid);
-  BIND2(tb, d, io_out_3_bits_sv_valid);
-  BIND2(tb, d, io_cmdq_3_alu);
-  BIND2(tb, d, io_cmdq_3_conv);
-  BIND2(tb, d, io_cmdq_3_ldst);
-  BIND2(tb, d, io_cmdq_3_ld);
-  BIND2(tb, d, io_cmdq_3_st);
-  BIND2(tb, d, io_out_3_bits_cmdsync);
-  BIND2(tb, d, io_out_0_bits_op);
-  BIND2(tb, d, io_out_0_bits_f2);
-  BIND2(tb, d, io_out_0_bits_sz);
-  BIND2(tb, d, io_out_0_bits_vd_addr);
-  BIND2(tb, d, io_out_0_bits_ve_addr);
-  BIND2(tb, d, io_out_0_bits_vf_addr);
-  BIND2(tb, d, io_out_0_bits_vg_addr);
-  BIND2(tb, d, io_out_0_bits_vs_addr);
-  BIND2(tb, d, io_out_0_bits_vt_addr);
-  BIND2(tb, d, io_out_0_bits_vu_addr);
-  BIND2(tb, d, io_out_0_bits_vx_addr);
-  BIND2(tb, d, io_out_0_bits_vy_addr);
-  BIND2(tb, d, io_out_0_bits_vz_addr);
-  BIND2(tb, d, io_out_0_bits_vs_tag);
-  BIND2(tb, d, io_out_0_bits_vt_tag);
-  BIND2(tb, d, io_out_0_bits_vu_tag);
-  BIND2(tb, d, io_out_0_bits_vx_tag);
-  BIND2(tb, d, io_out_0_bits_vy_tag);
-  BIND2(tb, d, io_out_0_bits_vz_tag);
-  BIND2(tb, d, io_out_0_bits_sv_addr);
-  BIND2(tb, d, io_out_0_bits_sv_data);
-  BIND2(tb, d, io_actv_0_ractive);
-  BIND2(tb, d, io_actv_0_wactive);
-  BIND2(tb, d, io_out_1_bits_op);
-  BIND2(tb, d, io_out_1_bits_f2);
-  BIND2(tb, d, io_out_1_bits_sz);
-  BIND2(tb, d, io_out_1_bits_vd_addr);
-  BIND2(tb, d, io_out_1_bits_ve_addr);
-  BIND2(tb, d, io_out_1_bits_vf_addr);
-  BIND2(tb, d, io_out_1_bits_vg_addr);
-  BIND2(tb, d, io_out_1_bits_vs_addr);
-  BIND2(tb, d, io_out_1_bits_vt_addr);
-  BIND2(tb, d, io_out_1_bits_vu_addr);
-  BIND2(tb, d, io_out_1_bits_vx_addr);
-  BIND2(tb, d, io_out_1_bits_vy_addr);
-  BIND2(tb, d, io_out_1_bits_vz_addr);
-  BIND2(tb, d, io_out_1_bits_vs_tag);
-  BIND2(tb, d, io_out_1_bits_vt_tag);
-  BIND2(tb, d, io_out_1_bits_vu_tag);
-  BIND2(tb, d, io_out_1_bits_vx_tag);
-  BIND2(tb, d, io_out_1_bits_vy_tag);
-  BIND2(tb, d, io_out_1_bits_vz_tag);
-  BIND2(tb, d, io_out_1_bits_sv_addr);
-  BIND2(tb, d, io_out_1_bits_sv_data);
-  BIND2(tb, d, io_actv_1_ractive);
-  BIND2(tb, d, io_actv_1_wactive);
-  BIND2(tb, d, io_out_2_bits_op);
-  BIND2(tb, d, io_out_2_bits_f2);
-  BIND2(tb, d, io_out_2_bits_sz);
-  BIND2(tb, d, io_out_2_bits_vd_addr);
-  BIND2(tb, d, io_out_2_bits_ve_addr);
-  BIND2(tb, d, io_out_2_bits_vf_addr);
-  BIND2(tb, d, io_out_2_bits_vg_addr);
-  BIND2(tb, d, io_out_2_bits_vs_addr);
-  BIND2(tb, d, io_out_2_bits_vt_addr);
-  BIND2(tb, d, io_out_2_bits_vu_addr);
-  BIND2(tb, d, io_out_2_bits_vx_addr);
-  BIND2(tb, d, io_out_2_bits_vy_addr);
-  BIND2(tb, d, io_out_2_bits_vz_addr);
-  BIND2(tb, d, io_out_2_bits_sv_addr);
-  BIND2(tb, d, io_out_2_bits_sv_data);
-  BIND2(tb, d, io_out_2_bits_vs_tag);
-  BIND2(tb, d, io_out_2_bits_vt_tag);
-  BIND2(tb, d, io_out_2_bits_vu_tag);
-  BIND2(tb, d, io_out_2_bits_vx_tag);
-  BIND2(tb, d, io_out_2_bits_vy_tag);
-  BIND2(tb, d, io_out_2_bits_vz_tag);
-  BIND2(tb, d, io_actv_2_ractive);
-  BIND2(tb, d, io_actv_2_wactive);
-  BIND2(tb, d, io_out_3_bits_op);
-  BIND2(tb, d, io_out_3_bits_f2);
-  BIND2(tb, d, io_out_3_bits_sz);
-  BIND2(tb, d, io_out_3_bits_vd_addr);
-  BIND2(tb, d, io_out_3_bits_ve_addr);
-  BIND2(tb, d, io_out_3_bits_vf_addr);
-  BIND2(tb, d, io_out_3_bits_vg_addr);
-  BIND2(tb, d, io_out_3_bits_vs_addr);
-  BIND2(tb, d, io_out_3_bits_vt_addr);
-  BIND2(tb, d, io_out_3_bits_vu_addr);
-  BIND2(tb, d, io_out_3_bits_vx_addr);
-  BIND2(tb, d, io_out_3_bits_vy_addr);
-  BIND2(tb, d, io_out_3_bits_vz_addr);
-  BIND2(tb, d, io_out_3_bits_vs_tag);
-  BIND2(tb, d, io_out_3_bits_vt_tag);
-  BIND2(tb, d, io_out_3_bits_vu_tag);
-  BIND2(tb, d, io_out_3_bits_vx_tag);
-  BIND2(tb, d, io_out_3_bits_vy_tag);
-  BIND2(tb, d, io_out_3_bits_vz_tag);
-  BIND2(tb, d, io_out_3_bits_sv_addr);
-  BIND2(tb, d, io_out_3_bits_sv_data);
-  BIND2(tb, d, io_actv_3_ractive);
-  BIND2(tb, d, io_actv_3_wactive);
   BIND2(tb, d, io_vrfsb_set_valid);
   BIND2(tb, d, io_vrfsb_set_bits);
   BIND2(tb, d, io_vrfsb_data);
   BIND2(tb, d, io_active);
+#define IO_BIND(x)                          \
+  BIND2(tb, d, io_in_bits_##x##_valid);     \
+  BIND2(tb, d, io_in_bits_##x##_bits_inst); \
+  BIND2(tb, d, io_in_bits_##x##_bits_addr); \
+  BIND2(tb, d, io_in_bits_##x##_bits_data); \
+  BIND2(tb, d, io_out_##x##_ready);         \
+  BIND2(tb, d, io_out_##x##_valid);         \
+  BIND2(tb, d, io_out_##x##_bits_m);        \
+  BIND2(tb, d, io_out_##x##_bits_vd_valid); \
+  BIND2(tb, d, io_out_##x##_bits_ve_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vf_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vg_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vs_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vt_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vu_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vx_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vy_valid); \
+  BIND2(tb, d, io_out_##x##_bits_vz_valid); \
+  BIND2(tb, d, io_out_##x##_bits_sv_valid); \
+  BIND2(tb, d, io_cmdq_##x##_alu);          \
+  BIND2(tb, d, io_cmdq_##x##_conv);         \
+  BIND2(tb, d, io_cmdq_##x##_ldst);         \
+  BIND2(tb, d, io_cmdq_##x##_ld);           \
+  BIND2(tb, d, io_cmdq_##x##_st);           \
+  BIND2(tb, d, io_out_##x##_bits_cmdsync);  \
+  BIND2(tb, d, io_out_##x##_bits_op);       \
+  BIND2(tb, d, io_out_##x##_bits_f2);       \
+  BIND2(tb, d, io_out_##x##_bits_sz);       \
+  BIND2(tb, d, io_out_##x##_bits_vd_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_ve_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vf_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vg_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vs_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vt_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vu_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vx_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vy_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vz_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_vs_tag);   \
+  BIND2(tb, d, io_out_##x##_bits_vt_tag);   \
+  BIND2(tb, d, io_out_##x##_bits_vu_tag);   \
+  BIND2(tb, d, io_out_##x##_bits_vx_tag);   \
+  BIND2(tb, d, io_out_##x##_bits_vy_tag);   \
+  BIND2(tb, d, io_out_##x##_bits_vz_tag);   \
+  BIND2(tb, d, io_out_##x##_bits_sv_addr);  \
+  BIND2(tb, d, io_out_##x##_bits_sv_data);  \
+  BIND2(tb, d, io_actv_##x##_ractive);      \
+  BIND2(tb, d, io_actv_##x##_wactive);
+  REPEAT(IO_BIND, KP_instructionLanes);
+#undef IO_BIND
 
   if (trace) {
     tb.trace(d);
diff --git a/tests/verilator_sim/kelvin/vld_tb.cc b/tests/verilator_sim/kelvin/vld_tb.cc
index 8a65da5..53eb286 100644
--- a/tests/verilator_sim/kelvin/vld_tb.cc
+++ b/tests/verilator_sim/kelvin/vld_tb.cc
@@ -13,162 +13,23 @@
 // limitations under the License.
 
 #include "VVLd.h"
-
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/kelvin/core_if.h"
 #include "tests/verilator_sim/kelvin/vencodeop.h"
 #include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 using encode::vld;
 
 struct VLd_tb : Sysc_tb {
   sc_in<bool> io_in_ready;
   sc_out<bool> io_in_valid;
-  sc_out<bool> io_in_bits_0_valid;
-  sc_out<bool> io_in_bits_0_bits_m;
-  sc_out<bool> io_in_bits_0_bits_vd_valid;
-  sc_out<bool> io_in_bits_0_bits_ve_valid;
-  sc_out<bool> io_in_bits_0_bits_vf_valid;
-  sc_out<bool> io_in_bits_0_bits_vg_valid;
-  sc_out<bool> io_in_bits_0_bits_vs_valid;
-  sc_out<bool> io_in_bits_0_bits_vt_valid;
-  sc_out<bool> io_in_bits_0_bits_vu_valid;
-  sc_out<bool> io_in_bits_0_bits_vx_valid;
-  sc_out<bool> io_in_bits_0_bits_vy_valid;
-  sc_out<bool> io_in_bits_0_bits_vz_valid;
-  sc_out<bool> io_in_bits_0_bits_sv_valid;
-  sc_out<bool> io_in_bits_0_bits_cmdsync;
-  sc_out<bool> io_in_bits_1_valid;
-  sc_out<bool> io_in_bits_1_bits_m;
-  sc_out<bool> io_in_bits_1_bits_vd_valid;
-  sc_out<bool> io_in_bits_1_bits_ve_valid;
-  sc_out<bool> io_in_bits_1_bits_vf_valid;
-  sc_out<bool> io_in_bits_1_bits_vg_valid;
-  sc_out<bool> io_in_bits_1_bits_vs_valid;
-  sc_out<bool> io_in_bits_1_bits_vt_valid;
-  sc_out<bool> io_in_bits_1_bits_vu_valid;
-  sc_out<bool> io_in_bits_1_bits_vx_valid;
-  sc_out<bool> io_in_bits_1_bits_vy_valid;
-  sc_out<bool> io_in_bits_1_bits_vz_valid;
-  sc_out<bool> io_in_bits_1_bits_sv_valid;
-  sc_out<bool> io_in_bits_1_bits_cmdsync;
-  sc_out<bool> io_in_bits_2_valid;
-  sc_out<bool> io_in_bits_2_bits_m;
-  sc_out<bool> io_in_bits_2_bits_vd_valid;
-  sc_out<bool> io_in_bits_2_bits_ve_valid;
-  sc_out<bool> io_in_bits_2_bits_vf_valid;
-  sc_out<bool> io_in_bits_2_bits_vg_valid;
-  sc_out<bool> io_in_bits_2_bits_vs_valid;
-  sc_out<bool> io_in_bits_2_bits_vt_valid;
-  sc_out<bool> io_in_bits_2_bits_vu_valid;
-  sc_out<bool> io_in_bits_2_bits_vx_valid;
-  sc_out<bool> io_in_bits_2_bits_vy_valid;
-  sc_out<bool> io_in_bits_2_bits_vz_valid;
-  sc_out<bool> io_in_bits_2_bits_sv_valid;
-  sc_out<bool> io_in_bits_2_bits_cmdsync;
-  sc_out<bool> io_in_bits_3_valid;
-  sc_out<bool> io_in_bits_3_bits_m;
-  sc_out<bool> io_in_bits_3_bits_vd_valid;
-  sc_out<bool> io_in_bits_3_bits_ve_valid;
-  sc_out<bool> io_in_bits_3_bits_vf_valid;
-  sc_out<bool> io_in_bits_3_bits_vg_valid;
-  sc_out<bool> io_in_bits_3_bits_vs_valid;
-  sc_out<bool> io_in_bits_3_bits_vt_valid;
-  sc_out<bool> io_in_bits_3_bits_vu_valid;
-  sc_out<bool> io_in_bits_3_bits_vx_valid;
-  sc_out<bool> io_in_bits_3_bits_vy_valid;
-  sc_out<bool> io_in_bits_3_bits_vz_valid;
-  sc_out<bool> io_in_bits_3_bits_sv_valid;
-  sc_out<bool> io_in_bits_3_bits_cmdsync;
   sc_in<bool> io_write_valid;
   sc_out<bool> io_axi_addr_ready;
   sc_in<bool> io_axi_addr_valid;
   sc_in<bool> io_axi_data_ready;
   sc_out<bool> io_axi_data_valid;
   sc_in<bool> io_nempty;
-  sc_out<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_in<sc_bv<6> > io_write_addr;
   sc_in<sc_bv<kVector> > io_write_data;
   sc_in<sc_bv<32> > io_axi_addr_bits_addr;
@@ -176,6 +37,44 @@
   sc_out<sc_bv<2> > io_axi_data_bits_resp;
   sc_out<sc_bv<6> > io_axi_data_bits_id;
   sc_out<sc_bv<kVector> > io_axi_data_bits_data;
+#define IO_BITS(x)                                  \
+  sc_out<bool> io_in_bits_##x##_valid;              \
+  sc_out<bool> io_in_bits_##x##_bits_m;             \
+  sc_out<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_out<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   using Sysc_tb::Sysc_tb;
 
@@ -207,7 +106,7 @@
     io_axi_data_bits_data = rdata;
 
 #define IN_READ(idx)                                           \
-  {                                                            \
+  if (io_in_bits_##idx##_valid) {                              \
     Input(io_in_bits_##idx##_bits_m,                           \
           io_in_bits_##idx##_bits_op.read().get_word(0),       \
           io_in_bits_##idx##_bits_f2.read().get_word(0),       \
@@ -220,19 +119,9 @@
   }
 
     if (io_in_valid && io_in_ready) {
-      if (io_in_bits_0_valid) {
-        IN_READ(0);
-      }
-      if (io_in_bits_1_valid) {
-        IN_READ(1);
-      }
-      if (io_in_bits_2_valid) {
-        IN_READ(2);
-      }
-      if (io_in_bits_3_valid) {
-        IN_READ(3);
-      }
+      REPEAT(IN_READ, KP_instructionLanes)
     }
+#undef IN_READ
 
 #define IN_RAND(idx)                                      \
   {                                                       \
@@ -262,10 +151,8 @@
 
     int cmd_valid = 0;
 
-    IN_RAND(0);
-    IN_RAND(1);
-    IN_RAND(2);
-    IN_RAND(3);
+    REPEAT(IN_RAND, KP_instructionLanes);
+#undef IN_RAND
 
     io_in_valid = rand_int(0, 4) == 0 && (cmd_count_ + cmd_valid) <= 64;
 
@@ -437,152 +324,12 @@
 static void VLd_test(char* name, int loops, bool trace) {
   sc_signal<bool> io_in_ready;
   sc_signal<bool> io_in_valid;
-  sc_signal<bool> io_in_bits_0_valid;
-  sc_signal<bool> io_in_bits_0_bits_m;
-  sc_signal<bool> io_in_bits_0_bits_vd_valid;
-  sc_signal<bool> io_in_bits_0_bits_ve_valid;
-  sc_signal<bool> io_in_bits_0_bits_vf_valid;
-  sc_signal<bool> io_in_bits_0_bits_vg_valid;
-  sc_signal<bool> io_in_bits_0_bits_vs_valid;
-  sc_signal<bool> io_in_bits_0_bits_vt_valid;
-  sc_signal<bool> io_in_bits_0_bits_vu_valid;
-  sc_signal<bool> io_in_bits_0_bits_vx_valid;
-  sc_signal<bool> io_in_bits_0_bits_vy_valid;
-  sc_signal<bool> io_in_bits_0_bits_vz_valid;
-  sc_signal<bool> io_in_bits_0_bits_sv_valid;
-  sc_signal<bool> io_in_bits_0_bits_cmdsync;
-  sc_signal<bool> io_in_bits_1_valid;
-  sc_signal<bool> io_in_bits_1_bits_m;
-  sc_signal<bool> io_in_bits_1_bits_vd_valid;
-  sc_signal<bool> io_in_bits_1_bits_ve_valid;
-  sc_signal<bool> io_in_bits_1_bits_vf_valid;
-  sc_signal<bool> io_in_bits_1_bits_vg_valid;
-  sc_signal<bool> io_in_bits_1_bits_vs_valid;
-  sc_signal<bool> io_in_bits_1_bits_vt_valid;
-  sc_signal<bool> io_in_bits_1_bits_vu_valid;
-  sc_signal<bool> io_in_bits_1_bits_vx_valid;
-  sc_signal<bool> io_in_bits_1_bits_vy_valid;
-  sc_signal<bool> io_in_bits_1_bits_vz_valid;
-  sc_signal<bool> io_in_bits_1_bits_sv_valid;
-  sc_signal<bool> io_in_bits_1_bits_cmdsync;
-  sc_signal<bool> io_in_bits_2_valid;
-  sc_signal<bool> io_in_bits_2_bits_m;
-  sc_signal<bool> io_in_bits_2_bits_vd_valid;
-  sc_signal<bool> io_in_bits_2_bits_ve_valid;
-  sc_signal<bool> io_in_bits_2_bits_vf_valid;
-  sc_signal<bool> io_in_bits_2_bits_vg_valid;
-  sc_signal<bool> io_in_bits_2_bits_vs_valid;
-  sc_signal<bool> io_in_bits_2_bits_vt_valid;
-  sc_signal<bool> io_in_bits_2_bits_vu_valid;
-  sc_signal<bool> io_in_bits_2_bits_vx_valid;
-  sc_signal<bool> io_in_bits_2_bits_vy_valid;
-  sc_signal<bool> io_in_bits_2_bits_vz_valid;
-  sc_signal<bool> io_in_bits_2_bits_sv_valid;
-  sc_signal<bool> io_in_bits_2_bits_cmdsync;
-  sc_signal<bool> io_in_bits_3_valid;
-  sc_signal<bool> io_in_bits_3_bits_m;
-  sc_signal<bool> io_in_bits_3_bits_vd_valid;
-  sc_signal<bool> io_in_bits_3_bits_ve_valid;
-  sc_signal<bool> io_in_bits_3_bits_vf_valid;
-  sc_signal<bool> io_in_bits_3_bits_vg_valid;
-  sc_signal<bool> io_in_bits_3_bits_vs_valid;
-  sc_signal<bool> io_in_bits_3_bits_vt_valid;
-  sc_signal<bool> io_in_bits_3_bits_vu_valid;
-  sc_signal<bool> io_in_bits_3_bits_vx_valid;
-  sc_signal<bool> io_in_bits_3_bits_vy_valid;
-  sc_signal<bool> io_in_bits_3_bits_vz_valid;
-  sc_signal<bool> io_in_bits_3_bits_sv_valid;
-  sc_signal<bool> io_in_bits_3_bits_cmdsync;
   sc_signal<bool> io_write_valid;
   sc_signal<bool> io_axi_addr_ready;
   sc_signal<bool> io_axi_addr_valid;
   sc_signal<bool> io_axi_data_ready;
   sc_signal<bool> io_axi_data_valid;
   sc_signal<bool> io_nempty;
-  sc_signal<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_signal<sc_bv<6> > io_write_addr;
   sc_signal<sc_bv<kVector> > io_write_data;
   sc_signal<sc_bv<32> > io_axi_addr_bits_addr;
@@ -590,6 +337,44 @@
   sc_signal<sc_bv<2> > io_axi_data_bits_resp;
   sc_signal<sc_bv<6> > io_axi_data_bits_id;
   sc_signal<sc_bv<kVector> > io_axi_data_bits_data;
+#define IO_BITS(x)                                     \
+  sc_signal<bool> io_in_bits_##x##_valid;              \
+  sc_signal<bool> io_in_bits_##x##_bits_m;             \
+  sc_signal<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_signal<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   VLd_tb tb("VLd_tb", loops, true /*random*/);
   VVLd ld(name);
@@ -598,152 +383,12 @@
   ld.reset(tb.reset);
   BIND2(tb, ld, io_in_ready);
   BIND2(tb, ld, io_in_valid);
-  BIND2(tb, ld, io_in_bits_0_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_m);
-  BIND2(tb, ld, io_in_bits_0_bits_vd_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_ve_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vf_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vg_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vs_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vt_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vu_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vx_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vy_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_vz_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_sv_valid);
-  BIND2(tb, ld, io_in_bits_0_bits_cmdsync);
-  BIND2(tb, ld, io_in_bits_1_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_m);
-  BIND2(tb, ld, io_in_bits_1_bits_vd_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_ve_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vf_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vg_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vs_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vt_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vu_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vx_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vy_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_vz_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_sv_valid);
-  BIND2(tb, ld, io_in_bits_1_bits_cmdsync);
-  BIND2(tb, ld, io_in_bits_2_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_m);
-  BIND2(tb, ld, io_in_bits_2_bits_vd_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_ve_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vf_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vg_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vs_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vt_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vu_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vx_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vy_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_vz_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_sv_valid);
-  BIND2(tb, ld, io_in_bits_2_bits_cmdsync);
-  BIND2(tb, ld, io_in_bits_3_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_m);
-  BIND2(tb, ld, io_in_bits_3_bits_vd_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_ve_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vf_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vg_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vs_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vt_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vu_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vx_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vy_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_vz_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_sv_valid);
-  BIND2(tb, ld, io_in_bits_3_bits_cmdsync);
   BIND2(tb, ld, io_write_valid);
   BIND2(tb, ld, io_axi_addr_ready);
   BIND2(tb, ld, io_axi_addr_valid);
   BIND2(tb, ld, io_axi_data_ready);
   BIND2(tb, ld, io_axi_data_valid);
   BIND2(tb, ld, io_nempty);
-  BIND2(tb, ld, io_in_bits_0_bits_op);
-  BIND2(tb, ld, io_in_bits_0_bits_f2);
-  BIND2(tb, ld, io_in_bits_0_bits_sz);
-  BIND2(tb, ld, io_in_bits_0_bits_vd_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_ve_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vf_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vg_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vs_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vs_tag);
-  BIND2(tb, ld, io_in_bits_0_bits_vt_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vt_tag);
-  BIND2(tb, ld, io_in_bits_0_bits_vu_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vu_tag);
-  BIND2(tb, ld, io_in_bits_0_bits_vx_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vx_tag);
-  BIND2(tb, ld, io_in_bits_0_bits_vy_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vy_tag);
-  BIND2(tb, ld, io_in_bits_0_bits_vz_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_vz_tag);
-  BIND2(tb, ld, io_in_bits_0_bits_sv_addr);
-  BIND2(tb, ld, io_in_bits_0_bits_sv_data);
-  BIND2(tb, ld, io_in_bits_1_bits_op);
-  BIND2(tb, ld, io_in_bits_1_bits_f2);
-  BIND2(tb, ld, io_in_bits_1_bits_sz);
-  BIND2(tb, ld, io_in_bits_1_bits_vd_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_ve_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vf_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vg_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vs_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vs_tag);
-  BIND2(tb, ld, io_in_bits_1_bits_vt_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vt_tag);
-  BIND2(tb, ld, io_in_bits_1_bits_vu_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vu_tag);
-  BIND2(tb, ld, io_in_bits_1_bits_vx_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vx_tag);
-  BIND2(tb, ld, io_in_bits_1_bits_vy_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vy_tag);
-  BIND2(tb, ld, io_in_bits_1_bits_vz_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_vz_tag);
-  BIND2(tb, ld, io_in_bits_1_bits_sv_addr);
-  BIND2(tb, ld, io_in_bits_1_bits_sv_data);
-  BIND2(tb, ld, io_in_bits_2_bits_op);
-  BIND2(tb, ld, io_in_bits_2_bits_f2);
-  BIND2(tb, ld, io_in_bits_2_bits_sz);
-  BIND2(tb, ld, io_in_bits_2_bits_vd_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_ve_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vf_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vg_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vs_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vs_tag);
-  BIND2(tb, ld, io_in_bits_2_bits_vt_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vt_tag);
-  BIND2(tb, ld, io_in_bits_2_bits_vu_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vu_tag);
-  BIND2(tb, ld, io_in_bits_2_bits_vx_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vx_tag);
-  BIND2(tb, ld, io_in_bits_2_bits_vy_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vy_tag);
-  BIND2(tb, ld, io_in_bits_2_bits_vz_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_vz_tag);
-  BIND2(tb, ld, io_in_bits_2_bits_sv_addr);
-  BIND2(tb, ld, io_in_bits_2_bits_sv_data);
-  BIND2(tb, ld, io_in_bits_3_bits_op);
-  BIND2(tb, ld, io_in_bits_3_bits_f2);
-  BIND2(tb, ld, io_in_bits_3_bits_sz);
-  BIND2(tb, ld, io_in_bits_3_bits_vd_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_ve_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vf_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vg_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vs_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vs_tag);
-  BIND2(tb, ld, io_in_bits_3_bits_vt_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vt_tag);
-  BIND2(tb, ld, io_in_bits_3_bits_vu_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vu_tag);
-  BIND2(tb, ld, io_in_bits_3_bits_vx_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vx_tag);
-  BIND2(tb, ld, io_in_bits_3_bits_vy_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vy_tag);
-  BIND2(tb, ld, io_in_bits_3_bits_vz_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_vz_tag);
-  BIND2(tb, ld, io_in_bits_3_bits_sv_addr);
-  BIND2(tb, ld, io_in_bits_3_bits_sv_data);
   BIND2(tb, ld, io_write_addr);
   BIND2(tb, ld, io_write_data);
   BIND2(tb, ld, io_axi_addr_bits_addr);
@@ -751,6 +396,44 @@
   BIND2(tb, ld, io_axi_data_bits_resp);
   BIND2(tb, ld, io_axi_data_bits_id);
   BIND2(tb, ld, io_axi_data_bits_data);
+#define IO_BIND(x)                               \
+  BIND2(tb, ld, io_in_bits_##x##_valid);         \
+  BIND2(tb, ld, io_in_bits_##x##_bits_m);        \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vd_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_ve_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vf_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vg_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vs_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vt_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vu_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vx_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vy_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vz_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_sv_valid); \
+  BIND2(tb, ld, io_in_bits_##x##_bits_cmdsync);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_op);       \
+  BIND2(tb, ld, io_in_bits_##x##_bits_f2);       \
+  BIND2(tb, ld, io_in_bits_##x##_bits_sz);       \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vd_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_ve_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vf_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vg_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vs_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vs_tag);   \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vt_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vt_tag);   \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vu_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vu_tag);   \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vx_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vx_tag);   \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vy_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vy_tag);   \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vz_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_vz_tag);   \
+  BIND2(tb, ld, io_in_bits_##x##_bits_sv_addr);  \
+  BIND2(tb, ld, io_in_bits_##x##_bits_sv_data);
+  REPEAT(IO_BIND, KP_instructionLanes);
+#undef IO_BIND
 
   if (trace) {
     tb.trace(ld);
diff --git a/tests/verilator_sim/kelvin/vldst_tb.cc b/tests/verilator_sim/kelvin/vldst_tb.cc
index 9539c6a..835bf4f 100644
--- a/tests/verilator_sim/kelvin/vldst_tb.cc
+++ b/tests/verilator_sim/kelvin/vldst_tb.cc
@@ -13,10 +13,11 @@
 // limitations under the License.
 
 #include "VVLdSt.h"
-
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/kelvin/core_if.h"
 #include "tests/verilator_sim/kelvin/vencodeop.h"
 #include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 using encode::vld;
 using encode::vst;
@@ -25,62 +26,6 @@
 struct VLdSt_tb : Sysc_tb {
   sc_in<bool> io_in_ready;
   sc_out<bool> io_in_valid;
-  sc_out<bool> io_in_bits_0_valid;
-  sc_out<bool> io_in_bits_0_bits_m;
-  sc_out<bool> io_in_bits_0_bits_vd_valid;
-  sc_out<bool> io_in_bits_0_bits_ve_valid;
-  sc_out<bool> io_in_bits_0_bits_vf_valid;
-  sc_out<bool> io_in_bits_0_bits_vg_valid;
-  sc_out<bool> io_in_bits_0_bits_vs_valid;
-  sc_out<bool> io_in_bits_0_bits_vt_valid;
-  sc_out<bool> io_in_bits_0_bits_vu_valid;
-  sc_out<bool> io_in_bits_0_bits_vx_valid;
-  sc_out<bool> io_in_bits_0_bits_vy_valid;
-  sc_out<bool> io_in_bits_0_bits_vz_valid;
-  sc_out<bool> io_in_bits_0_bits_sv_valid;
-  sc_out<bool> io_in_bits_0_bits_cmdsync;
-  sc_out<bool> io_in_bits_1_valid;
-  sc_out<bool> io_in_bits_1_bits_m;
-  sc_out<bool> io_in_bits_1_bits_vd_valid;
-  sc_out<bool> io_in_bits_1_bits_ve_valid;
-  sc_out<bool> io_in_bits_1_bits_vf_valid;
-  sc_out<bool> io_in_bits_1_bits_vg_valid;
-  sc_out<bool> io_in_bits_1_bits_vs_valid;
-  sc_out<bool> io_in_bits_1_bits_vt_valid;
-  sc_out<bool> io_in_bits_1_bits_vu_valid;
-  sc_out<bool> io_in_bits_1_bits_vx_valid;
-  sc_out<bool> io_in_bits_1_bits_vy_valid;
-  sc_out<bool> io_in_bits_1_bits_vz_valid;
-  sc_out<bool> io_in_bits_1_bits_sv_valid;
-  sc_out<bool> io_in_bits_1_bits_cmdsync;
-  sc_out<bool> io_in_bits_2_valid;
-  sc_out<bool> io_in_bits_2_bits_m;
-  sc_out<bool> io_in_bits_2_bits_vd_valid;
-  sc_out<bool> io_in_bits_2_bits_ve_valid;
-  sc_out<bool> io_in_bits_2_bits_vf_valid;
-  sc_out<bool> io_in_bits_2_bits_vg_valid;
-  sc_out<bool> io_in_bits_2_bits_vs_valid;
-  sc_out<bool> io_in_bits_2_bits_vt_valid;
-  sc_out<bool> io_in_bits_2_bits_vu_valid;
-  sc_out<bool> io_in_bits_2_bits_vx_valid;
-  sc_out<bool> io_in_bits_2_bits_vy_valid;
-  sc_out<bool> io_in_bits_2_bits_vz_valid;
-  sc_out<bool> io_in_bits_2_bits_sv_valid;
-  sc_out<bool> io_in_bits_2_bits_cmdsync;
-  sc_out<bool> io_in_bits_3_valid;
-  sc_out<bool> io_in_bits_3_bits_m;
-  sc_out<bool> io_in_bits_3_bits_vd_valid;
-  sc_out<bool> io_in_bits_3_bits_ve_valid;
-  sc_out<bool> io_in_bits_3_bits_vf_valid;
-  sc_out<bool> io_in_bits_3_bits_vg_valid;
-  sc_out<bool> io_in_bits_3_bits_vs_valid;
-  sc_out<bool> io_in_bits_3_bits_vt_valid;
-  sc_out<bool> io_in_bits_3_bits_vu_valid;
-  sc_out<bool> io_in_bits_3_bits_vx_valid;
-  sc_out<bool> io_in_bits_3_bits_vy_valid;
-  sc_out<bool> io_in_bits_3_bits_vz_valid;
-  sc_out<bool> io_in_bits_3_bits_sv_valid;
-  sc_out<bool> io_in_bits_3_bits_cmdsync;
   sc_in<bool> io_read_valid;
   sc_out<bool> io_read_ready;
   sc_in<bool> io_read_stall;
@@ -88,90 +33,6 @@
   sc_in<bool> io_dbus_valid;
   sc_out<bool> io_dbus_ready;
   sc_in<bool> io_dbus_write;
-  sc_out<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_in<sc_bv<64> > io_active;
   sc_out<sc_bv<128> > io_vrfsb;
   sc_in<sc_bv<6> > io_read_addr;
@@ -187,6 +48,44 @@
   sc_out<sc_bv<kVector> > io_dbus_rdata;
   sc_in<bool> io_last;
   sc_in<bool> io_vstoreCount;
+#define IO_BITS(x)                                  \
+  sc_out<bool> io_in_bits_##x##_valid;              \
+  sc_out<bool> io_in_bits_##x##_bits_m;             \
+  sc_out<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_out<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   using Sysc_tb::Sysc_tb;
 
@@ -233,30 +132,28 @@
   }
 
     io_in_valid = rand_bool();
-    IN_RAND(0);
-    IN_RAND(1);
-    IN_RAND(2);
-    IN_RAND(3);
+    REPEAT(IN_RAND, KP_instructionLanes);
+#undef IN_RAND
 
-#define IN_READ(idx)                                        \
-  Input(io_in_bits_##idx##_bits_m,                          \
-        io_in_bits_##idx##_bits_op.read().get_word(0),      \
-        io_in_bits_##idx##_bits_f2.read().get_word(0),      \
-        io_in_bits_##idx##_bits_sz.read().get_word(0),      \
-        io_in_bits_##idx##_bits_vd_valid,                   \
-        io_in_bits_##idx##_bits_vd_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_vs_valid,                   \
-        io_in_bits_##idx##_bits_vs_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_vs_tag.read().get_word(0),  \
-        io_in_bits_##idx##_bits_sv_addr.read().get_word(0), \
-        io_in_bits_##idx##_bits_sv_data.read().get_word(0));
+#define IN_READ(idx)                                           \
+  if (io_in_bits_##idx##_valid) {                              \
+    Input(io_in_bits_##idx##_bits_m,                           \
+          io_in_bits_##idx##_bits_op.read().get_word(0),       \
+          io_in_bits_##idx##_bits_f2.read().get_word(0),       \
+          io_in_bits_##idx##_bits_sz.read().get_word(0),       \
+          io_in_bits_##idx##_bits_vd_valid,                    \
+          io_in_bits_##idx##_bits_vd_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_vs_valid,                    \
+          io_in_bits_##idx##_bits_vs_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_vs_tag.read().get_word(0),   \
+          io_in_bits_##idx##_bits_sv_addr.read().get_word(0),  \
+          io_in_bits_##idx##_bits_sv_data.read().get_word(0)); \
+  }
 
     if (io_in_valid && io_in_ready) {
-      if (io_in_bits_0_valid) IN_READ(0);
-      if (io_in_bits_1_valid) IN_READ(1);
-      if (io_in_bits_2_valid) IN_READ(2);
-      if (io_in_bits_3_valid) IN_READ(3);
+      REPEAT(IN_READ, KP_instructionLanes);
     }
+#undef IN_READ
 
     // Outputs.
     if (io_read_valid) {
@@ -562,62 +459,6 @@
 static void VLdSt_test(char* name, int loops, bool trace) {
   sc_signal<bool> io_in_ready;
   sc_signal<bool> io_in_valid;
-  sc_signal<bool> io_in_bits_0_valid;
-  sc_signal<bool> io_in_bits_0_bits_m;
-  sc_signal<bool> io_in_bits_0_bits_vd_valid;
-  sc_signal<bool> io_in_bits_0_bits_ve_valid;
-  sc_signal<bool> io_in_bits_0_bits_vf_valid;
-  sc_signal<bool> io_in_bits_0_bits_vg_valid;
-  sc_signal<bool> io_in_bits_0_bits_vs_valid;
-  sc_signal<bool> io_in_bits_0_bits_vt_valid;
-  sc_signal<bool> io_in_bits_0_bits_vu_valid;
-  sc_signal<bool> io_in_bits_0_bits_vx_valid;
-  sc_signal<bool> io_in_bits_0_bits_vy_valid;
-  sc_signal<bool> io_in_bits_0_bits_vz_valid;
-  sc_signal<bool> io_in_bits_0_bits_sv_valid;
-  sc_signal<bool> io_in_bits_0_bits_cmdsync;
-  sc_signal<bool> io_in_bits_1_valid;
-  sc_signal<bool> io_in_bits_1_bits_m;
-  sc_signal<bool> io_in_bits_1_bits_vd_valid;
-  sc_signal<bool> io_in_bits_1_bits_ve_valid;
-  sc_signal<bool> io_in_bits_1_bits_vf_valid;
-  sc_signal<bool> io_in_bits_1_bits_vg_valid;
-  sc_signal<bool> io_in_bits_1_bits_vs_valid;
-  sc_signal<bool> io_in_bits_1_bits_vt_valid;
-  sc_signal<bool> io_in_bits_1_bits_vu_valid;
-  sc_signal<bool> io_in_bits_1_bits_vx_valid;
-  sc_signal<bool> io_in_bits_1_bits_vy_valid;
-  sc_signal<bool> io_in_bits_1_bits_vz_valid;
-  sc_signal<bool> io_in_bits_1_bits_sv_valid;
-  sc_signal<bool> io_in_bits_1_bits_cmdsync;
-  sc_signal<bool> io_in_bits_2_valid;
-  sc_signal<bool> io_in_bits_2_bits_m;
-  sc_signal<bool> io_in_bits_2_bits_vd_valid;
-  sc_signal<bool> io_in_bits_2_bits_ve_valid;
-  sc_signal<bool> io_in_bits_2_bits_vf_valid;
-  sc_signal<bool> io_in_bits_2_bits_vg_valid;
-  sc_signal<bool> io_in_bits_2_bits_vs_valid;
-  sc_signal<bool> io_in_bits_2_bits_vt_valid;
-  sc_signal<bool> io_in_bits_2_bits_vu_valid;
-  sc_signal<bool> io_in_bits_2_bits_vx_valid;
-  sc_signal<bool> io_in_bits_2_bits_vy_valid;
-  sc_signal<bool> io_in_bits_2_bits_vz_valid;
-  sc_signal<bool> io_in_bits_2_bits_sv_valid;
-  sc_signal<bool> io_in_bits_2_bits_cmdsync;
-  sc_signal<bool> io_in_bits_3_valid;
-  sc_signal<bool> io_in_bits_3_bits_m;
-  sc_signal<bool> io_in_bits_3_bits_vd_valid;
-  sc_signal<bool> io_in_bits_3_bits_ve_valid;
-  sc_signal<bool> io_in_bits_3_bits_vf_valid;
-  sc_signal<bool> io_in_bits_3_bits_vg_valid;
-  sc_signal<bool> io_in_bits_3_bits_vs_valid;
-  sc_signal<bool> io_in_bits_3_bits_vt_valid;
-  sc_signal<bool> io_in_bits_3_bits_vu_valid;
-  sc_signal<bool> io_in_bits_3_bits_vx_valid;
-  sc_signal<bool> io_in_bits_3_bits_vy_valid;
-  sc_signal<bool> io_in_bits_3_bits_vz_valid;
-  sc_signal<bool> io_in_bits_3_bits_sv_valid;
-  sc_signal<bool> io_in_bits_3_bits_cmdsync;
   sc_signal<bool> io_read_valid;
   sc_signal<bool> io_read_ready;
   sc_signal<bool> io_read_stall;
@@ -625,90 +466,6 @@
   sc_signal<bool> io_dbus_valid;
   sc_signal<bool> io_dbus_ready;
   sc_signal<bool> io_dbus_write;
-  sc_signal<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_signal<sc_bv<64> > io_active;
   sc_signal<sc_bv<128> > io_vrfsb;
   sc_signal<sc_bv<6> > io_read_addr;
@@ -724,6 +481,44 @@
   sc_signal<sc_bv<kVector> > io_dbus_rdata;
   sc_signal<bool> io_last;
   sc_signal<bool> io_vstoreCount;
+#define IO_BITS(x)                                     \
+  sc_signal<bool> io_in_bits_##x##_valid;              \
+  sc_signal<bool> io_in_bits_##x##_bits_m;             \
+  sc_signal<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_signal<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   VLdSt_tb tb("VLdSt_tb", loops, true /* random */);
   VVLdSt ldst(name);
@@ -732,62 +527,6 @@
   ldst.reset(tb.reset);
   BIND2(tb, ldst, io_in_ready);
   BIND2(tb, ldst, io_in_valid);
-  BIND2(tb, ldst, io_in_bits_0_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_m);
-  BIND2(tb, ldst, io_in_bits_0_bits_vd_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_ve_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vf_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vg_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vs_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vt_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vu_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vx_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vy_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_vz_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_sv_valid);
-  BIND2(tb, ldst, io_in_bits_0_bits_cmdsync);
-  BIND2(tb, ldst, io_in_bits_1_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_m);
-  BIND2(tb, ldst, io_in_bits_1_bits_vd_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_ve_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vf_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vg_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vs_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vt_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vu_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vx_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vy_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_vz_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_sv_valid);
-  BIND2(tb, ldst, io_in_bits_1_bits_cmdsync);
-  BIND2(tb, ldst, io_in_bits_2_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_m);
-  BIND2(tb, ldst, io_in_bits_2_bits_vd_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_ve_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vf_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vg_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vs_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vt_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vu_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vx_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vy_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_vz_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_sv_valid);
-  BIND2(tb, ldst, io_in_bits_2_bits_cmdsync);
-  BIND2(tb, ldst, io_in_bits_3_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_m);
-  BIND2(tb, ldst, io_in_bits_3_bits_vd_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_ve_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vf_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vg_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vs_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vt_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vu_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vx_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vy_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_vz_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_sv_valid);
-  BIND2(tb, ldst, io_in_bits_3_bits_cmdsync);
   BIND2(tb, ldst, io_read_valid);
   BIND2(tb, ldst, io_read_ready);
   BIND2(tb, ldst, io_read_stall);
@@ -795,90 +534,6 @@
   BIND2(tb, ldst, io_dbus_valid);
   BIND2(tb, ldst, io_dbus_ready);
   BIND2(tb, ldst, io_dbus_write);
-  BIND2(tb, ldst, io_in_bits_0_bits_op);
-  BIND2(tb, ldst, io_in_bits_0_bits_f2);
-  BIND2(tb, ldst, io_in_bits_0_bits_sz);
-  BIND2(tb, ldst, io_in_bits_0_bits_vd_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_ve_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vf_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vg_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vs_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vt_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vu_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vx_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vy_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vz_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_vs_tag);
-  BIND2(tb, ldst, io_in_bits_0_bits_vt_tag);
-  BIND2(tb, ldst, io_in_bits_0_bits_vu_tag);
-  BIND2(tb, ldst, io_in_bits_0_bits_vx_tag);
-  BIND2(tb, ldst, io_in_bits_0_bits_vy_tag);
-  BIND2(tb, ldst, io_in_bits_0_bits_vz_tag);
-  BIND2(tb, ldst, io_in_bits_0_bits_sv_addr);
-  BIND2(tb, ldst, io_in_bits_0_bits_sv_data);
-  BIND2(tb, ldst, io_in_bits_1_bits_op);
-  BIND2(tb, ldst, io_in_bits_1_bits_f2);
-  BIND2(tb, ldst, io_in_bits_1_bits_sz);
-  BIND2(tb, ldst, io_in_bits_1_bits_vd_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_ve_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vf_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vg_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vs_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vt_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vu_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vx_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vy_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vz_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_vs_tag);
-  BIND2(tb, ldst, io_in_bits_1_bits_vt_tag);
-  BIND2(tb, ldst, io_in_bits_1_bits_vu_tag);
-  BIND2(tb, ldst, io_in_bits_1_bits_vx_tag);
-  BIND2(tb, ldst, io_in_bits_1_bits_vy_tag);
-  BIND2(tb, ldst, io_in_bits_1_bits_vz_tag);
-  BIND2(tb, ldst, io_in_bits_1_bits_sv_addr);
-  BIND2(tb, ldst, io_in_bits_1_bits_sv_data);
-  BIND2(tb, ldst, io_in_bits_2_bits_op);
-  BIND2(tb, ldst, io_in_bits_2_bits_f2);
-  BIND2(tb, ldst, io_in_bits_2_bits_sz);
-  BIND2(tb, ldst, io_in_bits_2_bits_vd_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_ve_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vf_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vg_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vs_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vt_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vu_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vx_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vy_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vz_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_vs_tag);
-  BIND2(tb, ldst, io_in_bits_2_bits_vt_tag);
-  BIND2(tb, ldst, io_in_bits_2_bits_vu_tag);
-  BIND2(tb, ldst, io_in_bits_2_bits_vx_tag);
-  BIND2(tb, ldst, io_in_bits_2_bits_vy_tag);
-  BIND2(tb, ldst, io_in_bits_2_bits_vz_tag);
-  BIND2(tb, ldst, io_in_bits_2_bits_sv_addr);
-  BIND2(tb, ldst, io_in_bits_2_bits_sv_data);
-  BIND2(tb, ldst, io_in_bits_3_bits_op);
-  BIND2(tb, ldst, io_in_bits_3_bits_f2);
-  BIND2(tb, ldst, io_in_bits_3_bits_sz);
-  BIND2(tb, ldst, io_in_bits_3_bits_vd_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_ve_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vf_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vg_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vs_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vt_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vu_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vx_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vy_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vz_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_vs_tag);
-  BIND2(tb, ldst, io_in_bits_3_bits_vt_tag);
-  BIND2(tb, ldst, io_in_bits_3_bits_vu_tag);
-  BIND2(tb, ldst, io_in_bits_3_bits_vx_tag);
-  BIND2(tb, ldst, io_in_bits_3_bits_vy_tag);
-  BIND2(tb, ldst, io_in_bits_3_bits_vz_tag);
-  BIND2(tb, ldst, io_in_bits_3_bits_sv_addr);
-  BIND2(tb, ldst, io_in_bits_3_bits_sv_data);
   BIND2(tb, ldst, io_active);
   BIND2(tb, ldst, io_vrfsb);
   BIND2(tb, ldst, io_read_addr);
@@ -894,6 +549,44 @@
   BIND2(tb, ldst, io_dbus_rdata);
   BIND2(tb, ldst, io_last);
   BIND2(tb, ldst, io_vstoreCount);
+#define IO_BIND(x)                                 \
+  BIND2(tb, ldst, io_in_bits_##x##_valid);         \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_m);        \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vd_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_ve_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vf_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vg_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vs_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vt_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vu_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vx_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vy_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vz_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_sv_valid); \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_cmdsync);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_op);       \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_f2);       \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_sz);       \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vd_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_ve_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vf_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vg_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vs_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vt_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vu_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vx_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vy_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vz_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vs_tag);   \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vt_tag);   \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vu_tag);   \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vx_tag);   \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vy_tag);   \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_vz_tag);   \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_sv_addr);  \
+  BIND2(tb, ldst, io_in_bits_##x##_bits_sv_data);
+  REPEAT(IO_BIND, KP_instructionLanes);
+#undef IO_BIND
 
   if (trace) {
     tb.trace(ldst);
diff --git a/tests/verilator_sim/kelvin/vst_tb.cc b/tests/verilator_sim/kelvin/vst_tb.cc
index 79567e7..ccdb249 100644
--- a/tests/verilator_sim/kelvin/vst_tb.cc
+++ b/tests/verilator_sim/kelvin/vst_tb.cc
@@ -13,10 +13,11 @@
 // limitations under the License.
 
 #include "VVSt.h"
-
+#include "hdl/chisel/src/kelvin/kelvin_parameters.h"
 #include "tests/verilator_sim/kelvin/core_if.h"
 #include "tests/verilator_sim/kelvin/vencodeop.h"
 #include "tests/verilator_sim/sysc_tb.h"
+#include "tests/verilator_sim/util.h"
 
 using encode::vld;
 using encode::vst;
@@ -25,62 +26,6 @@
 struct VSt_tb : Sysc_tb {
   sc_in<bool> io_in_ready;
   sc_out<bool> io_in_valid;
-  sc_out<bool> io_in_bits_0_valid;
-  sc_out<bool> io_in_bits_0_bits_m;
-  sc_out<bool> io_in_bits_0_bits_vd_valid;
-  sc_out<bool> io_in_bits_0_bits_ve_valid;
-  sc_out<bool> io_in_bits_0_bits_vf_valid;
-  sc_out<bool> io_in_bits_0_bits_vg_valid;
-  sc_out<bool> io_in_bits_0_bits_vs_valid;
-  sc_out<bool> io_in_bits_0_bits_vt_valid;
-  sc_out<bool> io_in_bits_0_bits_vu_valid;
-  sc_out<bool> io_in_bits_0_bits_vx_valid;
-  sc_out<bool> io_in_bits_0_bits_vy_valid;
-  sc_out<bool> io_in_bits_0_bits_vz_valid;
-  sc_out<bool> io_in_bits_0_bits_sv_valid;
-  sc_out<bool> io_in_bits_0_bits_cmdsync;
-  sc_out<bool> io_in_bits_1_valid;
-  sc_out<bool> io_in_bits_1_bits_m;
-  sc_out<bool> io_in_bits_1_bits_vd_valid;
-  sc_out<bool> io_in_bits_1_bits_ve_valid;
-  sc_out<bool> io_in_bits_1_bits_vf_valid;
-  sc_out<bool> io_in_bits_1_bits_vg_valid;
-  sc_out<bool> io_in_bits_1_bits_vs_valid;
-  sc_out<bool> io_in_bits_1_bits_vt_valid;
-  sc_out<bool> io_in_bits_1_bits_vu_valid;
-  sc_out<bool> io_in_bits_1_bits_vx_valid;
-  sc_out<bool> io_in_bits_1_bits_vy_valid;
-  sc_out<bool> io_in_bits_1_bits_vz_valid;
-  sc_out<bool> io_in_bits_1_bits_sv_valid;
-  sc_out<bool> io_in_bits_1_bits_cmdsync;
-  sc_out<bool> io_in_bits_2_valid;
-  sc_out<bool> io_in_bits_2_bits_m;
-  sc_out<bool> io_in_bits_2_bits_vd_valid;
-  sc_out<bool> io_in_bits_2_bits_ve_valid;
-  sc_out<bool> io_in_bits_2_bits_vf_valid;
-  sc_out<bool> io_in_bits_2_bits_vg_valid;
-  sc_out<bool> io_in_bits_2_bits_vs_valid;
-  sc_out<bool> io_in_bits_2_bits_vt_valid;
-  sc_out<bool> io_in_bits_2_bits_vu_valid;
-  sc_out<bool> io_in_bits_2_bits_vx_valid;
-  sc_out<bool> io_in_bits_2_bits_vy_valid;
-  sc_out<bool> io_in_bits_2_bits_vz_valid;
-  sc_out<bool> io_in_bits_2_bits_sv_valid;
-  sc_out<bool> io_in_bits_2_bits_cmdsync;
-  sc_out<bool> io_in_bits_3_valid;
-  sc_out<bool> io_in_bits_3_bits_m;
-  sc_out<bool> io_in_bits_3_bits_vd_valid;
-  sc_out<bool> io_in_bits_3_bits_ve_valid;
-  sc_out<bool> io_in_bits_3_bits_vf_valid;
-  sc_out<bool> io_in_bits_3_bits_vg_valid;
-  sc_out<bool> io_in_bits_3_bits_vs_valid;
-  sc_out<bool> io_in_bits_3_bits_vt_valid;
-  sc_out<bool> io_in_bits_3_bits_vu_valid;
-  sc_out<bool> io_in_bits_3_bits_vx_valid;
-  sc_out<bool> io_in_bits_3_bits_vy_valid;
-  sc_out<bool> io_in_bits_3_bits_vz_valid;
-  sc_out<bool> io_in_bits_3_bits_sv_valid;
-  sc_out<bool> io_in_bits_3_bits_cmdsync;
   sc_in<bool> io_read_valid;
   sc_out<bool> io_read_ready;
   sc_in<bool> io_read_stall;
@@ -93,90 +38,6 @@
   sc_out<bool> io_axi_resp_valid;
   sc_in<bool> io_nempty;
   sc_in<bool> io_vstoreCount;
-  sc_out<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_out<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_out<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_out<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_out<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_out<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_in<sc_bv<64> > io_active;
   sc_out<sc_bv<128> > io_vrfsb;
   sc_in<sc_bv<6> > io_read_addr;
@@ -187,6 +48,44 @@
   sc_in<sc_bv<kUncStrb> > io_axi_data_bits_strb;
   sc_out<sc_bv<6> > io_axi_resp_bits_id;
   sc_out<sc_bv<2> > io_axi_resp_bits_resp;
+#define IO_BITS(x)                                  \
+  sc_out<bool> io_in_bits_##x##_valid;              \
+  sc_out<bool> io_in_bits_##x##_bits_m;             \
+  sc_out<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_out<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_out<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_out<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_out<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_out<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_out<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   using Sysc_tb::Sysc_tb;
 
@@ -227,7 +126,7 @@
     io_axi_resp_bits_id = w.id;
 
 #define IN_READ(idx)                                                     \
-  {                                                                      \
+  if (io_in_bits_##idx##_valid) {                                        \
     Input(io_in_bits_##idx##_bits_m,                                     \
           io_in_bits_##idx##_bits_op.read().get_word(0),                 \
           io_in_bits_##idx##_bits_f2.read().get_word(0),                 \
@@ -243,19 +142,9 @@
   }
 
     if (io_in_valid && io_in_ready) {
-      if (io_in_bits_0_valid) {
-        IN_READ(0);
-      }
-      if (io_in_bits_1_valid) {
-        IN_READ(1);
-      }
-      if (io_in_bits_2_valid) {
-        IN_READ(2);
-      }
-      if (io_in_bits_3_valid) {
-        IN_READ(3);
-      }
+      REPEAT(IN_READ, KP_instructionLanes);
     }
+#undef IN_READ
 
 #define IN_RAND(idx)                                                    \
   {                                                                     \
@@ -288,10 +177,8 @@
 
     int cmd_valid = 0;
 
-    IN_RAND(0);
-    IN_RAND(1);
-    IN_RAND(2);
-    IN_RAND(3);
+    REPEAT(IN_RAND, KP_instructionLanes);
+#undef IN_RAND
 
     io_in_valid = rand_int(0, 4) == 0 && (cmd_count_ + cmd_valid) <= 256;
 
@@ -506,62 +393,6 @@
 static void VSt_test(char* name, int loops, bool trace) {
   sc_signal<bool> io_in_ready;
   sc_signal<bool> io_in_valid;
-  sc_signal<bool> io_in_bits_0_valid;
-  sc_signal<bool> io_in_bits_0_bits_m;
-  sc_signal<bool> io_in_bits_0_bits_vd_valid;
-  sc_signal<bool> io_in_bits_0_bits_ve_valid;
-  sc_signal<bool> io_in_bits_0_bits_vf_valid;
-  sc_signal<bool> io_in_bits_0_bits_vg_valid;
-  sc_signal<bool> io_in_bits_0_bits_vs_valid;
-  sc_signal<bool> io_in_bits_0_bits_vt_valid;
-  sc_signal<bool> io_in_bits_0_bits_vu_valid;
-  sc_signal<bool> io_in_bits_0_bits_vx_valid;
-  sc_signal<bool> io_in_bits_0_bits_vy_valid;
-  sc_signal<bool> io_in_bits_0_bits_vz_valid;
-  sc_signal<bool> io_in_bits_0_bits_sv_valid;
-  sc_signal<bool> io_in_bits_0_bits_cmdsync;
-  sc_signal<bool> io_in_bits_1_valid;
-  sc_signal<bool> io_in_bits_1_bits_m;
-  sc_signal<bool> io_in_bits_1_bits_vd_valid;
-  sc_signal<bool> io_in_bits_1_bits_ve_valid;
-  sc_signal<bool> io_in_bits_1_bits_vf_valid;
-  sc_signal<bool> io_in_bits_1_bits_vg_valid;
-  sc_signal<bool> io_in_bits_1_bits_vs_valid;
-  sc_signal<bool> io_in_bits_1_bits_vt_valid;
-  sc_signal<bool> io_in_bits_1_bits_vu_valid;
-  sc_signal<bool> io_in_bits_1_bits_vx_valid;
-  sc_signal<bool> io_in_bits_1_bits_vy_valid;
-  sc_signal<bool> io_in_bits_1_bits_vz_valid;
-  sc_signal<bool> io_in_bits_1_bits_sv_valid;
-  sc_signal<bool> io_in_bits_1_bits_cmdsync;
-  sc_signal<bool> io_in_bits_2_valid;
-  sc_signal<bool> io_in_bits_2_bits_m;
-  sc_signal<bool> io_in_bits_2_bits_vd_valid;
-  sc_signal<bool> io_in_bits_2_bits_ve_valid;
-  sc_signal<bool> io_in_bits_2_bits_vf_valid;
-  sc_signal<bool> io_in_bits_2_bits_vg_valid;
-  sc_signal<bool> io_in_bits_2_bits_vs_valid;
-  sc_signal<bool> io_in_bits_2_bits_vt_valid;
-  sc_signal<bool> io_in_bits_2_bits_vu_valid;
-  sc_signal<bool> io_in_bits_2_bits_vx_valid;
-  sc_signal<bool> io_in_bits_2_bits_vy_valid;
-  sc_signal<bool> io_in_bits_2_bits_vz_valid;
-  sc_signal<bool> io_in_bits_2_bits_sv_valid;
-  sc_signal<bool> io_in_bits_2_bits_cmdsync;
-  sc_signal<bool> io_in_bits_3_valid;
-  sc_signal<bool> io_in_bits_3_bits_m;
-  sc_signal<bool> io_in_bits_3_bits_vd_valid;
-  sc_signal<bool> io_in_bits_3_bits_ve_valid;
-  sc_signal<bool> io_in_bits_3_bits_vf_valid;
-  sc_signal<bool> io_in_bits_3_bits_vg_valid;
-  sc_signal<bool> io_in_bits_3_bits_vs_valid;
-  sc_signal<bool> io_in_bits_3_bits_vt_valid;
-  sc_signal<bool> io_in_bits_3_bits_vu_valid;
-  sc_signal<bool> io_in_bits_3_bits_vx_valid;
-  sc_signal<bool> io_in_bits_3_bits_vy_valid;
-  sc_signal<bool> io_in_bits_3_bits_vz_valid;
-  sc_signal<bool> io_in_bits_3_bits_sv_valid;
-  sc_signal<bool> io_in_bits_3_bits_cmdsync;
   sc_signal<bool> io_read_valid;
   sc_signal<bool> io_read_ready;
   sc_signal<bool> io_read_stall;
@@ -574,90 +405,6 @@
   sc_signal<bool> io_axi_resp_valid;
   sc_signal<bool> io_nempty;
   sc_signal<bool> io_vstoreCount;
-  sc_signal<sc_bv<7> > io_in_bits_0_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_0_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_0_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_0_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_0_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_1_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_1_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_1_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_1_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_1_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_2_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_2_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_2_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_2_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_2_bits_sv_data;
-  sc_signal<sc_bv<7> > io_in_bits_3_bits_op;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_f2;
-  sc_signal<sc_bv<3> > io_in_bits_3_bits_sz;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vd_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_ve_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vf_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vg_addr;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vs_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vs_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vt_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vt_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vu_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vu_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vx_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vx_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vy_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vy_tag;
-  sc_signal<sc_bv<6> > io_in_bits_3_bits_vz_addr;
-  sc_signal<sc_bv<4> > io_in_bits_3_bits_vz_tag;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_addr;
-  sc_signal<sc_bv<32> > io_in_bits_3_bits_sv_data;
   sc_signal<sc_bv<64> > io_active;
   sc_signal<sc_bv<128> > io_vrfsb;
   sc_signal<sc_bv<6> > io_read_addr;
@@ -668,6 +415,44 @@
   sc_signal<sc_bv<kUncStrb> > io_axi_data_bits_strb;
   sc_signal<sc_bv<6> > io_axi_resp_bits_id;
   sc_signal<sc_bv<2> > io_axi_resp_bits_resp;
+#define IO_BITS(x)                                     \
+  sc_signal<bool> io_in_bits_##x##_valid;              \
+  sc_signal<bool> io_in_bits_##x##_bits_m;             \
+  sc_signal<bool> io_in_bits_##x##_bits_vd_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_ve_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vf_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vg_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vs_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vt_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vu_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vx_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vy_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_vz_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_sv_valid;      \
+  sc_signal<bool> io_in_bits_##x##_bits_cmdsync;       \
+  sc_signal<sc_bv<7> > io_in_bits_##x##_bits_op;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_f2;       \
+  sc_signal<sc_bv<3> > io_in_bits_##x##_bits_sz;       \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vd_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_ve_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vf_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vg_addr;  \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vs_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vs_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vt_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vt_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vu_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vu_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vx_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vx_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vy_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vy_tag;   \
+  sc_signal<sc_bv<6> > io_in_bits_##x##_bits_vz_addr;  \
+  sc_signal<sc_bv<4> > io_in_bits_##x##_bits_vz_tag;   \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_addr; \
+  sc_signal<sc_bv<32> > io_in_bits_##x##_bits_sv_data;
+  REPEAT(IO_BITS, KP_instructionLanes);
+#undef IO_BITS
 
   VSt_tb tb("VSt_tb", loops, true /*random*/);
   VVSt st(name);
@@ -676,62 +461,6 @@
   st.reset(tb.reset);
   BIND2(tb, st, io_in_ready);
   BIND2(tb, st, io_in_valid);
-  BIND2(tb, st, io_in_bits_0_valid);
-  BIND2(tb, st, io_in_bits_0_bits_m);
-  BIND2(tb, st, io_in_bits_0_bits_vd_valid);
-  BIND2(tb, st, io_in_bits_0_bits_ve_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vf_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vg_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vs_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vt_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vu_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vx_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vy_valid);
-  BIND2(tb, st, io_in_bits_0_bits_vz_valid);
-  BIND2(tb, st, io_in_bits_0_bits_sv_valid);
-  BIND2(tb, st, io_in_bits_0_bits_cmdsync);
-  BIND2(tb, st, io_in_bits_1_valid);
-  BIND2(tb, st, io_in_bits_1_bits_m);
-  BIND2(tb, st, io_in_bits_1_bits_vd_valid);
-  BIND2(tb, st, io_in_bits_1_bits_ve_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vf_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vg_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vs_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vt_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vu_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vx_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vy_valid);
-  BIND2(tb, st, io_in_bits_1_bits_vz_valid);
-  BIND2(tb, st, io_in_bits_1_bits_sv_valid);
-  BIND2(tb, st, io_in_bits_1_bits_cmdsync);
-  BIND2(tb, st, io_in_bits_2_valid);
-  BIND2(tb, st, io_in_bits_2_bits_m);
-  BIND2(tb, st, io_in_bits_2_bits_vd_valid);
-  BIND2(tb, st, io_in_bits_2_bits_ve_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vf_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vg_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vs_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vt_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vu_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vx_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vy_valid);
-  BIND2(tb, st, io_in_bits_2_bits_vz_valid);
-  BIND2(tb, st, io_in_bits_2_bits_sv_valid);
-  BIND2(tb, st, io_in_bits_2_bits_cmdsync);
-  BIND2(tb, st, io_in_bits_3_valid);
-  BIND2(tb, st, io_in_bits_3_bits_m);
-  BIND2(tb, st, io_in_bits_3_bits_vd_valid);
-  BIND2(tb, st, io_in_bits_3_bits_ve_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vf_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vg_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vs_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vt_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vu_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vx_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vy_valid);
-  BIND2(tb, st, io_in_bits_3_bits_vz_valid);
-  BIND2(tb, st, io_in_bits_3_bits_sv_valid);
-  BIND2(tb, st, io_in_bits_3_bits_cmdsync);
   BIND2(tb, st, io_read_valid);
   BIND2(tb, st, io_read_ready);
   BIND2(tb, st, io_read_stall);
@@ -744,90 +473,6 @@
   BIND2(tb, st, io_axi_resp_valid);
   BIND2(tb, st, io_nempty);
   BIND2(tb, st, io_vstoreCount);
-  BIND2(tb, st, io_in_bits_0_bits_op);
-  BIND2(tb, st, io_in_bits_0_bits_f2);
-  BIND2(tb, st, io_in_bits_0_bits_sz);
-  BIND2(tb, st, io_in_bits_0_bits_vd_addr);
-  BIND2(tb, st, io_in_bits_0_bits_ve_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vf_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vg_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vs_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vs_tag);
-  BIND2(tb, st, io_in_bits_0_bits_vt_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vt_tag);
-  BIND2(tb, st, io_in_bits_0_bits_vu_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vu_tag);
-  BIND2(tb, st, io_in_bits_0_bits_vx_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vx_tag);
-  BIND2(tb, st, io_in_bits_0_bits_vy_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vy_tag);
-  BIND2(tb, st, io_in_bits_0_bits_vz_addr);
-  BIND2(tb, st, io_in_bits_0_bits_vz_tag);
-  BIND2(tb, st, io_in_bits_0_bits_sv_addr);
-  BIND2(tb, st, io_in_bits_0_bits_sv_data);
-  BIND2(tb, st, io_in_bits_1_bits_op);
-  BIND2(tb, st, io_in_bits_1_bits_f2);
-  BIND2(tb, st, io_in_bits_1_bits_sz);
-  BIND2(tb, st, io_in_bits_1_bits_vd_addr);
-  BIND2(tb, st, io_in_bits_1_bits_ve_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vf_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vg_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vs_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vs_tag);
-  BIND2(tb, st, io_in_bits_1_bits_vt_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vt_tag);
-  BIND2(tb, st, io_in_bits_1_bits_vu_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vu_tag);
-  BIND2(tb, st, io_in_bits_1_bits_vx_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vx_tag);
-  BIND2(tb, st, io_in_bits_1_bits_vy_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vy_tag);
-  BIND2(tb, st, io_in_bits_1_bits_vz_addr);
-  BIND2(tb, st, io_in_bits_1_bits_vz_tag);
-  BIND2(tb, st, io_in_bits_1_bits_sv_addr);
-  BIND2(tb, st, io_in_bits_1_bits_sv_data);
-  BIND2(tb, st, io_in_bits_2_bits_op);
-  BIND2(tb, st, io_in_bits_2_bits_f2);
-  BIND2(tb, st, io_in_bits_2_bits_sz);
-  BIND2(tb, st, io_in_bits_2_bits_vd_addr);
-  BIND2(tb, st, io_in_bits_2_bits_ve_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vf_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vg_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vs_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vs_tag);
-  BIND2(tb, st, io_in_bits_2_bits_vt_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vt_tag);
-  BIND2(tb, st, io_in_bits_2_bits_vu_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vu_tag);
-  BIND2(tb, st, io_in_bits_2_bits_vx_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vx_tag);
-  BIND2(tb, st, io_in_bits_2_bits_vy_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vy_tag);
-  BIND2(tb, st, io_in_bits_2_bits_vz_addr);
-  BIND2(tb, st, io_in_bits_2_bits_vz_tag);
-  BIND2(tb, st, io_in_bits_2_bits_sv_addr);
-  BIND2(tb, st, io_in_bits_2_bits_sv_data);
-  BIND2(tb, st, io_in_bits_3_bits_op);
-  BIND2(tb, st, io_in_bits_3_bits_f2);
-  BIND2(tb, st, io_in_bits_3_bits_sz);
-  BIND2(tb, st, io_in_bits_3_bits_vd_addr);
-  BIND2(tb, st, io_in_bits_3_bits_ve_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vf_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vg_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vs_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vs_tag);
-  BIND2(tb, st, io_in_bits_3_bits_vt_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vt_tag);
-  BIND2(tb, st, io_in_bits_3_bits_vu_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vu_tag);
-  BIND2(tb, st, io_in_bits_3_bits_vx_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vx_tag);
-  BIND2(tb, st, io_in_bits_3_bits_vy_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vy_tag);
-  BIND2(tb, st, io_in_bits_3_bits_vz_addr);
-  BIND2(tb, st, io_in_bits_3_bits_vz_tag);
-  BIND2(tb, st, io_in_bits_3_bits_sv_addr);
-  BIND2(tb, st, io_in_bits_3_bits_sv_data);
   BIND2(tb, st, io_active);
   BIND2(tb, st, io_vrfsb);
   BIND2(tb, st, io_read_addr);
@@ -838,6 +483,44 @@
   BIND2(tb, st, io_axi_data_bits_strb);
   BIND2(tb, st, io_axi_resp_bits_id);
   BIND2(tb, st, io_axi_resp_bits_resp);
+#define IO_BIND(x)                               \
+  BIND2(tb, st, io_in_bits_##x##_valid);         \
+  BIND2(tb, st, io_in_bits_##x##_bits_m);        \
+  BIND2(tb, st, io_in_bits_##x##_bits_vd_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_ve_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vf_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vg_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vs_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vt_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vu_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vx_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vy_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_vz_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_sv_valid); \
+  BIND2(tb, st, io_in_bits_##x##_bits_cmdsync);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_op);       \
+  BIND2(tb, st, io_in_bits_##x##_bits_f2);       \
+  BIND2(tb, st, io_in_bits_##x##_bits_sz);       \
+  BIND2(tb, st, io_in_bits_##x##_bits_vd_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_ve_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vf_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vg_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vs_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vs_tag);   \
+  BIND2(tb, st, io_in_bits_##x##_bits_vt_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vt_tag);   \
+  BIND2(tb, st, io_in_bits_##x##_bits_vu_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vu_tag);   \
+  BIND2(tb, st, io_in_bits_##x##_bits_vx_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vx_tag);   \
+  BIND2(tb, st, io_in_bits_##x##_bits_vy_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vy_tag);   \
+  BIND2(tb, st, io_in_bits_##x##_bits_vz_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_vz_tag);   \
+  BIND2(tb, st, io_in_bits_##x##_bits_sv_addr);  \
+  BIND2(tb, st, io_in_bits_##x##_bits_sv_data);
+  REPEAT(IO_BIND, KP_instructionLanes);
+#undef IO_BIND
 
   if (trace) {
     tb.trace(st);
diff --git a/tests/verilator_sim/util.h b/tests/verilator_sim/util.h
new file mode 100644
index 0000000..be454b0
--- /dev/null
+++ b/tests/verilator_sim/util.h
@@ -0,0 +1,18 @@
+#ifndef TESTS_VERILATOR_SIM_UTIL_H_
+#define TESTS_VERILATOR_SIM_UTIL_H_
+
+#define REPEAT_1(FN) FN(0)
+#define REPEAT_2(FN) REPEAT_1(FN) FN(1)
+#define REPEAT_3(FN) REPEAT_2(FN) FN(2)
+#define REPEAT_4(FN) REPEAT_3(FN) FN(3)
+#define REPEAT_5(FN) REPEAT_4(FN) FN(4)
+#define REPEAT_6(FN) REPEAT_5(FN) FN(5)
+#define REPEAT_7(FN) REPEAT_6(FN) FN(6)
+#define REPEAT_8(FN) REPEAT_7(FN) FN(7)
+#define REPEAT(FN, N) REPEAT_(FN, N)
+#define REPEAT_(FN, N) REPEAT_##N(FN)
+
+#define STRINGIFY(x) STRINGIFY_(x)
+#define STRINGIFY_(x) #x
+
+#endif  // TESTS_VERILATOR_SIM_UTIL_H_
\ No newline at end of file