summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_isa.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-05 17:38:55 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-05 18:12:08 -0600
commitca02833f22b08ceeeff501107371aa6667426115 (patch)
treef864c5fc238a292082d2096ce546270badce9f1d /rtl/gfx/gfx_isa.sv
parent081a8a3ba8bfe036f31da53f9c041a2caa30fce2 (diff)
rtl/gfx: rename platform/wavelet3d -> rtl/gfx
Diffstat (limited to 'rtl/gfx/gfx_isa.sv')
-rw-r--r--rtl/gfx/gfx_isa.sv84
1 files changed, 84 insertions, 0 deletions
diff --git a/rtl/gfx/gfx_isa.sv b/rtl/gfx/gfx_isa.sv
new file mode 100644
index 0000000..7239478
--- /dev/null
+++ b/rtl/gfx/gfx_isa.sv
@@ -0,0 +1,84 @@
+package gfx_isa;
+
+ typedef logic[3:0] sgpr_num;
+ typedef logic[2:0] vgpr_num;
+
+ typedef logic signed[7:0] pc_offset;
+
+ typedef union packed
+ {
+ sgpr_num sgpr;
+
+ struct packed
+ {
+ logic[$bits(sgpr_num) - $bits(vgpr_num) - 1:0] reserved;
+ vgpr_num num;
+ } vgpr;
+ } xgpr_num;
+
+ typedef struct packed
+ {
+ enum logic[1:0]
+ {
+ REGS_SVS = 2'b00,
+ REGS_SSS = 2'b01,
+ REGS_VVS = 2'b10,
+ REGS_VVV = 2'b11
+ } reg_mode;
+
+ union packed
+ {
+ struct packed
+ {
+ logic b_is_imm;
+
+ union packed
+ {
+ logic[12:0] imm;
+
+ struct packed
+ {
+ logic from_consts;
+ logic[7:0] reserved;
+ xgpr_num r;
+ } read;
+ } b;
+
+ xgpr_num ra,
+ rd;
+ } rr;
+ } dst_src;
+
+ logic reg_rev;
+
+ union packed
+ {
+ struct packed
+ {
+ enum logic[4:0]
+ {
+ INSN_FPINT_MOV = 0,
+ INSN_FPINT_FMUL = 1,
+ INSN_FPINT_IMUL = 2,
+ INSN_FPINT_FADD = 3,
+ INSN_FPINT_RES4 = 4,
+ INSN_FPINT_FMAX = 5,
+ INSN_FPINT_RES6 = 6,
+ INSN_FPINT_FMIN = 7,
+ INSN_FPINT_RES8 = 8,
+ INSN_FPINT_FCVT = 9,
+ INSN_FPINT_RES[10:31]
+ } op;
+ } fpint;
+ } by_class;
+
+ enum logic[1:0]
+ {
+ INSN_FPINT = 0,
+ INSN_MEM = 1,
+ INSN_SFU = 2,
+ INSN_GROUP = 3
+ } insn_class;
+ } insn_word;
+
+endpackage