def loop(self): dut = self.dut while True: yield RisingEdge(dut.clk) assertEquals(dut.io_nonStopWrited,truncUInt(int(dut.io_bus_w_payload_data) >> 4,dut.io_nonStopWrited),"io_nonStopWrited") if int(dut.io_bus_r_valid) & int(dut.io_bus_r_ready) == 1: if self.readAddresses.empty(): raise TestFailure("FAIL readAddresses is empty") addr = self.readAddresses.get() if addr == 9: assertEquals(dut.io_bus_r_payload_data,self.regA << 10,"io_bus_r_payload_data") if addr == 7: assertEquals(dut.io_bus_r_payload_data,self.regB << 10,"io_bus_r_payload_data") if addr == 2: self.regB = 33 if int(dut.io_bus_ar_valid) & int(dut.io_bus_ar_ready) == 1: addr = int(dut.io_bus_ar_payload_addr) self.readAddresses.put(addr) if (int(dut.io_bus_aw_valid) & int(dut.io_bus_aw_ready) & int(dut.io_bus_w_valid) & int(dut.io_bus_w_ready)) == 1: addr = int(dut.io_bus_aw_payload_addr) if addr == 9: self.regA = truncUInt(int(dut.io_bus_w_payload_data) >> 10,20) if addr == 7: self.regB = truncUInt(int(dut.io_bus_w_payload_data) >> 10,20) if addr == 15: self.regA = 11
def __init__(self, dut): self.io_outSFix_0 = truncUInt( sint(dut.io_inSFix_0) + ((sint(dut.io_inSFix_1) << 2)), dut.io_outSFix_0) self.io_outSFix_1 = truncUInt( (sint(dut.io_inSFix_0) * sint(dut.io_inSFix_1)) >> 5, dut.io_outSFix_1) self.io_outBundleA_a_sfix = truncUInt( sint(dut.io_inBundleA_a_sfix) >> 2, dut.io_outBundleA_a_sfix)
def test1(dut): dut.log.info("Cocotb test boot") cocotb.fork(ClockDomainAsyncReset(dut.clk, dut.reset)) outA_ref = 0 outB_ref = 0 for i in range(0,1000): randSignal(dut.io_inA) randSignal(dut.io_inB) yield RisingEdge(dut.clk) assertEquals(outA_ref,dut.io_outA,"io_outA") assertEquals(outB_ref, dut.io_outB, "io_outB") outA_ref = truncUInt(outA_ref + int(dut.io_inA), dut.io_outA) outB_ref = truncUInt(outB_ref + int(dut.io_inB), dut.io_outB) dut.log.info("Cocotb test done")
def loop(self): dut = self.dut while True: yield RisingEdge(dut.clk) assertEquals( dut.io_nonStopWrited, truncUInt( int(dut.io_bus_w_payload_data) >> 4, dut.io_nonStopWrited), "io_nonStopWrited") # when read to addr=2 and write to addr=7 happen at the same cycle # the former takes precedence regBassigned = False if int(dut.io_bus_r_valid) & int(dut.io_bus_r_ready) == 1: if self.readAddresses.empty(): raise TestFailure("FAIL readAddresses is empty") addr = self.readAddresses.get() if addr == 9: assertEquals(dut.io_bus_r_payload_data, self.regA << 10, "io_bus_r_payload_data") if addr == 7: assertEquals(dut.io_bus_r_payload_data, self.regB << 10, "io_bus_r_payload_data") if addr == 2: self.regB = 33 regBassigned = True if int(dut.io_bus_ar_valid) & int(dut.io_bus_ar_ready) == 1: addr = int(dut.io_bus_ar_payload_addr) self.readAddresses.put(addr) if (int(dut.io_bus_aw_valid) & int(dut.io_bus_aw_ready) & int(dut.io_bus_w_valid) & int(dut.io_bus_w_ready)) == 1: addr = int(dut.io_bus_aw_payload_addr) if addr == 9: self.regA = truncUInt( int(dut.io_bus_w_payload_data) >> 10, 20) if addr == 7 and not regBassigned: self.regB = truncUInt( int(dut.io_bus_w_payload_data) >> 10, 20) if addr == 15: self.regA = 11
def test1(dut): dut.log.info("Cocotb test boot") from cocotblib.misc import cocotbXHack cocotbXHack() #random.seed(0) cocotb.fork(ClockDomainAsyncReset(dut.clk, dut.reset)) while True: yield RisingEdge(dut.clk) if int(dut.io_internalClkCounter) == 2: break counter = 3 for i in range(0,1000): yield RisingEdge(dut.clk) yield RisingEdge(dut.clk) assertEquals(counter, dut.io_internalClkCounter, "io_internalClkCounter") counter = truncUInt(counter + 1, dut.io_internalClkCounter) dut.log.info("Cocotb test done")
def __init__(self, dut): self.io_complexLiteral = 5986 self.io_outAA_bod_gggg = truncUInt( int(dut.io_inAABits) >> 0, dut.io_outAA_bod_gggg) self.io_outAA_bod_aosi = truncUInt( int(dut.io_inAABits) >> 1, dut.io_outAA_bod_aosi) self.io_outAA_ahe = truncUInt( int(dut.io_inAABits) >> 4, dut.io_outAA_ahe) self.io_outAA_zwg = truncUInt( int(dut.io_inAABits) >> 5, dut.io_outAA_zwg) self.io_outAA_vsw = truncUInt( int(dut.io_inAABits) >> 6, dut.io_outAA_vsw) self.io_outAA_lwee = truncUInt( int(dut.io_inAABits) >> 7, dut.io_outAA_lwee) self.io_outAABits = (int(dut.io_inAA_bod_gggg) << 0) + \ (int(dut.io_inAA_bod_aosi) << 1) + \ (int(dut.io_inAA_ahe) << 4) + \ (int(dut.io_inAA_zwg) << 5) + \ (int(dut.io_inAA_vsw) << 6) + \ (int(dut.io_inAA_lwee) << 7) self.io_outUIntAdder = (int(dut.io_inUIntA) + int(dut.io_inUIntB)) & 0xFF self.io_assign_bitDemux = 0 self.io_assign_bitDemux = setBit(self.io_assign_bitDemux, int(dut.io_assign_sel_0), int(dut.io_conds_0)) if int(dut.io_conds_1) == 1: self.io_assign_bitDemux = setBit(self.io_assign_bitDemux, int(dut.io_assign_sel_1), int(dut.io_conds_2)) elif int(dut.io_conds_3) == 1: self.io_assign_bitDemux = setBit(self.io_assign_bitDemux, int(dut.io_assign_sel_0), int(dut.io_conds_4)) if int(dut.io_conds_5) == 1: self.io_assign_bitDemux = setBit(self.io_assign_bitDemux, int(dut.io_assign_sel_1), int(dut.io_conds_6)) self.io_assign_bitDemux = setBit(self.io_assign_bitDemux, 5, 1)
def clockProcess(self): while True: yield RisingEdge(self.dut.clk) if int(self.dut.enable) == 1: yield Timer(1) self.value = truncUInt(self.value + 1, self.dut.gray)
def check(signal,bitCount,value): if len(signal) != bitCount or int(signal) != truncUInt(value, bitCount): raise TestFailure("FAIL %s %d != %d" % (signal._path, int(signal), truncUInt(value, bitCount)))