verilog中的浮点乘法问题
floating point multiply problem in verilog
对于给定的项目,我在 verilog 中遇到了 浮点乘法 。所以我在 ISE 14.7 中使用 Xilinx 的 IP 内核
具有以下浮点 IP 核 GUI 配置:
- 乘
- 单个(指数宽度:8 位,小数宽度:24)
- 没有使用(在家庭优化中)
- 最大延迟(这里是 8 个时钟周期)
所以当我以 ieee 754 格式提供以下输入时
A = 0_0111111_000000000000000000000000 (which is one)
B = 0_0111111_000000000000000000000000
8个时钟周期后的结果是:
0_0111110_100000000000000000000000
我的问题是为什么结果不是 ieee 754 格式?
谁错了?
这是您的第一个数字的解码方式:
3 2 1 0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 01111110 00000000000000000000000
Hex: 3F00 0000
Precision: SP
Sign: Positive
Exponent: -1 (Stored: 126, Bias: 127)
Hex-float: +0x1p-1
Value: +0.5 (NORMAL)
所以,它的值是 0.5
,而不是你声称的 1
。
产品解码方式如下:
3 2 1 0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 01111101 00000000000000000000000
Hex: 3E80 0000
Precision: SP
Sign: Positive
Exponent: -2 (Stored: 125, Bias: 127)
Hex-float: +0x1p-2
Value: +0.25 (NORMAL)
所以,是 0.25
。这是正确的,因为确实 0.5 * 0.5 = 0.25
。
如果你想测试乘法 1 * 1 = 1
使用以下编码:
3 2 1 0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 01111111 00000000000000000000000
Hex: 3F80 0000
Precision: SP
Sign: Positive
Exponent: 0 (Stored: 127, Bias: 127)
Hex-float: +0x1p0
Value: +1.0 (NORMAL)
即 0_01111111_00000000000000000000000
数字 1.0
是如何编码为 32 位单精度 IEEE754 浮点值的。请特别注意,指数是 8 位,这似乎是您的原始编码中有 7 位的问题的根源。
对于给定的项目,我在 verilog 中遇到了 浮点乘法 。所以我在 ISE 14.7 中使用 Xilinx 的 IP 内核 具有以下浮点 IP 核 GUI 配置:
- 乘
- 单个(指数宽度:8 位,小数宽度:24)
- 没有使用(在家庭优化中)
- 最大延迟(这里是 8 个时钟周期)
所以当我以 ieee 754 格式提供以下输入时
A = 0_0111111_000000000000000000000000 (which is one)
B = 0_0111111_000000000000000000000000
8个时钟周期后的结果是:
0_0111110_100000000000000000000000
我的问题是为什么结果不是 ieee 754 格式? 谁错了?
这是您的第一个数字的解码方式:
3 2 1 0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 01111110 00000000000000000000000
Hex: 3F00 0000
Precision: SP
Sign: Positive
Exponent: -1 (Stored: 126, Bias: 127)
Hex-float: +0x1p-1
Value: +0.5 (NORMAL)
所以,它的值是 0.5
,而不是你声称的 1
。
产品解码方式如下:
3 2 1 0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 01111101 00000000000000000000000
Hex: 3E80 0000
Precision: SP
Sign: Positive
Exponent: -2 (Stored: 125, Bias: 127)
Hex-float: +0x1p-2
Value: +0.25 (NORMAL)
所以,是 0.25
。这是正确的,因为确实 0.5 * 0.5 = 0.25
。
如果你想测试乘法 1 * 1 = 1
使用以下编码:
3 2 1 0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 01111111 00000000000000000000000
Hex: 3F80 0000
Precision: SP
Sign: Positive
Exponent: 0 (Stored: 127, Bias: 127)
Hex-float: +0x1p0
Value: +1.0 (NORMAL)
即 0_01111111_00000000000000000000000
数字 1.0
是如何编码为 32 位单精度 IEEE754 浮点值的。请特别注意,指数是 8 位,这似乎是您的原始编码中有 7 位的问题的根源。