You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Simics Python设备中如何获取event.post所需的clock参数?

关于Simics中获取clock对象用于event.post()的问题

我在Simics文档中未找到获取clock对象以作为event.post()方法参数的相关示例,推测获取方式有两种:

  • 通过属性获取clock;
  • 在ConfObject类范围内使用SIM_object_clock()获取clock。

我通过bin\project-setup --py-device event-py创建了一个新模块,并在ConfObject类中定义了clock_set和clock_get方法,用于设置和获取后续post方法所需的clock对象。但在真空机中读取设备寄存器时,调用post()方法失败。相关代码如下:

import pyobj
# Tie code to specific API, simplifying upgrade to new major version
import simics_6_api as simics


class event_py(pyobj.ConfObject):
    """This is the long-winded documentation for this Simics class.
    It can be as long as you want."""
    _class_desc = "one-line doc for the class"
    _do_not_init = object()

    def _initialize(self):
        super()._initialize()


    def _info(self):
        return []

    def _status(self):
        return [("Registers", [("value", self.value.val)])]

    def getter(self):
        return self

# In my mind, clock_set is supposed to set the clock object. That way we can use
# it in post()
    def clock_set(self):
        self.clock = simics.SIM_object_clock(self)

    def clock_get(self):
        return self.clock(self):

    class value(pyobj.SimpleAttribute(0, 'i')):
        """The <i>value</i> register."""

    class ev1(pyobj.Event):
        def callback(self, data):
            return 'ev1 with %s' % data


    class regs(pyobj.Port):
        class io_memory(pyobj.Interface):
            def operation(self, mop, info):
                offset = (simics.SIM_get_mem_op_physical_address(mop)
                          + info.start - info.base)
                size = simics.SIM_get_mem_op_size(mop)

                if offset == 0x00 and size == 1:
                    if simics.SIM_mem_op_is_read(mop):
                        val = self._up._up.value.val
                        simics.SIM_set_mem_op_value_le(mop, val)
                        # POST HERE AS TEST self._up._up.ev1.post(clock, val, seconds = 1)
                    else:
                        val = simics.SIM_get_mem_op_value_le(mop)
                        self._up._up.value.val = val
                    return simics.Sim_PE_No_Exception
                else:
                    return simics.Sim_PE_IO_Error

内容的提问来源于stack exchange,提问作者justin echols

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:05:43