verilog---有符号数相乘注意事项

作为博客小白,这是我的第一篇帖子。我就分享一下今天浪费了我一早上获得的小知识点。

先看下面的代码:

 wire[43:0] sc[6:0];
 wire[55:0] c[6:0];
 wire[55:0] c1[6:0];
 wire[55:0] c2,c3;

assign c1[0]=720*sc[0];
assign c1[1]=80*sc[1];
assign c1[2]=240*$signed(sc[2]);
assign c1[3]=6 *sc[3];
assign c1[4]=10*$signed(sc[4]);
assign c1[5]=16*$signed(sc[5]);
assign c1[6]=720*sc[6];
assign c2=c1[0]+c1[1]+c1[2]-c1[3]-c1[4]-c1[5]+c1[6];


assign c3=720*sc[0]+80*sc[1]+240*$signed(sc[2])-6 *sc[3]-10*$signed(sc[4])-16*$signed(sc[5])+720*sc[6];

按理说的得到的c2和c3值应该是相等的,但是事实上并不是这样的。如果上面所涉及到的数字都是正数的话得到的值是相等的,但是一旦涉及到负数,结果就会不一样。为了区别两种计算方法,我将字体的颜色分别设置为红色和蓝色。红色部分的计算方式不管是正数或者负数,计算的结果都会是正确的。但是蓝色部分计算负数时却会出错,这是因为这个长的赋值运算的计算顺序是先将各个乘

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值