void BootLoader::plug(int argc, const char **argv) { // Before boot SescConf = new SConfig(argc, argv); TaskHandler::plugBegin(); plugSimuInterfaces(); check(); const char *tmp; if( getenv("REPORTFILE") ) { tmp = strdup(getenv("REPORTFILE")); }else{ tmp = SescConf->getCharPtr("", "reportFile",0); } if( getenv("REPORTFILE2") ) { const char *tmp2 = strdup(getenv("REPORTFILE2")); reportFile = (char *)malloc(30 + strlen(tmp)+strlen(tmp2)); sprintf(reportFile,"esesc_%s_%s.XXXXXX",tmp,tmp2); }else{ reportFile = (char *)malloc(30 + strlen(tmp)); if(disable_pcore) sprintf(reportFile,"esesc_%s.XXXXXX",tmp); else if(sppslice_name) sprintf(reportFile,"esesc_%s_sppcore_rh%u.XXXXXX",tmp, runAheadThreshold); else sprintf(reportFile,"esesc_%s_pcore_rh%u.XXXXXX",tmp, runAheadThreshold); } Report::openFile(reportFile); SescConf->getDouble("technology","frequency"); // Just read it to get it in the dump check(); plugEmulInterfaces(); check(); pwrmodel = new PowerModel; const char *pwrsection = SescConf->getCharPtr("","pwrmodel",0); doPower = SescConf->getBool(pwrsection,"doPower",0); if(doPower) { pwrmodel->plug(pwrsection); check(); }else{ MSG("Power calculations disabled"); } check(); TaskHandler::plugEnd(); #if GOOGLE_GRAPH_API arch.drawArchHtml("memory-arch.html"); #else arch.drawArchDot("memory-arch.dot"); #endif }
void MRouter::addDownNode(MemObj *dpm) /* add down node {{{1 */ { down_node.push_back(dpm); #if GOOGLE_GRAPH_API //Generating memory_arch.html. std::string mystr("[{v:'"); mystr += self_mobj->getName(); mystr += "',f: '"; mystr += self_mobj->getName(); mystr += "<div style=\"font-size:9; color:red; font-style:italic\">"; mystr += self_mobj->getSection(); mystr += "</div>'}, '"; mystr += dpm->getName(); mystr += "', '"; mystr += self_mobj->getSection(); mystr += "']"; //MSG("xxx>%s",mystr.c_str()); arch.addObj(mystr); #else std::string mystr(""); mystr += "\""; mystr += self_mobj->getName(); mystr += "\""; //mystr += self_mobj->getSection(); //mystr += "\""; mystr += " -> "; mystr += "\""; mystr += dpm->getName(); mystr += "\""; arch.addObj(mystr); #endif //down_mobj = upm; }
MemObj *MemorySystem::buildMemoryObj(const char *device_type, const char *dev_section, const char *dev_name) /* build the correct memory object {{{1 */ { // Returns new created MemoryObj or NULL in known-error mode MemObj *mdev=0; uint32_t devtype = 0; //CCache std::string mystr(""); // You may insert here the further specializations you may need if (!strcasecmp(device_type, "cache") || !strcasecmp(device_type, "icache")) { mdev = new CCache(this, dev_section, dev_name); devtype = 0; } else if (!strcasecmp(device_type, "nicecache")) { mdev = new NICECache(this, dev_section, dev_name); devtype = 1; } else if (!strcasecmp(device_type, "SL0")) { //mdev = new SL0Cache(this, dev_section, dev_name); I(0); devtype = 2; } else if (!strcasecmp(device_type, "VPC")) { //mdev = new VPC(this, dev_section, dev_name); I(0); devtype = 3; } else if (!strcasecmp(device_type, "ghb")) { //mdev = new GHB(this, dev_section, dev_name); I(0); devtype = 4; } else if (!strcasecmp(device_type, "stridePrefetcher")) { mdev = new StridePrefetcher(this, dev_section, dev_name); devtype = 5; } else if (!strcasecmp(device_type, "markovPrefetcher")) { mdev = new MarkovPrefetcher(this, dev_section, dev_name); devtype = 6; /* } else if (!strcasecmp(device_type, "taggedPrefetcher")) { mdev = new TaggedPrefetcher(this, dev_section, dev_name); devtype = 7; */ } else if (!strcasecmp(device_type, "bus")) { mdev = new Bus(this, dev_section, dev_name); devtype = 8; } else if (!strcasecmp(device_type, "tlb")) { mdev = new TLB(this, dev_section, dev_name); devtype = 9; } else if (!strcasecmp(device_type, "splitter")) { //mdev = new Splitter(this, dev_section, dev_name); I(0); devtype = 10; } else if (!strcasecmp(device_type, "memxbar")) { mdev = new MemXBar(this, dev_section, dev_name); devtype = 11; } else if (!strcasecmp(device_type, "unmemxbar")) { mdev = new UnMemXBar(this, dev_section, dev_name); devtype = 12; } else if (!strcasecmp(device_type, "memcontroller")) { mdev = new MemController(this, dev_section, dev_name); devtype = 13; } else if (!strcasecmp(device_type, "void")) { return NULL; } else { // Check the lower level because it may have it return GMemorySystem::buildMemoryObj(device_type, dev_section, dev_name); } #if GOOGLE_GRAPH_API #else mystr += "\n\""; mystr += mdev->getName(); switch(devtype){ case 0: //CCache case 1: //NiceCache case 2: //SL0 case 3: //VPC mystr += "\"[shape=record,sides=5,peripheries=2,color=darkseagreen,style=filled]"; //Fetch the CCache related parameters : Size, bsize, name, inclusive, ports break; case 4: //GHB case 5: //stridePrefetcher case 6: //markovPrefetcher case 7: //taggedPrefetcher mystr += "\"[shape=record,sides=5,peripheries=1,color=lightcoral,style=filled]"; break; case 8://bus mystr += "\"[shape=record,sides=5,peripheries=1,color=lightpink,style=filled]"; break; case 10: //Splitter case 11: //MemXBar mystr += "\"[shape=record,sides=5,peripheries=1,color=thistle,style=filled]"; break; case 12: //memcontroller mystr += "\"[shape=record,sides=5,peripheries=1,color=skyblue,style=filled]"; break; default: mystr += "\"[shape=record,sides=5,peripheries=3,color=white,style=filled]"; break; } arch.addObj(mystr); #endif I(mdev); addMemObjName(mdev->getName()); #ifdef DEBUG LOG("Added: %s", mdev->getName()); #endif return mdev; }