如何使用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)
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)