verilog逻辑移位与算术移位的区别(有仿真)

本文通过一个具体的Verilog代码示例,详细解释了逻辑移位(>>)与算术移位(>>>)的区别。在Verilog中,逻辑移位忽略符号位,而算术移位则考虑符号位。文中使用Vivado进行行为级仿真,展示32位数据在不同移位操作后的结果,强调了$signed关键字在处理有符号数移位时的重要性。通过仿真实现,读者能清晰理解两种移位操作的差异。
摘要由CSDN通过智能技术生成

本文首发于公众号【木叶芯】,版权所有,禁止转载。

如需转载,请在评论区留言或私信申请,经同意后可转载,否则属于侵权行为

作者昵称:城外南风起

原文链接:verilog逻辑移位与算术移位的区别(有仿真)

————————————————

verilog中,逻辑移位与算术移位的右移符号分别为“>>”和“>>>”,左移同理。

两者的区别在于:逻辑移位不考虑符号位,左移和右移都只补零;算术移位考虑符号位,左移补零,右移补符号位。

在vivado中进行行为级仿真,原始数据位32’hFF00ABC4,dout1为先逻辑左移再逻辑右移,dout2和dout3为先逻辑左移再算数右移。dout2和dout3的区别在于,verilog默认是无符号的,需要通过$signed声明有符号数。如果不声明,则会默认为无符号数,从而不区分算术左移与逻辑左移。

testbench仿真代码:

module test();
	wire [31:0] din,dout1,dout2,dout3;
	
    assign din = 32'hFF00ABC4;
    assign dout1 = (din<<2)>>4;
    assign dout2 = (din<<2)>>>4;
    assign dout3 = ($signed(din<<2))>>>4;
    
endmodule

仿真结果:

可以看到,dout1 = 0fc02af1,dout2 = 0fc02af1,dout3 = ffc02af1。结果正确。

————————————————

感谢您的阅读,欢迎 点赞 / 评论 / 收藏 / 打赏 ~

我是城外南风起,欢迎关注我的公众号【木叶芯】。

在这里插入图片描述
以下链接可以快速搜索公众号内的文章:号内搜

木叶飞舞之处,火亦生生不息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城外南风起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值