从逻辑数据类型中提取浮点数

问题描述 投票:0回答:1

我正在尝试弄清楚如何从 22 位逻辑数据类型计算小数,请告诉我是否有任何其他已知的工作方法。我尝试了以下方法,但结果并不如预期。

logic [21:0] desired;
real exp;
real mantissa;
real total;
typedef struct {
  logic [31:0] exponent;
  logic [31:0] mantissa;
} custom_float_t;
custom_float_t my_float;

   my_float.exponent = desired[21:10]*8; // Number part
   my_float.mantissa = (desired[9:0]/1024)*8; // Fractional part

exp = real'(my_float.exponent);
mantissa=real'((my_float.mantissa)/(2.0**10)):

total =exp+mantissa;

在上面的伪代码中,尾数总是变成0,所以总的计算会出现偏差。我正在寻找的是将 21:10 位值转换为数字部分,将 9:0 位转换为小数部分,我正在为 tb 中的检查器尝试这样做。欢迎您在这里提出意见。

floating-point system-verilog fixed-point
1个回答
0
投票

语句

(desired[9:0]/1024)*8
始终为 0,因为
(desired[9:0]/1024)
始终为 0,并且首先计算括号表达式。

(desired[9:0] * 8)/1024
可以产生非零结果。

© www.soinside.com 2019 - 2024. All rights reserved.