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