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