[Cocotb] Sharing tests between simulation & lab

Jean-Marc Tremblay Jean-Marc.Tremblay at mdacorporation.com
Fri Aug 25 22:44:50 CEST 2017

Hi all,

I'm trying to find a way to have deterministic tests in simulation using a mechanism similar than cocotb.external() function, but blocking. Let me explain why I'm trying to do this.

In order to reuse our tests between the lab and simulation, we created a common high-level Python infrastructure that calls low-level functions (think read/write registers, etc.) based on the environment in use (lab/sim).

The tests are calling the high-level infra functions, which internally calls the Python-cocotb low-level functions decorated with @cocotb.function. I'm in the process of preparing a better example, but here is how this is done in pseudo-code.

I've tried to create my own external function without the use of the threading.Thread, but ran into a situation where the class function.__call__ would hang on self._event.wait().

Is there a cleaner/ better way to do this?

Thank you in advance,

Python program (test_prg.py - barely change)
import cocotb
global glog, gdut

def execTestFile(filename):

def test(dut):
    global glog, gdut
    gdut = dut
    glog = dut._log
    # setup env - not shown here
    filename = os.path.join(os.getcwd() + "/../test_file.py")
    yield cocotb.external(execTestFile)(filename)

Python test (filename = test_file.py - many flavors + we don't want yield nor cocotb references in them)
from test_prg import glog
from infra import sleep

for i in range(0,100):
    glog.info("oups, we are consuming time!: %d" % i)


Python infra (infra.py - high-level infrastructure)
import cocotb
from test_prg import glog, gdut

def sleep(num_clk):
    for i in range(0, num_clk):
        yield cocotb.trigger.RisingEdge(dut.clk)
        glog.info("oups, we are consuming time as expected: %d" % i)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.librecores.org/pipermail/cocotb/attachments/20170825/ab01cc37/attachment.html>

More information about the cocotb mailing list