このケースをどのように処理できますか:
entity foo is
generic (
num_instances : natural := 8
);
port (
data_in_per_instance : in std_logic_vector(num_instances-1 downto 0);
data_out_per_instance : out std_logic_vector(num_instances-1 downto 0)
);
end foo;
architecture bar of foo is
component do_stuff is
port(
din : in std_logic;
dout : out std_logic
);
end component do_stuff;
signal sig_per_instance : std_logic_vector(num_instances-1 downto 0);
begin
L1: for i in 0 to num_instances-1 generate
L2: do_stuff
port map(
din => data_in_per_instance(i),
dout => data_out_per_instance(i)
);
end generate;
end bar;
ここでの問題は、num_instances
が 0 に減少すると、信号範囲(num_instances-1 downto 0)
が評価されるときにエラーが発生することです....
これを回避するエレガントな方法はありますか? 私が思い付くことができるのはmax(num_instances-1,0)
、この問題を防ぐために関数のようなものを使用することだけです (しかし、合成は私が望むものを正確に与えないかもしれません。つまり、何も与えないかもしれません)。
このケースをもう少しシームレスに処理する方法はありますか?