class ClockedObject(SimObject):
type = 'ClockedObject'
abstract = True
cxx_header = "sim/clocked_object.hh"
# The clock domain this clocked object belongs to, inheriting the
# parent's clock domain by default
clk_domain = Param.ClockDomain(Parent.clk_domain, "Clock domain")
# Power model for this ClockedObject
power_model = VectorParam.PowerModel([], "Power models")
power_state = Param.PowerState(PowerState(), "Power state")
class ClockDomain : public SimObject
{
public:
typedef ClockDomainParams Params;
ClockDomain(const Params *p, VoltageDomain *voltage_domain);
查看fs.py,clk_domain实际上是一个SrcClockDomain初始化为:
# Create a source clock for the system and set the clock period
test_sys.clk_domain = SrcClockDomain(clock = options.sys_clock,
voltage_domain = test_sys.voltage_domain)
gem5大量使用代码生成
每个SimBubject Python类在生成目录下自动生成PARAM C++类,该类作为C++对象的构造函数传递。这在:https://cirosantilli.com/linux-kernel-module-cheat/#gem5-python-c-interaction中有进一步的详细描述,在:Viewing the parameters of the branch predictor in gem5中也有提及
基本上,如果您在生成目录中生成生成的C++文件(忽略SyrSink,即{A3}),您将能够理解所有的内容。p>我还没有完全研究/理解ClockedObject是如何使用的,但下面应该至少澄清Python/C++魔术交互部分
在
ClockedObject.clk_domain
的特定情况下,参数的默认值为hte magicParent.clk_domain
,如果未给出另一个值,默认情况下,该参数将其链接到其父级(在SimObject树中)clk_domain
:从
build/ARM/params/ClockedObject.hh
自动生成的类是:相应的pybind11绑定将该对象从python链接到C++:
然后当C++(^){CD5>}对象被创建时(这也是从Python中的完整的SIMOBECT树建立之后的绑定),它接收到{{CD6>}作为SRC/SIM/CordLyDimaNin的输入。
查看fs.py,
clk_domain
实际上是一个SrcClockDomain
初始化为:但事情是类似的,有一个Python ^ {CD8>},它继承自^ {< CD10>}和相应的C++类。
在gem5 3ca404da175a66e0b958165ad75eb5f54cb5e772中观察到
相关问题 更多 >
编程相关推荐