diff options
Diffstat (limited to 'configs')
-rw-r--r-- | configs/common/CacheConfig.py | 7 | ||||
-rw-r--r-- | configs/common/Simulation.py | 10 | ||||
-rw-r--r-- | configs/example/fs.py | 24 | ||||
-rw-r--r-- | configs/example/memtest.py | 4 | ||||
-rw-r--r-- | configs/example/ruby_direct_test.py | 8 | ||||
-rw-r--r-- | configs/example/ruby_fs.py | 12 | ||||
-rw-r--r-- | configs/example/ruby_mem_test.py | 7 | ||||
-rw-r--r-- | configs/example/ruby_network_test.py | 7 | ||||
-rw-r--r-- | configs/example/ruby_random_test.py | 7 | ||||
-rw-r--r-- | configs/example/se.py | 15 | ||||
-rw-r--r-- | configs/ruby/MESI_CMP_directory.py | 13 | ||||
-rw-r--r-- | configs/ruby/MI_example.py | 13 | ||||
-rw-r--r-- | configs/ruby/MOESI_CMP_directory.py | 13 | ||||
-rw-r--r-- | configs/ruby/MOESI_CMP_token.py | 13 | ||||
-rw-r--r-- | configs/ruby/MOESI_hammer.py | 13 | ||||
-rw-r--r-- | configs/ruby/Network_test.py | 13 | ||||
-rw-r--r-- | configs/ruby/Ruby.py | 3 |
17 files changed, 135 insertions, 47 deletions
diff --git a/configs/common/CacheConfig.py b/configs/common/CacheConfig.py index 288a633ce..4b4ce7553 100644 --- a/configs/common/CacheConfig.py +++ b/configs/common/CacheConfig.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012 ARM Limited +# Copyright (c) 2012-2013 ARM Limited # All rights reserved # # The license below extends only to copyright in the software and shall @@ -64,12 +64,13 @@ def config_cache(options, system): # are not connected using addTwoLevelCacheHierarchy. Use the # same clock as the CPUs, and set the L1-to-L2 bus width to 32 # bytes (256 bits). - system.l2 = l2_cache_class(clock=options.cpu_clock, + system.l2 = l2_cache_class(clk_domain=system.cpu_clk_domain, size=options.l2_size, assoc=options.l2_assoc, block_size=options.cacheline_size) - system.tol2bus = CoherentBus(clock = options.cpu_clock, width = 32) + system.tol2bus = CoherentBus(clk_domain = system.cpu_clk_domain, + width = 32) system.l2.cpu_side = system.tol2bus.master system.l2.mem_side = system.membus.slave diff --git a/configs/common/Simulation.py b/configs/common/Simulation.py index 27b1a510a..deccdad5c 100644 --- a/configs/common/Simulation.py +++ b/configs/common/Simulation.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012 ARM Limited +# Copyright (c) 2012-2013 ARM Limited # All rights reserved # # The license below extends only to copyright in the software and shall @@ -308,7 +308,7 @@ def run(options, root, testsys, cpu_class): testsys.cpu[i].max_insts_any_thread = int(options.fast_forward) switch_cpus[i].system = testsys switch_cpus[i].workload = testsys.cpu[i].workload - switch_cpus[i].clock = testsys.cpu[i].clock + switch_cpus[i].clk_domain = testsys.cpu[i].clk_domain # simulation period if options.maxinsts: switch_cpus[i].max_insts_any_thread = options.maxinsts @@ -335,7 +335,7 @@ def run(options, root, testsys, cpu_class): for i in xrange(np): repeat_switch_cpus[i].system = testsys repeat_switch_cpus[i].workload = testsys.cpu[i].workload - repeat_switch_cpus[i].clock = testsys.cpu[i].clock + repeat_switch_cpus[i].clk_domain = testsys.cpu[i].clk_domain if options.maxinsts: repeat_switch_cpus[i].max_insts_any_thread = options.maxinsts @@ -363,8 +363,8 @@ def run(options, root, testsys, cpu_class): switch_cpus_1[i].system = testsys switch_cpus[i].workload = testsys.cpu[i].workload switch_cpus_1[i].workload = testsys.cpu[i].workload - switch_cpus[i].clock = testsys.cpu[i].clock - switch_cpus_1[i].clock = testsys.cpu[i].clock + switch_cpus[i].clk_domain = testsys.cpu[i].clk_domain + switch_cpus_1[i].clk_domain = testsys.cpu[i].clk_domain # if restoring, make atomic cpu simulate only a few instructions if options.checkpoint_restore != None: diff --git a/configs/example/fs.py b/configs/example/fs.py index cbcacd6d4..028148404 100644 --- a/configs/example/fs.py +++ b/configs/example/fs.py @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2012 ARM Limited +# Copyright (c) 2010-2013 ARM Limited # All rights reserved. # # The license below extends only to copyright in the software and shall @@ -81,9 +81,6 @@ def is_kvm_cpu(cpu_class): # system under test can be any CPU (TestCPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options) -TestCPUClass.clock = options.cpu_clock -DriveCPUClass.clock = options.cpu_clock - # Match the memories with the CPUs, the driver system always simple, # and based on the options for the test system DriveMemClass = SimpleMemory @@ -120,7 +117,11 @@ elif buildEnv['TARGET_ISA'] == "arm": else: fatal("Incapable of building %s full system!", buildEnv['TARGET_ISA']) -test_sys.clock = options.sys_clock +# Create a source clock for the system and set the clock period +test_sys.clk_domain = SrcClockDomain(clock = options.sys_clock) + +# Create a source clock for the CPUs and set the clock period +test_sys.cpu_clk_domain = SrcClockDomain(clock = options.cpu_clock) if options.kernel is not None: test_sys.kernel = binary(options.kernel) @@ -130,7 +131,9 @@ if options.script is not None: test_sys.init_param = options.init_param -test_sys.cpu = [TestCPUClass(cpu_id=i) for i in xrange(np)] +# For now, assign all the CPUs to the same clock domain +test_sys.cpu = [TestCPUClass(clk_domain=test_sys.cpu_clk_domain, cpu_id=i) + for i in xrange(np)] if is_kvm_cpu(TestCPUClass) or is_kvm_cpu(FutureClass): test_sys.vm = KvmVM() @@ -174,9 +177,14 @@ if len(bm) == 2: drive_sys = makeArmSystem(drive_mem_mode, options.machine_type, DriveMemClass, bm[1]) - drive_sys.clock = options.sys_clock + # Create a source clock for the system and set the clock period + drive_sys.clk_domain = SrcClockDomain(clock = options.sys_clock) + + # Create a source clock for the CPUs and set the clock period + drive_sys.cpu_clk_domain = SrcClockDomain(clock = options.cpu_clock) - drive_sys.cpu = DriveCPUClass(cpu_id=0) + drive_sys.cpu = DriveCPUClass(clk_domain=drive_sys.cpu_clk_domain, + cpu_id=0) drive_sys.cpu.createThreads() drive_sys.cpu.createInterruptController() drive_sys.cpu.connectAllPorts(drive_sys.membus) diff --git a/configs/example/memtest.py b/configs/example/memtest.py index e8dc52fb5..a74f4b2f3 100644 --- a/configs/example/memtest.py +++ b/configs/example/memtest.py @@ -144,14 +144,14 @@ for scale in treespec[:-2]: system = System(funcmem = SimpleMemory(in_addr_map = False), funcbus = NoncoherentBus(), physmem = SimpleMemory(latency = "100ns")) -system.clock = options.sys_clock +system.clk_domain = SrcClockDomain(clock = options.sys_clock) def make_level(spec, prototypes, attach_obj, attach_port): fanout = spec[0] parent = attach_obj # use attach obj as config parent too if len(spec) > 1 and (fanout > 1 or options.force_bus): port = getattr(attach_obj, attach_port) - new_bus = CoherentBus(clock="500MHz", width=16) + new_bus = CoherentBus(width=16) if (port.role == 'MASTER'): new_bus.slave = port attach_port = "master" diff --git a/configs/example/ruby_direct_test.py b/configs/example/ruby_direct_test.py index a60725230..e4d4c73f8 100644 --- a/configs/example/ruby_direct_test.py +++ b/configs/example/ruby_direct_test.py @@ -92,8 +92,9 @@ else: # actually used by the rubytester, but is included to support the # M5 memory size == Ruby memory size checks # -system = System(physmem = SimpleMemory()) -system.clock = options.sys_clock +system = System(physmem = SimpleMemory(), + clk_domain = SrcClockDomain(clock = options.sys_clock)) + # # Create the ruby random tester # @@ -103,6 +104,9 @@ system.tester = RubyDirectedTester(requests_to_complete = \ Ruby.create_system(options, system) +# Since Ruby runs at an independent frequency, create a seperate clock +system.ruby.clk_domain = SrcClockDomain(clock = options.ruby_clock) + assert(options.num_cpus == len(system.ruby._cpu_ruby_ports)) for ruby_port in system.ruby._cpu_ruby_ports: diff --git a/configs/example/ruby_fs.py b/configs/example/ruby_fs.py index 403e55584..a1293a08c 100644 --- a/configs/example/ruby_fs.py +++ b/configs/example/ruby_fs.py @@ -80,8 +80,6 @@ if not (options.cpu_type == "detailed" or options.cpu_type == "timing"): sys.exit(1) (CPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options) -CPUClass.clock = options.cpu_clock - TestMemClass = Simulation.setMemClass(options) if buildEnv['TARGET_ISA'] == "alpha": @@ -93,7 +91,7 @@ elif buildEnv['TARGET_ISA'] == "x86": else: fatal("incapable of building non-alpha or non-x86 full system!") -system.clock = options.sys_clock +system.clk_domain = SrcClockDomain(clock = options.sys_clock) if options.kernel is not None: system.kernel = binary(options.kernel) @@ -102,12 +100,20 @@ if options.script is not None: system.readfile = options.script system.cpu = [CPUClass(cpu_id=i) for i in xrange(options.num_cpus)] + +# Create a source clock for the CPUs and set the clock period +system.cpu_clk_domain = SrcClockDomain(clock = options.cpu_clock) + Ruby.create_system(options, system, system.piobus, system._dma_ports) +# Create a seperate clock domain for Ruby +system.ruby.clk_domain = SrcClockDomain(clock = options.ruby_clock) + for (i, cpu) in enumerate(system.cpu): # # Tie the cpu ports to the correct ruby system ports # + cpu.clk_domain = system.cpu_clk_domain cpu.createThreads() cpu.createInterruptController() cpu.icache_port = system.ruby._cpu_ruby_ports[i].slave diff --git a/configs/example/ruby_mem_test.py b/configs/example/ruby_mem_test.py index 14db9d40b..b164447f8 100644 --- a/configs/example/ruby_mem_test.py +++ b/configs/example/ruby_mem_test.py @@ -107,8 +107,8 @@ cpus = [ MemTest(atomic = False, system = System(cpu = cpus, funcmem = SimpleMemory(in_addr_map = False), funcbus = NoncoherentBus(), - physmem = SimpleMemory()) -system.clock = options.sys_clock + physmem = SimpleMemory(), + clk_domain = SrcClockDomain(clock = options.sys_clock)) if options.num_dmas > 0: dmas = [ MemTest(atomic = False, @@ -129,6 +129,9 @@ for (i, dma) in enumerate(dmas): dma_ports.append(dma.test) Ruby.create_system(options, system, dma_ports = dma_ports) +# Create a seperate clock domain for Ruby +system.ruby.clk_domain = SrcClockDomain(clock = options.ruby_clock) + # # The tester is most effective when randomization is turned on and # artifical delay is randomly inserted on messages diff --git a/configs/example/ruby_network_test.py b/configs/example/ruby_network_test.py index 74bdd5504..b6fdc416f 100644 --- a/configs/example/ruby_network_test.py +++ b/configs/example/ruby_network_test.py @@ -104,11 +104,14 @@ cpus = [ NetworkTest(fixed_pkts=options.fixed_pkts, # create the desired simulated system system = System(cpu = cpus, - physmem = SimpleMemory()) -system.clock = options.sys_clock + physmem = SimpleMemory(), + clk_domain = SrcClockDomain(clock = options.sys_clock)) Ruby.create_system(options, system) +# Create a seperate clock domain for Ruby +system.ruby.clk_domain = SrcClockDomain(clock = options.ruby_clock) + i = 0 for ruby_port in system.ruby._cpu_ruby_ports: # diff --git a/configs/example/ruby_random_test.py b/configs/example/ruby_random_test.py index 646863e88..cd1b82f16 100644 --- a/configs/example/ruby_random_test.py +++ b/configs/example/ruby_random_test.py @@ -97,11 +97,14 @@ tester = RubyTester(check_flush = check_flush, # actually used by the rubytester, but is included to support the # M5 memory size == Ruby memory size checks # -system = System(tester = tester, physmem = SimpleMemory()) -system.clock = options.sys_clock +system = System(tester = tester, physmem = SimpleMemory(), + clk_domain = SrcClockDomain(clock = options.sys_clock)) Ruby.create_system(options, system) +# Create a seperate clock domain for Ruby +system.ruby.clk_domain = SrcClockDomain(clock = options.ruby_clock) + assert(options.num_cpus == len(system.ruby._cpu_ruby_ports)) tester.num_cpus = len(system.ruby._cpu_ruby_ports) diff --git a/configs/example/se.py b/configs/example/se.py index 3ff3f0c7d..a564901a3 100644 --- a/configs/example/se.py +++ b/configs/example/se.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012 ARM Limited +# Copyright (c) 2012-2013 ARM Limited # All rights reserved. # # The license below extends only to copyright in the software and shall @@ -147,7 +147,6 @@ else: (CPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options) -CPUClass.clock = options.cpu_clock CPUClass.numThreads = numThreads MemClass = Simulation.setMemClass(options) @@ -159,8 +158,16 @@ if options.smt and options.num_cpus > 1: np = options.num_cpus system = System(cpu = [CPUClass(cpu_id=i) for i in xrange(np)], physmem = MemClass(range=AddrRange("512MB")), - mem_mode = test_mem_mode) -system.clock = options.sys_clock + mem_mode = test_mem_mode, + clk_domain = SrcClockDomain(clock = options.sys_clock)) + +# Create a separate clock domain for the CPUs +system.cpu_clk_domain = SrcClockDomain(clock = options.cpu_clock) + +# All cpus belong to a common cpu_clk_domain, therefore running at a common +# frequency. +for cpu in system.cpu: + cpu.clk_domain = system.cpu_clk_domain # Sanity check if options.fastmem: diff --git a/configs/ruby/MESI_CMP_directory.py b/configs/ruby/MESI_CMP_directory.py index c265bd4cb..4128f87ad 100644 --- a/configs/ruby/MESI_CMP_directory.py +++ b/configs/ruby/MESI_CMP_directory.py @@ -144,13 +144,22 @@ def create_system(options, system, piobus, dma_ports, ruby_system): system.memories.unproxy(system))) mem_module_size = phys_mem_size / options.num_dirs + # Run each of the ruby memory controllers at a ratio of the frequency of + # the ruby system + # clk_divider value is a fix to pass regression. + ruby_system.memctrl_clk_domain = DerivedClockDomain( + clk_domain=ruby_system.clk_domain, + clk_divider=3) + for i in xrange(options.num_dirs): # # Create the Ruby objects associated with the directory controller # - mem_cntrl = RubyMemoryControl(version = i, - ruby_system = ruby_system) + mem_cntrl = RubyMemoryControl( + clk_domain = ruby_system.memctrl_clk_domain, + version = i, + ruby_system = ruby_system) dir_size = MemorySize('0B') dir_size.value = mem_module_size diff --git a/configs/ruby/MI_example.py b/configs/ruby/MI_example.py index 0514a7240..6bbd35ea7 100644 --- a/configs/ruby/MI_example.py +++ b/configs/ruby/MI_example.py @@ -109,13 +109,22 @@ def create_system(options, system, piobus, dma_ports, ruby_system): system.memories.unproxy(system))) mem_module_size = phys_mem_size / options.num_dirs + # Run each of the ruby memory controllers at a ratio of the frequency of + # the ruby system. + # clk_divider value is a fix to pass regression. + ruby_system.memctrl_clk_domain = DerivedClockDomain( + clk_domain=ruby_system.clk_domain, + clk_divider=3) + for i in xrange(options.num_dirs): # # Create the Ruby objects associated with the directory controller # - mem_cntrl = RubyMemoryControl(version = i, - ruby_system = ruby_system) + mem_cntrl = RubyMemoryControl( + clk_domain = ruby_system.memctrl_clk_domain, + version = i, + ruby_system = ruby_system) dir_size = MemorySize('0B') dir_size.value = mem_module_size diff --git a/configs/ruby/MOESI_CMP_directory.py b/configs/ruby/MOESI_CMP_directory.py index f53758d71..81d04914c 100644 --- a/configs/ruby/MOESI_CMP_directory.py +++ b/configs/ruby/MOESI_CMP_directory.py @@ -139,13 +139,22 @@ def create_system(options, system, piobus, dma_ports, ruby_system): system.memories.unproxy(system))) mem_module_size = phys_mem_size / options.num_dirs + # Run each of the ruby memory controllers at a ratio of the frequency of + # the ruby system. + # clk_divider value is a fix to pass regression. + ruby_system.memctrl_clk_domain = DerivedClockDomain( + clk_domain=ruby_system.clk_domain, + clk_divider=3) + for i in xrange(options.num_dirs): # # Create the Ruby objects associated with the directory controller # - mem_cntrl = RubyMemoryControl(version = i, - ruby_system = ruby_system) + mem_cntrl = RubyMemoryControl( + clk_domain = ruby_system.memctrl_clk_domain, + version = i, + ruby_system = ruby_system) dir_size = MemorySize('0B') dir_size.value = mem_module_size diff --git a/configs/ruby/MOESI_CMP_token.py b/configs/ruby/MOESI_CMP_token.py index f3ad05a92..9c2598a1d 100644 --- a/configs/ruby/MOESI_CMP_token.py +++ b/configs/ruby/MOESI_CMP_token.py @@ -160,13 +160,22 @@ def create_system(options, system, piobus, dma_ports, ruby_system): system.memories.unproxy(system))) mem_module_size = phys_mem_size / options.num_dirs + # Run each of the ruby memory controllers at a ratio of the frequency of + # the ruby system + # clk_divider value is a fix to pass regression. + ruby_system.memctrl_clk_domain = DerivedClockDomain( + clk_domain=ruby_system.clk_domain, + clk_divider=3) + for i in xrange(options.num_dirs): # # Create the Ruby objects associated with the directory controller # - mem_cntrl = RubyMemoryControl(version = i, - ruby_system = ruby_system) + mem_cntrl = RubyMemoryControl( + clk_domain = ruby_system.memctrl_clk_domain, + version = i, + ruby_system = ruby_system) dir_size = MemorySize('0B') dir_size.value = mem_module_size diff --git a/configs/ruby/MOESI_hammer.py b/configs/ruby/MOESI_hammer.py index 30fb0f0b7..11ea579ea 100644 --- a/configs/ruby/MOESI_hammer.py +++ b/configs/ruby/MOESI_hammer.py @@ -158,13 +158,22 @@ def create_system(options, system, piobus, dma_ports, ruby_system): else: pf_start_bit = block_size_bits + # Run each of the ruby memory controllers at a ratio of the frequency of + # the ruby system + # clk_divider value is a fix to pass regression. + ruby_system.memctrl_clk_domain = DerivedClockDomain( + clk_domain=ruby_system.clk_domain, + clk_divider=3) + for i in xrange(options.num_dirs): # # Create the Ruby objects associated with the directory controller # - mem_cntrl = RubyMemoryControl(version = i, - ruby_system = ruby_system) + mem_cntrl = RubyMemoryControl( + clk_domain = ruby_system.memctrl_clk_domain, + version = i, + ruby_system = ruby_system) dir_size = MemorySize('0B') dir_size.value = mem_module_size diff --git a/configs/ruby/Network_test.py b/configs/ruby/Network_test.py index c1a1f9509..c4df4dddb 100644 --- a/configs/ruby/Network_test.py +++ b/configs/ruby/Network_test.py @@ -107,13 +107,22 @@ def create_system(options, system, piobus, dma_ports, ruby_system): system.memories.unproxy(system))) mem_module_size = phys_mem_size / options.num_dirs + # Run each of the ruby memory controllers at a ratio of the frequency of + # the ruby system. + # clk_divider value is a fix to pass regression. + ruby_system.memctrl_clk_domain = DerivedClockDomain( + clk_domain=ruby_system.clk_domain, + clk_divider=3) + for i in xrange(options.num_dirs): # # Create the Ruby objects associated with the directory controller # - mem_cntrl = RubyMemoryControl(version = i, - ruby_system = ruby_system) + mem_cntrl = RubyMemoryControl( + clk_domain = ruby_system.memctrl_clk_domain, + version = i, + ruby_system = ruby_system) dir_size = MemorySize('0B') dir_size.value = mem_module_size diff --git a/configs/ruby/Ruby.py b/configs/ruby/Ruby.py index 5c5e84197..a35ef4f09 100644 --- a/configs/ruby/Ruby.py +++ b/configs/ruby/Ruby.py @@ -95,8 +95,7 @@ def create_topology(controllers, options): def create_system(options, system, piobus = None, dma_ports = []): - system.ruby = RubySystem(clock = options.ruby_clock, - stats_filename = options.ruby_stats, + system.ruby = RubySystem(stats_filename = options.ruby_stats, no_mem_vec = options.use_map) ruby = system.ruby |