se.py revision 2856
110802Srene.dejong@arm.com# Simple test script 210802Srene.dejong@arm.com# 310802Srene.dejong@arm.com# Alpha: "m5 test.py" 410802Srene.dejong@arm.com# MIPS: "m5 test.py -a Mips -c hello_mips" 510802Srene.dejong@arm.com 610802Srene.dejong@arm.comimport os, optparse, sys 710802Srene.dejong@arm.comimport m5 810802Srene.dejong@arm.comfrom m5.objects import * 910802Srene.dejong@arm.comfrom FullO3Config import * 1010802Srene.dejong@arm.com 1110802Srene.dejong@arm.com# parse command-line arguments 1210802Srene.dejong@arm.comparser = optparse.OptionParser(option_list=m5.standardOptions) 1310802Srene.dejong@arm.com 1410802Srene.dejong@arm.comparser.add_option("-c", "--cmd", default="hello", 1510802Srene.dejong@arm.com help="The binary to run in syscall emulation mode.") 1610802Srene.dejong@arm.comparser.add_option("-o", "--options", default="", 1710802Srene.dejong@arm.com help="The options to pass to the binary, use \" \" around the entire\ 1810802Srene.dejong@arm.com string.") 1910802Srene.dejong@arm.comparser.add_option("-i", "--input", default="", 2010802Srene.dejong@arm.com help="A file of input to give to the binary.") 2110802Srene.dejong@arm.comparser.add_option("-t", "--timing", action="store_true", 2210802Srene.dejong@arm.com help="Use simple timing CPU.") 2310802Srene.dejong@arm.comparser.add_option("-d", "--detailed", action="store_true", 2410802Srene.dejong@arm.com help="Use detailed CPU.") 2510802Srene.dejong@arm.comparser.add_option("-m", "--maxtick", type="int", 2610802Srene.dejong@arm.com help="Set the maximum number of ticks to run for") 2710802Srene.dejong@arm.com 2810802Srene.dejong@arm.com(options, args) = parser.parse_args() 2910802Srene.dejong@arm.comm5.setStandardOptions(options) 3010802Srene.dejong@arm.com 3110802Srene.dejong@arm.comif args: 3210802Srene.dejong@arm.com print "Error: script doesn't take any positional arguments" 3310802Srene.dejong@arm.com sys.exit(1) 3410802Srene.dejong@arm.com 3510802Srene.dejong@arm.com# build configuration 3610802Srene.dejong@arm.comthis_dir = os.path.dirname(__file__) 3710802Srene.dejong@arm.com 3810802Srene.dejong@arm.comprocess = LiveProcess() 3910802Srene.dejong@arm.comprocess.executable = os.path.join(this_dir, options.cmd) 4010802Srene.dejong@arm.comprocess.cmd = options.cmd + " " + options.options 4110802Srene.dejong@arm.comif options.input != "": 4210802Srene.dejong@arm.com process.input = options.input 4310802Srene.dejong@arm.com 4410802Srene.dejong@arm.commagicbus = Bus() 4510802Srene.dejong@arm.commem = PhysicalMemory() 4610802Srene.dejong@arm.com 4710802Srene.dejong@arm.comif options.timing and options.detailed: 4810802Srene.dejong@arm.com print "Error: you may only specify one cpu model"; 4910802Srene.dejong@arm.com sys.exit(1) 5010802Srene.dejong@arm.com 5110802Srene.dejong@arm.comif options.timing: 5210802Srene.dejong@arm.com cpu = TimingSimpleCPU() 5310802Srene.dejong@arm.comelif options.detailed: 5410802Srene.dejong@arm.com #check for SMT workload 5510802Srene.dejong@arm.com workloads = options.cmd.split(';') 5610802Srene.dejong@arm.com if len(workloads) > 1: 5710802Srene.dejong@arm.com process = [] 5810802Srene.dejong@arm.com smt_idx = 0 5910802Srene.dejong@arm.com inputs = [] 6010802Srene.dejong@arm.com 6110802Srene.dejong@arm.com if options.input != "": 6210802Srene.dejong@arm.com inputs = options.input.split(';') 6310802Srene.dejong@arm.com 6410802Srene.dejong@arm.com for wrkld in workloads: 6510802Srene.dejong@arm.com smt_process = LiveProcess() 6610802Srene.dejong@arm.com smt_process.executable = os.path.join(this_dir, wrkld) 6710802Srene.dejong@arm.com smt_process.cmd = wrkld + " " + options.options 6810802Srene.dejong@arm.com if inputs and inputs[smt_idx]: 6910802Srene.dejong@arm.com smt_process.input = inputs[smt_idx] 7010802Srene.dejong@arm.com process += [smt_process, ] 7110802Srene.dejong@arm.com smt_idx += 1 7210802Srene.dejong@arm.com 7310802Srene.dejong@arm.com cpu = DetailedO3CPU() 7410802Srene.dejong@arm.comelse: 7510802Srene.dejong@arm.com cpu = AtomicSimpleCPU() 7610802Srene.dejong@arm.comcpu.workload = process 7710802Srene.dejong@arm.comcpu.mem = magicbus 7810802Srene.dejong@arm.comcpu.icache_port=magicbus.port 7910802Srene.dejong@arm.comcpu.dcache_port=magicbus.port 8010802Srene.dejong@arm.com 8110802Srene.dejong@arm.comsystem = System(physmem = mem, cpu = cpu) 8210802Srene.dejong@arm.commem.port = magicbus.port 8310802Srene.dejong@arm.comroot = Root(system = system) 8410802Srene.dejong@arm.com 8510802Srene.dejong@arm.com# instantiate configuration 8610802Srene.dejong@arm.comm5.instantiate(root) 8710802Srene.dejong@arm.com 8810802Srene.dejong@arm.com# simulate until program terminates 8910802Srene.dejong@arm.comif options.maxtick: 9010802Srene.dejong@arm.com exit_event = m5.simulate(options.maxtick) 9110802Srene.dejong@arm.comelse: 9210802Srene.dejong@arm.com exit_event = m5.simulate() 9310802Srene.dejong@arm.com 9410802Srene.dejong@arm.comprint 'Exiting @ tick', m5.curTick(), 'because', exit_event.getCause() 9510802Srene.dejong@arm.com 9610802Srene.dejong@arm.com