He estado intentando pensar en formas de reducir el alcance de las variables de indexación usadas en un mux. Hoy se me ocurrió usar algo como el siguiente código como estrategia:
entity control is
port (
sel_slv : in std_logic_vector (1 downto 0);
in0, in1, in2 : in std_logic_vector (31 downto 0);
out : out std_logic_vector (31 downto 0))
end Control;
architecture rtl of Control is
begin
mux : process(sel_slv, in0, in1, in2, in3)
variable sel : integer := to_integer(unsigned(sel_slv));
begin
case sel is
when 0 => outp <= in0;
when 1 => outp <= in1;
when 2 => outp <= in2;
when others => outp <= (others => '-');
end case;
end process mux;
end rtl;
Noté que modelsim da una advertencia: el valor inicial de "sel" depende del valor de la señal "sel_slv". Asumí que sel se inicializaría cada vez que se ejecutara el proceso.