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