Advertisement
Guest User

Untitled

a guest
May 9th, 2023
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | Source Code | 0 0
  1. # -*- coding: utf-8 -*-
  2. # Copyright (c) 2017 Jason Lowe-Power
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions are
  7. # met: redistributions of source code must retain the above copyright
  8. # notice, this list of conditions and the following disclaimer;
  9. # redistributions in binary form must reproduce the above copyright
  10. # notice, this list of conditions and the following disclaimer in the
  11. # documentation and/or other materials provided with the distribution;
  12. # neither the name of the copyright holders nor the names of its
  13. # contributors may be used to endorse or promote products derived from
  14. # this software without specific prior written permission.
  15. #
  16. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  17. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  18. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  19. # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  20. # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  21. # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23. # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24. # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  26. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  
  28. """ This file creates a barebones system and executes 'hello', a simple Hello
  29. World application. Adds a simple cache between the CPU and the membus.
  30.  
  31. This config file assumes that the x86 ISA was built.
  32. """
  33.  
  34. # import the m5 (gem5) library created when gem5 is built
  35. import m5
  36.  
  37. # import all of the SimObjects
  38. from m5.objects import *
  39.  
  40. # create the system we are going to simulate
  41. system = System()
  42.  
  43. # Set the clock frequency of the system (and all of its children)
  44. system.clk_domain = SrcClockDomain()
  45. system.clk_domain.clock = "1GHz"
  46. system.clk_domain.voltage_domain = VoltageDomain()
  47.  
  48. # Set up the system
  49. system.mem_mode = "timing" # Use timing accesses
  50. system.mem_ranges = [AddrRange("512MB")] # Create an address range
  51.  
  52. # Create a simple CPU
  53. system.cpu = ArmTimingSimpleCPU()
  54.  
  55. # Create a memory bus, a coherent crossbar, in this case
  56. system.membus = SystemXBar()
  57.  
  58. # Create a simple cache
  59. system.cache = SimpleCache(size="1kB")
  60.  
  61. # Connect the I and D cache ports of the CPU to the memobj.
  62. # Since cpu_side is a vector port, each time one of these is connected, it will
  63. # create a new instance of the CPUSidePort class
  64. system.cpu.icache_port = system.cache.cpu_side
  65. system.cpu.dcache_port = system.cache.cpu_side
  66.  
  67. # Hook the cache up to the memory bus
  68. system.cache.mem_side = system.membus.cpu_side_ports
  69.  
  70. # create the interrupt controller for the CPU and connect to the membus
  71. system.cpu.createInterruptController()
  72. #system.cpu.interrupts[0].pio = system.membus.mem_side_ports
  73. #system.cpu.interrupts[0].int_requestor = system.membus.cpu_side_ports
  74. #system.cpu.interrupts[0].int_responder = system.membus.mem_side_ports
  75.  
  76. # Create a DDR3 memory controller and connect it to the membus
  77. system.mem_ctrl = MemCtrl()
  78. system.mem_ctrl.dram = DDR3_1600_8x8()
  79. system.mem_ctrl.dram.range = system.mem_ranges[0]
  80. system.mem_ctrl.port = system.membus.mem_side_ports
  81.  
  82. # Connect the system up to the membus
  83. system.system_port = system.membus.cpu_side_ports
  84.  
  85. # Create a process for a simple "Hello World" application
  86. process = Process()
  87. # Set the command
  88. # grab the specific path to the binary
  89. thispath = os.path.dirname(os.path.realpath(__file__))
  90. binpath = os.path.join(
  91. thispath,
  92. "../../",
  93. #"cpu_tests/benchmarks/bin/arm/Bubblesort"
  94. "tests/test-progs/hello/bin/arm/linux/hello"
  95. )
  96. # cmd is a list which begins with the executable (like argv)
  97. process.cmd = [binpath]
  98. # Set the cpu to use the process as its workload and create thread contexts
  99. system.cpu.workload = process
  100. system.cpu.createThreads()
  101.  
  102. system.workload = SEWorkload.init_compatible(binpath)
  103.  
  104. # set up the root SimObject and start the simulation
  105. root = Root(full_system=False, system=system)
  106. # instantiate all of the objects we've created above
  107. m5.instantiate()
  108.  
  109. print("Beginning simulation!")
  110. exit_event = m5.simulate()
  111. print("Exiting @ tick %i because %s" % (m5.curTick(), exit_event.getCause()))
  112.  
Tags: gem5
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement