如何使用cocotb打印日志消息

How to print log message with cocotb

cocotb官方quick start guide中打印日志信息的方法是在dut对象上使用_log.info() :

import cocotb
from cocotb.triggers import Timer

@cocotb.test()
def my_first_test(dut):
    """
    Try accessing the design
    """
    dut._log.info("Running test!")
    for cycle in range(10):
        dut.clk = 0
        yield Timer(1000)
        dut.clk = 1
        yield Timer(1000)
    dut._log.info("Running test!")

如果我用 Cocotb 的最后一个主版本这样做,我会收到一个已弃用的警告:

/opt/cocotb/cocotb/handle.py:134: UserWarning: Use of log attribute is deprecated

那么在最新版本的cocotb上记录信息的好方法是什么?

感谢

从最新版本看来,_log 是用于获取记录器的适当属性。

我认为这不是您自己粘贴的实际代码示例的问题,但可能是在使用已弃用的 log 属性的 cocotb 中的其他地方。

实际上,我自己看到了这一点,并使用一种粗略的方法通过使用 traceback 模块并修改 __getattr____setattr__ 函数来查明调用的来源在 SimHandleBase class 在 cocotb/handle.py 像这样:

import traceback
class SimHandleBase(object):

...

    def __setattr__(self, name, value):
        if name in self._compat_mapping:
            if name not in _deprecation_warned:
                warnings.warn("Use of %s attribute is deprecated" % name)
                for line in traceback.format_stack():     # Inserted to print stack trace
                    print(line.strip())                   # Inserted to print stack trace
                _deprecation_warned[name] = True
            return setattr(self, self._compat_mapping[name], value)
        else:
            return object.__setattr__(self, name, value)

    def __getattr__(self, name):
        if name in self._compat_mapping:
            if name not in _deprecation_warned:
                warnings.warn("Use of %s attribute is deprecated" % name)
                for line in traceback.format_stack():     # Inserted to print stack trace
                    print(line.strip())                   # Inserted to print stack trace
                _deprecation_warned[name] = True
            return getattr(self, self._compat_mapping[name])
        else:
            return object.__getattr__(self, name)