sim_object.hh revision 1553
13101Sstever@eecs.umich.edu/* 23101Sstever@eecs.umich.edu * Copyright (c) 2001-2004 The Regents of The University of Michigan 33101Sstever@eecs.umich.edu * All rights reserved. 43101Sstever@eecs.umich.edu * 53101Sstever@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 63101Sstever@eecs.umich.edu * modification, are permitted provided that the following conditions are 73101Sstever@eecs.umich.edu * met: redistributions of source code must retain the above copyright 83101Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 93101Sstever@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 103101Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 113101Sstever@eecs.umich.edu * documentation and/or other materials provided with the distribution; 123101Sstever@eecs.umich.edu * neither the name of the copyright holders nor the names of its 133101Sstever@eecs.umich.edu * contributors may be used to endorse or promote products derived from 143101Sstever@eecs.umich.edu * this software without specific prior written permission. 153101Sstever@eecs.umich.edu * 163101Sstever@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173101Sstever@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183101Sstever@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193101Sstever@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203101Sstever@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213101Sstever@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223101Sstever@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233101Sstever@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243101Sstever@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253101Sstever@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263101Sstever@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273101Sstever@eecs.umich.edu */ 283101Sstever@eecs.umich.edu 293101Sstever@eecs.umich.edu/* @file 303101Sstever@eecs.umich.edu * User Console Definitions 313101Sstever@eecs.umich.edu */ 323101Sstever@eecs.umich.edu 333101Sstever@eecs.umich.edu#ifndef __SIM_OBJECT_HH__ 343101Sstever@eecs.umich.edu#define __SIM_OBJECT_HH__ 353101Sstever@eecs.umich.edu 363101Sstever@eecs.umich.edu#include <map> 373101Sstever@eecs.umich.edu#include <list> 383101Sstever@eecs.umich.edu#include <vector> 393101Sstever@eecs.umich.edu#include <iostream> 403101Sstever@eecs.umich.edu 413101Sstever@eecs.umich.edu#include "sim/serialize.hh" 423101Sstever@eecs.umich.edu#include "sim/startup.hh" 433101Sstever@eecs.umich.edu 443101Sstever@eecs.umich.edu/* 453101Sstever@eecs.umich.edu * Abstract superclass for simulation objects. Represents things that 463101Sstever@eecs.umich.edu * correspond to physical components and can be specified via the 473885Sbinkertn@umich.edu * config file (CPUs, caches, etc.). 483885Sbinkertn@umich.edu */ 494762Snate@binkert.orgclass SimObject : public Serializable, protected StartupCallback 503885Sbinkertn@umich.edu{ 513885Sbinkertn@umich.edu public: 523885Sbinkertn@umich.edu struct Params { 533101Sstever@eecs.umich.edu std::string name; 544380Sbinkertn@umich.edu }; 554167Sbinkertn@umich.edu 563102Sstever@eecs.umich.edu protected: 573101Sstever@eecs.umich.edu Params *_params; 584762Snate@binkert.org 594762Snate@binkert.org public: 604762Snate@binkert.org const Params *params() const { return _params; } 614762Snate@binkert.org 624762Snate@binkert.org private: 634762Snate@binkert.org friend class Serializer; 644762Snate@binkert.org 654762Snate@binkert.org typedef std::vector<SimObject *> SimObjectList; 664762Snate@binkert.org 674762Snate@binkert.org // list of all instantiated simulation objects 684762Snate@binkert.org static SimObjectList simObjectList; 695033Smilesck@eecs.umich.edu 705033Smilesck@eecs.umich.edu public: 715033Smilesck@eecs.umich.edu SimObject(Params *_params); 725033Smilesck@eecs.umich.edu SimObject(const std::string &_name); 735033Smilesck@eecs.umich.edu 745033Smilesck@eecs.umich.edu virtual ~SimObject() {} 755033Smilesck@eecs.umich.edu 765033Smilesck@eecs.umich.edu virtual const std::string name() const { return params()->name; } 775033Smilesck@eecs.umich.edu 785033Smilesck@eecs.umich.edu // initialization pass of all objects. 793101Sstever@eecs.umich.edu // Gets invoked after construction, before unserialize. 803101Sstever@eecs.umich.edu virtual void init(); 813101Sstever@eecs.umich.edu static void initAll(); 825033Smilesck@eecs.umich.edu 833101Sstever@eecs.umich.edu // register statistics for this object 843101Sstever@eecs.umich.edu virtual void regStats(); 853101Sstever@eecs.umich.edu virtual void regFormulas(); 863101Sstever@eecs.umich.edu virtual void resetStats(); 873101Sstever@eecs.umich.edu 883101Sstever@eecs.umich.edu // static: call reg_stats on all SimObjects 893101Sstever@eecs.umich.edu static void regAllStats(); 903101Sstever@eecs.umich.edu 913101Sstever@eecs.umich.edu // static: call resetStats on all SimObjects 923101Sstever@eecs.umich.edu static void resetAllStats(); 933101Sstever@eecs.umich.edu 943101Sstever@eecs.umich.edu // static: call nameOut() & serialize() on all SimObjects 953101Sstever@eecs.umich.edu static void serializeAll(std::ostream &); 963101Sstever@eecs.umich.edu 973101Sstever@eecs.umich.edu#ifdef DEBUG 983101Sstever@eecs.umich.edu public: 993101Sstever@eecs.umich.edu bool doDebugBreak; 1003101Sstever@eecs.umich.edu static void debugObjectBreak(const std::string &objs); 1013101Sstever@eecs.umich.edu#endif 1023101Sstever@eecs.umich.edu 1033101Sstever@eecs.umich.edu public: 1043101Sstever@eecs.umich.edu bool doRecordEvent; 1053101Sstever@eecs.umich.edu void recordEvent(const std::string &stat); 1063101Sstever@eecs.umich.edu}; 1073101Sstever@eecs.umich.edu 1083101Sstever@eecs.umich.edu#endif // __SIM_OBJECT_HH__ 1093101Sstever@eecs.umich.edu