sim_object.hh revision 2499
12810Srdreslin@umich.edu/* 211375Sandreas.hansson@arm.com * Copyright (c) 2001-2005 The Regents of The University of Michigan 311051Sandreas.hansson@arm.com * All rights reserved. 411051Sandreas.hansson@arm.com * 511051Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 611051Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 711051Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 811051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 911051Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 1011051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1111051Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 1211051Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 1311051Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 1411051Sandreas.hansson@arm.com * this software without specific prior written permission. 1511051Sandreas.hansson@arm.com * 162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu */ 282810Srdreslin@umich.edu 292810Srdreslin@umich.edu/* @file 302810Srdreslin@umich.edu * User Console Definitions 312810Srdreslin@umich.edu */ 322810Srdreslin@umich.edu 332810Srdreslin@umich.edu#ifndef __SIM_OBJECT_HH__ 342810Srdreslin@umich.edu#define __SIM_OBJECT_HH__ 352810Srdreslin@umich.edu 362810Srdreslin@umich.edu#include <map> 372810Srdreslin@umich.edu#include <list> 382810Srdreslin@umich.edu#include <vector> 392810Srdreslin@umich.edu#include <iostream> 402810Srdreslin@umich.edu 412810Srdreslin@umich.edu#include "sim/serialize.hh" 4211051Sandreas.hansson@arm.com#include "sim/startup.hh" 4311051Sandreas.hansson@arm.com 442810Srdreslin@umich.edu/* 4511051Sandreas.hansson@arm.com * Abstract superclass for simulation objects. Represents things that 4611051Sandreas.hansson@arm.com * correspond to physical components and can be specified via the 472810Srdreslin@umich.edu * config file (CPUs, caches, etc.). 482810Srdreslin@umich.edu */ 492810Srdreslin@umich.educlass SimObject : public Serializable, protected StartupCallback 502810Srdreslin@umich.edu{ 5111051Sandreas.hansson@arm.com public: 522810Srdreslin@umich.edu struct Params { 532810Srdreslin@umich.edu std::string name; 5411051Sandreas.hansson@arm.com }; 552810Srdreslin@umich.edu 5611051Sandreas.hansson@arm.com protected: 5711051Sandreas.hansson@arm.com Params *_params; 5811051Sandreas.hansson@arm.com 5911051Sandreas.hansson@arm.com public: 6011051Sandreas.hansson@arm.com const Params *params() const { return _params; } 6111288Ssteve.reinhardt@amd.com 6211051Sandreas.hansson@arm.com private: 6311051Sandreas.hansson@arm.com friend class Serializer; 6411051Sandreas.hansson@arm.com 6511051Sandreas.hansson@arm.com typedef std::vector<SimObject *> SimObjectList; 6611051Sandreas.hansson@arm.com 6711053Sandreas.hansson@arm.com // list of all instantiated simulation objects 6811053Sandreas.hansson@arm.com static SimObjectList simObjectList; 6911051Sandreas.hansson@arm.com 7011051Sandreas.hansson@arm.com public: 7111051Sandreas.hansson@arm.com SimObject(Params *_params); 7211197Sandreas.hansson@arm.com SimObject(const std::string &_name); 7311197Sandreas.hansson@arm.com 7411199Sandreas.hansson@arm.com virtual ~SimObject() {} 7511197Sandreas.hansson@arm.com 7611197Sandreas.hansson@arm.com virtual const std::string name() const { return params()->name; } 7711197Sandreas.hansson@arm.com 7811051Sandreas.hansson@arm.com // initialization pass of all objects. 7911051Sandreas.hansson@arm.com // Gets invoked after construction, before unserialize. 8011051Sandreas.hansson@arm.com virtual void init(); 8111051Sandreas.hansson@arm.com virtual void connect(); 8211051Sandreas.hansson@arm.com static void initAll(); 8311051Sandreas.hansson@arm.com static void connectAll(); 8411051Sandreas.hansson@arm.com 8511051Sandreas.hansson@arm.com // register statistics for this object 8611051Sandreas.hansson@arm.com virtual void regStats(); 8711051Sandreas.hansson@arm.com virtual void regFormulas(); 8811051Sandreas.hansson@arm.com virtual void resetStats(); 8911051Sandreas.hansson@arm.com 9011051Sandreas.hansson@arm.com // static: call reg_stats on all SimObjects 9111051Sandreas.hansson@arm.com static void regAllStats(); 9211051Sandreas.hansson@arm.com 9311051Sandreas.hansson@arm.com // static: call resetStats on all SimObjects 9411051Sandreas.hansson@arm.com static void resetAllStats(); 9511051Sandreas.hansson@arm.com 9611051Sandreas.hansson@arm.com // static: call nameOut() & serialize() on all SimObjects 9711051Sandreas.hansson@arm.com static void serializeAll(std::ostream &); 9811051Sandreas.hansson@arm.com 9911051Sandreas.hansson@arm.com#ifdef DEBUG 10011051Sandreas.hansson@arm.com public: 10111051Sandreas.hansson@arm.com bool doDebugBreak; 10211051Sandreas.hansson@arm.com static void debugObjectBreak(const std::string &objs); 10311051Sandreas.hansson@arm.com#endif 10411051Sandreas.hansson@arm.com 10511051Sandreas.hansson@arm.com public: 10611051Sandreas.hansson@arm.com bool doRecordEvent; 10711051Sandreas.hansson@arm.com void recordEvent(const std::string &stat); 10811051Sandreas.hansson@arm.com}; 10911051Sandreas.hansson@arm.com 11011051Sandreas.hansson@arm.com#endif // __SIM_OBJECT_HH__ 11111051Sandreas.hansson@arm.com