如何使用cocotb打印日志消息

时间:2017-05-12 07:22:57

标签: cocotb

在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上记录信息的好方法是什么?

THX

1 个答案:

答案 0 :(得分:1)

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

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

实际上,我自己也看到了这一点,并使用粗略的方法通过使用traceback模块并修改__getattr____setattr__函数来确定调用的来源。 SimHandleBase中的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)