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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1948|回复: 6

[求助] 关于verilog有符号数的运算

[复制链接]
发表于 2021-9-26 17:26:47 | 显示全部楼层 |阅读模式

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

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

x
我在尝试使用verilog中一个内置函数$signed的过程中遇到了一些问题
两个有符号数ai_s di_s相加的时候,如果它们都为正数则结果正确,但当有一个负数时就会出现错误,如ai_s = -81,di_s = 125时 相加的结果do_s = -212,这显然是错误的我算了一下ai_s和di_s的二进制相加即10101111+01111101=100101100 即do_s的二进制结果,它当作了两个无符号数相加

以下是.v和testbench及编译结果
我在查阅资料时发现$signed之后就可以直接运算但我尝试了并不对,想知道问题出在了哪

image.png
image.png image.png
image.png


发表于 2021-9-27 11:01:06 | 显示全部楼层
你代码里面直接相加的意思是两个无符号数相加,建议你先把输入转换成补码,然后相加,最后把补码转换成源码。
 楼主| 发表于 2021-9-27 11:24:46 | 显示全部楼层


smarthb 发表于 2021-9-27 11:01
你代码里面直接相加的意思是两个无符号数相加,建议你先把输入转换成补码,然后相加,最后把补码转换成源码 ...


没有明白,可以具体说一下吗?
发表于 2021-9-27 14:58:05 | 显示全部楼层


Dyliner02 发表于 2021-9-27 11:24
没有明白,可以具体说一下吗?


就是做加法前,源码转换成补码,然后进行加法,输出时把结果转换成源码
计算机里面的加法运算基本上都是补码进行
你的需求是两个3bit的有符号数相加,结果是一个4bit的有符号数
先把两个3bit的有符号数转换为4bit补码,然后相加,只保留4bit累加结果,进位舍去,最后把这个结果转换成源码,就是输出
具体源码,补码,反码是如何定义的,网上有资料。
发表于 2021-9-27 21:24:05 | 显示全部楼层
如果把结果值的最高位抹去,结果就是对的,感觉8bit+8bit的有符号数相加是要考虑结果溢出与不溢出的情况
 楼主| 发表于 2021-9-29 10:48:46 | 显示全部楼层


jiachuankang 发表于 2021-9-27 21:24
如果把结果值的最高位抹去,结果就是对的,感觉8bit+8bit的有符号数相加是要考虑结果溢出与不溢出的情况 ...


是的 我现在感觉$sign就是先看最高位作为符号位然后补一位,后面数字位进行补码操作,最后再加上原符号位。只不过二进制码显示仍是源码
发表于 2021-10-12 14:46:55 | 显示全部楼层
看起来是一个很奇怪的问题;
但是,首先要确认的一点是,你的想法没有问题;
在此需要普及一下,FPGA里面的运算就是补码,不需要额外的转换。
比如:0xAF就是无符号数175和有符号数-81的补码表示。


我按照你的代码把条件语句改了一下,可以参考,这样就解决了。

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

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-3 01:04 , Processed in 0.027983 second(s), 9 queries , Gzip On, Redis On.

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