library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; use work.fixed_pkg.all; package mix_pkg is ------------------------------------------------------------- -- Constructor helpers -- Use: variable v8u6 : ufixed_t(ufixed(8,6)'range); function uproto (nbits : integer; nbits_frac : integer) return ufixed; -- Use: variable v8s6 : sfixed_t(sfixed(8,6)'range); function sproto (nbits : integer; nbits_frac : integer) return sfixed; function to_unsigned (src : ufixed) return UNSIGNED; function to_signed (src : sfixed) return SIGNED; ------------------------------------------------------------------------------- end; -- package mix_cpx_pkg; package body mix_pkg is ------------------------------------------------------------- -- Constuctor helpers function uproto (nbits : integer; nbits_frac : integer) return ufixed is constant result : ufixed (nbits-nbits_frac-1 downto -nbits_frac) := (others => '0'); begin return result(nbits-nbits_frac-1 downto -nbits_frac); end uproto; ------------------------------------------------------------- function sproto (nbits : integer; nbits_frac : integer) return sfixed is constant result : sfixed (nbits-nbits_frac downto -nbits_frac+1) := (others => '0'); begin return result(nbits-nbits_frac downto -nbits_frac+1); end sproto; ------------------------------------------------------------- function to_unsigned (src : ufixed) return UNSIGNED is subtype t is UNSIGNED(src'high - src'low downto 0); variable slv : t; begin slv := t(src); return UNSIGNED(to_X01(std_logic_vector(slv))); end function to_unsigned; ------------------------------------------------------------- function to_signed (src : sfixed) return SIGNED is subtype t is SIGNED(src'high - src'low downto 0); variable slv : t; begin slv := t(src); return SIGNED(to_X01(std_logic_vector(slv))); end function to_signed; ------------------------------------------------------------------------------- end; -- package mix_pkg;