Helper functions for test-suite
This commit is contained in:
parent
89f9293ff3
commit
0e2f1f7874
|
@ -48,12 +48,14 @@ public:
|
|||
riscv_tlm::peripherals::Trace *trace;
|
||||
riscv_tlm::peripherals::Timer *timer;
|
||||
|
||||
explicit Simulator(sc_core::sc_module_name const &name, cpu_types_t cpu_type): sc_module(name) {
|
||||
explicit Simulator(sc_core::sc_module_name const &name, cpu_types_t cpu_type_m): sc_module(name) {
|
||||
std::uint32_t start_PC;
|
||||
|
||||
MainMemory = new riscv_tlm::Memory("Main_Memory", filename);
|
||||
start_PC = MainMemory->getPCfromHEX();
|
||||
|
||||
cpu_type = cpu_type_m;
|
||||
|
||||
if (cpu_type == RV32) {
|
||||
cpu = new riscv_tlm::RV32("cpu", start_PC, debug_session);
|
||||
} else {
|
||||
|
@ -92,6 +94,16 @@ public:
|
|||
private:
|
||||
void MemoryDump() const {
|
||||
std::cout << "********** MEMORY DUMP ***********\n";
|
||||
|
||||
if (dump_addr_st == 0) {
|
||||
dump_addr_st = cpu->getStartDumpAddress();
|
||||
}
|
||||
|
||||
if (dump_addr_end == 0) {
|
||||
dump_addr_end = cpu->getEndDumpAddress();
|
||||
}
|
||||
|
||||
std::cout << "from 0x" << std::hex << dump_addr_st << " to 0x" << dump_addr_end << "\n";
|
||||
tlm::tlm_generic_payload trans;
|
||||
sc_core::sc_time delay;
|
||||
std::uint32_t data[4];
|
||||
|
@ -122,6 +134,9 @@ private:
|
|||
|
||||
signature_file.close();
|
||||
}
|
||||
|
||||
private:
|
||||
cpu_types_t cpu_type;
|
||||
};
|
||||
|
||||
Simulator *top;
|
||||
|
@ -181,7 +196,7 @@ void process_arguments(int argc, char *argv[]) {
|
|||
filename = std::string(optarg);
|
||||
break;
|
||||
case 'R':
|
||||
if (strcmp(optarg, "RV32") == 0) {
|
||||
if (strcmp(optarg, "32") == 0) {
|
||||
cpu_type_opt = RV32;
|
||||
} else {
|
||||
cpu_type_opt = RV64;
|
||||
|
@ -214,7 +229,7 @@ int sc_main(int argc, char *argv[]) {
|
|||
sc_core::sc_set_time_resolution(1, sc_core::SC_NS);
|
||||
|
||||
spdlog::filename_t log_filename = SPDLOG_FILENAME_T("newlog.txt");
|
||||
logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("my_logger", log_filename);
|
||||
logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("my_logger", log_filename, true);
|
||||
logger->set_pattern("%v");
|
||||
logger->set_level(spdlog::level::info);
|
||||
|
||||
|
@ -233,7 +248,8 @@ int sc_main(int argc, char *argv[]) {
|
|||
std::cout << "Total elapsed time: " << elapsed_seconds.count() << "s" << std::endl;
|
||||
std::cout << "Simulated " << int(std::round(instructions)) << " instr/sec" << std::endl;
|
||||
|
||||
if (!mem_dump) {
|
||||
if (!mem_dump)
|
||||
{
|
||||
std::cout << "Press Enter to finish" << std::endl;
|
||||
std::cin.ignore();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue