Verilog 中的移位(算术移位, 逻辑移位, 循环移位)

举报
李锐博恩 发表于 2021/07/15 03:50:46 2021/07/15
【摘要】 (1)>>>(算术右移)与>>(逻辑右移)的区别: 逻辑右移就是不考虑符号位,右移一位,左边补零即可。算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,;否则,就补0。 所以算术右移也可以进行有符号位的除法,右移,n位就等于除2的n次方。 例如,8位二进制数11001101分别右移一位。 逻辑右移就是[0]1100110算术右移就是...

(1)>>>(算术右移)与>>(逻辑右移)的区别:

逻辑右移就是不考虑符号位,右移一位,左边补零即可。
算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,;否则,就补0。
所以算术右移也可以进行有符号位的除法,右移,n位就等于除2的n次方

例如,8位二进制数11001101分别右移一位。
逻辑右移就是[0]1100110
算术右移就是[1]1100110

(2)<<:(左移位运算符) >>:(右移位运算符)

在Verilog HDL中有两种移位运算符。

<<:(左移位运算符) >>:(右移位运算符)

其使用方法如下:
a >> n;
a << n;
a代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。下面举例说明:
module shift;
reg [3:0] start, result;
initial begin
start = 1; //start在初始时刻设为值0001
result = (start<<2); //移位后,start的值0100,然后赋给result
end
endmodule
--------------------- 
作者:proton_boke 
原文:https://blog.csdn.net/proton_boke/article/details/60597453 

(3)实现循环移位

//实现循环右移
reg [7:0] shifter;
always(posedge clk )
begin
shifter<={shifter[0],shifter[7:1]};
end

//解释:每一次都是把原来的最低位,往最高位搬移一次。
//实现循环左移
reg [7:0] shifter;
always(posedge clk)
begin
shifter<={shifter[6:0],shifter[7]};
end

//每一次都是把原来的最高位,往最低位搬移一次
--------------------- 
作者:ciscomonkey 
原文:https://blog.csdn.net/ciscomonkey/article/details/83660563 

(4)

算​术左移和逻辑左移一样都是右边补0:

比如 00101011​

算术左移一位:01010110

逻辑左移一位​:01010110

对于二进制的数值来说左移n位等于原来的数值乘以2的n次方

比如00011010十进制是26,左移两位后是011010​00转成十进制是104恰好是26的4倍。

ps:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。​


逻辑右移很简单,只要将二进制数整体右移,左边补0即可

如10101101逻辑右移一位为01010110

算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0

比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1)

对于二进制的数值来说右移n位等于原来的数值除以2的n次方

比如10110100十进制是76(需要先将这个补码转换成原码之后再转换成十进制),右移两位后是11101101转成十进制是19恰好是76的4倍。

​ps:这种倍数关系只适用于右移后被舍弃的低位不含1的情况,否则每舍一次1则代表余数被舍去,保留整数部分。
--------------------- 
作者:狐非 
原文:https://blog.csdn.net/yddj5/article/details/52822366 
 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/89813616

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。