summaryrefslogtreecommitdiff
path: root/tb/gfx_shader_bind/testbench/monitors.py
blob: 6ecea0fe88115beaa2d87ec2f44fb9b24b9ef4d0 (plain)
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
import cocotb
from cocotb.triggers import ReadOnly, RisingEdge

from cocotb_bus.monitors import BusMonitor

from .data import FrontWave

class FrontWaveMonitor(BusMonitor):
    _signals = ['insn', 'group', 'retry', 'valid']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    async def _monitor_recv(self):
        pkt_receiving = False
        received_data = []

        while True:
            await RisingEdge(self.clock)
            await ReadOnly()

            if not self.bus.valid.value:
                continue

            wave = FrontWave(
                group=self.bus.group.value.integer,
                insn=(self.bus.insn.value.integer if not self.bus.retry.value else None),
            )

            self._recv(wave)