Commit 0a60c893 by songxinkai

add checking request send result

parent 230065be
......@@ -115,20 +115,22 @@ void Ram<T>::WaitFor(const double time){
// memory_->send() and memory_->tick()
template<typename T>
void Ram<T>::AccessCommand(const long req_addr, const Request::Type req_type){
bool Ram<T>::AccessCommand(const long req_addr, const Request::Type req_type, int message){
bool data_return = false;
long req_addr_param = req_addr;
auto req_type_param = req_type;
auto clk = this->clk_;
auto callback = std::function<void(Request&)>(
[&data_return, clk, this](Request& rq){
[&data_return, message, clk, this](Request& rq){
data_return = true;
std::cout << "send at: " << clk << ", recieve at: " << this->clk_ << " (" << this->clk_-clk << ")" << std::endl;
std::cout << "request id " << message << ", send at: " << clk << ", recieve at: " << this->clk_ << " (" << this->clk_-clk << ")" << std::endl;
});
Request req(req_addr_param, req_type_param, callback, 0);
memory_->send(req);
bool res = memory_->send(req);
cout << "request id " << message << ", send result: " << res << endl;
memory_->tick();
clk_++;
return res;
}
template<typename T>
......@@ -173,6 +175,17 @@ long Ram<T>::GetClockRam(){
return this->clk_;
}
template<typename T>
void Ram<T>::PrintCtrlsQueuesSize(){
cout << memory_->ctrls.size() << ", "
<< memory_->ctrls[0]->readq.size() << ", "
<< memory_->ctrls[0]->writeq.size() << ", "
<< memory_->ctrls[0]->otherq.size() << ", "
<< memory_->ctrls[0]->actq.size() << ", "
<< memory_->ctrls[0]->pending.size() << endl;
}
// yet not implement: SALP-MASA, WideIO2, DSARP, TLDRAM
template class Ram<ramulator::DDR3>;
template class Ram<ramulator::DDR4>;
......
......@@ -36,7 +36,7 @@ public:
void WaitUntil(const double time);
void WaitFor(const double time);
// memory_->send() and memory_->tick()
void AccessCommand(const long req_addr, const Request::Type req_type);
bool AccessCommand(const long req_addr, const Request::Type req_type, int message);
// memory_->send() and Loop: memory_->tick(), return: realtime from send to return
double AccessAndWaitUntilReturn(const long req_addr, const Request::Type req_type);
double ConvertRamCycle2Realtime(const long ram_cycle);
......@@ -44,6 +44,8 @@ public:
void SetFrequency(const double r);
double GetClockRealtime(); // unit: ns
long GetClockRam(); // unit: ram cycle
const std::shared_ptr<Memory<T, Controller> >& GetMemory(){ return memory_; }
void PrintCtrlsQueuesSize();
protected:
void InitMemory(const Config& configs, T* spec);
double frequency_; // unit: Ghz
......
......@@ -13,10 +13,13 @@ int main(int argc, const char *argv[]){
}
Ram<ramulator::DDR3> ram(argv[1]);
ram.SetFrequency(1.0);
ram.PrintCtrlsQueuesSize();
int addr_interval = std::stoi(argv[2]);
for (int i = 0; i < 1000; ++i){
ram.AccessCommand(long(20734016 + i * addr_interval), ramulator::Request::Type::READ);
ram.WaitFor(10);
for (int i = 0; i < 16; ++i){
while (!ram.AccessCommand(long(20734016 + i * addr_interval), ramulator::Request::Type::READ, i)){
ram.WaitFor(0);
}
//ram.PrintCtrlsQueuesSize();
}
ram.WaitUntil(80000);
std::cout << "total cycles: " << ram.GetClockRealtime() << std::endl;
......
#!/bin/bash
./bazel-bin/ramulator/testram ./configs/DDR3-config.cfg $1
./bazel-bin/ramulator/testram_break ./configs/DDR3-config.cfg $1
./bazel-bin/ramulator/main ./configs/DDR3-config.cfg $1
#./bazel-bin/ramulator/testram ./configs/DDR4-config.cfg $1
./bazel-bin/ramulator/testram_break ./configs/DDR4-config.cfg $1
#./bazel-bin/ramulator/main ./configs/DDR4-config.cfg $1
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment