前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >桶式移位器

桶式移位器

作者头像
瓜大三哥
发布2018-02-26 10:34:20
1.4K0
发布2018-02-26 10:34:20
举报
文章被收录于专栏:瓜大三哥瓜大三哥

桶式移位器是一种组合逻辑电路,通常作为微处理器CPU的一部分。它具有n个数据输入和n个数据输出,以及指定如何移动数据的控制输入,指定移位方向、移位类(循环、算术还是逻辑移位)及移动的位数等等。

代码语言:js
复制
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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 桶式移位器是一种组合逻辑电路,通常作为微处理器CPU的一部分。它具有n个数据输入和n个数据输出,以及指定如何移动数据的控制输入,指定移位方向、移位类(循环、算术还是逻辑移位)及移动的位数等等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档