打印

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

[复制链接]
4238|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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最高位有判断,
感觉代码是不是写错了。
xapp610.rar (78.78 KB)

相关帖子

沙发
GoldSunMonkey| | 2011-12-28 18:10 | 只看该作者
你的说法是对的,但是为什么这么写我就不知道了。
可能有专用的一些数据形式,或者其他。

我没有时间专门去研究这个玩意,你可以仿真一下试一试。

使用特权

评论回复
板凳
mr.king| | 2011-12-28 18:39 | 只看该作者
我估计开始数据是正的,所以附加符号扩展位“0”,然后参与计算,结果吗,当然是带符号位的了

使用特权

评论回复
地板
GoldSunMonkey| | 2011-12-28 18:51 | 只看该作者
我觉得,如果是乘法可以如此说,但是是加法,就不应该能变成带符号的。
除非数值上有什么特殊的设定

使用特权

评论回复
5
foreverly| | 2011-12-28 19:30 | 只看该作者
是啊。怎么要这样写呢?求解。

使用特权

评论回复
6
GoldSunMonkey| | 2011-12-28 20:23 | 只看该作者
:L

使用特权

评论回复
7
GoldSunMonkey| | 2011-12-28 20:24 | 只看该作者
写法没错,只不过是表达的意思让人不明白

使用特权

评论回复
8
edacsoft|  楼主 | 2011-12-29 11:03 | 只看该作者
我估计开始数据是正的,所以附加符号扩展位“0”,然后参与计算,结果吗,当然是带符号位的了
mr.king 发表于 2011-12-28 18:39

兄弟,代码行two/three是算完后再附加符号扩展位“0”

使用特权

评论回复
9
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'的原因

xapp215.PDF

118.01 KB

使用特权

评论回复
10
GoldSunMonkey| | 2011-12-29 11:23 | 只看该作者
我不知道是不是和DCT算法有关系,你自己找找,如果他是错了,也没关系。你自己仿真琢磨最好了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
edacsoft + 1
11
nongfuxu| | 2011-12-29 12:16 | 只看该作者
不会VHDL的漂过.

使用特权

评论回复
12
edacsoft|  楼主 | 2011-12-30 17:21 | 只看该作者
原文件确实写错了,
经过英明神武的我修改已经可以用了。呵呵。
怪不得X家废弃了这个IP。
核心思想还是有符号数在FPGA中如何进行加法运算和乘法运算。

使用特权

评论回复
13
edacsoft|  楼主 | 2011-12-30 17:22 | 只看该作者
目前正在对其精度进行改进,代码和pdf文档明显不符

使用特权

评论回复
14
GoldSunMonkey| | 2011-12-30 22:35 | 只看该作者
把弄好的代码和说明给上传上来。我会给你加分感谢你的。
同志们也会感激你的分享精神的。

使用特权

评论回复
15
atua| | 2011-12-31 11:29 | 只看该作者
16
edacsoft|  楼主 | 2011-12-31 14:53 | 只看该作者
恩,我做的就是这样的,怎么早没看到呢
不过也好,搞明白了有符号数在FPGA中如何进行加法运算和乘法运算的一种方法

使用特权

评论回复
17
edacsoft|  楼主 | 2011-12-31 15:00 | 只看该作者
14# GoldSunMonkey
响应猴哥号召,附件是修改后的源码,加了注释。
有问题请跟帖,或发信给猴哥,哈哈

dct.rar

6.99 KB

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
GoldSunMonkey + 10 精品文章,兄弟。我给你10分。谢谢你分享 ...
18
GoldSunMonkey| | 2011-12-31 23:51 | 只看该作者
谢谢兄弟

使用特权

评论回复
19
GoldSunMonkey| | 2011-12-31 23:52 | 只看该作者
感谢你的分享精神~

使用特权

评论回复
20
ertu| | 2012-1-1 12:57 | 只看该作者
呵呵 学了很多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

246

帖子

0

粉丝