// Generated by CIRCT firtool-1.139.0 module Decoder( input [63:0] io_pc, input [31:0] io_inst, output [63:0] io_out_pc, output [31:0] io_out_inst, output [4:0] io_out_rs1, io_out_rs2, io_out_rd, output [2:0] io_out_funct3, output [63:0] io_out_immI, io_out_immS, io_out_immB, io_out_immU, io_out_immJ, output [3:0] io_out_opClass, output [4:0] io_out_aluFn, output [2:0] io_out_memWidth, output io_out_memSigned, io_out_isLoad, io_out_isStore, io_out_isBranch, io_out_isJal, io_out_isJalr, io_out_isLui, io_out_isAuipc, io_out_isOpImm, io_out_isWord, io_out_isSystem, io_out_isFenceI, io_out_isEcall, io_out_isEbreak, io_out_isMret, io_out_isSret, io_out_isSfenceVma, io_out_isXret, io_out_isWfi, io_out_isAmo, output [4:0] io_out_amoOp, output io_out_writesRd, io_out_illegal ); 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 _isSfenceVma_T = io_inst[14:12] == 3'h0; wire _d_isFenceI_T = io_inst[14:12] == 3'h1; wire isSystemOpcode = io_inst[6:0] == 7'h73; wire isFenceOpcode = io_inst[6:0] == 7'hF; wire isEcall = io_inst == 32'h73; wire isEbreak = io_inst == 32'h100073; wire isMret = io_inst == 32'h30200073; wire isSret = io_inst == 32'h10200073; wire isWfi = io_inst == 32'h10500073; wire isSfenceVma = isSystemOpcode & _isSfenceVma_T & io_inst[31:25] == 7'h9; wire d_isLui = io_inst[6:0] == 7'h37; 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_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]}}, {5'h5}, {5'h4}, {5'h3}, {_d_aluFn_T_3}, {_d_aluFn_T_3}}; wire _d_isWord_T_1 = io_inst[6:0] == 7'h3B; 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]}}, {5'h5}, {5'h4}, {5'h3}, {5'h2}, {{4'h0, io_inst[30]}}}; wire _GEN_14 = _GEN_8 | _GEN_12; wire _GEN_15 = d_isLui | _GEN_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_7 | _GEN_14; wire _GEN_16 = io_inst[6:0] == 7'h2F; wire _GEN_17 = isFenceOpcode | isSystemOpcode; wire _GEN_18 = _GEN_7 | _GEN_8 | _GEN_12 | _GEN_17; wire _GEN_19 = _GEN_2 | _GEN_4 | _GEN_5; wire _GEN_20 = d_isLui | _GEN_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_18; assign io_out_pc = io_pc; assign io_out_inst = io_inst; assign io_out_rs1 = io_inst[19:15]; assign io_out_rs2 = io_inst[24:20]; assign io_out_rd = io_inst[11:7]; assign io_out_funct3 = io_inst[14:12]; assign io_out_immI = {{52{io_inst[31]}}, io_inst[31:20]}; assign io_out_immS = {{52{io_inst[31]}}, io_inst[31:25], io_inst[11:7]}; assign io_out_immB = {{52{io_inst[31]}}, io_inst[7], io_inst[30:25], io_inst[11:8], 1'h0}; assign io_out_immU = {{32{io_inst[31]}}, io_inst[31:12], 12'h0}; 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_3 ? 4'h1 : _GEN_19 ? 4'h2 : _GEN_6 ? 4'h3 : _GEN_7 ? 4'h4 : _GEN_14 ? 4'h1 : _GEN_17 ? 4'h5 : _GEN_16 ? 4'h3 : 4'h0; assign io_out_aluFn = d_isLui ? 5'hF : _GEN_9 ? 5'h0 : _GEN_8 ? _GEN_11[io_inst[14:12]] : _GEN_12 ? (io_inst[31:25] == 7'h1 ? _GEN[io_inst[14:12]] : _GEN_13[io_inst[14:12]]) : 5'h0; assign io_out_memWidth = _GEN_20 | ~_GEN_16 ? {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_19) & (_GEN_6 | ~_GEN_18 & _GEN_16); assign io_out_isStore = ~(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_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_1 | _GEN_2 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_7 | _GEN_8 | _GEN_12 | isFenceOpcode) & isSystemOpcode; assign io_out_isFenceI = ~_GEN_15 & isFenceOpcode & _d_isFenceI_T; assign io_out_isEcall = isEcall; assign io_out_isEbreak = isEbreak; assign io_out_isMret = isMret; assign io_out_isSret = isSret; assign io_out_isSfenceVma = isSfenceVma; assign io_out_isXret = isMret | isSret; assign io_out_isWfi = isWfi; assign io_out_isAmo = ~_GEN_20 & _GEN_16; assign io_out_amoOp = io_inst[31:27]; assign io_out_writesRd = d_isLui ? (|(io_inst[11:7])) : _GEN_1 ? (|(io_inst[11:7])) : _GEN_2 ? (|(io_inst[11:7])) : _GEN_4 ? (|(io_inst[11:7])) : ~_GEN_5 & (_GEN_6 ? (|(io_inst[11:7])) : ~_GEN_7 & (_GEN_8 ? (|(io_inst[11:7])) : _GEN_12 ? (|(io_inst[11:7])) : ~isFenceOpcode & (isSystemOpcode ? (|(io_inst[11:7])) & (|(io_inst[14:12])) : _GEN_16 & (|(io_inst[11:7]))))); assign io_out_illegal = isSystemOpcode & io_inst == 32'h200073 | 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 & io_inst[6:0] != 7'h23 & io_inst[6:0] != 7'h13 & io_inst[6:0] != 7'h1B & io_inst[6:0] != 7'h33 & io_inst[6:0] != 7'h3B & io_inst[6:0] != 7'hF & io_inst[6:0] != 7'h73 & io_inst[6:0] != 7'h2F | ~_GEN_15 & (isFenceOpcode ? (|(io_inst[14:12])) & io_inst[14:12] != 3'h1 : isSystemOpcode & _isSfenceVma_T & ~((isEcall | isEbreak | isMret | isSret | isSfenceVma | isWfi) & io_inst != 32'h200073)); endmodule