summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_regfile_io.sv
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/gfx/gfx_regfile_io.sv')
-rw-r--r--rtl/gfx/gfx_regfile_io.sv106
1 files changed, 106 insertions, 0 deletions
diff --git a/rtl/gfx/gfx_regfile_io.sv b/rtl/gfx/gfx_regfile_io.sv
new file mode 100644
index 0000000..2459049
--- /dev/null
+++ b/rtl/gfx/gfx_regfile_io.sv
@@ -0,0 +1,106 @@
+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];
+ logic mask_wb_write, pc_wb_write;
+ word_ptr pc_back, pc_front, pc_wb;
+ group_id mask_back_group, mask_wb_group, pc_back_group, pc_front_group, pc_wb_group;
+ lane_mask mask_back, mask_wb;
+
+ modport ab
+ (
+ input a,
+ b
+ );
+
+ modport read
+ (
+ output op
+ );
+
+ modport bind_
+ (
+ input pc_front,
+
+ output pc_front_group
+ );
+
+ modport wb
+ (
+ input pc_back,
+ mask_back,
+
+ output sgpr_write,
+ vgpr_write,
+
+ pc_back_group,
+ mask_back_group,
+
+ pc_wb,
+ pc_wb_group,
+ pc_wb_write,
+
+ mask_wb,
+ mask_wb_group,
+ mask_wb_write
+ );
+
+ modport regs
+ (
+ input op,
+ sgpr_write,
+ vgpr_write,
+
+ pc_back_group,
+ pc_front_group,
+ mask_back_group,
+
+ pc_wb,
+ pc_wb_group,
+ pc_wb_write,
+
+ mask_wb,
+ mask_wb_group,
+ mask_wb_write,
+
+ output a,
+ b,
+
+ pc_back,
+ pc_front,
+ mask_back
+ );
+
+endinterface