Floating point 浮点到定点转换

Floating point 浮点到定点转换,floating-point,vhdl,fixed,fpga,Floating Point,Vhdl,Fixed,Fpga,我正在创建一个硬件模块,它使用定点进行计算。但输入是浮点,因此我希望将浮点输入转换为定点(Q8.8) 我一直在尝试将is-davidbishops库()用于浮点和定点。它在模拟中工作得很好,但在我合成它时就不行了。例如,在以下代码中,合成时输出y接地 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; library ieee_proposed; use ieee_proposed.fixed_float_ty

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

我一直在尝试将is-davidbishops库()用于浮点和定点。它在模拟中工作得很好,但在我合成它时就不行了。例如,在以下代码中,合成时输出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;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
建议设立图书馆;
使用ieee_proposed.fixed_float_types.all;
使用ieee_proposed.fixed_pkg.all;
使用ieee_proposed.float_pkg.all;
乙状结肠实体
港口(
clk:标准逻辑中;
x:32;
y:超出固定范围(15至-16)
);
乙状结肠末端;
乙状结肠的结构
信号大小:固定(15至-16);
开始
集合c:过程(clk)
开始
如果上升沿(clk),则

y每当我使用Bishop的库进行合成时,我都会将包包括在项目中,并为您的案例声明它们,如下所示:

use work.float_pkg.all;
use work.fixed_pkg.all;
我不使用ieee_建议的库


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

我假设您的合成工具已
ieee\u建议
可用,具有您期望的功能?模拟工具和合成工具之间对库的支持存在差异是问题的常见原因。你在用什么工具?他们是否支持VHDL-2008?如果工具具有良好的VHDL-2008支持,则您不需要ieee_建议的库,这些包已移动到ieee库中。我正在使用包函数。问题是,当我使用函数来固定(arg:float)时,输出被路由到接地,即0。to_float(arg:sfixed)工作得非常完美。我在没有ieee_建议的库的情况下合成了您的代码,并在Altera的Cyclone III FPGA中编程。显然,这种转换是有效的。我用开关改变了输入,输出LED也随之改变。