【问题标题】:Cocotb coroutine never calledCocotb 协程从未调用过
【发布时间】:2020-01-15 16:05:49
【问题描述】:

我刚开始使用 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 测试有效 很好,所以我假设我的设置工作正常。

有没有人猜测可能导致的 问题?

【问题讨论】:

    标签: python simulation cocotb


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      请注意,如果您使用新的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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-16
        相关资源
        最近更新 更多