Вам необходимо пройти как количество выходов и размер массива элементов управления в качестве дженериков, если вы не всегда использовать полномочия двух.
Внешний вид вашего модуля (de) mux (т. Е. При создании экземпляра), вы можете использовать код для вычисления количества бит для шины управления. У меня есть функция в общем пакете я использую для инициализации различных констант конфигурации и дженерики, которые получают передаются код, похожий на ваш (де) мультиплексором применения:
-- Calculate the number of bits required to represent a given value
function NumBits(val : integer) return integer is
variable result : integer;
begin
if val=0 then
result := 0;
else
result := natural(ceil(log2(real(val))));
end if;
return result;
end;
... что позволяет делать такие вещи, как:
не требуется
constant NumOut : integer := 17;
signal CtrlBus : std_logic_vector(NumBits(NumOut)-1 downto 0);
my_mux : demux
generic map (
NumOut => NumOut,
NumCtrl => NumBits(NumOut))
port map (
control => CtrlBus,
...
...
Я бы предпочел, чтобы управление было неподписанным типом ... –