【问题标题】:Floating point to fixed point coversion浮点到定点的转换
【发布时间】:2015-04-29 15:52:31
【问题描述】:

我正在创建一个使用定点进行计算的硬件模块。但是输入是浮点数,因此我希望将浮点输入转换为定点(Q8.8)。

我一直在尝试将 David Bishops 库 (http://vhdl.org/fphdl/) 用于浮点和定点。它在模拟中效果很好,但在我合成它时却不行。例如。在以下代码中,输出 y 在合成时接地。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
library ieee_proposed;
use ieee_proposed.fixed_float_types.all;
use ieee_proposed.fixed_pkg.all;
use ieee_proposed.float_pkg.all;

entity sigmoid is
    Port (
        clk     : in std_logic;
        x       : in  float32;
        y       : out sfixed(15 downto -16)
    );
end sigmoid;

architecture Behavioral of sigmoid is

    signal size : sfixed(15 downto -16);

begin


    set_c: process(clk)
    begin 
        if rising_edge(clk) then
           y <= to_sfixed(x, size);
        end if;
    end process;

end Behavioral;

从我在各种论坛和文档中阅读的内容来看,这段代码应该可以很好地合成。此外,使用 to_float(fixed) 固定为浮点转换也可以。我错过了什么吗?还有其他简单的实现float->fixed转换的方法吗?

【问题讨论】:

  • 我假设您的综合工具有ieee_proposed 可用,具有您期望的功能?仿真和综合工具之间库支持的差异是问题的常见原因。你使用什么工具?他们有 VHDL-2008 支持吗?
  • 如果工具有良好的 VHDL-2008 支持,则不需要 ieee_proposed 库,这些包已移至库 ieee。

标签: floating-point vhdl fixed fpga


【解决方案1】:

每当我使用 Bishop 的库进行综合时,我只需将包包含在项目中并针对您的情况声明如下:

use work.float_pkg.all;
use work.fixed_pkg.all;

我不使用 ieee_proposed 库。

关于转换,我认为最简单的方法是真正使用包函数(直接或使用多个类型转换)。

【讨论】:

  • 我正在使用包函数。问题是当我使用函数 to_sfixed (arg:float) 时,输出被路由到地面,即 0。to_float (arg:sfixed) 完美运行。
  • 我在没有 ieee_proposed 库的情况下合成了您的代码,并在 Altera 的 Cyclone III FPGA 中进行了编程。显然,转换正在工作。我用开关改变了输入,输出的 LED 也随之变化。
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多