60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
#include "simulator.h"
|
|
#include <sstream>
|
|
#include <bitset>
|
|
using CacheSim::Simulator;
|
|
using std::stringstream;
|
|
using std::bitset;
|
|
|
|
Simulator::Simulator(int machineBits, short setSize, short waySize, short tagSize){
|
|
this->setSize = setSize;
|
|
this->tagSize = tagSize;
|
|
this->machineBits = machineBits;
|
|
for(int i=0; i<setSize; i++){
|
|
this->sets.push_back(Set(waySize, tagSize));
|
|
}
|
|
}
|
|
|
|
bool Simulator::read(string address){
|
|
vector<bool> addrBits = this->addressTranslate(address);
|
|
for(int i=0; i<addrBits.size(); i++){
|
|
std::cout << addrBits[i] << " ";
|
|
}
|
|
// std::cout << std::endl << addrBits.size() << std::endl;
|
|
short index = this->getIndex(addrBits);
|
|
// std::cout<<index<<std::endl;
|
|
return true;
|
|
}
|
|
|
|
bool Simulator::write(string address){
|
|
return true;
|
|
}
|
|
|
|
vector<bool> Simulator::addressTranslate(string address){
|
|
vector<bool> ans;
|
|
ans.reserve(this->tagSize);
|
|
|
|
stringstream ss;
|
|
ss << std::hex << address;
|
|
unsigned long long number;
|
|
ss >> number;
|
|
|
|
bitset<64> bits(number);
|
|
|
|
for(int i=this->machineBits-1; i>=0; i--){
|
|
ans.push_back(bits[i]);
|
|
}
|
|
return ans;
|
|
}
|
|
|
|
short Simulator::getIndex(vector<bool> addrBits){
|
|
short ans = 0 , base = 1;
|
|
// std::cout<<"hi"<<std::endl;
|
|
for(int i=(this->tagSize+log2(this->setSize)-1); i>=this->tagSize; i--){
|
|
// std::cout<<i<<std::endl;
|
|
ans += base * addrBits[i];
|
|
base *= 2;
|
|
}
|
|
// std::cout<<"bye"<<std::endl;
|
|
|
|
return ans;
|
|
} |