diff options
Diffstat (limited to 'rtl/gfx/gfx_regfile_io.sv')
| -rw-r--r-- | rtl/gfx/gfx_regfile_io.sv | 106 |
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 |
