summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_isa.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-16 01:08:04 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-24 05:58:19 -0600
commitb21c321a059e11edeece1c90d97776bb0716d7a0 (patch)
treecb7c3e6c2a5f6fd153c3b01d61040a2c901e0ba8 /rtl/gfx/gfx_isa.sv
parenta6c23ba92d0c2cad9862de1cb11c19b4e06fc0e6 (diff)
rtl: fix quartus errors: parser, synthesis, fitter
Diffstat (limited to 'rtl/gfx/gfx_isa.sv')
-rw-r--r--rtl/gfx/gfx_isa.sv132
1 files changed, 69 insertions, 63 deletions
diff --git a/rtl/gfx/gfx_isa.sv b/rtl/gfx/gfx_isa.sv
index 7239478..cc34156 100644
--- a/rtl/gfx/gfx_isa.sv
+++ b/rtl/gfx/gfx_isa.sv
@@ -5,80 +5,86 @@ package gfx_isa;
typedef logic signed[7:0] pc_offset;
- typedef union packed
+ typedef struct packed
{
sgpr_num sgpr;
-
- struct packed
- {
- logic[$bits(sgpr_num) - $bits(vgpr_num) - 1:0] reserved;
- vgpr_num num;
- } vgpr;
- } xgpr_num;
+ } xgpr_sgpr;
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;
+ logic[$bits(sgpr_num) - $bits(vgpr_num) - 1:0] reserved;
+ vgpr_num vgpr;
+ } xgpr_vgpr;
- union packed
- {
- struct packed
- {
- logic b_is_imm;
+ typedef xgpr_vgpr xgpr_num;
- union packed
- {
- logic[12:0] imm;
+ typedef enum logic[1:0]
+ {
+ REGS_SVS = 2'b00,
+ REGS_SSS = 2'b01,
+ REGS_VVS = 2'b10,
+ REGS_VVV = 2'b11
+ } xgpr_mode;
- struct packed
- {
- logic from_consts;
- logic[7:0] reserved;
- xgpr_num r;
- } read;
- } b;
+ typedef struct packed
+ {
+ logic[12:0] imm;
+ } dst_src_rr_b_imm;
- xgpr_num ra,
- rd;
- } rr;
- } dst_src;
+ typedef struct packed
+ {
+ logic from_consts;
+ logic[7:0] reserved;
+ xgpr_num r;
+ } dst_src_rr_b_read;
- logic reg_rev;
+ typedef struct packed
+ {
+ logic b_is_imm;
+ dst_src_rr_b_read b;
+ xgpr_num ra,
+ rd;
+ } dst_src_rr;
- 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;
+ typedef enum logic[1:0]
+ {
+ INSN_FPINT = 2'd0,
+ INSN_MEM = 2'd1,
+ INSN_SFU = 2'd2,
+ INSN_GROUP = 2'd3
+ } insn_class;
+
+ typedef enum logic[4:0]
+ {
+ INSN_FPINT_MOV = 5'd0,
+ INSN_FPINT_FMUL = 5'd1,
+ INSN_FPINT_IMUL = 5'd2,
+ INSN_FPINT_FADD = 5'd3,
+ INSN_FPINT_RES4 = 5'd4,
+ INSN_FPINT_FMAX = 5'd5,
+ INSN_FPINT_RES6 = 5'd6,
+ INSN_FPINT_FMIN = 5'd7,
+ INSN_FPINT_RES8 = 5'd8,
+ INSN_FPINT_FCVT = 5'd9,
+ INSN_FPINT_RES[10:31]
+ } insn_fpint_op;
+
+ typedef struct packed
+ {
+ xgpr_mode reg_mode;
+ dst_src_rr dst_src;
+ logic reg_rev;
+ insn_fpint_op op;
+ insn_class op_class;
+ } insn_fpint;
- enum logic[1:0]
- {
- INSN_FPINT = 0,
- INSN_MEM = 1,
- INSN_SFU = 2,
- INSN_GROUP = 3
- } insn_class;
- } insn_word;
+ typedef struct packed
+ {
+ xgpr_mode reg_mode;
+ dst_src_rr dst_src;
+ logic reg_rev;
+ logic[4:0] op_data;
+ insn_class op_class;
+ } insn_any;
endpackage