53 #include "DRAMSim2/MultiChannelMemorySystem.h" 65 const std::string& system_file,
66 const std::string& working_dir,
67 const std::string& trace_file,
68 unsigned int memory_size_mb,
70 dramsim(new
DRAMSim::MultiChannelMemorySystem(config_file, system_file,
71 working_dir, trace_file,
72 memory_size_mb, NULL, NULL)),
73 _clockPeriod(0.0), _queueSize(0), _burstSize(0)
85 working_dir +
'/' + config_file);
88 fatal(
"DRAMSim2 wrapper failed to get clock\n");
92 _queueSize = extractConfig<unsigned int>(
"TRANS_QUEUE_DEPTH=",
93 working_dir +
'/' + system_file);
96 fatal(
"DRAMSim2 wrapper failed to get queue size\n");
101 unsigned int dataBusBits =
102 extractConfig<unsigned int>(
"JEDEC_DATA_BUS_BITS=",
103 working_dir +
'/' + system_file);
104 unsigned int burstLength =
105 extractConfig<unsigned int>(
"BL=", working_dir +
'/' + config_file);
107 if (!dataBusBits || !burstLength)
108 fatal(
"DRAMSim22 wrapper failed to get burst size\n");
118 template <
typename T>
121 const std::string& file_name)
const 123 std::ifstream file_stream(file_name.c_str(), ios::in);
125 if (!file_stream.good())
126 fatal(
"DRAMSim2 wrapper could not open %s for reading\n", file_name);
131 while (!found && file_stream) {
132 getline(file_stream, line);
133 if (line.substr(0, field_name.size()) == field_name) {
135 istringstream iss(line.substr(field_name.size()));
143 fatal(
"DRAMSim2 wrapper could not find %s in %s\n", field_name,
157 DRAMSim::TransactionCompleteCB* write_callback)
160 dramsim->RegisterCallbacks(read_callback, write_callback, NULL);
166 return dramsim->willAcceptTransaction();
172 bool success M5_VAR_USED =
dramsim->addTransaction(is_write, addr);
void printStats()
Print the stats gathered in DRAMsim2.
#define fatal(...)
This implements a cprintf based fatal() function.
void enqueue(bool is_write, uint64_t addr)
Enqueue a packet.
DRAMSim::MultiChannelMemorySystem * dramsim
T extractConfig(const std::string &field_name, const std::string &file_name) const
int SHOW_SIM_OUTPUT
When building the debug binary, we need to undo the command-line definition of DEBUG not to clash wit...
unsigned int burstSize() const
Get the burst size in bytes used by DRAMSim2.
DRAMSim2Wrapper declaration.
unsigned int queueSize() const
Get the transaction queue size used by DRAMSim2.
bool canAccept() const
Determine if the controller can accept a new packet or not.
void setCallbacks(DRAMSim::TransactionCompleteCB *read_callback, DRAMSim::TransactionCompleteCB *write_callback)
Set the callbacks to use for read and write completion.
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...
void tick()
Progress the memory controller one cycle.
double clockPeriod() const
Get the internal clock period used by DRAMSim2, specified in ns.
Forward declaration to avoid includes.