Как распечатать сообщение журнала с помощью cocotb
В официальном руководстве по быстрому запуску cocotb метод печати сообщения журнала заключается в использовании _log.info() для объекта dut:
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?
Спасибо
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)