summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-10-28 00:16:09 -0600
committerAlejandro Soto <alejandro@34project.org>2023-10-28 00:16:18 -0600
commit670aebacd24b5ba79fd842ac6b8043aea9a04e2f (patch)
tree37c48834ce75b12dbee37d9cd83c59516954cec3
parente82b47179b6054dfb4b6442e4f73c206de26ccc0 (diff)
tb: add block test: test_fb
Diffstat (limited to '')
-rw-r--r--rtl/top/test_fb.sv26
-rw-r--r--tb/top/test_fb.py28
2 files changed, 54 insertions, 0 deletions
diff --git a/rtl/top/test_fb.sv b/rtl/top/test_fb.sv
new file mode 100644
index 0000000..d305d68
--- /dev/null
+++ b/rtl/top/test_fb.sv
@@ -0,0 +1,26 @@
+module test_fb
+(
+ input logic clk,
+ rst_n,
+
+ input logic[5:0] cmd_address,
+ input logic cmd_read,
+ cmd_write,
+ input logic[31:0] cmd_writedata,
+ output logic[31:0] cmd_readdata,
+
+ input logic mem_waitrequest,
+ mem_readdatavalid,
+ input logic[15:0] mem_readdata,
+ output logic[25:0] mem_address,
+ output logic mem_read,
+ mem_write,
+ output logic[15:0] mem_writedata
+);
+
+ gfx dut
+ (
+ .*
+ );
+
+endmodule
diff --git a/tb/top/test_fb.py b/tb/top/test_fb.py
new file mode 100644
index 0000000..c7bbddf
--- /dev/null
+++ b/tb/top/test_fb.py
@@ -0,0 +1,28 @@
+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
+
+ 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}'