运行简单Gem模拟(上)

创建一个简单的配置脚本

本章教程将指导您如何为gem5设置一个简单的模拟脚本,并首次运行gem5。假设你已经完成了本教程的第一章,并且已经成功地用可执行文件build/X86/gem5.opt构建了gem5。

我们的配置脚本将对一个非常简单的系统进行建模。我们将只有一个简单的CPU核。这个CPU核将被连接到一个全系统的内存总线上。我们将有一个单一的DDR3内存通道,也连接到内存总线上。

gem5配置脚本

gem5二进制文件需要一个python脚本作为参数,该脚本设置并执行模拟。在这个脚本中,您要创建一个要模拟的系统,创建该系统的所有组件,并指定系统组件的所有参数。然后,从该脚本中,你可以开始模拟。

这个脚本是完全由用户定义的。你可以选择在配置脚本中使用任何有效的 Python 代码。本书提供了一个严重依赖Python中的类和继承的风格的例子。作为 gem5 的用户,让你的配置脚本变得多简单或多复杂,这取决于你。

在configs/examples中,有许多随gem5一起发送的配置脚本示例。这些脚本大多包罗万象,允许用户在命令行上指定几乎所有选项。在本书中,我们将不从这些复杂的脚本开始,而是从能够运行gem5的最简单的脚本开始,并从那里开始构建。希望在本节结束时,你会对模拟脚本的工作方式有一个很好的了解。

创建一个配置文件

让我们从创建一个新的配置文件开始,并打开它:

mkdir configs/tutorial/part1/

touch configs/tutorial/part1/simple.py

这只是一个普通的python文件,将由gem5可执行文件中的嵌入式python来执行。因此,你可以使用python中的任何功能和库。

我们在这个文件中要做的第一件事是导入m5库和所有我们已经编译的SimObjects。

import M5

from m5.objects import *

接下来,我们将创建第一个SimObject:我们要模拟的系统。系统对象将是我们模拟系统中所有其他对象的父对象。系统对象包含很多功能(而不是时序级别)信息,比如物理内存范围、根时钟域、根电压域、内核(在全系统仿真中)等等。要创建系统的SimObject,我们只需像普通的python类一样将其实例化:

system = System()

现在我们有了一个我们要模拟的系统的参考,让我们在系统上设置时钟。我们首先要创建一个时钟域。然后我们可以在该域上设置时钟频率。在SimObject上设置参数与在python中设置对象的成员完全一样,所以我们可以简单地将时钟设置为1GHz。最后,我们要为这个时钟域指定一个电压域。由于我们现在并不关心系统的功率,所以我们只使用电压域的默认选项。

system.clk_domain = SrcClockDomain()

system.clk_domain.clock = '1GHz'。

system.clk_domain.voltage_domain = VoltageDomain()

一旦我们有了一个系统,让我们来设置如何模拟内存。我们将使用计时模式进行内存模拟。你几乎总是使用计时模式进行内存模拟,除了特殊情况,如快进和从检查点恢复。我们还将设置一个大小为512MB的单一内存范围,一个非常小的系统。请注意,在python配置脚本中,只要需要一个大小,你就可以用常见的白话和单位来指定这个大小,比如'512MB'。同样,对于时间,你可以使用时间单位(例如,'5ns')。这些都会被自动转换为通用的表示方法,分别。

system.mem_mode = 'timing' 。

system.mem_ranges = [AddrRange('512MB')]

现在,我们可以创建一个CPU。我们将从gem5中用于X86 ISA的最简单的基于计时的CPU开始,即X86TimingSimpleCPU。这个CPU模型在一个时钟周期内执行每条指令,但内存请求除外,它流经内存系统。要创建CPU,你可以简单地直接实例化该对象:

system.cpu = X86TimingSimpleCPU()

如果我们想使用RISCV ISA,我们可以使用RiscvTimingSimpleCPU;如果我们想使用ARM ISA,我们可以使用ArmTimingSimpleCPU。然而,在这个练习中我们将继续使用X86 ISA。

接下来,我们要创建全系统的内存总线:

system.membus = SystemXBar()

现在我们有了一条内存总线,让我们把CPU上的缓存端口连接到它上面。在本例中,由于我们要模拟的系统没有任何缓存,我们将把I-缓存和D-缓存端口直接连接到membus上。在这个例子的系统中,我们没有缓存。

system.cpu.icache_port = system.membus.cpu_side_ports

system.cpu.dcache_port = system.membus.cpu_side_ports

文章作者:速易芯李昊翔

更多详细文章可关注公众号 “速易芯Fastchip” !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

速易芯Fastchip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值