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