我刚开始使用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')模拟被创建并运行,但协程从未被调用。既不执行日志消息也不执行分配。
我使用的是python3.8,并测试了repo中包含的一些示例。axi_slave测试运行良好,因此我假设我的设置正常工作。
有没有人能猜出是什么导致了这个问题?
发布于 2020-01-16 00:54:07
你需要yield你的协程,而不是直接调用它。
发布于 2020-01-28 04:24:48
请注意,如果您使用新的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 awaitedhttps://stackoverflow.com/questions/59755288
复制相似问题