Использование массива std_logic_vector в качестве типа порта, причем оба диапазона используют общий

Можно ли создать сущность с портом, который является массивом std_logic_vectors, с размером как массива, так и std_logic_vector, полученного из обобщенных элементов? То есть. Можно ли создать, например, настраивается ли мультиплексор шины с шириной и количеством шин?

entity bus_multiplexer is
        generic (bus_width : positive := 8;
                sel_width : positive := 2);
        port (  i : in array(integer range 2**sel_width - 1 downto 0) of std_logic_vector(bus_width - 1 downto 0);
                sel : in std_logic_vector(sel_width - 1 downto 0);
                o : out std_logic_vector(bus_width - 1 downto 0));
end bus_multiplexer;

architecture dataflow of bus_multiplexer is
begin
        o <= i(to_integer(unsigned(sel)));
end dataflow;

Вышеуказанное не работает, потому что тип массива должен быть определен отдельно. Определение типа перед портом также не работает, так как тогда оно ожидает, что определение сущности завершится после него. Определение его после определения порта не работает, поскольку оно будет использоваться до этого. Определение его в пакете не работает, потому что определение типа не похоже на наличие неограниченного диапазона в «базовом типе».

Можно ли как-то это сделать в VHDL-93? (А как насчет VHDL-2008?)

Определение типа какarray(natural range <>, natural range <>) of std_logic в пакете работает - как в определении порта не выдает ошибку - но на самом деле использовать его, если он определен таким образом, кажется довольно громоздким.

Есть какой-то вменяемый способ использовать это как это Есть ли какой-то простой способ отобразить N отдельных std_logic_vectors на порт, определенный таким образом, и аналогично для фактической логики вывода?

Я попробовал оригинал иo <= i(to_integer(unsigned(sel)), bus_width - 1 downto 0), но ни один не работал. Я знаю, что мог бы делать это по одному, но я бы предпочел что-нибудь попроще. И хотя побитовый подход может быть подходящим для внутренней реализации, я, конечно, не хотел бы делать это для отображения портов каждый раз, когда я использую компонент ...

Есть какой-то вменяемый (-иш) способ сделать это?

(Приложение: я знаю, что есть некоторые похожие вопросы, но большинство из них не имеют дело со случаем обоих диапазонов, полученных из обобщенных типов, и были решены с использованием определения типа в пакете. Тот, который действительно говорил о двух общих измерениях не нужно, чтобы входные данные приходили из разных std_logic_vectors и заканчивались использованием метода «2d-array of std_logic», который мне не подходит (по крайней мере, без дальнейших разъяснений о том, как его использовать, не теряя здравомыслие))

Ответы на вопрос(2)

Ваш ответ на вопрос