module Ext( input [31:0] DataIn, input [1:0] ExtOp, output [31:0] DataOut ); wire [31:0] imm12, imm16, imm20, imm26; assign imm12 = {{20{DataIn[21]}}, DataIn[21:10]}; assign imm16 = {{14{DataIn[25]}}, DataIn[25:10], 2'b0}; assign imm20 = {DataIn[24:5], 12'b0}; assign imm26 = {{4{DataIn[9]}}, DataIn[9:0], DataIn[25:10], 2'b0}; reg [31:0] temp_DataOut; always @(*) begin case (ExtOp) 2'b00: temp_DataOut = imm12; 2'b01: temp_DataOut = imm16; 2'b10: temp_DataOut = imm20; 2'b11: temp_DataOut = imm26; default: temp_DataOut = 32'hxxxxxxxx; endcase end assign DataOut = temp_DataOut; endmodule