diff --git a/dbt-rise-core b/dbt-rise-core index c3c48b0..9b1791a 160000 --- a/dbt-rise-core +++ b/dbt-rise-core @@ -1 +1 @@ -Subproject commit c3c48b095dd5f0a9a45d6a488cd0d0375db33813 +Subproject commit 9b1791a9b74ae796adfad19c96b7736bdd5df3fd diff --git a/dbt-rise-riscv b/dbt-rise-riscv index 76456a4..4be6176 160000 --- a/dbt-rise-riscv +++ b/dbt-rise-riscv @@ -1 +1 @@ -Subproject commit 76456a4fca91bf4817a5c114df98cb76d9e129bf +Subproject commit 4be6176695a5d2ea426a17333028c18bb95d7c73 diff --git a/scc b/scc index 726a432..2d5b268 160000 --- a/scc +++ b/scc @@ -1 +1 @@ -Subproject commit 726a43247ca0cf5693658dde24fcff8f8988c3d7 +Subproject commit 2d5b268615924c4c4a980909dc8f669bbab0bc9b diff --git a/src/sc_main.cpp b/src/sc_main.cpp index f432a30..b730803 100644 --- a/src/sc_main.cpp +++ b/src/sc_main.cpp @@ -84,38 +84,7 @@ int sc_main(int argc, char* argv[]) { SCCERR() << "Invalid parameter specification '" << p << "', should be '='"; } /////////////////////////////////////////////////////////////////////////// - // set up tracing & transaction recording - /////////////////////////////////////////////////////////////////////////// - std::unique_ptr tracer; - if(auto trace_level = parser.get("trace-level")) { - auto file_name = parser.get("trace-file"); - auto trace_default_on = parser.is_set("trace-default-on"); - auto enable_tx_trace = static_cast(trace_level & 0x2); - cfg.set_value("scc_tracer.default_trace_enable", !parser.is_set("trace-default-off")); - cfg.set_value("scc_tracer.tx_trace_type", static_cast(scc::tracer::file_type::FTR)); - cfg.set_value("scc_tracer.sig_trace_type", static_cast(scc::tracer::file_type::FST)); - tracer = scc::make_unique(file_name, enable_tx_trace, static_cast(trace_level & 0x1)); - if(enable_tx_trace) - cfg.set_value(core_path + ".enable_instr_trace", true); - } - /////////////////////////////////////////////////////////////////////////// - // instantiate top level - /////////////////////////////////////////////////////////////////////////// - auto i_system = scc::make_unique("tb"); - /////////////////////////////////////////////////////////////////////////// - // dump configuration if requested and/or structure - /////////////////////////////////////////////////////////////////////////// - if(parser.get("dump-config").size() > 0) { - std::ofstream of{parser.get("dump-config")}; - if(of.is_open()) - cfg.dump_configuration(of, true); - } - cfg.configure(); - std::unique_ptr dumper; - if(parser.is_set("dump-structure")) - dumper.reset(new scc::hierarchy_dumper(parser.get("dump-structure"), scc::hierarchy_dumper::D3JSON)); - /////////////////////////////////////////////////////////////////////////// - // overwrite config with command line settings + // rocess CLI switche and set/overwrite config from command line settings /////////////////////////////////////////////////////////////////////////// cfg.set_value(core_path + ".gdb_server_port", parser.get("gdb-port")); cfg.set_value(core_path + ".dump_ir", parser.is_set("dump-ir")); @@ -144,10 +113,52 @@ int sc_main(int argc, char* argv[]) { } } /////////////////////////////////////////////////////////////////////////// + // set up tracing & transaction recording + /////////////////////////////////////////////////////////////////////////// + std::unique_ptr tracer; + if(auto trace_level = parser.get("trace-level")) { + auto file_name = parser.get("trace-file"); + auto trace_default_on = parser.is_set("trace-default-on"); + auto enable_tx_trace = static_cast(trace_level & 0x2); + cfg.set_value("scc_tracer.default_trace_enable", !parser.is_set("trace-default-off")); + cfg.set_value("scc_tracer.tx_trace_type", static_cast(scc::tracer::file_type::FTR)); + cfg.set_value("scc_tracer.sig_trace_type", static_cast(scc::tracer::file_type::FST)); + tracer = scc::make_unique(file_name, enable_tx_trace, static_cast(trace_level & 0x1)); + if(enable_tx_trace) + cfg.set_value(core_path + ".enable_instr_trace", true); + } + /////////////////////////////////////////////////////////////////////////// + // instantiate top level + /////////////////////////////////////////////////////////////////////////// + auto i_system = scc::make_unique("tb"); + /////////////////////////////////////////////////////////////////////////// + // dump configuration and/or hierarchical structure if requested + /////////////////////////////////////////////////////////////////////////// + if(parser.get("dump-config").size() > 0) { + std::ofstream of{parser.get("dump-config")}; + if(of.is_open()) + cfg.dump_configuration(of, true); + } + cfg.configure(); + std::unique_ptr dumper; + if(parser.is_set("dump-structure")) + dumper.reset(new scc::hierarchy_dumper(parser.get("dump-structure"), scc::hierarchy_dumper::D3JSON)); + /////////////////////////////////////////////////////////////////////////// // run simulation /////////////////////////////////////////////////////////////////////////// if(auto res = setjmp(abrt)) { - SCCERR() << "Simulation aborted with signal " << res << "!"; + switch(res) { + case SIGHUP: + case SIGINT: + case SIGQUIT: + case SIGTERM: + case SIGUSR1: + case SIGUSR2: + SCCINFO() << "Simulation stopped with signal " << res << "."; + break; + default: + SCCERR() << "Simulation aborted with signal " << res << "!"; + } } else { try { if(parser.is_set("max_time")) {