VHDL-2008 では、パッケージ内にジェネリックを配置し、パッケージを宣言するときにそのジェネリックを変更できます。次に例を示します。
package my_pack is
generic(
length : integer);
subtype my_type is std_logic_vector(length-1 downto 0);
end package my_pack;
この例では std_logic_vector のサブタイプが宣言されていますが、長さは指定されていません。VHDL ファイルにこのパッケージをインスタンシエートするときに、長さを指定します。
library ieee;
use leee.std_logic_1164.all;
package my_pack1 is new work.my_pack generic map (length => 5);
package my_pack2 is new work.my_pack generic map (length => 3);
use work.my_pack1.all;
use work.my_pack2.all;
library ieee;
use ieee.std_logic_1164.all;
entity test is port (
clk : in std_logic;
in1 : in work.my_pack1.my_type;
in2 : in work.my_pack2.my_type;
out1 : out work.my_pack1.my_type;
out2 : out work.my_pack2.my_type);
end test;
このコードでは、同じパッケージを使用して 2 つの異なるサブタイプを宣言しています。