完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
定点数具有三种表示的形式,原码、反码、以及补码。
1、原码 关于原码,例如二进制 0△110 表示+0.75;1△110表示的是-0.75.这一点很好理解,因为0.75*2^3(定点三位)=6 也就是二进制110.简单的说如何将小数转换为十进制数呢。利用matlab提供的整转二进制函数dec2bin很容易获得转换结果。即需要先将十进制小数乘以一个比例因子2^B-1,并进行四舍五入操作取整。转换函数的表达式子是: 需要说明的是十进制的小数转换为二进制存在误差,其误差大小由二进制数的位数决定的。 x表示实际的数(一个浮点数), q表示它的Qn型定点小数(一个整数)。 2、反码 正数的反码与原码相同,负数的反码为原码除符号位的所有位取反,及得到负数的反码。例如说,十进制的-0.75的二进制原码表示为x=1△110,其反码为1△001 3、补码 负数的补码就是在反码的最低位加1.补码最重要的特性就是将减法用加法运算实现。同样,将十进制数转换成补码形式的二进制数也可以用dec2bin函数实现。 我们用数学表达式总结一下如何将小数定点化 假设q1,q2,q3表达的值分别为x1,x2,x3 q3 = q1 + q2 若 x3 = x1 + x2 q3 = q1 - q2 若 x3 = x1 - x2 q3 = q1 * q2 / 2^n若 x3 = x1 * x2 q3 = q1 * 2^n / q2若 x3 = x1 / x2 对于加减法到比较简单,对于乘除法,我们对/ 2 ^ n和* 2^n可以简单的用移位来计算。所以定点小数的运算比浮点小数要快的多。 经常有人问, fpga里小数乘法怎么搞? 如果你乐意, 按照IEEE754标准做“浮点”型运算的ip当然最好(虽然面积上不太好)。不过,很多情况下,没有这个必要。 一般我们就用“定点”了。你得自己“定个点”, 比如用16位, 分成8位整数8位小数(后面记为“(8.8)”), 即“定点”在第8位。那么:1 -》 16’h0100;1.5 -》 16’h0180;-1.5 -》 -1.5256 + 65536(补码) -》 16’hFE80(其实就是-16’sh0180, 让综合器给我们算补码去~~);1.164 -》 1.164256 = 298 = 16’h012A 所以 signed input [15:0] a (也是“8整.8小”)和 1.164相乘给 signed output [15:0] mul (也是“8整.8小”), 直接写:assign mul = (a * 16’sh012A) 》》》8;就行了, 当然, 你的fpga里有dsp block最好, 不然也要几百个LE的。 |
|
|
|
只有小组成员才能发言,加入小组>>
938 浏览 2 评论
12846 浏览 0 评论
4140 浏览 7 评论
2349 浏览 9 评论
2178 浏览 2 评论
467浏览 2评论
820浏览 2评论
938浏览 2评论
415浏览 1评论
649浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 19:27 , Processed in 0.817473 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号