请教版主们VHDL 的有符号运算

[复制链接]
 楼主| edacsoft 发表于 2011-12-28 16:55 | 显示全部楼层 |阅读模式
以下代码节选自X家的IP DCT 例程xapp610,详见附件

请解释下面代码的意思:

xa0_reg <= xa0_in(7) & xa0_in;  --one
xa7_reg <= xa7_in(7) & xa7_in;  

...
if ...then
add_sub1a <= "0" & (xa7_reg + xa0_reg);  --two
else
add_sub1a <= "0" & (xa7_reg - xa0_reg);  --three

如果从one行可以看出端口xa0_in数据是有符号数,那么
two和three行该如何理解呢,怎么能强制最高位(有符号位)为0?
而且从后面的代码看又对add_sub1a最高位有判断,
感觉代码是不是写错了。

本帖子中包含更多资源

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

×
GoldSunMonkey 发表于 2011-12-28 18:10 | 显示全部楼层
你的说法是对的,但是为什么这么写我就不知道了。
可能有专用的一些数据形式,或者其他。

我没有时间专门去研究这个玩意,你可以仿真一下试一试。
mr.king 发表于 2011-12-28 18:39 | 显示全部楼层
我估计开始数据是正的,所以附加符号扩展位“0”,然后参与计算,结果吗,当然是带符号位的了
GoldSunMonkey 发表于 2011-12-28 18:51 | 显示全部楼层
我觉得,如果是乘法可以如此说,但是是加法,就不应该能变成带符号的。
除非数值上有什么特殊的设定
foreverly 发表于 2011-12-28 19:30 | 显示全部楼层
是啊。怎么要这样写呢?求解。
GoldSunMonkey 发表于 2011-12-28 20:23 | 显示全部楼层
GoldSunMonkey 发表于 2011-12-28 20:24 | 显示全部楼层
写法没错,只不过是表达的意思让人不明白
 楼主| edacsoft 发表于 2011-12-29 11:03 | 显示全部楼层
我估计开始数据是正的,所以附加符号扩展位“0”,然后参与计算,结果吗,当然是带符号位的了
mr.king 发表于 2011-12-28 18:39

兄弟,代码行two/three是算完后再附加符号扩展位“0”
 楼主| edacsoft 发表于 2011-12-29 11:19 | 显示全部楼层
本帖最后由 edacsoft 于 2011-12-29 11:20 编辑

xapp215有讲到在进行加法运算时考虑到溢出,做下面的处理:
Signed Numbers:
sum <= (a(7)&a) + (b(7)&b); -- sum is a 9-bit value
Unsigned Numbers:
sum <= (‘0’&a) + (‘0’&b);
但是这篇**没有说到对有符号乘法运算该如何处理:
add_sub1a 接下来要和一个带符号位的原码表示的数相乘,
add_sub1a <= "0" & (xa7_reg + xa0_reg);  --two
可能是为接下来的有符号乘法做扩展,哪位高人指点最高位强制为'0'的原因

本帖子中包含更多资源

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

×
GoldSunMonkey 发表于 2011-12-29 11:23 | 显示全部楼层
我不知道是不是和DCT算法有关系,你自己找找,如果他是错了,也没关系。你自己仿真琢磨最好了。

评分

参与人数 1威望 +1 收起 理由
edacsoft + 1

查看全部评分

nongfuxu 发表于 2011-12-29 12:16 | 显示全部楼层
不会VHDL的漂过.
 楼主| edacsoft 发表于 2011-12-30 17:21 | 显示全部楼层
原文件确实写错了,
经过英明神武的我修改已经可以用了。呵呵。
怪不得X家废弃了这个IP。
核心思想还是有符号数在FPGA中如何进行加法运算和乘法运算。
 楼主| edacsoft 发表于 2011-12-30 17:22 | 显示全部楼层
目前正在对其精度进行改进,代码和pdf文档明显不符
GoldSunMonkey 发表于 2011-12-30 22:35 | 显示全部楼层
把弄好的代码和说明给上传上来。我会给你加分感谢你的。
同志们也会感激你的分享精神的。
atua 发表于 2011-12-31 11:29 | 显示全部楼层
 楼主| edacsoft 发表于 2011-12-31 14:53 | 显示全部楼层
恩,我做的就是这样的,怎么早没看到呢
不过也好,搞明白了有符号数在FPGA中如何进行加法运算和乘法运算的一种方法
 楼主| edacsoft 发表于 2011-12-31 15:00 | 显示全部楼层
14# GoldSunMonkey
响应猴哥号召,附件是修改后的源码,加了注释。
有问题请跟帖,或发信给猴哥,哈哈

本帖子中包含更多资源

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

×

评分

参与人数 1威望 +10 收起 理由
GoldSunMonkey + 10 精品文章,兄弟。我给你10分。谢谢你分享 ...

查看全部评分

GoldSunMonkey 发表于 2011-12-31 23:51 | 显示全部楼层
谢谢兄弟
GoldSunMonkey 发表于 2011-12-31 23:52 | 显示全部楼层
感谢你的分享精神~
ertu 发表于 2012-1-1 12:57 | 显示全部楼层
呵呵 学了很多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

246

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部