数字电路设计之算数右移的verilog实现

在verilog语言中,本来>>>就是算数右移的符号,可是在实际仿真的时候我发现效果还是和逻辑右移的效果一样。后来我觉得应该可以自己写一个算了。

方法一:暴力case

          case(shift)       //shift是要移位的数目

                      1:

                              result <= {result[15],result[15:1]};  //假设result是15位的数据

                      2:

                              result <={{2{result[15]}},result[15:2]};

                      ......

                      default:

                             result <= {16{result[15]}};

          endcase

方法二:循环法(后来我发现不可行,不支持非常数)

          integer  i;//i要在外面定义,不过一般不要用循环,循环是仿真的时候常用的,综合的时候不要用

           for( i=0;i < shift;i=i+1)

                begin

                       result <= {result[15],result[15:1]};

                end

我写的一个M0 CPU就是使用这种方法进行算数右移的。这里需要注意的是括号:

case(reg_A)//假设数据16位
                 0:  ALUo <= reg_B;
                 1:  ALUo <= {reg_B[15],reg_[15:1]};
                  2:  ALUo <= {{2{reg_B[15]}},reg_B[15:2]};
                  3:  ALUo <= {{3{reg_B[15]}},reg_B[15:3]};
                  4:  ALUo <= {{4{reg_B[15]}},reg_B[15:4]};
                  5:  ALUo <= {{5{reg_B[15]}},reg_B[15:5]};
                  6:  ALUo <= {{6{reg_B[15]}},reg_B[15:6]};
                  7:  ALUo <= {{7{reg_B[15]}},reg_B[15:7]};
                  8:  ALUo <= {{8{reg_B[15]}},reg_B[15:8]};
                  9:  ALUo <= {{9{reg_B[15]}},reg_B[15:9]};
                  10: ALUo <= {{10{reg_B[15]}},reg_B[15:10]};
                  11: ALUo <= {{11{reg_B[15]}},reg_B[15:11]};
                  12: ALUo <= {{12{reg_B[15]}},reg_B[15:12]};
                  13: ALUo <= {{13{reg_B[15]}},reg_B[15:13]};
                  14: ALUo <= {{14{reg_B[15]}},reg_B[15:14]};
                  default:
                      ALUo <= {16{reg_B[15]}};
              endcase
--------------------- 
作者:Snail_Walker 
来源:CSDN 
原文:https://blog.csdn.net/c602273091/article/details/38367385 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值