# Pastebin H6sTgMvP always @(mb_sig) begin mb_shift_sig = mb_sig << 18; end always @ (op_sig_gen_new or ma_sig_m or r_sig or c_sig_gen_new or a_sig) begin case (op_sig_gen_new[1:0]) 2'b00 : a_mux = {r_sig}; // [53:0] 2'b01 : a_mux = ma_sig_m; 2'b10 : a_mux = {(signedr_sig & c_sig_gen_new[17]), c_sig_gen_new[17:0], a_sig}; 2'b11 : a_mux = 0; endcase end always @ (op_sig_gen_new or mb_sig_m or c_sig_gen_new or b_sig or mb_shift_sig) begin case (op_sig_gen_new[3:2]) 2'b00 : b_mux = mb_shift_sig; 2'b01 : b_mux = mb_sig_m; 2'b10 : b_mux = {(signedr_sig & c_sig_gen_new[44]), c_sig_gen_new[44:27], b_sig}; 2'b11 : b_mux = 0; endcase end always @(cin_sig or signedcin_sig) begin if (signedcin_sig == 1'b1) begin cin_shift_sig[35:0] = cin_sig[53:18]; cin_shift_sig[54:36] = { cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53], cin_sig[53]}; end else begin cin_shift_sig[35:0] = cin_sig[53:18]; cin_shift_sig[54:36] = 0; end end always @ (*) begin case (op_sig_gen_new[6:4]) 3'b000 : c_mux = 0; 3'b001 : c_mux = cin_shift_sig; 3'b010 : c_mux = {signedcin_sig, cin_sig}; 3'b011 : c_mux = {(c_sig_gen_new[53] & signedr_sig), c_sig_gen_new}; 3'b100 : c_mux = {(c_sig_gen_new[17] & signedr_sig), c_sig_gen_new[17:0], a_sig}; // 3'b101 : c_mux = {r_sig[51], r_sig[51], r_sig[51:0]}; 3'b101 : c_mux = {r_sig}; // [53:0] 3'b110 : c_mux = {1'b0, rnd_pattern}; 3'b111 : c_mux = {1'b0, rnd_pattern_m1}; endcase end always @ (a_mux or b_mux or c_mux or op_sig_gen_new) begin case (op_sig_gen_new[10:7]) 4'b0000 : r_out = ~(b_mux & c_mux); // nand 4'b0100 : begin r_out = (a_mux + b_mux + c_mux); r_out1 = (a_mux[53:0] + b_mux[53:0] + c_mux[53:0]); end 4'b0101 : begin r_out = (a_mux - b_mux + c_mux); r_out1 = (a_mux[53:0] - b_mux[53:0] + c_mux[53:0]); end 4'b0110 : begin r_out = (a_mux + b_mux - c_mux); r_out1 = (a_mux[53:0] + b_mux[53:0] - c_mux[53:0]); end 4'b0111 : begin r_out = (a_mux - b_mux - c_mux); r_out1 = (a_mux[53:0] - b_mux[53:0] - c_mux[53:0]); end 4'b1100 : r_out = (b_mux ^~ c_mux); // xnor 4'b1110 : r_out = (b_mux ^ c_mux); // xor 4'b1000 : r_out = (b_mux & c_mux); // and 4'b0011 : r_out = (b_mux | c_mux); // or 4'b1011 : r_out = ~(b_mux | c_mux); // nor endcase end