00001 // 00002 // Copyright (c) 2005-2008 Kenichi Watanabe. 00003 // Copyright (c) 2005-2008 Yasuhiro Watari. 00004 // Copyright (c) 2005-2008 Hironori Ichibayashi. 00005 // Copyright (c) 2008-2009 Kazuo Horio. 00006 // Copyright (c) 2009-2013 Naruki Kurata. 00007 // Copyright (c) 2005-2013 Ryota Shioya. 00008 // Copyright (c) 2005-2013 Masahiro Goshima. 00009 // 00010 // This software is provided 'as-is', without any express or implied 00011 // warranty. In no event will the authors be held liable for any damages 00012 // arising from the use of this software. 00013 // 00014 // Permission is granted to anyone to use this software for any purpose, 00015 // including commercial applications, and to alter it and redistribute it 00016 // freely, subject to the following restrictions: 00017 // 00018 // 1. The origin of this software must not be misrepresented; you must not 00019 // claim that you wrote the original software. If you use this software 00020 // in a product, an acknowledgment in the product documentation would be 00021 // appreciated but is not required. 00022 // 00023 // 2. Altered source versions must be plainly marked as such, and must not be 00024 // misrepresented as being the original software. 00025 // 00026 // 3. This notice may not be removed or altered from any source 00027 // distribution. 00028 // 00029 // 00030 00031 00032 #ifndef SIM_SYSTEM_SIMULATION_SYSTEM_SIMULATION_SYSTEM_H 00033 #define SIM_SYSTEM_SIMULATION_SYSTEM_SIMULATION_SYSTEM_H 00034 00035 #include "Sim/System/SystemBase.h" 00036 #include "Sim/Pipeline/Pipeline.h" 00037 #include "Sim/Memory/Cache/Cache.h" 00038 #include "Sim/Foundation/Event/PriorityEventList.h" 00039 00040 namespace Onikiri 00041 { 00042 class SimulationSystem : public SystemBase 00043 { 00044 00045 public: 00046 SimulationSystem(); 00047 void Run( SystemContext* context ); 00048 SystemContext* GetContext(); 00049 00050 // Prototype : void Method( HookParameter<SimulationSystem>* system ) 00051 static HookPoint<SimulationSystem, SimulationSystem> s_systemInitHook; 00052 00053 // Prototype : void Method() 00054 static HookPoint<SimulationSystem> s_cycleBeginHook; 00055 static HookPoint<SimulationSystem> s_cycleEvaluateHook; 00056 static HookPoint<SimulationSystem> s_cycleTransitionHook; 00057 static HookPoint<SimulationSystem> s_cycleUpdateHook; 00058 static HookPoint<SimulationSystem> s_cycleEndHook; 00059 00060 protected: 00061 struct SchedulerResources 00062 { 00063 }; 00064 00065 struct CoreResources 00066 { 00067 Core* core; 00068 }; 00069 00070 struct ThreadResources 00071 { 00072 MemOrderManager* memOrderManager; 00073 }; 00074 00075 struct MemoryResources 00076 { 00077 }; 00078 00079 std::vector<CoreResources> m_coreResources; 00080 std::vector<ThreadResources> m_threadResources; 00081 std::vector<MemoryResources> m_memResources; 00082 00083 typedef std::vector<ClockedResourceIF*> ClockedResourceList; 00084 ClockedResourceList m_clockedResources; 00085 00086 typedef PriorityEventList::TimeWheelList TimeWheelList; 00087 TimeWheelList m_timeWheels; 00088 00089 PriorityEventList m_priorityEventList; 00090 00091 void SimulateCycle(); 00092 00093 void CycleBegin(); 00094 void CycleEvaluate(); 00095 void CycleTransition(); 00096 void CycleEvent(); 00097 void CycleUpdate(); 00098 void CycleEnd(); 00099 00100 void InitializeResources(); 00101 void InitializeResourcesBody(); 00102 00103 SystemContext* m_context; 00104 }; 00105 }; // namespace Onikiri 00106 00107 #endif // SIM_SYSTEM_SIMULATION_SYSTEM_SIMULATION_SYSTEM_H 00108