diff --git a/inc/Memory.h b/inc/Memory.h index 894b237..bb9073a 100644 --- a/inc/Memory.h +++ b/inc/Memory.h @@ -36,7 +36,7 @@ public: const sc_core::sc_time LATENCY; Memory(sc_core::sc_module_name name, std::string filename); - Memory(sc_core::sc_module_name name, bool use_file); + Memory(sc_core::sc_module_name name); ~Memory(void); diff --git a/src/CPU.cpp b/src/CPU.cpp index 11bb4ae..9ab20ba 100644 --- a/src/CPU.cpp +++ b/src/CPU.cpp @@ -62,7 +62,7 @@ CPU::~CPU() { bool CPU::cpu_process_IRQ() { uint32_t csr_temp; - uint32_t new_pc, old_pc; + uint32_t new_pc; bool ret_value = false; if (interrupt == true) { @@ -80,7 +80,7 @@ bool CPU::cpu_process_IRQ() { log->SC_log(Log::DEBUG) << "Interrupt!" << std::endl; /* updated MEPC register */ - old_pc = register_bank->getPC(); + uint32_t old_pc = register_bank->getPC(); register_bank->setCSR(CSR_MEPC, old_pc); log->SC_log(Log::INFO) << "Old PC Value 0x" << std::hex << old_pc << std::endl; @@ -212,8 +212,11 @@ void CPU::call_interrupt(tlm::tlm_generic_payload &trans, interrupt = true; /* Socket caller send a cause (its id) */ memcpy(&int_cause, trans.get_data_ptr(), sizeof(uint32_t)); + delay = sc_core::SC_ZERO_TIME; } void CPU::invalidate_direct_mem_ptr(sc_dt::uint64 start, sc_dt::uint64 end) { + (void) start; + (void) end; dmi_ptr_valid = false; } diff --git a/src/CPU64.cpp b/src/CPU64.cpp index 1af765a..fa7b6bf 100644 --- a/src/CPU64.cpp +++ b/src/CPU64.cpp @@ -62,7 +62,7 @@ CPU64::~CPU64() { bool CPU64::cpu_process_IRQ() { uint32_t csr_temp; - uint32_t new_pc, old_pc; + uint32_t new_pc; bool ret_value = false; if (interrupt == true) { @@ -80,7 +80,7 @@ bool CPU64::cpu_process_IRQ() { log->SC_log(Log::DEBUG) << "Interrupt!" << std::endl; /* updated MEPC register */ - old_pc = register_bank->getPC(); + uint32_t old_pc = register_bank->getPC(); register_bank->setCSR(CSR_MEPC, old_pc); log->SC_log(Log::INFO) << "Old PC Value 0x" << std::hex << old_pc << std::endl; @@ -214,8 +214,11 @@ void CPU64::call_interrupt(tlm::tlm_generic_payload &trans, interrupt = true; /* Socket caller send a cause (its id) */ memcpy(&int_cause, trans.get_data_ptr(), sizeof(uint32_t)); + delay = sc_core::SC_ZERO_TIME; } void CPU64::invalidate_direct_mem_ptr(sc_dt::uint64 start, sc_dt::uint64 end) { + (void) start; + (void) end; dmi_ptr_valid = false; } diff --git a/src/C_extension.cpp b/src/C_extension.cpp index d8f6e9d..61aa54e 100644 --- a/src/C_extension.cpp +++ b/src/C_extension.cpp @@ -258,11 +258,13 @@ bool C_extension::Exec_C_ADDI4SPN() { bool C_extension::Exec_C_ADDI16SP() { // addi x2, x2, nzimm[9:4] - int rd, rs1; + int rd; int32_t imm = 0; - int32_t calc; if (get_rd() == 2) { + int rs1; + int32_t calc; + rd = 2; rs1 = 2; imm = get_imm_ADDI16SP(); diff --git a/src/Memory.cpp b/src/Memory.cpp index 7003a28..301b425 100644 --- a/src/Memory.cpp +++ b/src/Memory.cpp @@ -26,7 +26,7 @@ Memory::Memory(sc_core::sc_module_name name, std::string filename) : log->SC_log(Log::INFO) << "Using file: " << filename << std::endl; } -Memory::Memory(sc_core::sc_module_name name, bool use_file) : +Memory::Memory(sc_core::sc_module_name name) : sc_module(name), socket("socket"), LATENCY(sc_core::SC_ZERO_TIME) { socket.register_b_transport(this, &Memory::b_transport); socket.register_get_direct_mem_ptr(this, &Memory::get_direct_mem_ptr); @@ -37,7 +37,7 @@ Memory::Memory(sc_core::sc_module_name name, bool use_file) : mem = new uint8_t[SIZE]; log = Log::getInstance(); - log->SC_log(Log::INFO) << "Memory instantiated wihtout file" << std::endl; + log->SC_log(Log::INFO) << "Memory instantiated without file" << std::endl; } Memory::~Memory() { @@ -108,6 +108,8 @@ void Memory::b_transport(tlm::tlm_generic_payload &trans, bool Memory::get_direct_mem_ptr(tlm::tlm_generic_payload &trans, tlm::tlm_dmi &dmi_data) { + (void) trans; + if (memory_offset != 0) { return false; } @@ -145,9 +147,7 @@ unsigned int Memory::transport_dbg(tlm::tlm_generic_payload &trans) { void Memory::readHexFile(std::string filename) { std::ifstream hexfile; std::string line; - int byte_count; - uint32_t address; - int i = 0; + uint32_t extended_address = 0; hexfile.open(filename); @@ -157,11 +157,13 @@ void Memory::readHexFile(std::string filename) { if (line[0] == ':') { if (line.substr(7, 2) == "00") { /* Data */ + int byte_count; + uint32_t address; byte_count = stol(line.substr(1, 2), nullptr, 16); address = stol(line.substr(3, 4), nullptr, 16); address = address + extended_address; //cout << "00 address 0x" << hex << address << endl; - for (i = 0; i < byte_count; i++) { + for (int i = 0; i < byte_count; i++) { mem[address + i] = stol(line.substr(9 + (i * 2), 2), nullptr, 16); } diff --git a/src/Simulator.cpp b/src/Simulator.cpp index 2cc2320..39fe20d 100644 --- a/src/Simulator.cpp +++ b/src/Simulator.cpp @@ -37,9 +37,11 @@ SC_MODULE(Simulator) { Trace *trace; Timer *timer; - uint32_t start_PC; + SC_CTOR(Simulator) { + uint32_t start_PC; + MainMemory = new Memory("Main_Memory", filename); start_PC = MainMemory->getPCfromHEX(); @@ -74,6 +76,7 @@ Simulator *top; void intHandler(int dummy) { delete top; + (void) dummy; //sc_stop(); exit(-1); } diff --git a/src/Timer.cpp b/src/Timer.cpp index cad358a..30c9207 100644 --- a/src/Timer.cpp +++ b/src/Timer.cpp @@ -39,15 +39,17 @@ void Timer::run() { void Timer::b_transport(tlm::tlm_generic_payload &trans, sc_core::sc_time &delay) { + tlm::tlm_command cmd = trans.get_command(); sc_dt::uint64 addr = trans.get_address(); unsigned char *ptr = trans.get_data_ptr(); unsigned int len = trans.get_data_length(); //unsigned char* byt = trans.get_byte_enable_ptr(); //unsigned int wid = trans.get_streaming_width(); + delay = sc_core::SC_ZERO_TIME; uint32_t aux_value = 0; - uint64_t notify_time = 0; + if (cmd == tlm::TLM_WRITE_COMMAND) { memcpy(&aux_value, ptr, len); @@ -64,6 +66,7 @@ void Timer::b_transport(tlm::tlm_generic_payload &trans, case TIMERCMP_MEMORY_ADDRESS_HI: m_mtimecmp.range(63, 32) = aux_value; + uint64_t notify_time; // notify needs relative time, mtimecmp works in absolute time notify_time = m_mtimecmp - m_mtime; diff --git a/src/Trace.cpp b/src/Trace.cpp index 699a210..3f321c9 100644 --- a/src/Trace.cpp +++ b/src/Trace.cpp @@ -110,8 +110,9 @@ void Trace::b_transport(tlm::tlm_generic_payload &trans, sc_core::sc_time &delay) { unsigned char *ptr = trans.get_data_ptr(); + delay = sc_core::SC_ZERO_TIME; - write(ptSlave, ptr, 1); + (void) write(ptSlave, ptr, 1); trans.set_response_status(tlm::TLM_OK_RESPONSE); }