1# Copyright (c) 2012 ARM Limited 2# All rights reserved. 3# 4# The license below extends only to copyright in the software and shall 5# not be construed as granting a license to any other intellectual 6# property including but not limited to intellectual property relating 7# to a hardware implementation of the functionality of the software 8# licensed hereunder. You may use the software subject to the license --- 26 unchanged lines hidden (view full) --- 35# 36# Authors: Andreas Sandberg 37 38import m5 39from m5.objects import * 40m5.util.addToPath('../configs/common') 41from Caches import * 42 |
43class Sequential: 44 """Sequential CPU switcher. 45 46 The sequential CPU switches between all CPUs in a system in 47 order. The CPUs in the system must have been prepared for 48 switching, which in practice means that only one CPU is switched 49 in. base_config.BaseFSSwitcheroo can be used to create such a 50 system. --- 42 unchanged lines hidden (view full) --- 93 period -- Switching frequency in Hz. 94 """ 95 96 if switcher == None: 97 switcher = Sequential(root.system.cpu) 98 99 current_cpu = switcher.first() 100 system = root.system |
101 system.mem_mode = type(current_cpu).memory_mode() |
102 103 # instantiate configuration 104 m5.instantiate() 105 106 # Determine the switching period, this has to be done after 107 # instantiating the system since the time base must be fixed. 108 period = m5.ticks.fromSeconds(1.0 / freq) 109 while True: 110 exit_event = m5.simulate(period) 111 exit_cause = exit_event.getCause() 112 113 if exit_cause == "simulate() limit reached": 114 next_cpu = switcher.next() 115 116 print "Switching CPUs..." 117 print "Next CPU: %s" % type(next_cpu) 118 m5.drain(system) |
119 if current_cpu != next_cpu: |
120 m5.switchCpus(system, [ (current_cpu, next_cpu) ], 121 do_drain=False) |
122 else: 123 print "Source CPU and destination CPU are the same, skipping..." 124 m5.resume(system) 125 current_cpu = next_cpu 126 elif exit_cause == "target called exit()" or \ 127 exit_cause == "m5_exit instruction encountered": 128 129 sys.exit(0) 130 else: 131 print "Test failed: Unknown exit cause: %s" % exit_cause 132 sys.exit(1) |