changed C array to std::array
This commit is contained in:
parent
49e17203c2
commit
de1aa4c7a6
|
@ -65,7 +65,7 @@ private:
|
||||||
/**
|
/**
|
||||||
* @brief Memory array in bytes
|
* @brief Memory array in bytes
|
||||||
*/
|
*/
|
||||||
uint8_t *mem;
|
std::array<uint8_t, Memory::SIZE> mem{};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Log class
|
* @brief Log class
|
||||||
|
|
|
@ -16,9 +16,6 @@ Memory::Memory(sc_core::sc_module_name const &name, std::string const &filename)
|
||||||
socket.register_get_direct_mem_ptr(this, &Memory::get_direct_mem_ptr);
|
socket.register_get_direct_mem_ptr(this, &Memory::get_direct_mem_ptr);
|
||||||
socket.register_transport_dbg(this, &Memory::transport_dbg);
|
socket.register_transport_dbg(this, &Memory::transport_dbg);
|
||||||
|
|
||||||
mem = new uint8_t[SIZE];
|
|
||||||
//memset(mem, 0, SIZE*sizeof(uint8_t));
|
|
||||||
|
|
||||||
memory_offset = 0;
|
memory_offset = 0;
|
||||||
program_counter = 0;
|
program_counter = 0;
|
||||||
readHexFile(filename);
|
readHexFile(filename);
|
||||||
|
@ -35,15 +32,11 @@ Memory::Memory(sc_core::sc_module_name const& name) :
|
||||||
memory_offset = 0;
|
memory_offset = 0;
|
||||||
program_counter = 0;
|
program_counter = 0;
|
||||||
|
|
||||||
mem = new uint8_t[SIZE];
|
|
||||||
|
|
||||||
log = Log::getInstance();
|
log = Log::getInstance();
|
||||||
log->SC_log(Log::INFO) << "Memory instantiated without file" << std::endl;
|
log->SC_log(Log::INFO) << "Memory instantiated without file" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Memory::~Memory() {
|
Memory::~Memory() = default;
|
||||||
delete[] mem;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t Memory::getPCfromHEX() {
|
uint32_t Memory::getPCfromHEX() {
|
||||||
return program_counter;
|
return program_counter;
|
||||||
|
@ -61,7 +54,7 @@ void Memory::b_transport(tlm::tlm_generic_payload &trans,
|
||||||
// *********************************************
|
// *********************************************
|
||||||
// Generate the appropriate error response
|
// Generate the appropriate error response
|
||||||
// *********************************************
|
// *********************************************
|
||||||
if (adr >= sc_dt::uint64(SIZE)) {
|
if (adr >= sc_dt::uint64(Memory::SIZE)) {
|
||||||
trans.set_response_status(tlm::TLM_ADDRESS_ERROR_RESPONSE);
|
trans.set_response_status(tlm::TLM_ADDRESS_ERROR_RESPONSE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -76,10 +69,11 @@ void Memory::b_transport(tlm::tlm_generic_payload &trans,
|
||||||
|
|
||||||
|
|
||||||
// Obliged to implement read and write commands
|
// Obliged to implement read and write commands
|
||||||
if (cmd == tlm::TLM_READ_COMMAND)
|
if (cmd == tlm::TLM_READ_COMMAND) {
|
||||||
memcpy(ptr, &mem[adr], len);
|
std::copy_n(mem.cbegin() + adr, len, ptr);
|
||||||
else if (cmd == tlm::TLM_WRITE_COMMAND)
|
} else if (cmd == tlm::TLM_WRITE_COMMAND) {
|
||||||
memcpy(&mem[adr], ptr, len);
|
std::copy_n(ptr, len, mem.begin() + adr);
|
||||||
|
}
|
||||||
|
|
||||||
// Illustrates that b_transport may block
|
// Illustrates that b_transport may block
|
||||||
//sc_core::wait(delay);
|
//sc_core::wait(delay);
|
||||||
|
@ -116,7 +110,7 @@ bool Memory::get_direct_mem_ptr(tlm::tlm_generic_payload &trans,
|
||||||
// Set other details of DMI region
|
// Set other details of DMI region
|
||||||
dmi_data.set_dmi_ptr(reinterpret_cast<unsigned char*>(&mem[0]));
|
dmi_data.set_dmi_ptr(reinterpret_cast<unsigned char*>(&mem[0]));
|
||||||
dmi_data.set_start_address(0);
|
dmi_data.set_start_address(0);
|
||||||
dmi_data.set_end_address(SIZE * 4 - 1);
|
dmi_data.set_end_address(Memory::SIZE * 4 - 1);
|
||||||
dmi_data.set_read_latency(LATENCY);
|
dmi_data.set_read_latency(LATENCY);
|
||||||
dmi_data.set_write_latency(LATENCY);
|
dmi_data.set_write_latency(LATENCY);
|
||||||
|
|
||||||
|
@ -129,18 +123,19 @@ unsigned int Memory::transport_dbg(tlm::tlm_generic_payload &trans) {
|
||||||
unsigned char *ptr = trans.get_data_ptr();
|
unsigned char *ptr = trans.get_data_ptr();
|
||||||
unsigned int len = trans.get_data_length();
|
unsigned int len = trans.get_data_length();
|
||||||
|
|
||||||
if (adr >= sc_dt::uint64(SIZE)) {
|
if (adr >= sc_dt::uint64(Memory::SIZE)) {
|
||||||
trans.set_response_status(tlm::TLM_ADDRESS_ERROR_RESPONSE);
|
trans.set_response_status(tlm::TLM_ADDRESS_ERROR_RESPONSE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate the number of bytes to be actually copied
|
// Calculate the number of bytes to be actually copied
|
||||||
unsigned int num_bytes = (len < (SIZE - adr) * 4) ? len : (SIZE - adr) * 4;
|
unsigned int num_bytes = (len < (Memory::SIZE - adr) * 4) ? len : (Memory::SIZE - adr) * 4;
|
||||||
|
|
||||||
if (cmd == tlm::TLM_READ_COMMAND)
|
if (cmd == tlm::TLM_READ_COMMAND) {
|
||||||
memcpy(ptr, &mem[adr], num_bytes);
|
std::copy_n(mem.cbegin() + adr, len, ptr);
|
||||||
else if (cmd == tlm::TLM_WRITE_COMMAND)
|
} else if (cmd == tlm::TLM_WRITE_COMMAND) {
|
||||||
memcpy(&mem[adr], ptr, num_bytes);
|
std::copy_n(ptr, len, mem.begin() + adr);
|
||||||
|
}
|
||||||
|
|
||||||
return num_bytes;
|
return num_bytes;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue