Make core_sim simulation trace and cycle configurable To run core_sim with cycles and trace specified ``` core_sim --trace --cycles 50000 <bin path> ``` Change-Id: I8eb7b5aad4d16179bee7ddd31b899a86dfa021f0
diff --git a/rules/repos.bzl b/rules/repos.bzl index ebcf1b7..e22179c 100644 --- a/rules/repos.bzl +++ b/rules/repos.bzl
@@ -44,3 +44,10 @@ strip_prefix = "rules_foreign_cc-0.9.0", url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.9.0.tar.gz", ) + + http_archive( + name = "com_google_absl", + sha256 = "3ea49a7d97421b88a8c48a0de16c16048e17725c7ec0f1d3ea2683a2a75adc21", + strip_prefix = "abseil-cpp-20230125.0", + urls = ["https://github.com/abseil/abseil-cpp/archive/refs/tags/20230125.0.tar.gz"], + )
diff --git a/tests/verilator_sim/BUILD b/tests/verilator_sim/BUILD index d549d23..a974e32 100644 --- a/tests/verilator_sim/BUILD +++ b/tests/verilator_sim/BUILD
@@ -35,6 +35,9 @@ ":kelvin_if", ":sim_libs", "//hdl/chisel:core_cc_library", + "@com_google_absl//absl/flags:flag", + "@com_google_absl//absl/flags:parse", + "@com_google_absl//absl/flags:usage", ], ) @@ -114,7 +117,7 @@ cc_test( name = "valuint_tb", - size="large", + size = "large", srcs = [ "kelvin/valuint_tb.cc", ],
diff --git a/tests/verilator_sim/kelvin/core_tb.cc b/tests/verilator_sim/kelvin/core_tb.cc index c449816..f23c1f7 100644 --- a/tests/verilator_sim/kelvin/core_tb.cc +++ b/tests/verilator_sim/kelvin/core_tb.cc
@@ -1,13 +1,16 @@ // Copyright 2023 Google LLC -#include "tests/verilator_sim/sysc_tb.h" - -#include "VCore.h" - +#include "VCore.h" // Generated +#include "absl/flags/flag.h" +#include "absl/flags/parse.h" +#include "absl/flags/usage.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" +ABSL_FLAG(int, cycles, 100000000, "Simulation cycles"); +ABSL_FLAG(bool, trace, false, "Dump VCD trace"); struct Core_tb : Sysc_tb { sc_in<bool> io_halted; @@ -21,9 +24,10 @@ } }; -static void Core_run(const char* name, const char* bin, const bool trace) { +static void Core_run(const char* name, const char* bin, const int cycles, + const bool trace) { VCore core(name); - Core_tb tb("Core_tb", 100000000, /* random= */ false); + Core_tb tb("Core_tb", cycles, /* random= */ false); Core_if mif("Core_if", bin); Debug_if dbg("Debug_if", &mif); @@ -209,7 +213,9 @@ dbg.io_slog_addr(io_slog_addr); dbg.io_slog_data(io_slog_data); -#define BINDAXI(a) core.a(a); mif.a(a) +#define BINDAXI(a) \ + core.a(a); \ + mif.a(a) BINDAXI(io_axi0_write_addr_ready); BINDAXI(io_axi0_write_addr_valid); BINDAXI(io_axi0_write_addr_bits_addr); @@ -261,12 +267,17 @@ } int sc_main(int argc, char *argv[]) { - if (argc <= 1) { - printf("Expected binary file argument\n"); - return -1; + absl::SetProgramUsageMessage("Kelvin SystemC simulation tool"); + auto out_args = absl::ParseCommandLine(argc, argv); + argc = out_args.size(); + argv = &out_args[0]; + if (argc != 2) { + fprintf(stderr, "Need one binary input file\n"); + return 1; } - const char* path = argv[1]; - Core_run(Sysc_tb::get_name(argv[0]), path, false); + + Core_run(Sysc_tb::get_name(argv[0]), path, absl::GetFlag(FLAGS_cycles), + absl::GetFlag(FLAGS_trace)); return 0; }
diff --git a/tests/verilator_sim/sysc_tb.h b/tests/verilator_sim/sysc_tb.h index b097a7d..6caca7f 100644 --- a/tests/verilator_sim/sysc_tb.h +++ b/tests/verilator_sim/sysc_tb.h
@@ -16,7 +16,7 @@ using sc_dt::sc_bv; -const char *vcd_path_ = "/tmp/kelvin/vcd"; +const char *vcd_path_ = "/tmp"; #define BIND(a, b) a.b(b) #define BIND2(a, b, c) \