fix: pass remaining riscv isa tests

This commit is contained in:
abnerhexu
2026-06-27 07:07:07 +00:00
parent a2e0126199
commit a32db39c80
38 changed files with 81187 additions and 19321 deletions

View File

@@ -16,7 +16,8 @@ module Decoder(
output [3:0] io_out_opClass,
output [4:0] io_out_aluFn,
output [2:0] io_out_memWidth,
output io_out_isLoad,
output io_out_memSigned,
io_out_isLoad,
io_out_isStore,
io_out_isBranch,
io_out_isJal,
@@ -26,25 +27,30 @@ module Decoder(
io_out_isOpImm,
io_out_isWord,
io_out_isSystem,
io_out_writesRd,
io_out_isFenceI,
io_out_isAmo,
output [4:0] io_out_amoOp,
output io_out_writesRd,
io_out_illegal
);
wire [7:0][1:0] _GEN = '{2'h3, 2'h2, 2'h1, 2'h0, 2'h3, 2'h2, 2'h1, 2'h0};
wire [7:0][4:0] _GEN = '{5'hE, 5'hD, 5'hC, 5'hB, 5'h12, 5'h11, 5'h10, 5'hA};
wire [7:0][1:0] _GEN_0 = '{2'h3, 2'h2, 2'h1, 2'h0, 2'h3, 2'h2, 2'h1, 2'h0};
wire _d_isFenceI_T = io_inst[14:12] == 3'h1;
wire d_isLui = io_inst[6:0] == 7'h37;
wire _GEN_0 = io_inst[6:0] == 7'h17;
wire _GEN_1 = io_inst[6:0] == 7'h6F;
wire _GEN_2 = d_isLui | _GEN_0;
wire _GEN_3 = io_inst[6:0] == 7'h67;
wire _GEN_4 = io_inst[6:0] == 7'h63;
wire _GEN_5 = io_inst[6:0] == 7'h3;
wire _GEN_6 = io_inst[6:0] == 7'h23;
wire _GEN_1 = io_inst[6:0] == 7'h17;
wire _GEN_2 = io_inst[6:0] == 7'h6F;
wire _GEN_3 = d_isLui | _GEN_1;
wire _GEN_4 = io_inst[6:0] == 7'h67;
wire _GEN_5 = io_inst[6:0] == 7'h63;
wire _GEN_6 = io_inst[6:0] == 7'h3;
wire _GEN_7 = io_inst[6:0] == 7'h23;
wire _d_isWord_T = io_inst[6:0] == 7'h1B;
wire _GEN_7 = io_inst[6:0] == 7'h13 | _d_isWord_T;
wire _GEN_8 = _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6;
wire _GEN_9 = d_isLui | _GEN_8;
wire [4:0] _d_aluFn_T_3 = {3'h0, io_inst[14:12] == 3'h1, 1'h0};
wire [7:0][4:0] _GEN_10 =
wire _GEN_8 = io_inst[6:0] == 7'h13 | _d_isWord_T;
wire _GEN_9 = _GEN_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_7;
wire _GEN_10 = d_isLui | _GEN_9;
wire [4:0] _d_aluFn_T_3 = {3'h0, _d_isFenceI_T, 1'h0};
wire [7:0][4:0] _GEN_11 =
{{5'h9},
{5'h8},
{{4'h3, io_inst[30]}},
@@ -54,8 +60,8 @@ module Decoder(
{_d_aluFn_T_3},
{_d_aluFn_T_3}};
wire _d_isWord_T_1 = io_inst[6:0] == 7'h3B;
wire _GEN_11 = io_inst[6:0] == 7'h33 | _d_isWord_T_1;
wire [7:0][4:0] _GEN_12 =
wire _GEN_12 = io_inst[6:0] == 7'h33 | _d_isWord_T_1;
wire [7:0][4:0] _GEN_13 =
{{5'h9},
{5'h8},
{{4'h3, io_inst[30]}},
@@ -64,13 +70,15 @@ module Decoder(
{5'h3},
{5'h2},
{{4'h0, io_inst[30]}}};
wire _GEN_13 = io_inst[6:0] == 7'hF;
wire _GEN_14 = io_inst[6:0] == 7'h73;
wire _GEN_15 = io_inst[6:0] == 7'h2F;
wire _GEN_16 = _GEN_13 | _GEN_14;
wire _GEN_17 = _GEN_7 | _GEN_11 | _GEN_16;
wire _GEN_18 = _GEN_6 | _GEN_17;
wire _GEN_19 = _GEN_1 | _GEN_3 | _GEN_4;
wire _GEN_14 = io_inst[6:0] == 7'hF;
wire _GEN_15 = _GEN_8 | _GEN_12;
wire _GEN_16 = io_inst[6:0] == 7'h73;
wire _GEN_17 = io_inst[6:0] == 7'h2F;
wire _GEN_18 = _GEN_14 | _GEN_16;
wire _GEN_19 = _GEN_7 | _GEN_8 | _GEN_12 | _GEN_18;
wire _GEN_20 = _GEN_2 | _GEN_4 | _GEN_5;
wire _GEN_21 =
d_isLui | _GEN_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_19;
assign io_out_pc = io_pc;
assign io_out_inst = io_inst;
assign io_out_rs1 = io_inst[19:15];
@@ -85,72 +93,67 @@ module Decoder(
assign io_out_immJ =
{{44{io_inst[31]}}, io_inst[19:12], io_inst[20], io_inst[30:21], 1'h0};
assign io_out_opClass =
_GEN_2
_GEN_3
? 4'h1
: _GEN_19
: _GEN_20
? 4'h2
: _GEN_5
: _GEN_6
? 4'h3
: _GEN_6
? 4'h4
: _GEN_7 | _GEN_11 ? 4'h1 : _GEN_16 ? 4'h5 : _GEN_15 ? 4'h3 : 4'h0;
: _GEN_7 ? 4'h4 : _GEN_15 ? 4'h1 : _GEN_18 ? 4'h5 : _GEN_17 ? 4'h3 : 4'h0;
assign io_out_aluFn =
d_isLui
? 5'hF
: _GEN_8
: _GEN_9
? 5'h0
: _GEN_7
? _GEN_10[io_inst[14:12]]
: _GEN_11
: _GEN_8
? _GEN_11[io_inst[14:12]]
: _GEN_12
? (io_inst[31:25] == 7'h1
? ((&(io_inst[14:12]))
? 5'hE
: io_inst[14:12] == 3'h6
? 5'hD
: io_inst[14:12] == 3'h5
? 5'hC
: {4'h5, io_inst[14:12] == 3'h4})
: _GEN_12[io_inst[14:12]])
? _GEN[io_inst[14:12]]
: _GEN_13[io_inst[14:12]])
: 5'h0;
assign io_out_memWidth =
d_isLui | _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_18 | ~_GEN_15
? {1'h0, _GEN[io_inst[14:12]]}
: {2'h1, io_inst[14:12] != 3'h2};
assign io_out_isLoad = ~(d_isLui | _GEN_0 | _GEN_19) & (_GEN_5 | ~_GEN_18 & _GEN_15);
_GEN_21 | ~_GEN_17 ? {1'h0, _GEN_0[io_inst[14:12]]} : {2'h1, io_inst[14:12] != 3'h2};
assign io_out_memSigned = ~(io_inst[14]);
assign io_out_isLoad = ~(d_isLui | _GEN_1 | _GEN_20) & (_GEN_6 | ~_GEN_19 & _GEN_17);
assign io_out_isStore =
~(d_isLui | _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5)
& (_GEN_6 | ~_GEN_17 & _GEN_15);
assign io_out_isBranch = ~(d_isLui | _GEN_0 | _GEN_1 | _GEN_3) & _GEN_4;
assign io_out_isJal = ~_GEN_2 & _GEN_1;
assign io_out_isJalr = ~(d_isLui | _GEN_0 | _GEN_1) & _GEN_3;
~(d_isLui | _GEN_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6) & _GEN_7;
assign io_out_isBranch = ~(d_isLui | _GEN_1 | _GEN_2 | _GEN_4) & _GEN_5;
assign io_out_isJal = ~_GEN_3 & _GEN_2;
assign io_out_isJalr = ~(d_isLui | _GEN_1 | _GEN_2) & _GEN_4;
assign io_out_isLui = d_isLui;
assign io_out_isAuipc = ~d_isLui & _GEN_0;
assign io_out_isOpImm = ~_GEN_9 & _GEN_7;
assign io_out_isWord = ~_GEN_9 & (_GEN_7 ? _d_isWord_T : _GEN_11 & _d_isWord_T_1);
assign io_out_isAuipc = ~d_isLui & _GEN_1;
assign io_out_isOpImm = ~_GEN_10 & _GEN_8;
assign io_out_isWord = ~_GEN_10 & (_GEN_8 ? _d_isWord_T : _GEN_12 & _d_isWord_T_1);
assign io_out_isSystem =
~(d_isLui | _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_7 | _GEN_11
| _GEN_13) & _GEN_14;
~(d_isLui | _GEN_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_7 | _GEN_8 | _GEN_12
| _GEN_14) & _GEN_16;
assign io_out_isFenceI =
~(d_isLui | _GEN_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_7 | _GEN_15) & _GEN_14
& _d_isFenceI_T;
assign io_out_isAmo = ~_GEN_21 & _GEN_17;
assign io_out_amoOp = io_inst[31:27];
assign io_out_writesRd =
d_isLui
? (|(io_inst[11:7]))
: _GEN_0
: _GEN_1
? (|(io_inst[11:7]))
: _GEN_1
: _GEN_2
? (|(io_inst[11:7]))
: _GEN_3
: _GEN_4
? (|(io_inst[11:7]))
: ~_GEN_4
& (_GEN_5
: ~_GEN_5
& (_GEN_6
? (|(io_inst[11:7]))
: ~_GEN_6
& (_GEN_7
: ~_GEN_7
& (_GEN_8
? (|(io_inst[11:7]))
: _GEN_11
: _GEN_12
? (|(io_inst[11:7]))
: ~_GEN_13
& (_GEN_14
: ~_GEN_14
& (_GEN_16
? (|(io_inst[11:7])) & (|(io_inst[14:12]))
: _GEN_15 & (|(io_inst[11:7])))));
: _GEN_17 & (|(io_inst[11:7])))));
assign io_out_illegal =
io_inst[6:0] != 7'h37 & io_inst[6:0] != 7'h17 & io_inst[6:0] != 7'h6F
& io_inst[6:0] != 7'h67 & io_inst[6:0] != 7'h63 & io_inst[6:0] != 7'h3