summaryrefslogtreecommitdiff
path: root/platform/wavelet3d/gfx_regfile_io.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_regfile_io.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_regfile_io.sv')
-rw-r--r--platform/wavelet3d/gfx_regfile_io.sv76
1 files changed, 76 insertions, 0 deletions
diff --git a/platform/wavelet3d/gfx_regfile_io.sv b/platform/wavelet3d/gfx_regfile_io.sv
new file mode 100644
index 0000000..49dcd5c
--- /dev/null
+++ b/platform/wavelet3d/gfx_regfile_io.sv
@@ -0,0 +1,76 @@
+interface gfx_regfile_io;
+
+ import gfx::*;
+
+ struct
+ {
+ group_id group;
+ sgpr_num a_sgpr,
+ b_sgpr;
+ vgpr_num a_vgpr,
+ b_vgpr;
+ logic[12:0] b_imm;
+ logic a_scalar,
+ b_scalar,
+ b_is_imm,
+ b_is_const,
+ scalar_rev;
+ } op;
+
+ struct
+ {
+ logic write;
+ group_id group;
+ sgpr_num sgpr;
+ word data;
+ } sgpr_write;
+
+ struct
+ {
+ lane_mask mask;
+ group_id group;
+ vgpr_num vgpr;
+ word data[SHADER_LANES];
+ } vgpr_write;
+
+ word a[SHADER_LANES], b[SHADER_LANES], sgpr_write_data, vgpr_write_data[SHADER_LANES];
+ word_ptr pc_front;
+ group_id pc_front_group;
+
+ modport ab
+ (
+ input a,
+ b
+ );
+
+ modport read
+ (
+ output op
+ );
+
+ modport bind_
+ (
+ input pc_front,
+
+ output pc_front_group
+ );
+
+ modport wb
+ (
+ output sgpr_write,
+ vgpr_write
+ );
+
+ modport regs
+ (
+ input op,
+ sgpr_write,
+ vgpr_write,
+ pc_front_group,
+
+ output a,
+ b,
+ pc_front
+ );
+
+endinterface