se.py revision 2902
1# Simple test script
2#
3# Alpha: "m5 test.py"
4# MIPS: "m5 test.py -a Mips -c hello_mips"
5
6import os, optparse, sys
7
8import m5
9from m5.objects import *
10from FullO3Config import *
11
12# parse command-line arguments
13parser = optparse.OptionParser()
14
15parser.add_option("-c", "--cmd", default="hello",
16        help="The binary to run in syscall emulation mode.")
17parser.add_option("-o", "--options", default="",
18        help="The options to pass to the binary, use \" \" around the entire\
19                string.")
20parser.add_option("-i", "--input", default="",
21        help="A file of input to give to the binary.")
22parser.add_option("-t", "--timing", action="store_true",
23        help="Use simple timing CPU.")
24parser.add_option("-d", "--detailed", action="store_true",
25        help="Use detailed CPU.")
26parser.add_option("-m", "--maxtick", type="int",
27        help="Set the maximum number of ticks to run  for")
28
29(options, args) = parser.parse_args()
30
31if args:
32    print "Error: script doesn't take any positional arguments"
33    sys.exit(1)
34
35# build configuration
36this_dir = os.path.dirname(__file__)
37
38process = LiveProcess()
39process.executable = os.path.join(this_dir, options.cmd)
40process.cmd = options.cmd + " " + options.options
41if options.input != "":
42    process.input = options.input
43
44magicbus = Bus()
45mem = PhysicalMemory()
46
47if options.timing and options.detailed:
48       print "Error: you may only specify one cpu model";
49       sys.exit(1)
50
51if options.timing:
52    cpu = TimingSimpleCPU()
53elif options.detailed:
54    #check for SMT workload
55    workloads = options.cmd.split(';')
56    if len(workloads) > 1:
57        process = []
58        smt_idx = 0
59        inputs = []
60
61        if options.input != "":
62            inputs = options.input.split(';')
63
64        for wrkld in workloads:
65            smt_process = LiveProcess()
66            smt_process.executable = os.path.join(this_dir, wrkld)
67            smt_process.cmd = wrkld + " " + options.options
68            if inputs and inputs[smt_idx]:
69                smt_process.input = inputs[smt_idx]
70            process += [smt_process, ]
71            smt_idx += 1
72
73    cpu = DetailedO3CPU()
74else:
75    cpu = AtomicSimpleCPU()
76cpu.workload = process
77cpu.mem = magicbus
78cpu.icache_port=magicbus.port
79cpu.dcache_port=magicbus.port
80
81system = System(physmem = mem, cpu = cpu)
82
83if options.timing or options.detailed:
84    system.mem_mode = 'timing'
85
86
87mem.port = magicbus.port
88root = Root(system = system)
89
90# instantiate configuration
91m5.instantiate(root)
92
93# simulate until program terminates
94if options.maxtick:
95    exit_event = m5.simulate(options.maxtick)
96else:
97    exit_event = m5.simulate()
98
99print 'Exiting @ tick', m5.curTick(), 'because', exit_event.getCause()
100
101