首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocotb coroutine从未打过电话

Cocotb coroutine从未打过电话
EN

Stack Overflow用户
提问于 2020-01-16 00:05:50
回答 2查看 120关注 0票数 2

我刚开始使用cocotb,我有一个问题,因为有一小段代码应该使用协程。

代码语言:javascript
复制
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测试运行良好,因此我假设我的设置正常工作。

有没有人能猜出是什么导致了这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-16 00:54:07

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

票数 2
EN

Stack Overflow用户

发布于 2020-01-28 04:24:48

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

代码语言:javascript
复制
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')

给出

代码语言:javascript
复制
RuntimeWarning: coroutine 'test' was never awaited
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59755288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档