赞
踩
最近博主搞FPGA图像处理,由于用作三维成像那么精度必不可少啊,但是Verilog又不像c等高级语言一样,我随便设个double就可以赋值啊啥的,那么咋办,定点小数就孕育而生了。当然verilog也可以用浮点数表示,这里博主就不提及了。
何谓定点小数,顾名思义,就是小数位后的数目固定,即精度固定,这里假设有一个16位的变量,我们使它的精度为8位,那么它的精度是多少呢? 其实就是1/2^8=0.00390625.这里举个例子说明
例如有个 reg [15:0] a=16'b0111_1011_1111_0000
我们不管符号位,那么这个二进制数是31728,但是它表示的定点小数是31728/2^8=123.9375
那么这有什么用呢?例如假设一个小数b=2.3,我们假设其定点小数位数是5,那么其定点小数为int(2.3*2^5)=73,其实际表示的小数为73/2^5=2.28125 看到么,相差无几,而其精度也有定点位数决定。
那么我们假设x,x1,x2为实际小数,y1,y2,y3为定点小数,定位精度是n位,有如下关系
y1=y2+y3 <<=>>x1=x2+x3
y1=y2-y3 <<=>>x1=x2-x3
y1=y2/2^n*y3 <<=>>x1=x2*x3
y1=y2*2^n/y3 <<=>>x1=x2/x3
加减比较好理解,乘除为什么需要移位呢?以乘法为例子
y1=x1*2^n
y2*y3=x2*x3*x^2n ==>>y1*2^n=y2*y3 证毕
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。