gem5学习(4):对官方教程的进一步说明Creating a very simple SimObject

目录

背景

一、涉及到的5个文件

二、5个文件的具体内容

1、HelloObject.py

2、hello_object.hh

3、hello_object.cc

4、SConscript

5、run_hello.py

三、对新建HelloObject类进行测试

1、(re)-build gem5.debug

2、运行run_hello.py

3、输出结果


gem5: Creating a very simple SimObject

背景

在上述教程中,主要介绍了类的开发思路,但是对其中涉及到要修改的文件并没有详细说明。可能有的同学即使看了

本文主要按照最基本的思路以及本人画的一个修改路线的visio图(早期),比较利于刚开始不知道如何下手的同学。

【注】:这部分比较简单,所以gem5社区教程中原始版本并没有留存简单版本代码【最早的应该是下一个教程gem5: Event-driven programming】,所以我基于教程中的HelloSimobject类给出简单版源码。

一、涉及到的5个文件

文件修改过程是按照下述顺序。

其中文件1-4应该在同一目录中(例如gem5/src/learning_gem5/part2中,是为了方便引入和修改其他的头文件内容),然后文件5<run_hello.py>在其他的目录(例如gem5/config/中)。

  1. HelloObject.py【类的定义和成员变量初始化,主要描述可以从python配置文件中控制的SimObject参数】
  2. hello_object.hh【类的声明,成员函数的声明和定义】(declare our class)
  3. hello_object.cc【实现.hh文件中声明的类】
  4. SConscript【在构建过程中将模块、SimObject定义和源代码文件添加到gem5模拟器中】gem5/config/dsic/
  5. run_hello.py(前面几个步骤已经实现了一个SimObject,并将其编译到gem5中)【创建python脚本,实例化新SimObject,并开启模拟过程】

二、5个文件的具体内容

1、HelloObject.py

from m5.params import *
from m5.SimObject import SimObject

class HelloObject(SimObject):
    type = 'HelloObject'
    cxx_header = "learning_gem5/part2/hello_object.hh"
    cxx_class = "gem5::HelloObject"

2、hello_object.hh

#ifndef __LEARNING_GEM5_HELLO_OBJECT_HH__
#define __LEARNING_GEM5_HELLO_OBJECT_HH__

#include "params/HelloObject.hh"
#include "sim/sim_object.hh"

namespace gem5
{

class HelloObject : public SimObject
{
  public:
    HelloObject(const HelloObjectParams &p);
};

} // namespace gem5

#endif // __LEARNING_GEM5_HELLO_OBJECT_HH__

3、hello_object.cc

#include "learning_gem5/part2/hello_object.hh"

#include <iostream>

namespace gem5
{

HelloObject::HelloObject(const HelloObjectParams &params) :
    SimObject(params)
{
    std::cout << "Hello World! From a SimObject!" << std::endl;
}

} // namespace gem5

4、SConscript

如果没有这个文件的话,就需要新建一个。

如果已经有这个文件,需要新增的HelloObject类的相关信息。

Import('*')

SimObject('HelloObject.py', sim_objects=['HelloObject'])
Source('hello_object.cc')

5、run_hello.py

import m5
from m5.objects import *

root = Root(full_system = False)
root.hello = HelloObject()

m5.instantiate()

print("Beginning simulation!")
exit_event = m5.simulate()
print('Exiting @ tick {} because {}'
      .format(m5.curTick(), exit_event.getCause()))

三、对新建HelloObject类进行测试

1、(re)-build gem5.debug

scons build/X86/gem5.debug

如果对src中的.cc文件进行修改后,都需要重新编译。

由于gem5支持增量编译,如果修改部分文件的话就不会耗费太长时间。

2、运行run_hello.py

build/X86/gem5.debug config/run_hello.py

3、输出结果

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值