www.pudn.com > x86.rar > rotate.v, change:2007-12-05,size:10820b


module rotate(rotateOut, rotateBitOut, rotateBitIn, rotateIn, count, direction); 
input [31:0] rotateIn; 
input [4:0] count; 
input rotateBitIn,direction; 
output [31:0] rotateOut; 
output rotateBitOut; 
reg [31:0] rotateOut; 
reg rotateBitOut; 
 
always@(rotateIn or count or direction or rotateBitIn) 
 begin 
  case(count) 
   5'd1: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[31]; 
        rotateOut = {rotateIn[30:0], rotateIn[31]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[0]; 
        rotateOut = {rotateIn[0], rotateIn[31:1]}; 
       end 
     endcase 
    end 
 
   5'd2: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[30]; 
        rotateOut = {rotateIn[29:0], rotateIn[31:30]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[1]; 
        rotateOut = {rotateIn[1:0],  rotateIn[31:2]}; 
       end 
     endcase 
    end 
 
   5'd3: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[29]; 
        rotateOut = {rotateIn[28:0], rotateIn[31:29]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[2]; 
        rotateOut = {rotateIn[2:0],  rotateIn[31:3]}; 
       end 
     endcase 
    end 
 
   5'd4: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[28]; 
        rotateOut = {rotateIn[27:0], rotateIn[31:28]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[3]; 
        rotateOut = {rotateIn[3:0],  rotateIn[31:4]}; 
       end 
     endcase 
    end 
 
   5'd5: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[27]; 
        rotateOut = {rotateIn[26:0],  rotateIn[31:27]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[4]; 
        rotateOut = {rotateIn[4:0],  rotateIn[31:5]}; 
       end 
     endcase 
    end 
 
   5'd6: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[26]; 
        rotateOut = {rotateIn[25:0],  rotateIn[31:26]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[5]; 
        rotateOut = {rotateIn[5:0],  rotateIn[31:6]}; 
       end 
     endcase 
    end 
 
   5'd7: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[25]; 
        rotateOut = {rotateIn[24:0],  rotateIn[31:25]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[6]; 
        rotateOut = {rotateIn[6:0],  rotateIn[31:7]}; 
       end 
     endcase 
    end 
 
   5'd8: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[24]; 
        rotateOut = {rotateIn[23:0],  rotateIn[31:24]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[7]; 
        rotateOut = {rotateIn[7:0],  rotateIn[31:8]}; 
       end 
     endcase 
    end 
 
   5'd9: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[23]; 
        rotateOut = {rotateIn[22:0],  rotateIn[31:23]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[8]; 
        rotateOut = {rotateIn[8:0],  rotateIn[31:9]}; 
       end 
     endcase 
    end 
 
   5'd10: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[22]; 
        rotateOut = {rotateIn[21:0],  rotateIn[31:22]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[9]; 
        rotateOut = {rotateIn[9:0],  rotateIn[31:10]}; 
       end 
     endcase 
    end 
 
   5'd11: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[21]; 
        rotateOut = {rotateIn[20:0],  rotateIn[31:21]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[10]; 
        rotateOut = {rotateIn[10:0],  rotateIn[31:11]}; 
       end 
     endcase 
    end 
 
   5'd12: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[20]; 
        rotateOut = {rotateIn[19:0],  rotateIn[31:20]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[11]; 
        rotateOut = {rotateIn[11:0],  rotateIn[31:12]}; 
       end 
     endcase 
    end 
 
   5'd13: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[19]; 
        rotateOut = {rotateIn[18:0],  rotateIn[31:19]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[12]; 
        rotateOut = {rotateIn[12:0],  rotateIn[31:13]}; 
       end 
     endcase 
    end 
 
   5'd14: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[18]; 
        rotateOut = {rotateIn[17:0],  rotateIn[31:18]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[13]; 
        rotateOut = {rotateIn[13:0],  rotateIn[31:14]}; 
       end 
     endcase 
    end 
 
   5'd15: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[17]; 
        rotateOut = {rotateIn[16:0],  rotateIn[31:17]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[14]; 
        rotateOut = {rotateIn[14:0],  rotateIn[31:15]}; 
       end 
     endcase 
    end 
 
   5'd16: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[16]; 
        rotateOut = {rotateIn[15:0],  rotateIn[31:16]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[15]; 
        rotateOut = {rotateIn[15:0],  rotateIn[31:16]}; 
       end 
     endcase 
    end 
 
   5'd17: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[15]; 
        rotateOut = {rotateIn[14:0],  rotateIn[31:15]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[16]; 
        rotateOut = {rotateIn[16:0],  rotateIn[31:17]}; 
       end 
     endcase 
    end 
 
   5'd18: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[14]; 
        rotateOut = {rotateIn[13:0],  rotateIn[31:14]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[17]; 
        rotateOut = {rotateIn[17:0],  rotateIn[31:18]}; 
       end 
     endcase 
    end 
 
   5'd19: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[13]; 
        rotateOut = {rotateIn[12:0],  rotateIn[31:13]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[18]; 
        rotateOut = {rotateIn[18:0],  rotateIn[31:19]}; 
       end 
     endcase 
    end 
 
   5'd20: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[12]; 
        rotateOut = {rotateIn[11:0],  rotateIn[31:12]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[19]; 
        rotateOut = {rotateIn[19:0],  rotateIn[31:20]}; 
       end 
     endcase 
    end 
 
   5'd21: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[11]; 
        rotateOut = {rotateIn[10:0],  rotateIn[31:11]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[20]; 
        rotateOut = {rotateIn[20:0],  rotateIn[31:21]}; 
       end 
     endcase 
    end 
 
   5'd22: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[10]; 
        rotateOut = {rotateIn[9:0],  rotateIn[31:10]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[21]; 
        rotateOut = {rotateIn[21:0],  rotateIn[31:22]}; 
       end 
     endcase 
    end 
 
   5'd23: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[9]; 
        rotateOut = {rotateIn[8:0],  rotateIn[31:9]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[22]; 
        rotateOut = {rotateIn[22:0],  rotateIn[31:23]}; 
       end 
     endcase 
    end 
 
   5'd24: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[8]; 
        rotateOut = {rotateIn[7:0],  rotateIn[31:8]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[23]; 
        rotateOut = {rotateIn[23:0],  rotateIn[31:24]}; 
       end 
     endcase 
    end 
 
   5'd25: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[7]; 
        rotateOut = {rotateIn[6:0],  rotateIn[31:7]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[24]; 
        rotateOut = {rotateIn[24:0],  rotateIn[31:25]}; 
       end 
     endcase 
    end 
 
   5'd26: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[6]; 
        rotateOut = {rotateIn[5:0],  rotateIn[31:6]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[25]; 
        rotateOut = {rotateIn[25:0],  rotateIn[31:26]}; 
       end 
     endcase 
    end 
 
   5'd27: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[5]; 
        rotateOut = {rotateIn[4:0],  rotateIn[31:5]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[26]; 
        rotateOut = {rotateIn[26:0],  rotateIn[31:27]}; 
       end 
     endcase 
    end 
 
   5'd28: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[4]; 
        rotateOut = {rotateIn[3:0],  rotateIn[31:4]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[27]; 
        rotateOut = {rotateIn[27:0],  rotateIn[31:28]}; 
       end 
     endcase 
    end 
 
   5'd29: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[3]; 
        rotateOut = {rotateIn[2:0],  rotateIn[31:3]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[28]; 
        rotateOut = {rotateIn[28:0],  rotateIn[31:29]}; 
       end 
     endcase 
    end 
 
   5'd30: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[2]; 
        rotateOut = {rotateIn[1:0],  rotateIn[31:2]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[29]; 
        rotateOut = {rotateIn[29:0],  rotateIn[31:30]}; 
       end 
     endcase 
    end 
 
   5'd31: 
    begin 
     case(direction) 
      1'b0: 
       begin 
        rotateBitOut = rotateIn[1]; 
        rotateOut = {rotateIn[0],  rotateIn[31:1]}; 
       end 
      1'b1: 
       begin 
        rotateBitOut = rotateIn[30]; 
        rotateOut = {rotateIn[30:0],  rotateIn[31]}; 
       end 
     endcase 
    end 
   default: 
     begin 
       rotateBitOut = rotateBitIn; 
       rotateOut = rotateIn; 
     end 
  endcase 
 end 
endmodule