2

在 cocotb 官方快速入门指南中,打印日志消息的方法是在 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 信息的好方法是什么?

谢谢

4

1 回答 1

1

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

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

实际上,我自己也看到了这一点,并使用了一种粗略的方法来确定调用的来源,方法是使用traceback模块并修改类中的__getattr__and__setattr__函数,如下所示:SimHandleBasecocotb/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)
于 2017-05-19T04:08:52.697 回答