summaryrefslogtreecommitdiff
path: root/platform/wavelet3d/gfx_top.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-02 21:03:05 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-02 21:03:17 -0600
commit405c0287c80c34b0e9dfb9d9326b86d12433b4c4 (patch)
treeef38368c911bae30ff9c528dcf4a8fbfbc227fa7 /platform/wavelet3d/gfx_top.sv
parent50b71c7f0ea2574eb4802e1a12fe8b0920a4ca7f (diff)
platform/wavelet3d: implement shader cores
This commit contains over a month of intermittent work (I don't have enough free time to do this the right way)
Diffstat (limited to 'platform/wavelet3d/gfx_top.sv')
-rw-r--r--platform/wavelet3d/gfx_top.sv126
1 files changed, 87 insertions, 39 deletions
diff --git a/platform/wavelet3d/gfx_top.sv b/platform/wavelet3d/gfx_top.sv
index 1a57b90..b6538d7 100644
--- a/platform/wavelet3d/gfx_top.sv
+++ b/platform/wavelet3d/gfx_top.sv
@@ -1,47 +1,56 @@
module gfx_top
+import gfx::*;
(
- input logic clk,
- rst_n,
-
- input gfx::word a[gfx::SHADER_LANES],
- b[gfx::SHADER_LANES],
- input logic in_valid,
- setup_mul_float,
- setup_unit_b,
- mnorm_put_hi,
- mnorm_put_lo,
- mnorm_put_mul,
- mnorm_zero_b,
- mnorm_zero_flags,
- minmax_abs,
- minmax_swap,
- minmax_zero_min,
- minmax_copy_flags,
- shiftr_int_signed,
- addsub_copy_flags,
- addsub_int_operand,
- clz_force_nop,
- shiftl_copy_flags,
- round_copy_flags,
- round_enable,
- encode_enable,
-
- output logic out_valid,
- output gfx::word q[gfx::SHADER_LANES],
-
- input gfx::word geom_tdata,
- input logic geom_tlast,
- geom_tvalid,
- output logic geom_tready,
-
- input logic raster_tready,
- output logic raster_tlast,
- raster_tvalid,
- output gfx::word raster_tdata
+ input logic clk,
+ rst_n,
+
+ input word a[SHADER_LANES],
+ b[SHADER_LANES],
+ input logic in_valid,
+ setup_mul_float,
+ setup_unit_b,
+ mnorm_put_hi,
+ mnorm_put_lo,
+ mnorm_put_mul,
+ mnorm_zero_b,
+ mnorm_zero_flags,
+ minmax_abs,
+ minmax_swap,
+ minmax_zero_min,
+ minmax_copy_flags,
+ shiftr_int_signed,
+ addsub_copy_flags,
+ addsub_int_operand,
+ clz_force_nop,
+ shiftl_copy_flags,
+ round_copy_flags,
+ round_enable,
+ encode_enable,
+
+ output logic out_valid,
+ output word q[SHADER_LANES],
+
+ input word geom_tdata,
+ input logic geom_tlast,
+ geom_tvalid,
+ output logic geom_tready,
+
+ input logic raster_tready,
+ output logic raster_tlast,
+ raster_tvalid,
+ output word raster_tdata
);
+ gfx_wb fpint_wb();
+ gfx_axib insn_mem();
gfx_axil sched_axi();
gfx_pkts geometry(), coverage();
+ gfx_regfile_io fpint_io();
+
+ axi4lite_intf #(.ADDR_WIDTH(4)) core_sched();
+
+ assign q = fpint_wb.rx.lanes;
+ assign out_valid = fpint_wb.rx.valid;
assign geometry.tx.tdata = geom_tdata;
assign geometry.tx.tlast = geom_tlast;
@@ -53,9 +62,40 @@ module gfx_top
assign raster_tvalid = coverage.rx.tvalid;
assign coverage.rx.tready = raster_tready;
+ fpint_op op;
+ assign op.writeback = 1;
+ assign op.setup_mul_float = setup_mul_float;
+ assign op.setup_unit_b = setup_unit_b;
+ assign op.mnorm_put_hi = mnorm_put_hi;
+ assign op.mnorm_put_lo = mnorm_put_lo;
+ assign op.mnorm_put_mul = mnorm_put_mul;
+ assign op.mnorm_zero_b = mnorm_zero_b;
+ assign op.mnorm_zero_flags = mnorm_zero_flags;
+ assign op.minmax_abs = minmax_abs;
+ assign op.minmax_swap = minmax_swap;
+ assign op.minmax_zero_min = minmax_zero_min;
+ assign op.minmax_copy_flags = minmax_copy_flags;
+ assign op.shiftr_int_signed = shiftr_int_signed;
+ assign op.addsub_copy_flags = addsub_copy_flags;
+ assign op.addsub_int_operand = addsub_int_operand;
+ assign op.clz_force_nop = clz_force_nop;
+ assign op.shiftl_copy_flags = shiftl_copy_flags;
+ assign op.round_copy_flags = round_copy_flags;
+ assign op.round_enable = round_enable;
+ assign op.encode_enable = encode_enable;
+
+ assign fpint_io.regs.a = a;
+ assign fpint_io.regs.b = b;
+
gfx_fpint fpint
(
- .*
+ .clk,
+ .rst_n,
+ .op,
+ .wb(fpint_wb.tx),
+ .abort(0),
+ .in_valid,
+ .read_data(fpint_io.ab)
);
gfx_sched sched
@@ -74,4 +114,12 @@ module gfx_top
.coverage(coverage.tx)
);
+ gfx_shader shader
+ (
+ .clk,
+ .rst_n,
+ .sched(core_sched.slave),
+ .insn_mem(insn_mem.m)
+ );
+
endmodule