Используя небольшой тестовый стенд ниже, я смог получить доступ к элементам массива, используя метод, который вы упомянули -> some_array (to_integer (unsigned (some_signal)))).
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use std.textio.all;
use ieee.std_logic_textio.all;
entity test is
end entity test;
architecture behav of test is
signal the_input : std_logic_vector(0 to 3);
signal test_sig : std_logic_vector(7 downto 0);
type dummy_array is array(0 to 2) of std_logic_vector(7 downto 0);
signal ins_dummy : dummy_array := (x"01", x"02", x"03");
begin
test_sig <= ins_dummy(to_integer(unsigned(the_input)));
process
begin
wait for 1 ns;
the_input <= "0000";
wait for 1 ns;
the_input <= "0001";
wait for 1 ns;
the_input <= "0010";
end process;
end architecture behav;
Однако этоИмитация и синтезатор могут жаловаться, потому что диапазон порта the_input больше, чем количество возможных опций массива.Возможно, вам придется добавить логику, чтобы гарантировать, что индексы массива, находящиеся «за пределами», не могут быть доступны.Надеюсь, это поможет.Возможно попробуйте:
test_sig <= ins_dummy(to_integer(unsigned(the_input))) when (the_input < 3) else
others => '0';