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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 3464|回复: 4

[求助] Verilog中求绝对值的一点困惑

[复制链接]
发表于 2023-3-8 15:34:31 | 显示全部楼层
这个问题,其实跟verilog关系不大,你需要再去翻翻数字电路的基础教材,或者是计算机原理的基础教材,去理解补码的来龙去脉,补码是一个文字游戏,是人们为了利用最简单的二进制全加器电路,实现二进制加减法,通过重新定义一个最简电路的运算结果,以最小的代价实现更多的功能,比如,我们要计算0 - 1,加入我们就用两比特来表示操作数,就是 0b00 - 0b01 = 0b11,咋办,结果错了,但如果你按补码去解读结果数据,巧了,0b11就是-1;但是,我们现在只有加法器,前面用的是减法器,咋办?好,我们把- 1改写成 + (-1)呢,-1,用两比特表示的补码是0b11,然后,我们来计算 0b00 + 0b11 = 0b11,结果是-1,还是那么巧,结果正确,如果要计算 1 - 1呢,计算 1 + (-1),就是0b01 + 0b11 = 0b00,结果就是0。所以,通过补码的定义,人们发现,只要在原来的二进制全加器的基础上,增加一个sub信号,将这个信号作为此全加器的进位输入,同时在全加器的其中一个操作数的前端,利用此信号控制一个反相器的选择,从而可以实现在电路端将正/负、加/减统一起来。建议你去翻教材,毕竟教材图文并茂,比我讲的更生动,更容易理解。


至于你说的程序运行结果是对的,这倒不一定,因为你给出的代码片段可能有问题:第一种条件(即gx,gy都为负数时),如果都是-128,因为gxy定义为8bits的,这个地方计算会出错,会溢出,导致gxy的结果会变为0,我不知道你这个程序的原理是不是保证了gx,gy不会同时为-128,所以我不确定你这个电路是不是真的不会出错。
回复 支持 1 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-10-17 08:40 , Processed in 0.011923 second(s), 4 queries , Gzip On, Redis On.

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