Reemplazar declaraciones if -‐ con una declaración de caso

-2

Me gustaría saber cómo reemplazar una declaración if con una declaración case .

La declaración if es

architecture super_mux_v1 of mux_case is
begin
    process (X,SEL) is
    begin
        if (SEL = "000") then
            Y <= X(0);
        elsif (SEL = "001") then
            Y <= X(1);
        elsif (SEL = "010") then
            Y <= X(2);
        elsif (SEL = "011") then
            Y <= X(3);
        elsif (SEL = "100") then
            Y <= X(4);
        elsif (SEL = "101") then
            Y <= X(5);
        elsif (SEL = "110") then
            Y <= X(6);
        else
            Y <= X(7);
        end if;
    end process;
end super_mux_v1;

Mi solución se puede encontrar a continuación, pero recibo algunos errores (declaración del caso)

architecture super_mux_v1 of mux_case is
begin
    process (X,SEL) is
    begin
        case SEL is
        when "000" => Y <= X(0);
        when "001" => Y <= X(1);
        when "010" => Y <= X(2);
        when "011" => Y <= X(3);
        when "100" => Y <= X(4);
        when "101" => Y <= X(5);
        when "110" => Y <= X(6);
        end case;
    end process;
end super_mux_v1;

Cuando comienzo la compilación aparece un error que dice

    
pregunta user3880651

1 respuesta

3

Como dice la guía de referencia de VHDL (por ejemplo, aquí )

  

Se deben incluir todas las opciones posibles, a menos que la cláusula de los demás sea   utilizado como la última opción

En tu versión if lo usaste, ya que escribiste else ... . Sin embargo, en tu switch one, no lo hiciste.

Intenta escribir

    case SEL is
    when "000" => Y <= X(0);
    when "001" => Y <= X(1);
    when "010" => Y <= X(2);
    when "011" => Y <= X(3);
    when "100" => Y <= X(4);
    when "101" => Y <= X(5);
    when "110" => Y <= X(6);
    when others => Y <= X(7);
    end case;

Esto debería solucionar sus problemas

EDITAR: hay otro problema en tu código: process (X,SEL) is debería ser process (X,SEL) (sin is )

    
respondido por el frarugi87

Lea otras preguntas en las etiquetas