112340Szulian@eit.uni-kl.de# Copyright (c) 2017, University of Kaiserslautern
212340Szulian@eit.uni-kl.de# All rights reserved.
312340Szulian@eit.uni-kl.de#
412340Szulian@eit.uni-kl.de# Redistribution and use in source and binary forms, with or without
512340Szulian@eit.uni-kl.de# modification, are permitted provided that the following conditions are
612340Szulian@eit.uni-kl.de# met:
712340Szulian@eit.uni-kl.de#
812340Szulian@eit.uni-kl.de# 1. Redistributions of source code must retain the above copyright notice,
912340Szulian@eit.uni-kl.de#    this list of conditions and the following disclaimer.
1012340Szulian@eit.uni-kl.de#
1112340Szulian@eit.uni-kl.de# 2. Redistributions in binary form must reproduce the above copyright
1212340Szulian@eit.uni-kl.de#    notice, this list of conditions and the following disclaimer in the
1312340Szulian@eit.uni-kl.de#    documentation and/or other materials provided with the distribution.
1412340Szulian@eit.uni-kl.de#
1512340Szulian@eit.uni-kl.de# 3. Neither the name of the copyright holder nor the names of its
1612340Szulian@eit.uni-kl.de#    contributors may be used to endorse or promote products derived from
1712340Szulian@eit.uni-kl.de#    this software without specific prior written permission.
1812340Szulian@eit.uni-kl.de#
1912340Szulian@eit.uni-kl.de# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2012340Szulian@eit.uni-kl.de# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2112340Szulian@eit.uni-kl.de# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2212340Szulian@eit.uni-kl.de# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
2312340Szulian@eit.uni-kl.de# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
2412340Szulian@eit.uni-kl.de# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
2512340Szulian@eit.uni-kl.de# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2612340Szulian@eit.uni-kl.de# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
2712340Szulian@eit.uni-kl.de# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
2812340Szulian@eit.uni-kl.de# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2912340Szulian@eit.uni-kl.de# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3012340Szulian@eit.uni-kl.de#
3112340Szulian@eit.uni-kl.de# Author: Éder F. Zulian
3212340Szulian@eit.uni-kl.de
3313774Sandreas.sandberg@arm.comfrom __future__ import print_function
3413774Sandreas.sandberg@arm.comfrom __future__ import absolute_import
3513774Sandreas.sandberg@arm.com
3612340Szulian@eit.uni-kl.deimport sys
3712340Szulian@eit.uni-kl.deimport argparse
3812340Szulian@eit.uni-kl.de
3912340Szulian@eit.uni-kl.deimport m5
4012340Szulian@eit.uni-kl.defrom m5.objects import *
4112340Szulian@eit.uni-kl.defrom m5.util import *
4212340Szulian@eit.uni-kl.deaddToPath('../')
4312340Szulian@eit.uni-kl.defrom common import MemConfig
4412340Szulian@eit.uni-kl.defrom common import HMC
4512340Szulian@eit.uni-kl.de
4612340Szulian@eit.uni-kl.de
4712340Szulian@eit.uni-kl.depd = "Simple 'hello world' example using HMC as main memory"
4812340Szulian@eit.uni-kl.deparser = argparse.ArgumentParser(description=pd)
4912340Szulian@eit.uni-kl.deHMC.add_options(parser)
5012340Szulian@eit.uni-kl.deoptions = parser.parse_args()
5112340Szulian@eit.uni-kl.de# create the system we are going to simulate
5212340Szulian@eit.uni-kl.desystem = System()
5312340Szulian@eit.uni-kl.de# use timing mode for the interaction between master-slave ports
5412340Szulian@eit.uni-kl.desystem.mem_mode = 'timing'
5512340Szulian@eit.uni-kl.de# set the clock fequency of the system
5612340Szulian@eit.uni-kl.declk = '1GHz'
5712340Szulian@eit.uni-kl.devd = VoltageDomain(voltage='1V')
5812340Szulian@eit.uni-kl.desystem.clk_domain = SrcClockDomain(clock=clk, voltage_domain=vd)
5912340Szulian@eit.uni-kl.de# create a simple CPU
6012340Szulian@eit.uni-kl.desystem.cpu = TimingSimpleCPU()
6112340Szulian@eit.uni-kl.de# config memory system
6212340Szulian@eit.uni-kl.deMemConfig.config_mem(options, system)
6312340Szulian@eit.uni-kl.de# hook the CPU ports up to the membus
6412340Szulian@eit.uni-kl.desystem.cpu.icache_port = system.membus.slave
6512340Szulian@eit.uni-kl.desystem.cpu.dcache_port = system.membus.slave
6612340Szulian@eit.uni-kl.de# create the interrupt controller for the CPU and connect to the membus
6712340Szulian@eit.uni-kl.desystem.cpu.createInterruptController()
6812340Szulian@eit.uni-kl.de# connect special port in the system to the membus. This port is a
6912340Szulian@eit.uni-kl.de# functional-only port to allow the system to read and write memory.
7012340Szulian@eit.uni-kl.desystem.system_port = system.membus.slave
7112340Szulian@eit.uni-kl.de# get ISA for the binary to run.
7212340Szulian@eit.uni-kl.deisa = str(m5.defines.buildEnv['TARGET_ISA']).lower()
7312340Szulian@eit.uni-kl.de# run 'hello' and use the compiled ISA to find the binary
7412340Szulian@eit.uni-kl.debinary = 'tests/test-progs/hello/bin/' + isa + '/linux/hello'
7512340Szulian@eit.uni-kl.de# create a process for a simple "Hello World" application
7612340Szulian@eit.uni-kl.deprocess = Process()
7712340Szulian@eit.uni-kl.de# cmd is a list which begins with the executable (like argv)
7812340Szulian@eit.uni-kl.deprocess.cmd = [binary]
7912340Szulian@eit.uni-kl.de# set the cpu workload
8012340Szulian@eit.uni-kl.desystem.cpu.workload = process
8112340Szulian@eit.uni-kl.de# create thread contexts
8212340Szulian@eit.uni-kl.desystem.cpu.createThreads()
8312340Szulian@eit.uni-kl.de# set up the root SimObject
8412340Szulian@eit.uni-kl.deroot = Root(full_system=False, system=system)
8512340Szulian@eit.uni-kl.dem5.instantiate()
8612340Szulian@eit.uni-kl.dem5.simulate()
87