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

sst/elements/xbarV2/xbarV2.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 _XBAR_H
00014 #define _XBAR_H
00015 
00016 #include <sst/core/component.h>
00017 #include <sst/core/log.h>
00018 #include <sst/elements/include/memoryChannel.h>
00019 #include <sst/elements/include/memMap.h>
00020 
00021 #ifndef XBARV2_DBG
00022 #define XBARV2_DBG 0
00023 #endif
00024 
00025 using namespace SST;
00026 
00027 class XbarV2 : public Component
00028 {
00029         class Port;
00030         typedef MemoryChannel< uint64_t, Port* >       memChan_t;
00031         typedef memChan_t::addr_t       addr_t;
00032         typedef memChan_t::event_t      event_t;
00033         typedef memChan_t::cookie_t     cookie_t;
00034         typedef uint64_t                length_t;
00035 
00036         typedef MemMap< addr_t, length_t, Port* >  memMap_t;
00037 
00038         struct Entry {
00039             event_t*    event;
00040             Cycle_t     timeStamp;
00041             cookie_t    cookie;
00042         }; 
00043 
00044         typedef std::vector< std::vector< Entry > >    entryV_t;
00045 
00046         class Port {
00047 
00048             public:
00049                 Port( Component&, memMap_t&, entryV_t&,  
00050                             int numPorts, int portNum, 
00051                             addr_t addr = 0, length_t length = 0,
00052                             bool enableDbg = false );
00053                 void doInput( Cycle_t );
00054                 void doOutput( );
00055 
00056             private:
00057                 Port();
00058                 Port( const Port& );
00059 
00060                 Port* findDstPort( addr_t addr );
00061 
00062             private:
00063 
00064                 memChan_t*              m_memChan;
00065                 int                     m_portNum;
00066                 int                     m_numPorts;
00067                 memMap_t&               m_memMap;
00068                 event_t*                m_curEvent;
00069                 cookie_t                m_curCookie;
00070                 entryV_t&               m_entryV;
00071                 Log< XBARV2_DBG >&      m_dbg;
00072         };
00073 
00074     public: // functions
00075 
00076         XbarV2( ComponentId_t id, Params_t& params );
00077 
00078     private: // functions
00079 
00080             XbarV2();
00081         XbarV2( const XbarV2& c );
00082 
00083         bool clock( Cycle_t );
00084         void initPort( int port, Params_t& );
00085         
00086     private: // data
00087 
00088         std::vector<Port *>     m_portInfoV;
00089         int                     m_numPorts;
00090         memMap_t                m_memMap;
00091         entryV_t                m_entryV;
00092         Log< XBARV2_DBG >&      m_dbg;
00093         Log<>&                  m_log;
00094 };
00095 
00096 #endif

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