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
我刚开始使用 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