// SPDX-License-Identifier: Apache-2.0 // Copyright 2020 Western Digital Corporation or its affiliates. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module el2_dec_decode_ctl import el2_pkg::*; #( `include "el2_param.vh" ) ( input logic dec_tlu_trace_disable, input logic dec_debug_valid_d, input logic dec_tlu_flush_extint, // Flush external interrupt input logic dec_tlu_force_halt, // invalidate nonblock load cam on a force halt event output logic dec_extint_stall, // Stall from external interrupt input logic [15:0] ifu_i0_cinst, // 16b compressed instruction output logic [31:0] dec_i0_inst_wb, // 32b instruction at wb+1 for trace encoder output logic [31:1] dec_i0_pc_wb, // 31b pc at wb+1 for trace encoder input logic lsu_nonblock_load_valid_m, // valid nonblock load at m input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m, // -> corresponding tag input logic lsu_nonblock_load_inv_r, // invalidate request for nonblock load r input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r, // -> corresponding tag input logic lsu_nonblock_load_data_valid, // valid nonblock load data back input logic lsu_nonblock_load_data_error, // nonblock load bus error input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag, // -> corresponding tag input logic [3:0] dec_i0_trigger_match_d, // i0 decode trigger matches input logic dec_tlu_wr_pause_r, // pause instruction at r input logic dec_tlu_pipelining_disable, // pipeline disable - presync, i0 decode only input logic [3:0] lsu_trigger_match_m, // lsu trigger matches input logic lsu_pmu_misaligned_m, // perf mon: load/store misalign input logic dec_tlu_debug_stall, // debug stall decode input logic dec_tlu_flush_leak_one_r, // leak1 instruction input logic dec_debug_fence_d, // debug fence instruction input logic [1:0] dbg_cmd_wrdata, // disambiguate fence, fence_i input logic dec_i0_icaf_d, // icache access fault input logic dec_i0_icaf_second_d, // i0 instruction access fault on second 2B of 4B inst input logic [1:0] dec_i0_icaf_type_d, // i0 instruction access fault type input logic dec_i0_dbecc_d, // icache/iccm double-bit error input el2_br_pkt_t dec_i0_brp, // branch packet input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index, // i0 branch index input logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr, // BP FGHR input logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag, // BP tag input logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index, // Fully associt btb index input logic lsu_idle_any, // lsu idle: if fence instr & ~lsu_idle then stall decode input logic lsu_load_stall_any, // stall any load at decode input logic lsu_store_stall_any, // stall any store at decode input logic dma_dccm_stall_any, // stall any load/store at decode input logic exu_div_wren, // nonblocking divide write enable to GPR. input logic dec_tlu_i0_kill_writeb_wb, // I0 is flushed, don't writeback any results to arch state input logic dec_tlu_flush_lower_wb, // trap lower flush input logic dec_tlu_i0_kill_writeb_r, // I0 is flushed, don't writeback any results to arch state input logic dec_tlu_flush_lower_r, // trap lower flush input logic dec_tlu_flush_pause_r, // don't clear pause state on initial lower flush input logic dec_tlu_presync_d, // CSR read needs to be presync'd input logic dec_tlu_postsync_d, // CSR ops that need to be postsync'd input logic dec_i0_pc4_d, // inst is 4B inst else 2B input logic [31:0] dec_csr_rddata_d, // csr read data at wb input logic dec_csr_legal_d, // csr indicates legal operation input logic [31:0] exu_csr_rs1_x, // rs1 for csr instr input logic [31:0] lsu_result_m, // load result input logic [31:0] lsu_result_corr_r, // load result - corrected data for writing gpr's, not for bypassing input logic exu_flush_final, // lower flush or i0 flush at X or D input logic [31:1] exu_i0_pc_x, // pcs at e1 input logic [31:0] dec_i0_instr_d, // inst at decode input logic dec_ib0_valid_d, // inst valid at decode input logic [31:0] exu_i0_result_x, // from primary alu's input logic clk, // Clock only while core active. Through one clock header. For flops with second clock header built in. Connected to ACTIVE_L2CLK. input logic active_clk, // Clock only while core active. Through two clock headers. For flops without second clock header built in. input logic free_l2clk, // Clock always. Through one clock header. For flops with second header built in. input logic clk_override, // Override non-functional clock gating input logic rst_l, // Flop reset output logic dec_i0_rs1_en_d, // rs1 enable at decode output logic dec_i0_rs2_en_d, // rs2 enable at decode output logic [4:0] dec_i0_rs1_d, // rs1 logical source output logic [4:0] dec_i0_rs2_d, // rs2 logical source output logic [31:0] dec_i0_immed_d, // 32b immediate data decode output logic [12:1] dec_i0_br_immed_d, // 12b branch immediate output el2_alu_pkt_t i0_ap, // alu packets output logic dec_i0_decode_d, // i0 decode output logic dec_i0_alu_decode_d, // decode to D-stage alu output logic dec_i0_branch_d, // Branch in D-stage output logic [4:0] dec_i0_waddr_r, // i0 logical source to write to gpr's output logic dec_i0_wen_r, // i0 write enable output logic [31:0] dec_i0_wdata_r, // i0 write data output logic dec_i0_select_pc_d, // i0 select pc for rs1 - branches output logic [3:0] dec_i0_rs1_bypass_en_d, // i0 rs1 bypass enable output logic [3:0] dec_i0_rs2_bypass_en_d, // i0 rs2 bypass enable output logic [31:0] dec_i0_result_r, // Result R-stage output el2_lsu_pkt_t lsu_p, // load/store packet output logic dec_qual_lsu_d, // LSU instruction at D. Use to quiet LSU operands output el2_mul_pkt_t mul_p, // multiply packet output el2_div_pkt_t div_p, // divide packet output logic [4:0] div_waddr_wb, // DIV write address to GPR output logic dec_div_cancel, // cancel the divide operation output logic dec_lsu_valid_raw_d, output logic [11:0] dec_lsu_offset_d, output logic dec_csr_ren_d, // valid csr decode output logic dec_csr_wen_unq_d, // valid csr with write - for csr legal output logic dec_csr_any_unq_d, // valid csr - for csr legal output logic [11:0] dec_csr_rdaddr_d, // read address for csr output logic dec_csr_wen_r, // csr write enable at r output logic [11:0] dec_csr_wraddr_r, // write address for csr output logic [31:0] dec_csr_wrdata_r, // csr write data at r output logic dec_csr_stall_int_ff, // csr is mie/mstatus output dec_tlu_i0_valid_r, // i0 valid inst at c output el2_trap_pkt_t dec_tlu_packet_r, // trap packet output logic [31:1] dec_tlu_i0_pc_r, // i0 trap pc output logic [31:0] dec_illegal_inst, // illegal inst output logic [31:1] pred_correct_npc_x, // npc e2 if the prediction is correct output el2_predict_pkt_t dec_i0_predict_p_d, // i0 predict packet decode output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d, // i0 predict fghr output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d, // i0 predict index output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d, // i0_predict branch tag output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index output logic [1:0] dec_data_en, // clock-gating logic output logic [1:0] dec_ctl_en, output logic dec_pmu_instr_decoded, // number of instructions decode this cycle encoded output logic dec_pmu_decode_stall, // decode is stalled output logic dec_pmu_presync_stall, // decode has presync stall output logic dec_pmu_postsync_stall, // decode has postsync stall output logic dec_nonblock_load_wen, // write enable for nonblock load output logic [4:0] dec_nonblock_load_waddr, // logical write addr for nonblock load output logic dec_pause_state, // core in pause state output logic dec_pause_state_cg, // pause state for clock-gating output logic dec_div_active, // non-block divide is active input logic scan_mode ); el2_dec_pkt_t i0_dp_raw, i0_dp; logic [31:0] i0; logic i0_valid_d; logic [31:0] i0_result_r; logic [2:0] i0_rs1bypass, i0_rs2bypass; logic i0_jalimm20; logic i0_uiimm20; logic lsu_decode_d; logic [31:0] i0_immed_d; logic i0_presync; logic i0_postsync; logic postsync_stall; logic ps_stall; logic prior_inflight, prior_inflight_wb; logic csr_clr_d, csr_set_d, csr_write_d; logic csr_clr_x,csr_set_x,csr_write_x,csr_imm_x; logic [31:0] csr_mask_x; logic [31:0] write_csr_data_x; logic [31:0] write_csr_data_in; logic [31:0] write_csr_data; logic csr_data_wen; logic [4:0] csrimm_x; logic [31:0] csr_rddata_x; logic mul_decode_d; logic div_decode_d; logic div_e1_to_r; logic div_flush; logic div_active_in; logic div_active; logic i0_nonblock_div_stall; logic i0_div_prior_div_stall; logic nonblock_div_cancel; logic i0_legal; logic shift_illegal; logic illegal_inst_en; logic illegal_lockout_in, illegal_lockout; logic i0_legal_decode_d; logic i0_exulegal_decode_d, i0_exudecode_d, i0_exublock_d; logic [12:1] last_br_immed_d; logic i0_rs1_depend_i0_x, i0_rs1_depend_i0_r; logic i0_rs2_depend_i0_x, i0_rs2_depend_i0_r; logic i0_div_decode_d; logic i0_load_block_d; logic [1:0] i0_rs1_depth_d, i0_rs2_depth_d; logic i0_load_stall_d; logic i0_store_stall_d; logic i0_predict_nt, i0_predict_t; logic i0_notbr_error, i0_br_toffset_error; logic i0_ret_error; logic i0_br_error; logic i0_br_error_all; logic [11:0] i0_br_offset; logic [20:1] i0_pcall_imm; // predicted jal's logic i0_pcall_12b_offset; logic i0_pcall_raw; logic i0_pcall_case; logic i0_pcall; logic i0_pja_raw; logic i0_pja_case; logic i0_pja; logic i0_pret_case; logic i0_pret_raw, i0_pret; logic i0_jal; // jal's that are not predicted logic i0_predict_br; logic store_data_bypass_d, store_data_bypass_m; el2_class_pkt_t i0_rs1_class_d, i0_rs2_class_d; el2_class_pkt_t i0_d_c, i0_x_c, i0_r_c; logic i0_ap_pc2, i0_ap_pc4; logic i0_rd_en_d; logic load_ldst_bypass_d; logic leak1_i0_stall_in, leak1_i0_stall; logic leak1_i1_stall_in, leak1_i1_stall; logic leak1_mode; logic i0_csr_write_only_d; logic prior_inflight_x, prior_inflight_eff; logic any_csr_d; logic prior_csr_write; logic [3:0] i0_pipe_en; logic i0_r_ctl_en, i0_x_ctl_en, i0_wb_ctl_en; logic i0_x_data_en, i0_r_data_en, i0_wb_data_en; logic debug_fence_i; logic debug_fence; logic i0_csr_write; logic presync_stall; logic i0_instr_error; logic i0_icaf_d; logic clear_pause; logic pause_state_in, pause_state; logic pause_stall; logic i0_brp_valid; logic nonblock_load_cancel; logic lsu_idle; logic lsu_pmu_misaligned_r; logic csr_ren_qual_d; logic csr_read_x; logic i0_block_d; logic i0_block_raw_d; // This is use to create the raw valid logic ps_stall_in; logic [31:0] i0_result_x; el2_dest_pkt_t d_d, x_d, r_d, wbd; el2_dest_pkt_t x_d_in, r_d_in; el2_trap_pkt_t d_t, x_t, x_t_in, r_t_in, r_t; logic [3:0] lsu_trigger_match_r; logic [31:1] dec_i0_pc_r; logic csr_read, csr_write; logic i0_br_unpred; logic nonblock_load_valid_m_delay; logic i0_wen_r; logic tlu_wr_pause_r1; logic tlu_wr_pause_r2; logic flush_final_r; logic bitmanip_zbb_legal; logic bitmanip_zbs_legal; logic bitmanip_zbe_legal; logic bitmanip_zbc_legal; logic bitmanip_zbp_legal; logic bitmanip_zbr_legal; logic bitmanip_zbf_legal; logic bitmanip_zba_legal; logic bitmanip_zbb_zbp_legal; logic bitmanip_legal; logic data_gate_en; logic data_gate_clk; localparam NBLOAD_SIZE = pt.LSU_NUM_NBLOAD; localparam NBLOAD_SIZE_MSB = int'(pt.LSU_NUM_NBLOAD)-1; localparam NBLOAD_TAG_MSB = pt.LSU_NUM_NBLOAD_WIDTH-1; logic cam_write, cam_inv_reset, cam_data_reset; logic [NBLOAD_TAG_MSB:0] cam_write_tag, cam_inv_reset_tag, cam_data_reset_tag; logic [NBLOAD_SIZE_MSB:0] cam_wen; logic [NBLOAD_TAG_MSB:0] load_data_tag; logic [NBLOAD_SIZE_MSB:0] nonblock_load_write; el2_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam; el2_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_in; el2_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_raw; logic [4:0] nonblock_load_rd; logic i0_nonblock_load_stall; logic i0_nonblock_boundary_stall; logic i0_rs1_nonblock_load_bypass_en_d, i0_rs2_nonblock_load_bypass_en_d; logic i0_load_kill_wen_r; logic found; logic [NBLOAD_SIZE_MSB:0] cam_inv_reset_val, cam_data_reset_val; logic debug_fence_raw; logic [31:0] i0_result_r_raw; logic [31:0] i0_result_corr_r; logic [12:1] last_br_immed_x; logic [31:0] i0_inst_d; logic [31:0] i0_inst_x; logic [31:0] i0_inst_r; logic [31:0] i0_inst_wb_in; logic [31:0] i0_inst_wb; logic [31:1] i0_pc_wb; logic i0_wb_en; logic trace_enable; logic debug_valid_x; el2_inst_pkt_t i0_itype; el2_reg_pkt_t i0r; rvdffie #(8) misc1ff (.*, .clk(free_l2clk), .din( {leak1_i1_stall_in,leak1_i0_stall_in,dec_tlu_flush_extint,pause_state_in ,dec_tlu_wr_pause_r, tlu_wr_pause_r1,illegal_lockout_in,ps_stall_in}), .dout({leak1_i1_stall, leak1_i0_stall, dec_extint_stall, pause_state, tlu_wr_pause_r1,tlu_wr_pause_r2,illegal_lockout, ps_stall }) ); rvdffie #(8) misc2ff (.*, .clk(free_l2clk), .din( {lsu_trigger_match_m[3:0],lsu_pmu_misaligned_m,div_active_in,exu_flush_final, dec_debug_valid_d}), .dout({lsu_trigger_match_r[3:0],lsu_pmu_misaligned_r,div_active, flush_final_r, debug_valid_x}) ); if(pt.BTB_ENABLE==1) begin // branch prediction // in leak1_mode, ignore any predictions for i0, treat branch as if we haven't seen it before // in leak1 mode, also ignore branch errors for i0 assign i0_brp_valid = dec_i0_brp.valid & ~leak1_mode & ~i0_icaf_d; assign dec_i0_predict_p_d.misp = '0; assign dec_i0_predict_p_d.ataken = '0; assign dec_i0_predict_p_d.boffset = '0; assign dec_i0_predict_p_d.pcall = i0_pcall; // don't mark as pcall if branch error assign dec_i0_predict_p_d.pja = i0_pja; assign dec_i0_predict_p_d.pret = i0_pret; assign dec_i0_predict_p_d.prett[31:1] = dec_i0_brp.prett[31:1]; assign dec_i0_predict_p_d.pc4 = dec_i0_pc4_d; assign dec_i0_predict_p_d.hist[1:0] = dec_i0_brp.hist[1:0]; assign dec_i0_predict_p_d.valid = i0_brp_valid & i0_legal_decode_d; assign i0_notbr_error = i0_brp_valid & ~(i0_dp_raw.condbr | i0_pcall_raw | i0_pja_raw | i0_pret_raw); // no toffset error for a pret assign i0_br_toffset_error = i0_brp_valid & dec_i0_brp.hist[1] & (dec_i0_brp.toffset[11:0] != i0_br_offset[11:0]) & ~i0_pret_raw; assign i0_ret_error = i0_brp_valid & (dec_i0_brp.ret ^ i0_pret_raw); assign i0_br_error = dec_i0_brp.br_error | i0_notbr_error | i0_br_toffset_error | i0_ret_error; assign dec_i0_predict_p_d.br_error = i0_br_error & i0_legal_decode_d & ~leak1_mode; assign dec_i0_predict_p_d.br_start_error = dec_i0_brp.br_start_error & i0_legal_decode_d & ~leak1_mode; assign i0_predict_index_d[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_i0_bp_index; assign i0_predict_btag_d[pt.BTB_BTAG_SIZE-1:0] = dec_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0]; assign i0_br_error_all = (i0_br_error | dec_i0_brp.br_start_error) & ~leak1_mode; assign dec_i0_predict_p_d.toffset[11:0] = i0_br_offset[11:0]; assign i0_predict_fghr_d[pt.BHT_GHR_SIZE-1:0] = dec_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0]; assign dec_i0_predict_p_d.way = dec_i0_brp.way; if(pt.BTB_FULLYA) begin logic btb_error_found, btb_error_found_f; logic [$clog2(pt.BTB_SIZE)-1:0] fa_error_index_ns; assign btb_error_found = (i0_br_error_all | btb_error_found_f) & ~dec_tlu_flush_lower_r; assign fa_error_index_ns = (i0_br_error_all & ~btb_error_found_f) ? dec_i0_bp_fa_index : dec_fa_error_index; rvdff #($clog2(pt.BTB_SIZE)+1) btberrorfa_f (.*, .clk(active_clk), .din({btb_error_found, fa_error_index_ns}), .dout({btb_error_found_f, dec_fa_error_index})); end else assign dec_fa_error_index = 'b0; // end end // if (pt.BTB_ENABLE==1) else begin always_comb begin dec_i0_predict_p_d = '0; dec_i0_predict_p_d.pcall = i0_pcall; // don't mark as pcall if branch error dec_i0_predict_p_d.pja = i0_pja; dec_i0_predict_p_d.pret = i0_pret; dec_i0_predict_p_d.pc4 = dec_i0_pc4_d; end assign i0_br_error_all = '0; assign i0_predict_index_d = '0; assign i0_predict_btag_d = '0; assign i0_predict_fghr_d = '0; assign i0_brp_valid = '0; end // else: !if(pt.BTB_ENABLE==1) // on br error turn anything into a nop // on i0 instruction fetch access fault turn anything into a nop // nop => alu rs1 imm12 rd lor assign i0_icaf_d = dec_i0_icaf_d | dec_i0_dbecc_d; assign i0_instr_error = i0_icaf_d; always_comb begin i0_dp = i0_dp_raw; if (i0_br_error_all | i0_instr_error) begin i0_dp = '0; i0_dp.alu = 1'b1; i0_dp.rs1 = 1'b1; i0_dp.rs2 = 1'b1; i0_dp.lor = 1'b1; i0_dp.legal = 1'b1; i0_dp.postsync = 1'b1; end end assign i0[31:0] = dec_i0_instr_d[31:0]; assign dec_i0_select_pc_d = i0_dp.pc; // branches that can be predicted assign i0_predict_br = i0_dp.condbr | i0_pcall | i0_pja | i0_pret; assign i0_predict_nt = ~(dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br; assign i0_predict_t = (dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br; assign i0_ap.add = i0_dp.add; assign i0_ap.sub = i0_dp.sub; assign i0_ap.land = i0_dp.land; assign i0_ap.lor = i0_dp.lor; assign i0_ap.lxor = i0_dp.lxor; assign i0_ap.sll = i0_dp.sll; assign i0_ap.srl = i0_dp.srl; assign i0_ap.sra = i0_dp.sra; assign i0_ap.slt = i0_dp.slt; assign i0_ap.unsign = i0_dp.unsign; assign i0_ap.beq = i0_dp.beq; assign i0_ap.bne = i0_dp.bne; assign i0_ap.blt = i0_dp.blt; assign i0_ap.bge = i0_dp.bge; assign i0_ap.clz = i0_dp.clz; assign i0_ap.ctz = i0_dp.ctz; assign i0_ap.pcnt = i0_dp.pcnt; assign i0_ap.sext_b = i0_dp.sext_b; assign i0_ap.sext_h = i0_dp.sext_h; assign i0_ap.sh1add = i0_dp.sh1add; assign i0_ap.sh2add = i0_dp.sh2add; assign i0_ap.sh3add = i0_dp.sh3add; assign i0_ap.zba = i0_dp.zba; assign i0_ap.slo = i0_dp.slo; assign i0_ap.sro = i0_dp.sro; assign i0_ap.min = i0_dp.min; assign i0_ap.max = i0_dp.max; assign i0_ap.pack = i0_dp.pack; assign i0_ap.packu = i0_dp.packu; assign i0_ap.packh = i0_dp.packh; assign i0_ap.rol = i0_dp.rol; assign i0_ap.ror = i0_dp.ror; assign i0_ap.grev = i0_dp.grev; assign i0_ap.gorc = i0_dp.gorc; assign i0_ap.zbb = i0_dp.zbb; assign i0_ap.sbset = i0_dp.sbset; assign i0_ap.sbclr = i0_dp.sbclr; assign i0_ap.sbinv = i0_dp.sbinv; assign i0_ap.sbext = i0_dp.sbext; assign i0_ap.csr_write = i0_csr_write_only_d; assign i0_ap.csr_imm = i0_dp.csr_imm; assign i0_ap.jal = i0_jal; assign i0_ap_pc2 = ~dec_i0_pc4_d; assign i0_ap_pc4 = dec_i0_pc4_d; assign i0_ap.predict_nt = i0_predict_nt; assign i0_ap.predict_t = i0_predict_t; // non block load cam logic always_comb begin found = 0; for (int i=0; i coredecode.e // 2) espresso -Dso -oeqntott coredecode.e | addassign -pre out. > equations // to generate the legal (32b instruction is legal) equation below: // 1) coredecode -in decode -legal > legal.e // 2) espresso -Dso -oeqntott legal.e | addassign -pre out. > legal_equation module el2_dec_dec_ctl import el2_pkg::*; ( input logic [31:0] inst, output el2_dec_pkt_t out ); logic [31:0] i; assign i[31:0] = inst[31:0]; assign out.alu = (i[30]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[5]&i[4]) | (i[29] &!i[27]&!i[24]&i[4]) | (!i[25]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[25] &i[13]&i[12]) | (i[27]&i[25]&i[14]&i[4]) | (i[29]&i[27]&!i[14]&i[4]) | ( i[29]&!i[14]&i[5]&i[4]) | (!i[27]&!i[25]&i[14]&i[4]) | (i[30]&!i[29] &!i[13]&i[4]) | (!i[30]&!i[27]&!i[25]&i[4]) | (i[13]&!i[5]&i[4]) | ( !i[12]&!i[5]&i[4]) | (i[2]) | (i[6]) | (i[30]&i[24]&i[23]&i[22]&i[21] &i[20]&!i[5]&i[4]) | (!i[30]&i[29]&!i[24]&!i[23]&i[22]&i[21]&i[20] &!i[5]&i[4]) | (!i[30]&i[24]&!i[23]&!i[22]&!i[21]&!i[20]&!i[5]&i[4]); assign out.rs1 = (!i[14]&!i[13]&!i[2]) | (!i[13]&i[11]&!i[2]) | (i[19]&i[13]&!i[2]) | ( !i[13]&i[10]&!i[2]) | (i[18]&i[13]&!i[2]) | (!i[13]&i[9]&!i[2]) | ( i[17]&i[13]&!i[2]) | (!i[13]&i[8]&!i[2]) | (i[16]&i[13]&!i[2]) | ( !i[13]&i[7]&!i[2]) | (i[15]&i[13]&!i[2]) | (!i[4]&!i[3]) | (!i[6] &!i[2]); assign out.rs2 = (i[5]&!i[4]&!i[2]) | (!i[6]&i[5]&!i[2]); assign out.imm12 = (!i[4]&!i[3]&i[2]) | (i[13]&!i[5]&i[4]&!i[2]) | (!i[13]&!i[12] &i[6]&i[4]) | (!i[12]&!i[5]&i[4]&!i[2]); assign out.rd = (!i[5]&!i[2]) | (i[5]&i[2]) | (i[4]); assign out.shimm5 = (i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[13]&i[12] &!i[5]&i[4]&!i[2]) | (i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]); assign out.imm20 = (i[5]&i[3]) | (i[4]&i[2]); assign out.pc = (!i[5]&!i[3]&i[2]) | (i[5]&i[3]); assign out.load = (!i[5]&!i[4]&!i[2]); assign out.store = (!i[6]&i[5]&!i[4]); assign out.lsu = (!i[6]&!i[4]&!i[2]); assign out.add = (!i[14]&!i[13]&!i[12]&!i[5]&i[4]) | (!i[5]&!i[3]&i[2]) | (!i[30] &!i[25]&!i[14]&!i[13]&!i[12]&!i[6]&i[4]&!i[2]); assign out.sub = (i[30]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (!i[29]&!i[25]&!i[14] &i[13]&!i[6]&i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]) | ( !i[14]&i[13]&!i[5]&i[4]&!i[2]) | (i[6]&!i[4]&!i[2]); assign out.land = (!i[27]&!i[25]&i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[14]&i[13]&i[12] &!i[5]&!i[2]); assign out.lor = (!i[6]&i[3]) | (!i[29]&!i[27]&!i[25]&i[14]&i[13]&!i[12]&!i[6]&!i[2]) | ( i[5]&i[4]&i[2]) | (!i[13]&!i[12]&i[6]&i[4]) | (i[14]&i[13]&!i[12] &!i[5]&!i[2]); assign out.lxor = (!i[29]&!i[27]&!i[25]&i[14]&!i[13]&!i[12]&i[4]&!i[2]) | (i[14] &!i[13]&!i[12]&!i[5]&i[4]&!i[2]); assign out.sll = (!i[29]&!i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.sra = (i[30]&!i[29]&!i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.srl = (!i[30]&!i[29]&!i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.slt = (!i[29]&!i[25]&!i[14]&i[13]&!i[6]&i[4]&!i[2]) | (!i[14]&i[13]&!i[5] &i[4]&!i[2]); assign out.unsign = (!i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]) | (!i[14]&i[13] &i[12]&!i[5]&!i[2]) | (i[13]&i[6]&!i[4]&!i[2]) | (i[14]&!i[5]&!i[4]) | ( !i[25]&!i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[27]&i[25]&i[14]&i[13] &!i[6]&i[5]&!i[2]); assign out.condbr = (i[6]&!i[4]&!i[2]); assign out.beq = (!i[14]&!i[12]&i[6]&!i[4]&!i[2]); assign out.bne = (!i[14]&i[12]&i[6]&!i[4]&!i[2]); assign out.bge = (i[14]&i[12]&i[5]&!i[4]&!i[2]); assign out.blt = (i[14]&!i[12]&i[5]&!i[4]&!i[2]); assign out.jal = (i[6]&i[2]); assign out.by = (!i[13]&!i[12]&!i[6]&!i[4]&!i[2]); assign out.half = (i[12]&!i[6]&!i[4]&!i[2]); assign out.word = (i[13]&!i[6]&!i[4]); assign out.csr_read = (i[13]&i[6]&i[4]) | (i[7]&i[6]&i[4]) | (i[8]&i[6]&i[4]) | ( i[9]&i[6]&i[4]) | (i[10]&i[6]&i[4]) | (i[11]&i[6]&i[4]); assign out.csr_clr = (i[15]&i[13]&i[12]&i[6]&i[4]) | (i[16]&i[13]&i[12]&i[6]&i[4]) | ( i[17]&i[13]&i[12]&i[6]&i[4]) | (i[18]&i[13]&i[12]&i[6]&i[4]) | ( i[19]&i[13]&i[12]&i[6]&i[4]); assign out.csr_set = (i[15]&!i[12]&i[6]&i[4]) | (i[16]&!i[12]&i[6]&i[4]) | (i[17] &!i[12]&i[6]&i[4]) | (i[18]&!i[12]&i[6]&i[4]) | (i[19]&!i[12]&i[6] &i[4]); assign out.csr_write = (!i[13]&i[12]&i[6]&i[4]); assign out.csr_imm = (i[14]&!i[13]&i[6]&i[4]) | (i[15]&i[14]&i[6]&i[4]) | (i[16] &i[14]&i[6]&i[4]) | (i[17]&i[14]&i[6]&i[4]) | (i[18]&i[14]&i[6]&i[4]) | ( i[19]&i[14]&i[6]&i[4]); assign out.presync = (!i[5]&i[3]) | (!i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | ( !i[13]&i[9]&i[6]&i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11] &i[6]&i[4]) | (i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | ( i[17]&i[13]&i[6]&i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6] &i[4]); assign out.postsync = (i[12]&!i[5]&i[3]) | (!i[22]&!i[13]&!i[12]&i[6]&i[4]) | ( !i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (!i[13]&i[9]&i[6] &i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]&i[6]&i[4]) | ( i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (i[17]&i[13]&i[6] &i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]&i[4]); assign out.ebreak = (!i[22]&i[20]&!i[13]&!i[12]&i[6]&i[4]); assign out.ecall = (!i[21]&!i[20]&!i[13]&!i[12]&i[6]&i[4]); assign out.mret = (i[29]&!i[13]&!i[12]&i[6]&i[4]); assign out.mul = (!i[30]&i[27]&i[24]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | ( i[29]&i[27]&!i[24]&i[23]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | ( i[29]&i[27]&!i[24]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | ( i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[27]&i[13] &!i[6]&i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[22]&!i[20]&i[14]&!i[13] &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[21]&i[20]&i[14]&!i[13] &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[22]&i[21]&i[14]&!i[13] &i[12]&!i[5]&i[4]&!i[2]) | (i[30]&i[29]&i[27]&!i[23]&i[14]&!i[13] &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]&i[23]&i[14]&!i[13]&i[12] &!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&!i[13]&i[12]&!i[6] &i[4]&!i[2]) | (i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&!i[27] &i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[14] &!i[6]&i[5]&!i[2]); assign out.rs1_sign = (!i[27]&i[25]&!i[14]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | ( !i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.rs2_sign = (!i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.low = (i[25]&!i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]); assign out.div = (!i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]); assign out.rem = (!i[27]&i[25]&i[14]&i[13]&!i[6]&i[5]&!i[2]); assign out.fence = (!i[5]&i[3]); assign out.fence_i = (i[12]&!i[5]&i[3]); assign out.clz = (i[30]&!i[27]&!i[24]&!i[22]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5] &i[4]&!i[2]); assign out.ctz = (i[30]&!i[27]&!i[24]&!i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4] &!i[2]); assign out.pcnt = (i[30]&!i[27]&!i[24]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]); assign out.sext_b = (i[30]&!i[27]&i[22]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]); assign out.sext_h = (i[30]&!i[27]&i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]); assign out.slo = (!i[30]&i[29]&!i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.sro = (!i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.min = (i[27]&i[25]&i[14]&!i[12]&!i[6]&i[5]&!i[2]); assign out.max = (i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]); assign out.pack = (!i[30]&i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]); assign out.packu = (i[30]&i[27]&!i[13]&!i[12]&i[5]&i[4]&!i[2]); assign out.packh = (!i[30]&i[27]&!i[25]&i[13]&i[12]&!i[6]&i[5]&!i[2]); assign out.rol = (i[30]&!i[27]&!i[14]&i[12]&!i[6]&i[5]&i[4]&!i[2]); assign out.ror = (i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.zbb = (i[30]&!i[27]&!i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | ( !i[30]&i[27]&i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]) | (i[30]&i[29]&!i[27] &i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[27]&!i[13]&!i[12]&i[5] &i[4]&!i[2]) | (i[30]&i[14]&!i[13]&!i[12]&!i[6]&i[5]&!i[2]) | (i[30] &!i[27]&i[13]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[29]&!i[27]&!i[6]&i[5] &i[4]&!i[2]) | (i[30]&i[29]&i[24]&i[23]&i[22]&i[21]&i[20]&i[14]&!i[13] &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[29]&i[27]&!i[24]&!i[23]&i[22] &i[21]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27] &i[24]&!i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | ( i[30]&i[29]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5] &i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]); assign out.sbset = (!i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.sbclr = (i[30]&!i[29]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.sbinv = (i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.sbext = (i[30]&!i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.zbs = (i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]) | (i[30]&!i[29] &i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.bext = (!i[30]&i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]); assign out.bdep = (i[30]&i[27]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]); assign out.zbe = (i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]); assign out.clmul = (i[27]&i[25]&!i[14]&!i[13]&!i[6]&i[5]&i[4]&!i[2]); assign out.clmulh = (i[27]&!i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]); assign out.clmulr = (i[27]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]); assign out.zbc = (i[27]&i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]); assign out.grev = (i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.gorc = (!i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.shfl = (!i[30]&!i[29]&i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.unshfl = (!i[30]&!i[29]&i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.zbp = (!i[30]&i[29]&!i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[29] &i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[30]&!i[27]&i[13]&!i[6] &i[5]&i[4]&!i[2]) | (i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | ( i[30]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (i[29]&!i[27]&i[12]&!i[6] &i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&i[12]&!i[6]&i[5]&i[4] &!i[2]) | (i[29]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]); assign out.crc32_b = (i[30]&!i[27]&i[24]&!i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12] &!i[5]&i[4]&!i[2]); assign out.crc32_h = (i[30]&!i[27]&i[24]&!i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4] &!i[2]); assign out.crc32_w = (i[30]&!i[27]&i[24]&!i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4] &!i[2]); assign out.crc32c_b = (i[30]&!i[27]&i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5] &i[4]&!i[2]); assign out.crc32c_h = (i[30]&!i[27]&i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]); assign out.crc32c_w = (i[30]&!i[27]&i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]); assign out.zbr = (i[30]&!i[27]&i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]); assign out.bfp = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]); assign out.zbf = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]); assign out.sh1add = (i[29]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]); assign out.sh2add = (i[29]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]); assign out.sh3add = (i[29]&i[14]&i[13]&!i[6]&i[5]&!i[2]); assign out.zba = (i[29]&!i[12]&!i[6]&i[5]&i[4]&!i[2]); assign out.pm_alu = (i[28]&i[22]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[29]&!i[27]&!i[25] &!i[6]&i[4]) | (!i[29]&!i[27]&!i[25]&!i[13]&i[12]&!i[6]&i[4]) | ( !i[29]&!i[27]&!i[25]&!i[14]&!i[6]&i[4]) | (i[13]&!i[5]&i[4]) | (i[4] &i[2]) | (!i[12]&!i[5]&i[4]); assign out.legal = (!i[31]&!i[30]&!i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23] &i[22]&!i[21]&i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11] &!i[10]&!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | ( !i[31]&!i[30]&i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22] &i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10] &!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31] &!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]&!i[21] &!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]&!i[9]&!i[8] &!i[7]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26] &!i[25]&i[24]&!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | ( !i[31]&i[29]&!i[28]&!i[26]&!i[25]&i[24]&!i[22]&!i[21]&!i[6]&!i[5] &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[23] &!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29] &!i[28]&!i[26]&!i[25]&!i[24]&!i[23]&!i[21]&!i[6]&!i[5]&i[4]&!i[3] &i[1]&i[0]) | (!i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[25]&i[13]&!i[6] &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[26]&!i[25]&!i[24] &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27] &!i[26]&!i[25]&i[14]&!i[12]&!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31] &!i[30]&!i[28]&!i[27]&!i[26]&!i[25]&i[13]&!i[12]&!i[6]&i[4]&!i[3] &i[1]&i[0]) | (!i[31]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[13]&!i[12] &!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[28]&!i[27]&!i[26]&!i[25] &i[14]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[29] &!i[28]&!i[26]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | ( !i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1] &i[0]) | (!i[31]&i[30]&!i[28]&i[27]&!i[26]&!i[25]&!i[13]&i[12]&!i[6] &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&i[27]&!i[26]&!i[25] &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27] &!i[26]&!i[25]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30] &!i[29]&!i[28]&!i[27]&!i[26]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | ( !i[14]&!i[13]&!i[12]&i[6]&i[5]&!i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[29] &!i[28]&!i[26]&!i[25]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | ( !i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2] &i[1]&i[0]) | (i[14]&i[6]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[14] &!i[13]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[12]&!i[6]&!i[5]&i[4] &!i[3]&i[1]&i[0]) | (!i[13]&i[12]&i[6]&i[5]&!i[3]&!i[2]&i[1]&i[0]) | ( !i[31]&!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22] &!i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[13]&!i[11] &!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | ( !i[31]&!i[30]&!i[29]&!i[28]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14] &!i[13]&!i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3] &i[2]&i[1]&i[0]) | (i[13]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | ( i[6]&i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (!i[14]&!i[12]&!i[6]&!i[4] &!i[3]&!i[2]&i[1]&i[0]) | (!i[13]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1] &i[0]) | (i[13]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[6]&i[4]&!i[3] &i[2]&i[1]&i[0]); endmodule // el2_dec_dec_ctl