summaryrefslogtreecommitdiff
path: root/cocotb_try/test_cic.py
blob: 19a17f948d22c5e9ede65f5748bb0b862b630ea0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

# https://docs.cocotb.org/en/stable/quickstart.html
# test_my_design.py (extended)

import cocotb
from cocotb.triggers import FallingEdge, RisingEdge, Timer, with_timeout
from cocotb.clock import Clock


async def generate_clock(dut):
    """Generate clock pulses."""

    for cycle in range(10):
        dut.clk.value = 0
        await Timer(1, units="ns")
        dut.clk.value = 1
        await Timer(1, units="ns")

async def drive_waveform(dut, waveform):
    for a_val in waveform:
        dut.pdm_in.value = a_val
        await RisingEdge(dut.clk)


@cocotb.test()
async def my_second_test(dut):
    """Try running with PDM input"""

    #dut.rst.value = 1
    #await RisingEdge(dut.clk)
    #dut.rst.value = 0

    pcm_samples = 10
    decimation = 64
    pdm_data = [0, 0, 1] * (pcm_samples*decimation)

    cocotb.start_soon(Clock(dut.clk, 10, units="ns").start())
    cocotb.start_soon(drive_waveform(dut, pdm_data))

    # wait for the PCM output
    for _ in range(pcm_samples):
        await with_timeout(RisingEdge(dut.pcm_valid), 100000, 'ns')
        dut._log.info("PCM is %s", dut.pcm_out.value)

    #dut._log.info("pdm_out is %s", dut.pdm_out.value)
    #assert dut.pdm_out.value == 1

    dut._log.info("my_signal_1 is %s", dut.pcm_out.value)
    assert dut.pcm_out.value == 1212