2016-04-13 62 views
-1

我正在研究涉及IEEE双精度浮点标准的数字设计项目(Verilog)。反规范化IEEE

我有一个关于IEEE浮点数表示的查询。在IEEE浮点表示中,数字以标准化格式表示,这意味着有效位默认为1(也称为隐藏位)。

当一个浮点数被去归一化时,有效位被认为是0,并且通过将小数点移到左边来使指数变为0。

我的查询是有关去归一化程序。例如,如果指数可以高达120,那么在这种情况下,我们如何处理小数位(43位为IEEE - 双精度)?

我们做以下操作

1)增加分数的宽度?即43分数比特+去归一化=> 43 +例如43 +120 = 163比特?

2)简单地移位并保持分数的宽度,因为它是?即丢弃过多的比特?

回答

0
****************************************************************************************** 
HERE IS THE CODE I IMPLEMENTED FOR DENORMALIZATION OF A IEEE 754 DOUBLE PRECISION NUMBER 
****************************************************************************************** 

module denorm_orig(D_in, Dnorm); 

input [63:0]D_in;  // In IEEE 754 double precision format 
output reg [63:0] Dnorm; 

reg [63:0] fract_U1; 
reg [10:0] exponent_U1; 

[email protected](*) begin 

fract_U1 = {1'b1,D_in[51:0],11'b0};   // Fraction part - denormalized 64 bits 
exponent_U1 = (11'd1022- D_in[62:52]);  // Exponent part 

fract_U1 = (exponent_U1[5])?{32'b0,fract_U1[63:32]}: {fract_U1 }; // Check if this (32nd or 5th) bit is zero , if not zero , then keep the value as it is 
fract_U1 = (exponent_U1[4])?{16'b0,fract_U1[63:16]}: {fract_U1 }; 
fract_U1 = (exponent_U1[3])?{ 8'b0,fract_U1[63:8 ]}: {fract_U1 }; 
fract_U1 = (exponent_U1[2])?{ 4'b0,fract_U1[63:4 ]}: {fract_U1 }; 
fract_U1 = (exponent_U1[1])?{ 2'b0,fract_U1[63:2 ]}: {fract_U1 }; 
fract_U1 = (exponent_U1[0])?{ 1'b0,fract_U1[63:1 ]}: {fract_U1 }; 

Dnorm = fract_U1 [63:55]; 

end 

endmodule 
1

IEEE二进制浮点中唯一未标准化的数字是指数字段中为零的数字,对应于最小可能的指数。它们保持正常的分数宽度,因此前导零的数量增加,精度下降。对于小数字来说这是一个很好的折衷,让下流更平滑。

0

两条评论。首先,双精度(64位)浮点数有尾数为52的显式位,加上一个隐含位(并非如你所述的43位)。其次,只有具有全零位指数的值被解释为非规格化的。这允许精度在数值趋近于零时正常降级。

+0

是的,我欺骗了@ 43,我的意思是它是52.谢谢史蒂夫 – Displayname