1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
package gfx_isa;
typedef logic[3:0] sgpr_num;
typedef logic[2:0] vgpr_num;
typedef logic signed[7:0] pc_offset;
typedef struct packed
{
sgpr_num sgpr;
} xgpr_sgpr;
typedef struct packed
{
logic[$bits(sgpr_num) - $bits(vgpr_num) - 1:0] reserved;
vgpr_num vgpr;
} xgpr_vgpr;
typedef xgpr_vgpr xgpr_num;
typedef enum logic[1:0]
{
REGS_SVS = 2'b00,
REGS_SSS = 2'b01,
REGS_VVS = 2'b10,
REGS_VVV = 2'b11
} xgpr_mode;
typedef struct packed
{
logic[12:0] imm;
} dst_src_rr_b_imm;
typedef struct packed
{
logic from_consts;
logic[7:0] reserved;
xgpr_num r;
} dst_src_rr_b_read;
typedef struct packed
{
logic b_is_imm;
dst_src_rr_b_read b;
xgpr_num ra,
rd;
} dst_src_rr;
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;
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
|