Verilog|有无符号加法与乘法运算

一、无符号:

直接运算

二、有符号与无符号:

强制当作无符号运算

如c=a+b,a、b四位,c五位,计算时Verilog会将a和b扩展到五位再做加法,如果ab中有无符号数,则展宽会按照无符号数来,就是高位补0,因此有符号数结果将不正确。

解决:$signed(),c=a+$signed(b),扩展会按照有符号数的方式扩展,高位补符号位(1负,0正)。

三、乘法:

原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。

如:八位数

[+1]原 = 0000 0001

[-1]原 = 1000 0001

反码:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

补码:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

正负数相乘,负数要取补码

1、a与b均为正数

假设a=+5,b=+3

直接相乘,然后用最高位补齐8位(标蓝色的为扩展的符号位),再相加。又因为正数的补码就是其本身,所以得到结果00001111,化为十进制就是+15,正确。

2、a为正数,b为负数

假设a=+5,b=-3,则a的补码为0101,b的补码为1101。

3、a为负数,b为正数

4、a与b均为负数

先补再乘,补的是两个乘数,符号位乘乘数时,整体取反加一。

参考:有符号数乘法运算_ZZZTTTCCC123的博客-CSDN博客

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值