summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_defs.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-11-21 00:17:55 -0600
committerAlejandro Soto <alejandro@34project.org>2023-11-21 00:17:55 -0600
commitde9a1bf57f6a6c70aef36da4eea024b44fe87470 (patch)
tree856ddb1a6f5dd30b43e2b933b309e4176bff2865 /rtl/gfx/gfx_defs.sv
parentfc99889c3ae4d5c780e878f2e881fdbe40c041fb (diff)
rtl/gfx: implement SP decode
Diffstat (limited to 'rtl/gfx/gfx_defs.sv')
-rw-r--r--rtl/gfx/gfx_defs.sv32
1 files changed, 32 insertions, 0 deletions
diff --git a/rtl/gfx/gfx_defs.sv b/rtl/gfx/gfx_defs.sv
index 01fe2e3..b65d74e 100644
--- a/rtl/gfx/gfx_defs.sv
+++ b/rtl/gfx/gfx_defs.sv
@@ -179,6 +179,7 @@ typedef logic[`GFX_MEM_WORD_ADDR_BITS - 1:0] vram_addr;
`define GFX_LANE_BITS $bits(mat4)
`define GFX_LANE_ADDR_BITS (`GFX_MEM_WORD_ADDR_BITS - $clog2(`GFX_LANE_BITS / `GFX_MEM_DATA_BITS))
`define GFX_LANE_SUBWORD_BITS (`GFX_MEM_ADDR_BITS - `GFX_LANE_ADDR_BITS)
+`define GFX_INSN_BITS_IN_LANE (`GFX_LANE_SUBWORD_BITS - `GFX_INSN_SUBWORD_BITS)
typedef logic[`GFX_INSN_BITS - 1:0] insn_word;
typedef logic[`GFX_LANE_BITS - 1:0] lane_word;
@@ -217,4 +218,35 @@ typedef logic[`FLOATS_PER_VEC - 1:0] vec_mask;
typedef logic[`FLOATS_PER_VEC - 1:0][$clog2(`FLOATS_PER_VEC) - 1:0] swizzle_lanes;
+typedef logic[2:0] vreg_num;
+
+typedef struct packed
+{
+ logic stream,
+ combiner,
+ shuffler;
+} ex_units;
+
+typedef struct packed
+{
+ logic is_imm,
+ is_swizzle;
+ fp imm;
+ vec_mask select_mask;
+ swizzle_lanes swizzle_op;
+} shuffler_deco;
+
+typedef struct packed
+{
+ logic writeback,
+ read_src_a,
+ read_src_b,
+ clear_lanes;
+ vreg_num dst,
+ src_a,
+ src_b;
+ ex_units ex;
+ shuffler_deco shuffler;
+} insn_deco; // "insn_decode" ya existe en core, esto es confuso pero lo hice por tiempo
+
`endif