`timescale 1ns / 1ps module ext( input [15:0] imm, input [1:0] EOp, output [31:0] ext ); wire [31:0] ans1; assign ans1 = $signed(imm) < 0 ? {16'hffff, imm} : {16'h0000, imm}; wire [31:0] ans2; assign ans2 = {16'h0000, imm}; wire [31:0] ans3; assign ans3 = {imm, 16'h0000}; wire [31:0] ans4; assign ans4 = ans1 << 2; assign ext = EOp == 2'b00 ? ans1 : EOp == 2'b01 ? ans2 : EOp == 2'b10 ? ans3 : EOp == 2'b11 ? ans4 : ans1; endmodule