import random
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Timer, RisingEdge, ReadOnly,NextTimeStep
from cocotb.result import TestFailure, ReturnValue
from cocotb_bus.driver import BusDriver
def callback(actual_value):
assert actual_value == expected_value
@cocotb.test()
async def scam_test(dut):
global expected_value
for i in range(4):
self.in_data = int(random.getrandbits(4))
self.seed_data = int(random.getrandbits(4))
self.xx_r = int(random.getrandbits(4))
for j in range(5):
self.ff = int(random.getrandbits(5))
expected_value = xx_r ^ ff[4]
for k in range(4):
dut.in_data.value = in_data[i]
dut.seed_data.value = seed_data[i]
dut.xx_r.value = xx_r[i]
dut.ff.value = ff[i]
await Timer(1, 'ns')
assert dut.out_data == expected_value[i], f"Error in interation [i]"
dut.rst.value = 1
await Timer(1,'ns')
dut.rst.value = 0
await Timer(1, 'ns')
await RisingEdge(dut.clk)
dut.rst.value = 1
adrv = InputDriver(dut, 'in_data', dut.clk)
bdrv = InputDriver(dut, 'seed_data', dut.clk)
OutputDriver(dut, 'out_data', dut.clk,cb_fn)
class InputDriver(BusDriver):
_signals =['rdy', 'en', 'data']
def __init__(self,dut,name,clk):
BusDriver.__init__(self, dut, name, clk)
self.bus.en.value = 0
self.clk = clk
async def _driver_send(self,value,sync=True):
if self.bus.rdy.value !=1:
await RisingEdge(self.bus.rdy)
self.bus.en.value = 1
self.bus.data.value = value
await ReadOnly()
await RisingEdge(self.clk)
self.bus.en.value =0
await NextTimeStep()
class OutputDriver(BusDriver):
_signals = ['rdy', 'en', 'data']
def __init__(self,dut,name,clk):
BusDriver.__init__(self, dut, name, clk)
self.bus.en.value = 0
self.clk = clk
self.callback = sb_callback
async def _driver_send(self,value,sync=True):
if self.bus.rdy.value !=1:
await RisingEdge(self.bus.rdy)
self.bus.en.value = 1
self.bus.data.value = value
await ReadOnly()
self.callback(self.bus.data.value)
await RisingEdge(self.clk)
self.bus.en=0
await NextTimeStep()
I keep getting this error
Failed to import module scrambler_new: No module named ‘cocotb_bus.driver’