Ruby.py revision 6896:649e40aad897
112119Sar4jc@virginia.edu# Copyright (c) 2006-2007 The Regents of The University of Michigan
212119Sar4jc@virginia.edu# Copyright (c) 2009 Advanced Micro Devices, Inc.
312119Sar4jc@virginia.edu# All rights reserved.
412119Sar4jc@virginia.edu#
512119Sar4jc@virginia.edu# Redistribution and use in source and binary forms, with or without
612119Sar4jc@virginia.edu# modification, are permitted provided that the following conditions are
712119Sar4jc@virginia.edu# met: redistributions of source code must retain the above copyright
812119Sar4jc@virginia.edu# notice, this list of conditions and the following disclaimer;
912119Sar4jc@virginia.edu# redistributions in binary form must reproduce the above copyright
1012119Sar4jc@virginia.edu# notice, this list of conditions and the following disclaimer in the
1112119Sar4jc@virginia.edu# documentation and/or other materials provided with the distribution;
1212119Sar4jc@virginia.edu# neither the name of the copyright holders nor the names of its
1312119Sar4jc@virginia.edu# contributors may be used to endorse or promote products derived from
1412119Sar4jc@virginia.edu# this software without specific prior written permission.
1512119Sar4jc@virginia.edu#
1612119Sar4jc@virginia.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1712119Sar4jc@virginia.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1812119Sar4jc@virginia.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1912119Sar4jc@virginia.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2012119Sar4jc@virginia.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2112119Sar4jc@virginia.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2212119Sar4jc@virginia.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2312119Sar4jc@virginia.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2412119Sar4jc@virginia.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2512119Sar4jc@virginia.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2612119Sar4jc@virginia.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2712119Sar4jc@virginia.edu#
2812119Sar4jc@virginia.edu# Authors: Brad Beckmann
2912119Sar4jc@virginia.edu
3012119Sar4jc@virginia.eduimport m5
3112119Sar4jc@virginia.edufrom m5.objects import *
3212119Sar4jc@virginia.edufrom m5.defines import buildEnv
3312119Sar4jc@virginia.edufrom m5.util import addToPath
3412119Sar4jc@virginia.edu
3512119Sar4jc@virginia.eduimport MOESI_hammer
3612119Sar4jc@virginia.edu
3712119Sar4jc@virginia.edudef create_system(options, physmem, piobus = None, dma_devices = []):
3812119Sar4jc@virginia.edu
3912119Sar4jc@virginia.edu    protocol = buildEnv['PROTOCOL']
4012119Sar4jc@virginia.edu
4112119Sar4jc@virginia.edu    if protocol == "MOESI_hammer":
4212119Sar4jc@virginia.edu        (cpu_sequencers, dir_cntrls, all_cntrls) = \
4312119Sar4jc@virginia.edu            MOESI_hammer.create_system(options, \
4412119Sar4jc@virginia.edu                                       physmem, \
4512119Sar4jc@virginia.edu                                       piobus, \
4612236Sgabeblack@google.com                                       dma_devices)
4712119Sar4jc@virginia.edu    else:
4812119Sar4jc@virginia.edu         print "Error: unsupported ruby protocol"
4912119Sar4jc@virginia.edu         sys.exit(1)
5012119Sar4jc@virginia.edu
5112119Sar4jc@virginia.edu    #
5212119Sar4jc@virginia.edu    # Important: the topology constructor must be called before the network
5312119Sar4jc@virginia.edu    # constructor.
5412119Sar4jc@virginia.edu    #
5512119Sar4jc@virginia.edu    network = SimpleNetwork(topology = makeCrossbar(all_cntrls))
5612119Sar4jc@virginia.edu
5712119Sar4jc@virginia.edu    mem_size_mb = sum([int(dir_cntrl.directory.size_mb) \
5812119Sar4jc@virginia.edu                       for dir_cntrl in dir_cntrls])
5912119Sar4jc@virginia.edu
6012119Sar4jc@virginia.edu    #
6112119Sar4jc@virginia.edu    # determine the number of memory controllers and other memory controller
6212119Sar4jc@virginia.edu    # parameters for the profiler
6312234Sgabeblack@google.com    #
6412234Sgabeblack@google.com    mcCount = len(dir_cntrls)
6512119Sar4jc@virginia.edu    banksPerRank = dir_cntrls[0].memBuffer.banks_per_rank
6612119Sar4jc@virginia.edu    ranksPerDimm = dir_cntrls[0].memBuffer.ranks_per_dimm
6712119Sar4jc@virginia.edu    dimmsPerChannel = dir_cntrls[0].memBuffer.dimms_per_channel
6812119Sar4jc@virginia.edu
6912119Sar4jc@virginia.edu    ruby_profiler = RubyProfiler(num_of_sequencers = len(cpu_sequencers),
7012119Sar4jc@virginia.edu                                 mem_cntrl_count = mcCount,
7112119Sar4jc@virginia.edu                                 banks_per_rank = banksPerRank,
7212119Sar4jc@virginia.edu                                 ranks_per_dimm = ranksPerDimm,
7312119Sar4jc@virginia.edu                                 dimms_per_channel = dimmsPerChannel)
7412119Sar4jc@virginia.edu
7512119Sar4jc@virginia.edu    ruby = RubySystem(clock = options.clock,
7612119Sar4jc@virginia.edu                      network = network,
7712119Sar4jc@virginia.edu                      profiler = ruby_profiler,
7812119Sar4jc@virginia.edu                      tracer = RubyTracer(),
7912119Sar4jc@virginia.edu                      debug = RubyDebug(filter_string = 'none',
8012119Sar4jc@virginia.edu                                        verbosity_string = 'none',
8112119Sar4jc@virginia.edu                                        protocol_trace = False),
8212119Sar4jc@virginia.edu                      mem_size_mb = mem_size_mb)
8312119Sar4jc@virginia.edu
8412119Sar4jc@virginia.edu    ruby.cpu_ruby_ports = cpu_sequencers
8512119Sar4jc@virginia.edu
8612119Sar4jc@virginia.edu    return ruby
8712119Sar4jc@virginia.edu