diff --git a/DRAMSys/simulator/src/error/controllerECC.h b/DRAMSys/simulator/src/error/controllerECC.h index beefe784..53dc469a 100644 --- a/DRAMSys/simulator/src/error/controllerECC.h +++ b/DRAMSys/simulator/src/error/controllerECC.h @@ -14,7 +14,7 @@ using namespace tlm; struct ControllerECC: sc_module { private: - map m_mDataPointer; + map m_mDataPointer; public: tlm_utils::multi_passthrough_target_socket t_socket; @@ -77,7 +77,7 @@ public: trans.set_data_length(nBlocks*9); // store old data - m_mDataPointer[id] = trans.get_data_ptr(); + m_mDataPointer[pDataECC] = trans.get_data_ptr(); // Set new data trans.set_data_ptr(pDataECC); @@ -89,12 +89,15 @@ public: // Get data length unsigned nDataLength = trans.get_data_length(); - // store old data - m_mDataPointer[id] = trans.get_data_ptr(); + // Create new pointer + nDataLength += nDataLength>>3; + unsigned char* new_ptr = new unsigned char [nDataLength]; - // Set new data - nDataLength += nDataLength>>3; - trans.set_data_ptr(new unsigned char [nDataLength]); + // store old data ptr + m_mDataPointer[new_ptr] = trans.get_data_ptr(); + + // Set new data + trans.set_data_ptr(new_ptr); // Change transport data length trans.set_data_length(nDataLength); @@ -189,7 +192,7 @@ public: trans.set_data_length(nBlocks<<3); // load data pointer - auto it = m_mDataPointer.find(id); + auto it = m_mDataPointer.find(trans.get_data_ptr()); assert(it != m_mDataPointer.end()); unsigned char* pDataECC = it->second; @@ -217,7 +220,7 @@ public: unsigned nDataLength = trans.get_data_length(); // load data pointer - auto it = m_mDataPointer.find(id); + auto it = m_mDataPointer.find(trans.get_data_ptr()); assert(it != m_mDataPointer.end()); trans.set_data_ptr(it->second);