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_SYSTEM_BASE_H 00033 #define SIM_SYSTEM_SYSTEM_BASE_H 00034 00035 #include "Sim/Foundation/Hook/Hook.h" 00036 00037 #include "Sim/Thread/Thread.h" 00038 #include "Sim/Core/Core.h" 00039 #include "Interface/EmulatorIF.h" 00040 #include "Env/Param/ParamExchange.h" 00041 #include "Sim/Foundation/Resource/Builder/ResourceBuilder.h" 00042 00043 #include "Sim/System/GlobalClock.h" 00044 #include "Sim/System/SimulationSystem/EmulatorWrapper.h" 00045 #include "Sim/System/ArchitectureState.h" 00046 00047 namespace Onikiri 00048 { 00049 class ForwardEmulator; 00050 00051 // Notify SystemManager oRCSystemBase RNX 00052 // SystemManagerIF::SetSystem oRゥg SystemManager o^KvD 00053 // Cゥgj SystemManagerIF::SetSystem oRゥgo^KvD 00054 // COSystemBase RNXjCK 00055 // SystemManager o^oD 00056 class SystemManagerIF 00057 { 00058 public: 00059 virtual ~SystemManagerIF(){}; 00060 virtual void SetSystem( SystemIF* system ) = 0; 00061 }; 00062 00063 // vZbTSNX 00064 class SystemBase : public SystemIF 00065 { 00066 public: 00067 00068 struct SystemContext 00069 { 00070 SystemContext(); 00071 String targetArchitecture; // Target architecture 00072 String mode; // Simulation mode 00073 00074 s64 executionCycles; 00075 s64 executionInsns; 00076 00077 s64 executedCycles; 00078 std::vector<s64> executedInsns; // Executed insns in each thread. 00079 00080 PhysicalResourceArray<Core> cores; // Todo: support non-uniform multi core 00081 PhysicalResourceArray<Thread> threads; 00082 PhysicalResourceArray<Cache> caches; 00083 GlobalClock* globalClock; 00084 ForwardEmulator* forwardEmulator; 00085 00086 EmulatorIF* emulator; 00087 EmulatorWrapper emulatorWrapper; 00088 00089 ResourceBuilder *resBuilder; 00090 ArchitectureStateList architectureStateList; 00091 00092 struct InorderParam 00093 { 00094 bool enableBPred; 00095 bool enableHMPred; 00096 bool enableCache; 00097 }; 00098 InorderParam inorderParam; 00099 00100 struct DebugParam 00101 { 00102 int debugPort; 00103 }; 00104 DebugParam debugParam; 00105 }; 00106 00107 virtual void Run( SystemContext* context ) = 0; 00108 00109 // SystemIF 00110 virtual void NotifyProcessTermination(int pid){} 00111 virtual void NotifySyscallReadFileToMemory(const Addr& addr, u64 size){} 00112 virtual void NotifySyscallWriteFileFromMemory(const Addr& addr, u64 size){} 00113 virtual void NotifyMemoryAllocation(const Addr& addr, u64 size, bool allocate){}; 00114 00115 // 00116 SystemBase(); 00117 virtual ~SystemBase(); 00118 void SetSystemManager( SystemManagerIF* systemManager ); 00119 00120 protected: 00121 SystemManagerIF* m_systemManager; 00122 }; 00123 00124 }; // namespace Onikiri 00125 00126 #endif // SIM_SYSTEM_SYSTEM_BASE_H 00127