Как распечатать сообщение журнала с помощью 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)
Другие вопросы по тегам