diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-10-21 03:21:18 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-10-21 03:21:18 -0600 |
| commit | d84718bf7955a6bba03aa44938f0f140c1a6390d (patch) | |
| tree | 58aca8052f775ae5697688c759ef24977db4f6a2 /rtl/gfx/gfx.sv | |
| parent | 1b5eeb9a949272232ff543f684c7be62d31d0d40 (diff) | |
rtl/gfx: implement non-synthesizable matrix multiplier
Diffstat (limited to 'rtl/gfx/gfx.sv')
| -rw-r--r-- | rtl/gfx/gfx.sv | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/rtl/gfx/gfx.sv b/rtl/gfx/gfx.sv new file mode 100644 index 0000000..ab2bcce --- /dev/null +++ b/rtl/gfx/gfx.sv @@ -0,0 +1,40 @@ +`include "gfx/gfx_defs.sv" + +module gfx +( + input logic clk, + rst_n, + + input logic[4:0] cmd_address, + input logic cmd_read, + cmd_write, + input logic[31:0] cmd_writedata, + output logic[31:0] cmd_readdata +); + + mat4 a, b, q, hold_q; + logic start, done; + + assign cmd_readdata = hold_q[cmd_address[3:2]][cmd_address[1:0]]; + + mat_mat_mul mul + ( + .* + ); + + always_ff @(posedge clk) begin + if (cmd_write) begin + if (cmd_address[4]) + a[cmd_address[3:2]][cmd_address[1:0]] <= cmd_writedata; + else + b[cmd_address[3:2]][cmd_address[1:0]] <= cmd_writedata; + end + + if (done) + hold_q <= q; + end + + always_ff @(posedge clk or negedge rst_n) + start <= !rst_n ? 0 : (cmd_write && cmd_address == 5'b11111); + +endmodule |
