summaryrefslogtreecommitdiff
path: root/tb/top/test_fb.py
blob: 458f2a7a138396d4d13838884d0a614eac0f6a2c (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
import struct

import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Combine, ClockCycles, RisingEdge, Timer, with_timeout
from cocotb_bus.drivers.avalon import AvalonMaster

@cocotb.test()
async def fp_mat_mul(dut):
    await cocotb.start(Clock(dut.clk, 2).start())

    dut.rst_n.value = 1
    await Timer(1)
    dut.rst_n.value = 0
    await Timer(1)
    dut.rst_n.value = 1
    dut.scan_ready.value = 1

    master = AvalonMaster(dut, 'cmd', dut.clk, case_insensitive=False)

    for i in range(32):
        await master.write(i, int.from_bytes(struct.pack('<e', i + 1), 'little'))

    await ClockCycles(dut.clk, 50)
    for i in range(4):
        for j in range(4):
            read, = struct.unpack('<e', (await master.read(i * 4 + j)).integer.to_bytes(2, 'little'))
            expected = sum((1 + i * 4 + k) * (17 + k * 4 + j) for k in range(4))
            assert read == expected, f'expected {expected} at ({i}, {j}), got {read}'