integer - verilog IEEE 754 单精度到整数的转换

标签 integer verilog ieee-754

我正在尝试转换 IEEE single precision二进制格式数字转换为整数。我正在使用以下循环:

for(i=22;i>=0;i=i-1)
begin
   a1=in1[i]*(2**(i-23));
end
a1=a1+1;
a1=a1*(2**(in1[30:23]-8'b01111111));
a1=((-1)**(in1[32]))*a1;

我需要在我的程序中再执行 7 次。我的问题是是否有一个库可以做到这一点,它接受 32 位输入并给出整数输出?如果是,我如何将该函数包含在我的程序中? 谢谢。

更新:上面的代码片段可以正常工作吗?

最佳答案

一种方法是:

  1. 以 64 位 double 格式重新打包操作数
  2. 使用 $bitstoreal 将值转换为实数
  3. 使用 native verilog float 学对实数进行运算
  4. 使用 $realtobits 将实数转换回位
  5. 将 64 位 double 格式转换回单精度格式。如果该值超出了可表示的范围,则需要进行剪裁(“离零太远”和“离零太近”两种情况都需要剪裁)。

如果您想使用问题中的策略将 float 转换为定点,请记住 Verilog 没有 native 定点支持。您无法将 2^(负指数)有意义地评估为整数,您只会得到零。要么重构算法,使指数始终为正,要么使用右移 (>>),而不是乘以 2 的负幂。

关于integer - verilog IEEE 754 单精度到整数的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5758543/

相关文章:

floating-point - 二进制浮点加法算法

php - 为什么 float 的打印方式如此不同?

c - int_least16_t 是否有可能成为 int 而不是 short 的别名?

java - 从 Integer 值转换为 StringBuffer(以零作为默认值)

c++ - 创建 C++ 测试台以​​驱动 Verilog DUT

optimization - 计算结果和多路复用与否

python - 如何在 Python 中测试负零?

c++ - 无法在循环中的 C++ 中将字符转换为整数

python - 从字符串列表中仅提取每个字符串的数字?

verilog - 不可重置触发器的代码