• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

sst/elements/PHXSimC/PHXSimC/PHXSimC.h

00001 // Copyright 2009-2010 Sandia Corporation. Under the terms
00002 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S.
00003 // Government retains certain rights in this software.
00004 // 
00005 // Copyright (c) 2009-2010, Sandia Corporation
00006 // All rights reserved.
00007 // 
00008 // This file is part of the SST software package. For license
00009 // information, see the LICENSE file in the top level directory of the
00010 // distribution.
00011 
00012 
00013 #ifndef _PHXSIMC_H
00014 #define _PHXSIMC_H
00015 
00016 #include <sst/core/log.h>
00017 #include <sst/core/eventFunctor.h>
00018 #include <sst/core/component.h>
00019 #include <memoryChannel.h>
00020 #include <Callback.h>
00021 //#include <LinearChain.h> /* currently broken */
00022 #include <SingleCube.h>
00023 
00024 /* THIS COMPLETELY CHANGES THE STREAM, COMMENT THIS LINE FOR REAL RUNS */
00025 #define TEST_MODE
00026 
00027 using namespace std;
00028 using namespace SST;
00029 
00030 #ifndef PHXSIMC_DBG
00031 #define PHXSIMC_DBG
00032 #endif
00033 
00034 class PHXSimC : public Component {
00035 
00036     public: // functions
00037 
00038         PHXSimC( ComponentId_t id, Params_t& params );
00039         int Finish();
00040 
00041     private: // types
00042 
00043         typedef MemoryChannel<uint64_t> memChan_t;
00044 
00045     private: // functions
00046 
00047         PHXSimC( const PHXSimC& c );
00048         bool clock( Cycle_t  );
00049 
00050         inline PHXSim::PacketType convertType( memChan_t::event_t::reqType_t type );
00051         void packetReturn(PHXSim::Packet *pkt, uint64_t clockcycle);
00052 
00053         std::deque<PHXSim::Packet *> m_transQ;
00054 
00055         std::map <unsigned, PHXSim::Packet *> writeReturnMap;
00056         PHXSim::SingleCube *           m_memorySystem;
00057         memChan_t*              m_memChan;
00058         std::string             m_printStats;
00059         Log< PHXSIMC_DBG >&    m_dbg;
00060         Log<>&                  m_log;
00061 
00062 #if WANT_CHECKPOINT_SUPPORT
00063         BOOST_SERIALIZE {
00064             _AR_DBG(PHXSimC,"start\n");
00065             BOOST_VOID_CAST_REGISTER( PHXSimC*, Component* );
00066             ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Component );
00067             ar & BOOST_SERIALIZATION_NVP( bus );
00068             _AR_DBG(PHXSimC,"done\n");
00069         }
00070         SAVE_CONSTRUCT_DATA( PHXSimC ) {
00071             _AR_DBG(PHXSimC,"\n");
00072             ComponentId_t     id     = t->_id;
00073             Clock*            clock  = t->_clock;
00074             Params_t          params = t->params;
00075             ar << BOOST_SERIALIZATION_NVP( id );
00076             ar << BOOST_SERIALIZATION_NVP( clock );
00077             ar << BOOST_SERIALIZATION_NVP( params );
00078         } 
00079         LOAD_CONSTRUCT_DATA( PHXSimC ) {
00080             _AR_DBG(PHXSimC,"\n");
00081             ComponentId_t     id;
00082             Clock*            clock;
00083             Params_t          params;
00084             ar >> BOOST_SERIALIZATION_NVP( id );
00085             ar >> BOOST_SERIALIZATION_NVP( clock );
00086             ar >> BOOST_SERIALIZATION_NVP( params );
00087             ::new(t)PHXSimC( id, clock, params );
00088         } 
00089 #endif
00090 };
00091 
00092 inline PHXSim::PacketType
00093             PHXSimC::convertType( memChan_t::event_t::reqType_t type )
00094 {
00095 #ifndef TEST_MODE
00096     switch( type ) {
00097         case memChan_t::event_t::READ:
00098             return PHXSim::DATA_READ;
00099         case memChan_t::event_t::WRITE:
00100             return PHXSim::DATA_WRITE;
00101     }
00102     m_dbg.write("WARNING: Returning Bogus packet type from request type %d\n", type);
00103     return (PHXSim::PacketType)-1; 
00104 #else 
00105          //this is artificial just for the sake of testing returns; mostly writes, some reads
00106          static int number=1;
00107         PHXSim::PacketType p = (number++ % 64) == 0 ? PHXSim::DATA_READ : PHXSim::DATA_WRITE;
00108     m_dbg.write("==============WARNING: TEST_MODE (%d, type=%d)==============\n", number, p);
00109          return p; 
00110 #endif
00111 }
00112 
00113 #endif 
00114 

Generated on Fri Oct 22 2010 11:02:25 for SST by  doxygen 1.7.1