在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7050|回复: 9

[求助] verilog乘法结果位宽求助

[复制链接]
发表于 2014-6-10 10:23:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我对以下四种形式的乘法式子用vcs仿真,其中y的位宽要比a1和a2的位宽之和大:
y = a1 * a2 ;
y = {补零, a1 * a2} ;
y = a1 * 常数 ;
y = {补零, a1 * 常数} ;

结果发现前面不补零时,乘法结果的有效位数会自动扩展为两个乘数位宽之和,从而得到正确的结果;
但当前面补零时(比如为了修正nlint的错误),则由两个乘数中位宽大者的位宽决定结果的位宽,从而出现结果高位被截断的情况。

比如,若a1=2'h3,a2=3'h5,y应为15d(01111b),但实际结果为7d(111b),也就是说a2的位宽决定了结果的有效位数。

请问这是verilog的规定,还是vcs的问题,还是我哪里的问题?
发表于 2014-6-10 10:45:09 | 显示全部楼层
verilog决定。
 楼主| 发表于 2014-6-10 11:11:17 | 显示全部楼层
回复 2# A1985


    有可查的规定吗?
发表于 2014-6-10 11:36:25 | 显示全部楼层
无论做什么运算,先按运算式的最宽的位宽扩展,然后再做运算。
 楼主| 发表于 2014-6-10 12:09:09 | 显示全部楼层
回复 4# haimo


    你说的意思是3位运算数a和2位运算数b做某种运算,b会扩展为3位。那运算结果的位宽怎么定呢?
发表于 2014-6-10 13:12:22 | 显示全部楼层
回复 5# zsftm

还要看结果的位宽,比如3位a+5位b,赋给8位y,那么先将3位和5位扩展为8位,再乘。

比如y= a*b

而单a*b,就可着b的位宽,先得出5位的结果,然后再做后面的拼接运算。
比如y= {1‘b0,a*b}
 楼主| 发表于 2014-6-10 13:32:46 | 显示全部楼层
回复 6# haimo


    这个在IEEE 1364上有说明吗?
发表于 2014-6-10 13:54:59 | 显示全部楼层
回复 7# zsftm


    可以看一下2001的4.4节expression bit length,4.4.2举的例子与你的例子相似。
发表于 2014-6-13 17:49:43 | 显示全部楼层
先扩展后运算。
发表于 2014-6-13 22:12:45 | 显示全部楼层
先扩展,再运用。注意有符号数和无符号数的区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-28 14:45 , Processed in 0.025231 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表