Proposal to update the VHDL 2008 packages to fix identified bugs and errors. 1) fixed_generic_pkg-body.vhdl Modify the following procedures: procedure add_carry ( L, R : in UNRESOLVED_ufixed; c_in : in STD_ULOGIC; result : out UNRESOLVED_ufixed; c_out : out STD_ULOGIC) procedure add_carry ( L, R : in UNRESOLVED_sfixed; c_in : in STD_ULOGIC; result : out UNRESOLVED_sfixed; c_out : out STD_ULOGIC) in each of these modify line assigning "c_out" to be as follows: c_out := result_slv(left_index-right_index); 2) float_generic_pkg-body.vhdl a) Modify the following functions: function to_float ( arg : UNSIGNED; constant exponent_width : NATURAL := float_exponent_width; -- length of FP output exponent constant fraction_width : NATURAL := float_fraction_width; -- length of FP output fraction constant round_style : round_type := float_round_style) -- rounding option return UNRESOLVED_float function to_float ( arg : SIGNED; constant exponent_width : NATURAL := float_exponent_width; -- length of FP output exponent constant fraction_width : NATURAL := float_fraction_width; -- length of FP output fraction constant round_style : round_type := float_round_style) -- rounding option return UNRESOLVED_float Mofify the "arg" argument in both functions to be "UNRESOLVED_UNSIGNED" and "UNRESOLVED_SIGN". The type of the "XARG" variable must be modified accordingly. b) Modify the following function: function to_float ( arg : UNRESOLVED_sfixed; -- signed fixed point constant exponent_width : NATURAL := float_exponent_width; -- length of FP output exponent constant fraction_width : NATURAL := float_fraction_width; -- length of FP output fraction constant round_style : round_type := float_round_style; -- rounding constant denormalize : BOOLEAN := float_denormalize) -- rounding option return UNRESOLVED_float Modify the variable "arg_int" to be as follows: variable arg_int : UNSIGNED(integer_width - in_fraction_width downto 0); -- unsigned version of argument Modify the variables "exp" and "exptmp" as follows: variable exp, exptmp : SIGNED (exponent_width + 1 downto 0); Modify the assignment of "arg_int" on line 2924 from "argx := -argx;" to: arg_int := UNSIGNED(to_x01(not STD_LOGIC_VECTOR (argx))) + 1; -- Make it positive with two's complement Modify the assignment of "arg_int" on line 2927 to the following: arg_int := UNSIGNED(to_x01(STD_LOGIC_VECTOR (argx))); -- new line: direct conversion to unsigned c) Fixed point documentation: Fixed the size returned by the signed reciprocal in Table xxx