375 lines
21 KiB
Systemverilog
375 lines
21 KiB
Systemverilog
// Generated by CIRCT firtool-1.151.0
|
|
module RVCExpander(
|
|
input [31:0] io_in,
|
|
output [31:0] io_out_bits,
|
|
output [4:0] io_out_rd,
|
|
io_out_rs1,
|
|
io_out_rs2,
|
|
io_out_rs3,
|
|
output io_rvc
|
|
);
|
|
|
|
wire [2:0] _io_out_s_funct_T_2 = {io_in[12], io_in[6:5]};
|
|
wire [2:0] _io_out_s_funct_T_4 = {_io_out_s_funct_T_2 == 3'h1, 2'h0};
|
|
wire [7:0][2:0] _GEN =
|
|
{{3'h3},
|
|
{3'h2},
|
|
{3'h0},
|
|
{3'h0},
|
|
{3'h7},
|
|
{3'h6},
|
|
{_io_out_s_funct_T_4},
|
|
{_io_out_s_funct_T_4}};
|
|
wire [3:0] _GEN_0 = {4{io_in[12]}};
|
|
wire [6:0] io_out_s_load_opc = (|(io_in[11:7])) ? 7'h3 : 7'h1F;
|
|
wire _io_out_s_jr_mv_T_1 = |(io_in[6:2]);
|
|
wire _io_out_s_jalr_add_T_1 = |(io_in[6:2]);
|
|
wire [4:0] _io_out_T_2 = {io_in[1:0], io_in[15:13]};
|
|
wire _io_out_T_3 = _io_out_T_2 == 5'h1;
|
|
wire _io_out_T_5 = _io_out_T_2 == 5'h2;
|
|
wire _io_out_T_7 = _io_out_T_2 == 5'h3;
|
|
wire _io_out_T_9 = _io_out_T_2 == 5'h4;
|
|
wire _io_out_T_11 = _io_out_T_2 == 5'h5;
|
|
wire _io_out_T_13 = _io_out_T_2 == 5'h6;
|
|
wire _io_out_T_15 = _io_out_T_2 == 5'h7;
|
|
wire _io_out_T_17 = _io_out_T_2 == 5'h8;
|
|
wire _io_out_T_19 = _io_out_T_2 == 5'h9;
|
|
wire _GEN_1 = _io_out_T_19 | _io_out_T_17;
|
|
wire _io_out_T_21 = _io_out_T_2 == 5'hA;
|
|
wire _io_out_T_23 = _io_out_T_2 == 5'hB;
|
|
wire _io_out_T_25 = _io_out_T_2 == 5'hC;
|
|
wire _io_out_T_27 = _io_out_T_2 == 5'hD;
|
|
wire _io_out_T_29 = _io_out_T_2 == 5'hE;
|
|
wire _io_out_T_31 = _io_out_T_2 == 5'hF;
|
|
wire _io_out_T_33 = _io_out_T_2 == 5'h10;
|
|
wire _io_out_T_35 = _io_out_T_2 == 5'h11;
|
|
wire _io_out_T_37 = _io_out_T_2 == 5'h12;
|
|
wire _io_out_T_39 = _io_out_T_2 == 5'h13;
|
|
wire _GEN_2 = _io_out_T_39 | _io_out_T_37 | _io_out_T_35 | _io_out_T_33;
|
|
wire _io_out_T_41 = _io_out_T_2 == 5'h14;
|
|
wire [31:0] _io_out_T_42_bits =
|
|
_io_out_T_41
|
|
? {7'h0,
|
|
io_in[12]
|
|
? (_io_out_s_jalr_add_T_1
|
|
? {io_in[6:2], io_in[11:7], 3'h0, io_in[11:7], 7'h33}
|
|
: (|(io_in[11:7]))
|
|
? {io_in[6:2], io_in[11:7], 15'hE7}
|
|
: {io_in[6:3], 1'h1, io_in[11:7], 15'h73})
|
|
: {io_in[6:2],
|
|
_io_out_s_jr_mv_T_1
|
|
? {8'h0, io_in[11:7], 7'h33}
|
|
: {io_in[11:7], (|(io_in[11:7])) ? 15'h67 : 15'h1F}}}
|
|
: _io_out_T_39
|
|
? {3'h0,
|
|
io_in[4:2],
|
|
io_in[12],
|
|
io_in[6:5],
|
|
11'h13,
|
|
io_in[11:7],
|
|
io_out_s_load_opc}
|
|
: _io_out_T_37
|
|
? {4'h0,
|
|
io_in[3:2],
|
|
io_in[12],
|
|
io_in[6:4],
|
|
10'h12,
|
|
io_in[11:7],
|
|
io_out_s_load_opc}
|
|
: _io_out_T_35
|
|
? {3'h0, io_in[4:2], io_in[12], io_in[6:5], 11'h13, io_in[11:7], 7'h7}
|
|
: _io_out_T_33
|
|
? {6'h0,
|
|
io_in[12],
|
|
io_in[6:2],
|
|
io_in[11:7],
|
|
3'h1,
|
|
io_in[11:7],
|
|
7'h13}
|
|
: _io_out_T_31
|
|
? {_GEN_0,
|
|
io_in[6:5],
|
|
io_in[2],
|
|
7'h1,
|
|
io_in[9:7],
|
|
3'h1,
|
|
io_in[11:10],
|
|
io_in[4:3],
|
|
io_in[12],
|
|
7'h63}
|
|
: _io_out_T_29
|
|
? {_GEN_0,
|
|
io_in[6:5],
|
|
io_in[2],
|
|
7'h1,
|
|
io_in[9:7],
|
|
3'h0,
|
|
io_in[11:10],
|
|
io_in[4:3],
|
|
io_in[12],
|
|
7'h63}
|
|
: _io_out_T_27
|
|
? {io_in[12],
|
|
io_in[8],
|
|
io_in[10:9],
|
|
io_in[6],
|
|
io_in[7],
|
|
io_in[2],
|
|
io_in[11],
|
|
io_in[5:3],
|
|
{9{io_in[12]}},
|
|
12'h6F}
|
|
: _io_out_T_25
|
|
? ((&(io_in[11:10]))
|
|
? {1'h0,
|
|
{8'h1,
|
|
io_in[4:2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
_GEN[_io_out_s_funct_T_2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
3'h3,
|
|
io_in[12],
|
|
3'h3} | {io_in[6:5] == 2'h0, 30'h0}}
|
|
: {io_in[11:10] == 2'h2
|
|
? {{7{io_in[12]}},
|
|
io_in[6:2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
5'h1D}
|
|
: {1'h0,
|
|
io_in[11:10] == 2'h1,
|
|
4'h0,
|
|
io_in[12],
|
|
io_in[6:2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
5'h15},
|
|
io_in[9:7],
|
|
7'h13})
|
|
: _io_out_T_23
|
|
? {{3{io_in[12]}},
|
|
io_in[11:7] == 5'h0 | io_in[11:7] == 5'h2
|
|
? {io_in[4:3],
|
|
io_in[5],
|
|
io_in[2],
|
|
io_in[6],
|
|
4'h0,
|
|
io_in[11:7],
|
|
3'h0,
|
|
io_in[11:7],
|
|
(|{{7{io_in[12]}}, io_in[6:2]})
|
|
? 7'h13
|
|
: 7'h1F}
|
|
: {{12{io_in[12]}},
|
|
io_in[6:2],
|
|
io_in[11:7],
|
|
3'h3,
|
|
{{7{io_in[12]}}, io_in[6:2]} == 12'h0,
|
|
3'h7}}
|
|
: _io_out_T_21
|
|
? {{7{io_in[12]}},
|
|
io_in[6:2],
|
|
8'h0,
|
|
io_in[11:7],
|
|
7'h13}
|
|
: _io_out_T_19
|
|
? {{7{io_in[12]}},
|
|
io_in[6:2],
|
|
io_in[11:7],
|
|
3'h0,
|
|
io_in[11:7],
|
|
4'h3,
|
|
io_in[11:7] == 5'h0,
|
|
2'h3}
|
|
: _io_out_T_17
|
|
? {{7{io_in[12]}},
|
|
io_in[6:2],
|
|
io_in[11:7],
|
|
3'h0,
|
|
io_in[11:7],
|
|
7'h13}
|
|
: _io_out_T_15
|
|
? {4'h0,
|
|
io_in[6:5],
|
|
io_in[12],
|
|
2'h1,
|
|
io_in[4:2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
3'h3,
|
|
io_in[11:10],
|
|
10'h23}
|
|
: _io_out_T_13
|
|
? {5'h0,
|
|
io_in[5],
|
|
io_in[12],
|
|
2'h1,
|
|
io_in[4:2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
3'h2,
|
|
io_in[11:10],
|
|
io_in[6],
|
|
9'h23}
|
|
: _io_out_T_11
|
|
? {4'h0,
|
|
io_in[6:5],
|
|
io_in[12],
|
|
2'h1,
|
|
io_in[4:2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
3'h3,
|
|
io_in[11:10],
|
|
10'h27}
|
|
: _io_out_T_9
|
|
? {5'h0,
|
|
io_in[5],
|
|
io_in[12],
|
|
2'h1,
|
|
io_in[4:2],
|
|
2'h1,
|
|
io_in[9:7],
|
|
3'h2,
|
|
io_in[11:10],
|
|
io_in[6],
|
|
9'h3F}
|
|
: _io_out_T_7
|
|
? {4'h0,
|
|
io_in[6:5],
|
|
io_in[12:10],
|
|
5'h1,
|
|
io_in[9:7],
|
|
5'hD,
|
|
io_in[4:2],
|
|
7'h3}
|
|
: _io_out_T_5
|
|
? {5'h0,
|
|
io_in[5],
|
|
io_in[12:10],
|
|
io_in[6],
|
|
4'h1,
|
|
io_in[9:7],
|
|
5'h9,
|
|
io_in[4:2],
|
|
7'h3}
|
|
: _io_out_T_3
|
|
? {4'h0,
|
|
io_in[6:5],
|
|
io_in[12:10],
|
|
5'h1,
|
|
io_in[9:7],
|
|
5'hD,
|
|
io_in[4:2],
|
|
7'h7}
|
|
: {2'h0,
|
|
io_in[10:7],
|
|
io_in[12:11],
|
|
io_in[5],
|
|
io_in[6],
|
|
12'h41,
|
|
io_in[4:2],
|
|
(|(io_in[12:5]))
|
|
? 7'h13
|
|
: 7'h1F};
|
|
wire _io_out_T_43 = _io_out_T_2 == 5'h15;
|
|
wire _io_out_T_45 = _io_out_T_2 == 5'h16;
|
|
wire _io_out_T_47 = _io_out_T_2 == 5'h17;
|
|
wire _GEN_3 = _io_out_T_47 | _io_out_T_45 | _io_out_T_43;
|
|
wire _io_out_T_49 = _io_out_T_2 == 5'h18;
|
|
wire _io_out_T_51 = _io_out_T_2 == 5'h19;
|
|
wire _io_out_T_53 = _io_out_T_2 == 5'h1A;
|
|
wire _io_out_T_55 = _io_out_T_2 == 5'h1B;
|
|
wire _io_out_T_57 = _io_out_T_2 == 5'h1C;
|
|
wire _io_out_T_59 = _io_out_T_2 == 5'h1D;
|
|
wire _io_out_T_61 = _io_out_T_2 == 5'h1E;
|
|
wire _io_out_T_63 = &_io_out_T_2;
|
|
wire _GEN_4 =
|
|
_io_out_T_63 | _io_out_T_61 | _io_out_T_59 | _io_out_T_57 | _io_out_T_55
|
|
| _io_out_T_53 | _io_out_T_51 | _io_out_T_49;
|
|
assign io_out_bits =
|
|
_GEN_4
|
|
? io_in
|
|
: _io_out_T_47
|
|
? {3'h0, io_in[9:7], io_in[12], io_in[6:2], 8'h13, io_in[11:10], 10'h23}
|
|
: _io_out_T_45
|
|
? {4'h0, io_in[8:7], io_in[12], io_in[6:2], 8'h12, io_in[11:9], 9'h23}
|
|
: _io_out_T_43
|
|
? {3'h0, io_in[9:7], io_in[12], io_in[6:2], 8'h13, io_in[11:10], 10'h27}
|
|
: _io_out_T_42_bits;
|
|
assign io_out_rd =
|
|
_io_out_T_63 | _io_out_T_61 | _io_out_T_59 | _io_out_T_57 | _io_out_T_55
|
|
| _io_out_T_53 | _io_out_T_51 | _io_out_T_49 | _GEN_3
|
|
? io_in[11:7]
|
|
: _io_out_T_41
|
|
? (io_in[12]
|
|
? (_io_out_s_jalr_add_T_1 ? io_in[11:7] : 5'h1)
|
|
: _io_out_s_jr_mv_T_1 ? io_in[11:7] : 5'h0)
|
|
: _GEN_2
|
|
? io_in[11:7]
|
|
: _io_out_T_31
|
|
? 5'h0
|
|
: _io_out_T_29
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_27
|
|
? 5'h0
|
|
: _io_out_T_25
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_23 | _io_out_T_21 | _GEN_1
|
|
? io_in[11:7]
|
|
: {2'h1, io_in[4:2]};
|
|
assign io_out_rs1 =
|
|
_GEN_4
|
|
? io_in[19:15]
|
|
: _GEN_3
|
|
? 5'h2
|
|
: _io_out_T_41
|
|
? (io_in[12] | ~_io_out_s_jr_mv_T_1 ? io_in[11:7] : 5'h0)
|
|
: _io_out_T_39 | _io_out_T_37 | _io_out_T_35
|
|
? 5'h2
|
|
: _io_out_T_33
|
|
? io_in[11:7]
|
|
: _io_out_T_31
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_29
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_27
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_25
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_23
|
|
? io_in[11:7]
|
|
: _io_out_T_21
|
|
? 5'h0
|
|
: _GEN_1
|
|
? io_in[11:7]
|
|
: _io_out_T_15
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_13
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_11
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_9
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_7
|
|
? {2'h1, io_in[9:7]}
|
|
: _io_out_T_5
|
|
? {2'h1,
|
|
io_in[9:7]}
|
|
: _io_out_T_3
|
|
? {2'h1,
|
|
io_in[9:7]}
|
|
: 5'h2;
|
|
assign io_out_rs2 =
|
|
_GEN_4
|
|
? io_in[24:20]
|
|
: _io_out_T_47 | _io_out_T_45 | _io_out_T_43 | _io_out_T_41 | _GEN_2
|
|
? io_in[6:2]
|
|
: _io_out_T_31 | _io_out_T_29 ? 5'h0 : {2'h1, io_in[4:2]};
|
|
assign io_out_rs3 = io_in[31:27];
|
|
assign io_rvc = io_in[1:0] != 2'h3;
|
|
endmodule
|
|
|