29e34a739b
User script now invokes initialization and simulation loop after building configuration. These functions are exported from C++ to Python using SWIG. SConstruct: Set up SWIG builder & scanner. Set up symlinking of source files into build directory (by not disabling the default behavior). configs/test/test.py: Rewrite to use new script-driven interface. Include a sample option. src/SConscript: Set up symlinking of source files into build directory (by not disabling the default behavior). Add SWIG-generated main_wrap.cc to source list. src/arch/SConscript: Set up symlinking of source files into build directory (by not disabling the default behavior). src/arch/alpha/ev5.cc: src/arch/alpha/isa/decoder.isa: src/cpu/o3/alpha_cpu_impl.hh: src/cpu/trace/opt_cpu.cc: src/cpu/trace/trace_cpu.cc: src/sim/pseudo_inst.cc: src/sim/root.cc: src/sim/serialize.cc: src/sim/syscall_emul.cc: SimExit() is now exitSimLoop(). src/cpu/base.cc: SimExitEvent is now SimLoopExitEvent src/python/SConscript: Add SWIG build command for main.i. Use python/m5 in build dir as source for zip archive... easy now with file duplication enabled. src/python/m5/__init__.py: - Move copyright notice back to C++ so we can print it right away, even for interactive sessions. - Get rid of argument parsing code; just provide default option descriptors for user script to call optparse with. - Don't clutter m5 namespace by sucking in all of m5.config and m5.objects. - Move instantiate() function here from config.py. src/python/m5/config.py: - Move instantiate() function to __init__.py. - Param.Foo deferred type lookups must use m5.objects namespace now (not m5). src/python/m5/objects/AlphaConsole.py: src/python/m5/objects/AlphaFullCPU.py: src/python/m5/objects/AlphaTLB.py: src/python/m5/objects/BadDevice.py: src/python/m5/objects/BaseCPU.py: src/python/m5/objects/BaseCache.py: src/python/m5/objects/Bridge.py: src/python/m5/objects/Bus.py: src/python/m5/objects/CoherenceProtocol.py: src/python/m5/objects/Device.py: src/python/m5/objects/DiskImage.py: src/python/m5/objects/Ethernet.py: src/python/m5/objects/Ide.py: src/python/m5/objects/IntrControl.py: src/python/m5/objects/MemObject.py: src/python/m5/objects/MemTest.py: src/python/m5/objects/Pci.py: src/python/m5/objects/PhysicalMemory.py: src/python/m5/objects/Platform.py: src/python/m5/objects/Process.py: src/python/m5/objects/Repl.py: src/python/m5/objects/Root.py: src/python/m5/objects/SimConsole.py: src/python/m5/objects/SimpleDisk.py: src/python/m5/objects/System.py: src/python/m5/objects/Tsunami.py: src/python/m5/objects/Uart.py: Fix up imports (m5 namespace no longer includes m5.config). src/sim/eventq.cc: src/sim/eventq.hh: Support for Python-called simulate() function: - Use IsExitEvent flag to signal events that want to exit the simulation loop gracefully (instead of calling exit() to terminate the process). - Modify interface to hand exit event object back to caller so it can be inspected for cause. src/sim/host.hh: Add MaxTick constant. src/sim/main.cc: Move copyright notice back to C++ so we can print it right away, even for interactive sessions. Use PYTHONPATH environment var to set module path (instead of clunky code injection method). Move main control from here into Python: - Separate initialization code and simulation loop into separate functions callable from Python. - Make Python interpreter invocation more pure (more like directly invoking interpreter). Add -i and -p flags (only options on binary itself; other options processed by Python). Import readline package when using interactive mode. src/sim/sim_events.cc: SimExitEvent is now SimLoopExitEvent, and uses IsSimExit flag to terminate loop (instead of exiting simulator process). src/sim/sim_events.hh: SimExitEvent is now SimLoopExitEvent, and uses IsSimExit flag to terminate loop (instead of exiting simulator process). Get rid of a few unused constructors. src/sim/sim_exit.hh: SimExit() is now exitSimLoop(). Get rid of unused functions. Add comments. --HG-- extra : convert_revision : 280b0d671516b25545a6f24cefa64a68319ff3d4
82 lines
3.7 KiB
Python
82 lines
3.7 KiB
Python
from m5 import build_env
|
|
from m5.config import *
|
|
from BaseCPU import BaseCPU
|
|
|
|
class DerivAlphaFullCPU(BaseCPU):
|
|
type = 'DerivAlphaFullCPU'
|
|
|
|
numThreads = Param.Unsigned("number of HW thread contexts")
|
|
|
|
if not build_env['FULL_SYSTEM']:
|
|
mem = Param.FunctionalMemory(NULL, "memory")
|
|
|
|
decodeToFetchDelay = Param.Unsigned("Decode to fetch delay")
|
|
renameToFetchDelay = Param.Unsigned("Rename to fetch delay")
|
|
iewToFetchDelay = Param.Unsigned("Issue/Execute/Writeback to fetch "
|
|
"delay")
|
|
commitToFetchDelay = Param.Unsigned("Commit to fetch delay")
|
|
fetchWidth = Param.Unsigned("Fetch width")
|
|
|
|
renameToDecodeDelay = Param.Unsigned("Rename to decode delay")
|
|
iewToDecodeDelay = Param.Unsigned("Issue/Execute/Writeback to decode "
|
|
"delay")
|
|
commitToDecodeDelay = Param.Unsigned("Commit to decode delay")
|
|
fetchToDecodeDelay = Param.Unsigned("Fetch to decode delay")
|
|
decodeWidth = Param.Unsigned("Decode width")
|
|
|
|
iewToRenameDelay = Param.Unsigned("Issue/Execute/Writeback to rename "
|
|
"delay")
|
|
commitToRenameDelay = Param.Unsigned("Commit to rename delay")
|
|
decodeToRenameDelay = Param.Unsigned("Decode to rename delay")
|
|
renameWidth = Param.Unsigned("Rename width")
|
|
|
|
commitToIEWDelay = Param.Unsigned("Commit to "
|
|
"Issue/Execute/Writeback delay")
|
|
renameToIEWDelay = Param.Unsigned("Rename to "
|
|
"Issue/Execute/Writeback delay")
|
|
issueToExecuteDelay = Param.Unsigned("Issue to execute delay (internal "
|
|
"to the IEW stage)")
|
|
issueWidth = Param.Unsigned("Issue width")
|
|
executeWidth = Param.Unsigned("Execute width")
|
|
executeIntWidth = Param.Unsigned("Integer execute width")
|
|
executeFloatWidth = Param.Unsigned("Floating point execute width")
|
|
executeBranchWidth = Param.Unsigned("Branch execute width")
|
|
executeMemoryWidth = Param.Unsigned("Memory execute width")
|
|
|
|
iewToCommitDelay = Param.Unsigned("Issue/Execute/Writeback to commit "
|
|
"delay")
|
|
renameToROBDelay = Param.Unsigned("Rename to reorder buffer delay")
|
|
commitWidth = Param.Unsigned("Commit width")
|
|
squashWidth = Param.Unsigned("Squash width")
|
|
|
|
local_predictor_size = Param.Unsigned("Size of local predictor")
|
|
local_ctr_bits = Param.Unsigned("Bits per counter")
|
|
local_history_table_size = Param.Unsigned("Size of local history table")
|
|
local_history_bits = Param.Unsigned("Bits for the local history")
|
|
global_predictor_size = Param.Unsigned("Size of global predictor")
|
|
global_ctr_bits = Param.Unsigned("Bits per counter")
|
|
global_history_bits = Param.Unsigned("Bits of history")
|
|
choice_predictor_size = Param.Unsigned("Size of choice predictor")
|
|
choice_ctr_bits = Param.Unsigned("Bits of choice counters")
|
|
|
|
BTBEntries = Param.Unsigned("Number of BTB entries")
|
|
BTBTagSize = Param.Unsigned("Size of the BTB tags, in bits")
|
|
|
|
RASSize = Param.Unsigned("RAS size")
|
|
|
|
LQEntries = Param.Unsigned("Number of load queue entries")
|
|
SQEntries = Param.Unsigned("Number of store queue entries")
|
|
LFSTSize = Param.Unsigned("Last fetched store table size")
|
|
SSITSize = Param.Unsigned("Store set ID table size")
|
|
|
|
numPhysIntRegs = Param.Unsigned("Number of physical integer registers")
|
|
numPhysFloatRegs = Param.Unsigned("Number of physical floating point "
|
|
"registers")
|
|
numIQEntries = Param.Unsigned("Number of instruction queue entries")
|
|
numROBEntries = Param.Unsigned("Number of reorder buffer entries")
|
|
|
|
instShiftAmt = Param.Unsigned("Number of bits to shift instructions by")
|
|
|
|
function_trace = Param.Bool(False, "Enable function trace")
|
|
function_trace_start = Param.Tick(0, "Cycle to start function trace")
|