Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}