53 #include "DRAMSim2/MultiChannelMemorySystem.h"
71 const std::string& system_file,
72 const std::string& working_dir,
73 const std::string& trace_file,
74 unsigned int memory_size_mb,
76 dramsim(new
DRAMSim::MultiChannelMemorySystem(config_file, system_file,
77 working_dir, trace_file,
78 memory_size_mb, NULL, NULL)),
79 _clockPeriod(0.0), _queueSize(0), _burstSize(0)
91 working_dir +
'/' + config_file);
94 fatal(
"DRAMSim2 wrapper failed to get clock\n");
98 _queueSize = extractConfig<unsigned int>(
"TRANS_QUEUE_DEPTH=",
99 working_dir +
'/' + system_file);
102 fatal(
"DRAMSim2 wrapper failed to get queue size\n");
107 unsigned int dataBusBits =
108 extractConfig<unsigned int>(
"JEDEC_DATA_BUS_BITS=",
109 working_dir +
'/' + system_file);
110 unsigned int burstLength =
111 extractConfig<unsigned int>(
"BL=", working_dir +
'/' + config_file);
113 if (!dataBusBits || !burstLength)
114 fatal(
"DRAMSim22 wrapper failed to get burst size\n");
124 template <
typename T>
127 const std::string& file_name)
const
129 std::ifstream file_stream(file_name.c_str(), ios::in);
131 if (!file_stream.good())
132 fatal(
"DRAMSim2 wrapper could not open %s for reading\n", file_name);
137 while (!found && file_stream) {
138 getline(file_stream, line);
139 if (line.substr(0, field_name.size()) == field_name) {
141 istringstream
iss(line.substr(field_name.size()));
149 fatal(
"DRAMSim2 wrapper could not find %s in %s\n", field_name,
163 DRAMSim::TransactionCompleteCB* write_callback)
166 dramsim->RegisterCallbacks(read_callback, write_callback, NULL);
172 return dramsim->willAcceptTransaction();
178 [[maybe_unused]]
bool success =
dramsim->addTransaction(is_write,
addr);
void enqueue(bool is_write, uint64_t addr)
Enqueue a packet.
void printStats()
Print the stats gathered in DRAMsim2.
double clockPeriod() const
Get the internal clock period used by DRAMSim2, specified in ns.
unsigned int queueSize() const
Get the transaction queue size used by DRAMSim2.
unsigned int burstSize() const
Get the burst size in bytes used by DRAMSim2.
DRAMSim2Wrapper(const std::string &config_file, const std::string &system_file, const std::string &working_dir, const std::string &trace_file, unsigned int memory_size_mb, bool enable_debug)
Create an instance of the DRAMSim2 multi-channel memory controller using a specific config and system...
bool canAccept() const
Determine if the controller can accept a new packet or not.
T extractConfig(const std::string &field_name, const std::string &file_name) const
void setCallbacks(DRAMSim::TransactionCompleteCB *read_callback, DRAMSim::TransactionCompleteCB *write_callback)
Set the callbacks to use for read and write completion.
void tick()
Progress the memory controller one cycle.
DRAMSim::MultiChannelMemorySystem * dramsim
DRAMSim2Wrapper declaration.
#define fatal(...)
This implements a cprintf based fatal() function.
Forward declaration to avoid includes.
int SHOW_SIM_OUTPUT
DRAMSim2 requires SHOW_SIM_OUTPUT to be defined (declared extern in the DRAMSim2 print macros),...
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....