Cocotb协程从未调用过

Cocotb coroutine never called

我刚开始使用 cocotb,我遇到了一个问题 应该使用协程的一小段代码。

import cocotb
from cocotb.triggers import Timer

@cocotb.coroutine
def test(dut):
    dut.a <= 1
    dut.b <= 2
    cocotb.log.info('test')
    yield Timer(1, unit='ns')

@cocotb.test()
def add_corner(dut):
    dut.uop <= 0b0
    dut.src <= 0b01
    test(dut)
    yield Timer(1, units='ns')
    dut._log.info('done')

模拟已创建并运行,但 永远不会调用协程。日志消息都不是 也不执行分配。

我使用 python 3.8 并测试了一些示例 包含在回购协议中。 axi_slave 测试有效 很好,所以我假设我的设置工作正常。

有没有人猜到是什么原因造成的 问题?

你需要yield你的协程,而不是直接调用它。

请注意,如果您使用新的 await 语法,如果您犯了这个错误,您将收到警告:

import cocotb
from cocotb.triggers import Timer

# note: no coroutine decorator needed (or wanted)
async def test(dut):
    dut.a <= 1
    dut.b <= 2
    cocotb.log.info('test')
    await Timer(1, unit='ns')

@cocotb.test()
async def add_corner(dut):
    dut.uop <= 0b0
    dut.src <= 0b01
    test(dut)  # whoops - missing await
    await Timer(1, units='ns')
    dut._log.info('done')

给予

RuntimeWarning: coroutine 'test' was never awaited