Verilog 运算符优先级引发的血案

今天翻译matlab代码时需要用移位和加法实现乘法,发现一个非常奇怪的问题
需要计算的是 x = 3*a,将a左移一位与a相加,
verilog代码如下:

x <= a + a<<1;

仿真出来的结果 x = 4*a,
如果代码为:

x <= a<<1 + a;

仿真结果为 x = 0。

晓明同学告诉我,要加括号才可以,因为优先级问题,算术操作符优先级高于移位。
下面两个式子效果一样,结果为四倍的a

x <= a + a<<1;
x <= (a + a) <<2;

下面两个式子效果一样,结果为0

x <= a <<1 + a;
x <= a <<(1+a);

只有下面这样才对,两种写法没有区别。

x <= a + (a<<1);
x <= (a<<1) + a;

以前没有用verilog算过数,没有注意过这种问题,以后要注意。
运算符优先级
图来自与非网
http://www.eefocus.com/book/08-01/319421276058797.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值