Estoy intentando usar el paquete de punto flotante que viene con VHDL2008 para tener un tipo de punto flotante personalizado; Necesito números flotantes de media precisión (16 bits).
Como no tenía experiencia con VHDL, seguí la "guía de usuario del paquete de punto flotante" encontré aquí . En la página 7, describe cómo usar "float_pkg" con tamaños de bits personalizados.
Para probarlo, hice un archivo simple que simulo con Modelsim.
Al intentar compilarlo:
vcom -work work -2008 -explicit -stats=none C:/.../testfloat.vhdl
Me sale el error:
** Error: C:/.../testfloat.vhdl(32): (vcom-1443) Interface package "fixed_pkg" requires a package instance actual
Traté de buscar ese error en Google ya que no lo entiendo, pero hasta ahora no he obtenido ningún resultado.
Aquí está mi archivo VHDL:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.all;
use IEEE.fixed_float_types.all;
use IEEE.float_pkg.all;
entity test is
port (
data_A : in std_logic_vector (25-1 downto 0);
data_B : in std_logic_vector (25-1 downto 0);
data_out : out std_logic_vector (25-1 downto 0)
);
end entity test;
architecture rtl of test is
use IEEE.fixed_float_types.all;
package my_float_pkg is new ieee.float_generic_pkg
generic map (
float_exponent_width => 5, -- 5 bits of exponent
float_fraction_width => 11, -- default will be float(5 dt –11)
float_round_style => round_zero, -- Truncate, don’t round
float_denormalize => false, -- no denormal numbers
float_guard_bits => 0, -- Unused by round_zero, set to 0
float_check_error => false, -- Turn NAN and overflow off.
no_warning => true -- turn warnings off
);
begin
process(data_A, data_B)
variable data_A_float : work.my_float_pkg.float(5 downto -11);
variable data_B_float : work.my_float_pkg.float(5 downto -11);
variable data_out_float : work.my_float_pkg.float(5 downto -11);
begin
data_A_float := to_float(data_A, data_A'high, data_A'low);
end process;
end architecture;
El contenido del proceso no es relevante por el momento.