【问题标题】:Verilog floating point to binary conversionVerilog浮点到二进制转换
【发布时间】:2015-01-25 11:45:19
【问题描述】:

我正在尝试将 Verilog 中的有符号浮点数转换为有符号的 24 位二进制值。例如

-0.0065 would become: 24'b100000000110101001111110
0.0901 would become: 24'b000001011100010000110010

这是正确的吗? 谢谢

【问题讨论】:

  • 什么是浮点格式?

标签: binary floating-point verilog type-conversion


【解决方案1】:

取小数点 0.0901 并转换为具有 2 个整数位和 22 个小数位(总共 24 位)的定点值:

用于数学运算的 Ruby 语法(您可以剪切并粘贴到 irb(交互式 ruby​​)命令行工具中):

i = (0.0901 * 2**20) # 377906.7904
# truncat to integer value
i = i.to_i # 377906

# Convert to string using binary (base 2)
i.to_s(2) # "1011100010000110010"

要添加前导零(24 位长度),右对齐并用 0 填充

i.to_s(2).rjust(24, '0') # "000001011100010000110010"

# Convert to Hex (base 16)
i.to_s(16) # "5c432"

有符号数有点问题,最简单的方法是计算正值然后执行二进制补码:

(0.0065 * 2**22).to_i.to_s(2).rjust(24, '0')
=> "000000000110101001111110"

双补

"000000000110101001111110"
"111111111001010110000001" # Ones complement (bit invert)
"111111111001010110000001" + 1 
"111111111001010110000010" #Twos complement

您有 24'b100000000110101001111110 这只是 MSB 设置为 1 的正数,这不是有符号数的正常工作方式。您使用的格式是符号幅度,但您不能只将其输入乘数(根据您之前的问题)。

注意:我也跳过了转换为定点的量化效果。按小数位缩放时的系数为 377906.7904。但是我们只取整数部分,给你一个错误0.7904,这可能会影响你的过滤器性能。

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 2015-06-01
    • 2015-10-11
    • 2018-10-17
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多