我正在尝试弄清楚如何从 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 中的检查器尝试这样做。欢迎您在这里提出意见。
语句
(desired[9:0]/1024)*8
始终为 0,因为 (desired[9:0]/1024)
始终为 0,并且首先计算括号表达式。
(desired[9:0] * 8)/1024
可以产生非零结果。