hmctest.py revision 11682
111552Sabdul.mutaal@gmail.comimport optparse 211552Sabdul.mutaal@gmail.comimport sys 311552Sabdul.mutaal@gmail.comimport subprocess 411552Sabdul.mutaal@gmail.com 511552Sabdul.mutaal@gmail.comimport m5 611552Sabdul.mutaal@gmail.comfrom m5.objects import * 711552Sabdul.mutaal@gmail.comfrom m5.util import addToPath 811552Sabdul.mutaal@gmail.com 911682Sandreas.hansson@arm.comaddToPath('../') 1011682Sandreas.hansson@arm.com 1111682Sandreas.hansson@arm.comfrom common import MemConfig 1211682Sandreas.hansson@arm.comfrom common import HMC 1311552Sabdul.mutaal@gmail.com 1411552Sabdul.mutaal@gmail.comparser = optparse.OptionParser() 1511552Sabdul.mutaal@gmail.com 1611552Sabdul.mutaal@gmail.com# Use a HMC_2500_x32 by default 1711552Sabdul.mutaal@gmail.comparser.add_option("--mem-type", type = "choice", default = "HMC_2500_x32", 1811552Sabdul.mutaal@gmail.com choices = MemConfig.mem_names(), 1911552Sabdul.mutaal@gmail.com help = "type of memory to use") 2011552Sabdul.mutaal@gmail.com 2111552Sabdul.mutaal@gmail.comparser.add_option("--ranks", "-r", type = "int", default = 1, 2211552Sabdul.mutaal@gmail.com help = "Number of ranks to iterate across") 2311552Sabdul.mutaal@gmail.com 2411552Sabdul.mutaal@gmail.comparser.add_option("--rd_perc", type ="int", default=100, 2511552Sabdul.mutaal@gmail.com help = "Percentage of read commands") 2611552Sabdul.mutaal@gmail.com 2711552Sabdul.mutaal@gmail.comparser.add_option("--mode", type ="choice", default ="DRAM", 2811552Sabdul.mutaal@gmail.com choices = ["DRAM", "DRAM_ROTATE", "RANDOM"], 2911552Sabdul.mutaal@gmail.com help = "DRAM: Random traffic; \ 3011552Sabdul.mutaal@gmail.com DRAM_ROTATE: Traffic rotating across banks and ranks" 3111552Sabdul.mutaal@gmail.com ) 3211552Sabdul.mutaal@gmail.com 3311552Sabdul.mutaal@gmail.comparser.add_option("--addr_map", type ="int", default = 1, 3411552Sabdul.mutaal@gmail.com help = "0: RoCoRaBaCh; 1: RoRaBaCoCh/RoRaBaChCo") 3511552Sabdul.mutaal@gmail.com 3611552Sabdul.mutaal@gmail.comparser.add_option("--arch", type = "choice", default = "distributed", 3711552Sabdul.mutaal@gmail.com choices = ["same", "distributed", "mixed"], 3811552Sabdul.mutaal@gmail.com help = "same: HMC-4 links with same range\ 3911552Sabdul.mutaal@gmail.com distributed: HMC-4 links with distributed range\ 4011552Sabdul.mutaal@gmail.com mixed: mixed with same & distributed range") 4111552Sabdul.mutaal@gmail.com 4211552Sabdul.mutaal@gmail.comparser.add_option("--linkaggr", type = "int", default = 0, 4311552Sabdul.mutaal@gmail.com help = "1: enable link crossbar, 0: disable link crossbar") 4411552Sabdul.mutaal@gmail.com 4511552Sabdul.mutaal@gmail.comparser.add_option("--num_cross", type = "int", default = 4, 4611552Sabdul.mutaal@gmail.com help = "1: number of crossbar in HMC=1;\ 4711552Sabdul.mutaal@gmail.com 4: number of crossbar = 4") 4811552Sabdul.mutaal@gmail.com 4911552Sabdul.mutaal@gmail.comparser.add_option("--tlm-memory", type = "string", 5011552Sabdul.mutaal@gmail.com help="use external port for SystemC TLM cosimulation") 5111552Sabdul.mutaal@gmail.com 5211552Sabdul.mutaal@gmail.comparser.add_option("--elastic-trace-en", action ="store_true", 5311552Sabdul.mutaal@gmail.com help = """Enable capture of data dependency and instruction 5411552Sabdul.mutaal@gmail.com fetch traces using elastic trace probe.""") 5511552Sabdul.mutaal@gmail.com 5611552Sabdul.mutaal@gmail.com(options, args) = parser.parse_args() 5711552Sabdul.mutaal@gmail.com 5811552Sabdul.mutaal@gmail.comif args: 5911552Sabdul.mutaal@gmail.com print "Error: script doesn't take any positional arguments" 6011552Sabdul.mutaal@gmail.com sys.exit(1) 6111552Sabdul.mutaal@gmail.com 6211552Sabdul.mutaal@gmail.comsystem = System() 6311552Sabdul.mutaal@gmail.comsystem.clk_domain = SrcClockDomain(clock='100GHz', 6411552Sabdul.mutaal@gmail.com voltage_domain= 6511552Sabdul.mutaal@gmail.com VoltageDomain(voltage = '1V')) 6611552Sabdul.mutaal@gmail.com# Create additional crossbar for arch1 6711552Sabdul.mutaal@gmail.comif options.arch == "distributed" or options.arch == "mixed" : 6811552Sabdul.mutaal@gmail.com system.membus = NoncoherentXBar( width=8 ) 6911552Sabdul.mutaal@gmail.com system.membus.badaddr_responder = BadAddr() 7011552Sabdul.mutaal@gmail.com system.membus.default = Self.badaddr_responder.pio 7111552Sabdul.mutaal@gmail.com system.membus.width = 8 7211552Sabdul.mutaal@gmail.com system.membus.frontend_latency = 3 7311552Sabdul.mutaal@gmail.com system.membus.forward_latency = 4 7411552Sabdul.mutaal@gmail.com system.membus.response_latency = 2 7511552Sabdul.mutaal@gmail.com 7611552Sabdul.mutaal@gmail.com system.membus.clk_domain = SrcClockDomain(clock='100GHz', voltage_domain= 7711552Sabdul.mutaal@gmail.com VoltageDomain(voltage = '1V')) 7811552Sabdul.mutaal@gmail.com 7911552Sabdul.mutaal@gmail.com# we are considering 4GB HMC device with following parameters 8011552Sabdul.mutaal@gmail.com# hmc_device_size = '4GB' 8111552Sabdul.mutaal@gmail.com# hmc_num_vaults = 16 8211552Sabdul.mutaal@gmail.com# hmc_vault_size = '256MB' 8311552Sabdul.mutaal@gmail.com# hmc_stack_size = 8 8411552Sabdul.mutaal@gmail.com# hmc_bank_in_stack = 2 8511552Sabdul.mutaal@gmail.com# hmc_bank_size = '16MB' 8611552Sabdul.mutaal@gmail.com# hmc_bank_in_vault = 16 8711552Sabdul.mutaal@gmail.com 8811552Sabdul.mutaal@gmail.com# determine the burst length in bytes 8911552Sabdul.mutaal@gmail.comburst_size = 256 9011552Sabdul.mutaal@gmail.comnum_serial_links = 4 9111552Sabdul.mutaal@gmail.comnum_vault_ctrl = 16 9211552Sabdul.mutaal@gmail.comoptions.mem_channels = 1 9311552Sabdul.mutaal@gmail.comoptions.external_memory_system = 0 9411552Sabdul.mutaal@gmail.comoptions.mem_ranks=1 9511552Sabdul.mutaal@gmail.comstride_size = burst_size 9611552Sabdul.mutaal@gmail.comsystem.cache_line_size = burst_size 9711552Sabdul.mutaal@gmail.com 9811552Sabdul.mutaal@gmail.com# Enable performance monitoring 9911552Sabdul.mutaal@gmail.comoptions.enable_global_monitor = True 10011552Sabdul.mutaal@gmail.comoptions.enable_link_monitor = False 10111552Sabdul.mutaal@gmail.com 10211552Sabdul.mutaal@gmail.com# Bytes used for calculations 10311552Sabdul.mutaal@gmail.comoneGBytes = 1024 * 1024 * 1024 10411552Sabdul.mutaal@gmail.comoneMBytes = 1024 * 1024 10511552Sabdul.mutaal@gmail.com 10611552Sabdul.mutaal@gmail.com# Memory ranges of 16 vault controller - Total_HMC_size / 16 10711552Sabdul.mutaal@gmail.commem_range_vault = [ AddrRange(i * 256 * oneMBytes, ((i + 1) * 256 * oneMBytes) 10811552Sabdul.mutaal@gmail.com - 1) 10911552Sabdul.mutaal@gmail.com for i in range(num_vault_ctrl)] 11011552Sabdul.mutaal@gmail.com 11111552Sabdul.mutaal@gmail.com# Memmory ranges of serial link for arch-0 11211552Sabdul.mutaal@gmail.com# Same as the ranges of vault controllers - 4 vault - to - 1 serial link 11311552Sabdul.mutaal@gmail.comif options.arch == "same": 11411552Sabdul.mutaal@gmail.com ser_range = [ AddrRange(0, (4 * oneGBytes) - 1) 11511552Sabdul.mutaal@gmail.com for i in range(num_serial_links)] 11611552Sabdul.mutaal@gmail.com options.ser_ranges = ser_range 11711552Sabdul.mutaal@gmail.com 11811552Sabdul.mutaal@gmail.com# Memmory ranges of serial link for arch-1 11911552Sabdul.mutaal@gmail.com# Distributed range accross links 12011552Sabdul.mutaal@gmail.comif options.arch == "distributed": 12111552Sabdul.mutaal@gmail.com ser_range = [ AddrRange(i * oneGBytes, ((i + 1) * oneGBytes) - 1) 12211552Sabdul.mutaal@gmail.com for i in range(num_serial_links)] 12311552Sabdul.mutaal@gmail.com options.ser_ranges = ser_range 12411552Sabdul.mutaal@gmail.com 12511552Sabdul.mutaal@gmail.com# Memmory ranges of serial link for arch-2 12611552Sabdul.mutaal@gmail.com# "Mixed" address distribution over links 12711552Sabdul.mutaal@gmail.comif options.arch == "mixed": 12811552Sabdul.mutaal@gmail.com ser_range0 = AddrRange(0 , (1 * oneGBytes) - 1) 12911552Sabdul.mutaal@gmail.com ser_range1 = AddrRange(1 * oneGBytes , (2 * oneGBytes) - 1) 13011552Sabdul.mutaal@gmail.com ser_range2 = AddrRange(0 , (4 * oneGBytes) - 1) 13111552Sabdul.mutaal@gmail.com ser_range3 = AddrRange(0 , (4 * oneGBytes) - 1) 13211552Sabdul.mutaal@gmail.com options.ser_ranges = [ser_range0, ser_range1, ser_range2, ser_range3] 13311552Sabdul.mutaal@gmail.com 13411552Sabdul.mutaal@gmail.com# Assign ranges of vault controller to system ranges 13511552Sabdul.mutaal@gmail.comsystem.mem_ranges = mem_range_vault 13611552Sabdul.mutaal@gmail.com 13711552Sabdul.mutaal@gmail.com# open traffic generator 13811552Sabdul.mutaal@gmail.comcfg_file_name = "./tests/quick/se/70.tgen/traffic.cfg" 13911552Sabdul.mutaal@gmail.comcfg_file = open(cfg_file_name, 'r') 14011552Sabdul.mutaal@gmail.com 14111552Sabdul.mutaal@gmail.com# number of traffic generator 14211552Sabdul.mutaal@gmail.comnp = 4 14311552Sabdul.mutaal@gmail.com# create a traffic generator, and point it to the file we just created 14411552Sabdul.mutaal@gmail.comsystem.tgen = [ TrafficGen(config_file = cfg_file_name) for i in xrange(np)] 14511552Sabdul.mutaal@gmail.com 14611552Sabdul.mutaal@gmail.com# Config memory system with given HMC arch 14711552Sabdul.mutaal@gmail.comMemConfig.config_mem(options, system) 14811552Sabdul.mutaal@gmail.com 14911552Sabdul.mutaal@gmail.comif options.arch == "distributed": 15011552Sabdul.mutaal@gmail.com for i in xrange(np): 15111552Sabdul.mutaal@gmail.com system.tgen[i].port = system.membus.slave 15211552Sabdul.mutaal@gmail.com # connect the system port even if it is not used in this example 15311552Sabdul.mutaal@gmail.com system.system_port = system.membus.slave 15411552Sabdul.mutaal@gmail.com 15511552Sabdul.mutaal@gmail.comif options.arch == "mixed": 15611552Sabdul.mutaal@gmail.com for i in xrange(int(np/2)): 15711552Sabdul.mutaal@gmail.com system.tgen[i].port = system.membus.slave 15811552Sabdul.mutaal@gmail.com # connect the system port even if it is not used in this example 15911552Sabdul.mutaal@gmail.com system.system_port = system.membus.slave 16011552Sabdul.mutaal@gmail.com 16111552Sabdul.mutaal@gmail.com 16211552Sabdul.mutaal@gmail.com# run Forrest, run! 16311552Sabdul.mutaal@gmail.comroot = Root(full_system = False, system = system) 16411552Sabdul.mutaal@gmail.comroot.system.mem_mode = 'timing' 16511552Sabdul.mutaal@gmail.com 16611552Sabdul.mutaal@gmail.comm5.instantiate() 16711552Sabdul.mutaal@gmail.comm5.simulate(10000000000) 16811552Sabdul.mutaal@gmail.com 16911552Sabdul.mutaal@gmail.comm5.stats.dump() 17011552Sabdul.mutaal@gmail.com 17111552Sabdul.mutaal@gmail.comprint "Done!" 172