【问题标题】:How to convert fixed-point VHDL type back to float?如何将定点 VHDL 类型转换回浮点数?
【发布时间】:2013-05-01 13:18:26
【问题描述】:

我在 VHDL 中使用 IEEE 定点包。

它运行良好,但我现在面临一个关于它们在测试台中的字符串表示的问题:我想将它们转储到一个文本文件中。

我发现确实可以直接写ufixed或者sfixed使用:

write(buf, to_string(x)); --where x is either sfixed or ufixed (and buf : line)

然后我得到像 11110001.10101 之类的值(对于 sfixed q8.5 表示)。

所以我的问题是:如何将这些定点数转换回实数(然后转换为字符串)?

【问题讨论】:

  • 所以,在上面的示例中,您希望将 11110001.10101 作为 241.6563 写入文本文件?
  • 从谷歌搜索看来,您可以使用一个 to_real() 函数。
  • 你有没有尝试过类似的东西:write(buf, to_string(to_real((x)));
  • 是的,我试过了。在 GHDL 上,我得到:“前缀既不是函数名,也不能被切片或索引”
  • 固定通用包(fixed_generic_pkg.vhdl、fixed_generic_pkg-body.vhdl)可从IEEE Std 1076-2008(zip 文件)的 IEEE 补充材料页面获得。此包包含 sfixed 和 ufixed 的引用 to_real 函数。您可能会或可能不会遇到为 ghdl 构建的依赖项,并且还应该查阅 ghdl 用户手册。包体中的两个函数可以作为本地转换的灵感。

标签: vhdl fixed-point


【解决方案1】:

变量需要分成两个std-logic-vector部分,整数部分可以使用标准转换转换为字符串,但对于小数部分,字符串转换有点不同。对于整数部分,您需要使用循环并除以 10 并将模余数转换为 ascii 字符,从低位到高位。对于小数部分,它还需要一个循环,但需要乘以 10 取地板并隔离该数字以获得相应的字符,然后将该整数减去小数等。这就是概念,有效在 MATLAB 中测试和制作 vhdl 版本,我将很快分享。我很惊讶在任何地方都没有找到这样有用的功能。当然定点格式可以变化 Q(N,M) N 和 M 可以有各种值,而对于浮点,它是标准化的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多