在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
答案 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)