【问题标题】:convert a std_logic_vector INPUT to IEEE Float type将 std_logic_vector INPUT 转换为 IEEE 浮点类型
【发布时间】:2013-10-07 23:08:20
【问题描述】:

如何转换我的实体的 std_logic_vector INPUT 在 IEEE Float 类型中,在我的流程中执行一些操作? 我的实体需要接收 IEEE Float of A/D 转换器。

【问题讨论】:

  • 您到底需要做什么?将来自 ADC 的整数数据转换为浮点数?
  • 不是整数。从 IEEE 格式的 ADC 到 BCD 格式的浮点值
  • 什么 ADC 产生浮点输出?
  • 问题不是这个

标签: vhdl xilinx hdl intel-fpga


【解决方案1】:

VHDL 默认没有float 类型-它有real,这是不可综合的。

但是,IEEE 标准化的VHDL floating-point types 是完全可综合的。

您必须先将 std_logic_vector 转换为 unsignedsigned 向量,然后转换为合适的浮点类型,该类型不必是 IEEE-754 定义的类型

【讨论】:

  • 我的 std_logic_vector 是如何转换的?如果我尝试 to_integer(to_float(signed(my_std_logic_vector))) 我得到一个错误。我需要在 my_std_logic_vector 中获取我的浮点数的整数值。
  • 错误 (10779): VHDL 错误在 float_pkg_c.vhdl(4314): 表达式不是常数错误 (10657): VHDL 子程序错误在 float_pkg_c.vhdl(4314): 未能详细调用子程序“ TO_INTEGER”错误(10657):teste.vhd(28)处的 VHDL 子程序错误:未能详细调用子程序“to_integer”
  • @AntônioVieira my_std_logic_vector 的格式是什么?如果确实已签名,则仅应将其强制转换为已签名-在您使用的语句中, to_float 几乎没有意义。
  • 嗨@zennehoy。 my_std_logic_vectorin std_logic_vector(32 downto 1);
  • 我想得到浮点数的所有数字。因为我想得到它们的整数部分。
【解决方案2】:

VHDL 的浮点类型(实数)是不可合成的(可能通过一些非常专业的工具除外),因此如果您有一个 IEEE 浮点形式的输入 std_logic_vector,您将必须提取和处理所需的数据字段(符号、指数、尾数)你自己(或使用一个为你做这件事的库,知道这会消耗大量的硬件资源)。

就个人而言,我会尽可能避免使用浮点数,而是坚持使用定点数。

【讨论】:

  • 这是不真实的,请看马丁的回答。
  • @Josh 对不起,我很少在 VHDL 中使用浮点数,以至于我忘记了类型称为 real 而不是浮点数。尽管应该避免在硬件中使用浮点,但我仍然坚持我的观点,因为它难以综合,往往需要大量资源,并且对于给定硬件算法的几乎所有有意义的实现都可以用定点代替。
  • 同意尽量避免。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 2023-03-08
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多