module barrelshift_32( input [31:0] a, // 32 位原始输入数据 input [4:0] b, // 5 位输入数据,控制移位的位数 input [1:0] aluc, // 2 位输入控制移位的方式 output reg [31:0] c // 32 位输出,由a 经过b 位通过aluc 指定的移位方 ); always @ (a or b or aluc) begin if(aluc==2'b00) begin case(b) //移位数 5'b00000:c=a; //移动0位,不变 5'b00001:c={{2{a[31]}},a[29:0]}; 5'b00010:c={{3{a[31]}},a[28:0]}; 5'b00011:c={{4{a[31]}},a[27:0]}; 5'b00100:c={{5{a[31]}},a[26:0]}; 5'b00101:c={{6{a[31]}},a[25:0]}; 5'b00110:c={{7{a[31]}},a[24:0]}; 5'b00111:c={{8{a[31]}},a[23:0]}; 5'b01000:c={{9{a[31]}},a[22:0]}; 5'b01001:c={{10{a[31]}},a[21:0]}; 5'b01010:c={{11{a[31]}},a[20:0]}; 5'b01011:c={{12{a[31]}},a[19:0]}; 5'b01100:c={{13{a[31]}},a[18:0]}; 5'b01101:c={{14{a[31]}},a[17:0]}; 5'b01110:c={{15{a[31]}},a[16:0]}; 5'b01111:c={{16{a[31]}},a[15:0]}; 5'b10000:c={{17{a[31]}},a[14:0]}; 5'b10001:c={{18{a[31]}},a[13:0]}; 5'b10010:c={{19{a[31]}},a[12:0]}; 5'b10011:c={{20{a[31]}},a[11:0]}; 5'b10100:c={{21{a[31]}},a[10:0]}; 5'b10101:c={{22{a[31]}},a[9:0]}; 5'b10110:c={{23{a[31]}},a[8:0]}; 5'b10111:c={{24{a[31]}},a[7:0]}; 5'b11000:c={{25{a[31]}},a[6:0]}; 5'b11001:c={{26{a[31]}},a[5:0]}; 5'b11010:c={{27{a[31]}},a[4:0]}; 5'b11011:c={{28{a[31]}},a[3:0]}; 5'b11100:c={{29{a[31]}},a[2:0]}; 5'b11101:c={{30{a[31]}},a[1:0]}; 5'b11110:c={{31{a[31]}},a[0]}; 5'b11111:c={32{a[31]}}; endcase end if(aluc==2'b01) begin case(b) 5'b00000:c=a; 5'b00001:c={1'b0,a[31:1]}; 5'b00010:c={2'b0,a[31:2]}; 5'b00011:c={3'b0,a[31:3]}; 5'b00100:c={4'b0,a[31:4]}; 5'b00101:c={5'b0,a[31:5]}; 5'b00110:c={6'b0,a[31:6]}; 5'b00111:c={7'b0,a[31:7]}; 5'b01000:c={8'b0,a[31:8]}; 5'b01001:c={9'b0,a[31:9]}; 5'b01010:c={10'b0,a[31:10]}; 5'b01011:c={11'b0,a[31:11]}; 5'b01100:c={12'b0,a[31:12]}; 5'b01101:c={13'b0,a[31:13]}; 5'b01110:c={14'b0,a[31:14]}; 5'b01111:c={15'b0,a[31:15]}; 5'b10000:c={16'b0,a[31:16]}; 5'b10001:c={17'b0,a[31:17]}; 5'b10010:c={18'b0,a[31:18]}; 5'b10011:c={19'b0,a[31:19]}; 5'b10100:c={20'b0,a[31:20]}; 5'b10101:c={21'b0,a[31:21]}; 5'b10110:c={22'b0,a[31:22]}; 5'b10111:c={23'b0,a[31:23]}; 5'b11000:c={24'b0,a[31:24]}; 5'b11001:c={25'b0,a[31:25]}; 5'b11010:c={26'b0,a[31:26]}; 5'b11011:c={27'b0,a[31:27]}; 5'b11100:c={28'b0,a[31:28]}; 5'b11101:c={29'b0,a[31:29]}; 5'b11110:c={30'b0,a[31:30]}; 5'b11111:c={31'b0,a[31]}; endcase end if(aluc==2'b10) begin case(b) 5'b00000:c=a; 5'b00001:c={a[31],a[29:0],1'b0}; 5'b00010:c={a[31],a[28:0],2'b0}; 5'b00011:c={a[31],a[27:0],3'b0}; 5'b00100:c={a[31],a[26:0],4'b0}; 5'b00101:c={a[31],a[25:0],5'b0}; 5'b00110:c={a[31],a[24:0],6'b0}; 5'b00111:c={a[31],a[23:0],7'b0}; 5'b01000:c={a[31],a[22:0],8'b0}; 5'b01001:c={a[31],a[21:0],9'b0}; 5'b01010:c={a[31],a[20:0],10'b0}; 5'b01011:c={a[31],a[19:0],11'b0}; 5'b01100:c={a[31],a[18:0],12'b0}; 5'b01101:c={a[31],a[17:0],13'b0}; 5'b01110:c={a[31],a[16:0],14'b0}; 5'b01111:c={a[31],a[15:0],15'b0}; 5'b10000:c={a[31],a[14:0],16'b0}; 5'b10001:c={a[31],a[13:0],17'b0}; 5'b10010:c={a[31],a[12:0],18'b0}; 5'b10011:c={a[31],a[11:0],19'b0}; 5'b10100:c={a[31],a[10:0],20'b0}; 5'b10101:c={a[31],a[9:0],21'b0}; 5'b10110:c={a[31],a[8:0],22'b0}; 5'b10111:c={a[31],a[7:0],23'b0}; 5'b11000:c={a[31],a[6:0],24'b0}; 5'b11001:c={a[31],a[5:0],25'b0}; 5'b11010:c={a[31],a[4:0],26'b0}; 5'b11011:c={a[31],a[3:0],27'b0}; 5'b11100:c={a[31],a[2:0],28'b0}; 5'b11101:c={a[31],a[1:0],29'b0}; 5'b11110:c={a[31],a[0],30'b0}; 5'b11111:c={a[31],31'b0}; endcase end if(aluc==2'b11) begin case(b) 5'b00000:c=a; 5'b00001:c={a[30:0],1'b0}; 5'b00010:c={a[29:0],2'b0}; 5'b00011:c={a[28:0],3'b0}; 5'b00100:c={a[27:0],4'b0}; 5'b00101:c={a[26:0],5'b0}; 5'b00110:c={a[25:0],6'b0}; 5'b00111:c={a[24:0],7'b0}; 5'b01000:c={a[23:0],8'b0}; 5'b01001:c={a[22:0],9'b0}; 5'b01010:c={a[21:0],10'b0}; 5'b01011:c={a[20:0],11'b0}; 5'b01100:c={a[19:0],12'b0}; 5'b01101:c={a[18:0],13'b0}; 5'b01110:c={a[17:0],14'b0}; 5'b01111:c={a[16:0],15'b0}; 5'b10000:c={a[15:0],16'b0}; 5'b10001:c={a[14:0],17'b0}; 5'b10010:c={a[13:0],18'b0}; 5'b10011:c={a[12:0],19'b0}; 5'b10100:c={a[11:0],20'b0}; 5'b10101:c={a[10:0],21'b0}; 5'b10110:c={a[9:0],22'b0}; 5'b10111:c={a[8:0],23'b0}; 5'b11000:c={a[7:0],24'b0}; 5'b11001:c={a[6:0],25'b0}; 5'b11010:c={a[5:0],26'b0}; 5'b11011:c={a[4:0],27'b0}; 5'b11100:c={a[3:0],28'b0}; 5'b11101:c={a[2:0],29'b0}; 5'b11110:c={a[1:0],30'b0}; 5'b11111:c={a[0],31'b0}; endcase end end endmodule
本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise)
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2017-03-05
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句