Sentencias condicionales

 VHDL permite utilizar otro tipo de sentencias condicionales más parecidas a los lenguajes de programación usados. Todas estas sentencias como se explicará la sección 3.3 tiene que ir obligatoriamente dentro de un process. Las sentencias condicionales más comunes en VHDL son las siguientes: 

IF – THEN – ELSE 

process (lista de sensibilidad) 
begin 
    if condición then 
        -- asignaciones 
    elsif otra_condición then 
        -- asignaciones 
    else 
        -- asignaciones 
    end if;
end process;

--------------------------------------------- 
-- Ejemplo 
--------------------------------------------- 
process (control, A, B) 
begin
    if control = “00” then 
        resultado <= A + B; 
    elsif control = “11” then 
        resultado <= A – B;
    else 
        resultado <= A; 
    end if; 
end process; 
---------------------------------------------- 

La sentencia if-else permite cualquier tipo de combinación y encadenamiento, exactamente igual que ocurre en C o PASCAL o cualquier otro lenguaje de programación de alto nivel. 



CASE – WHEN 
process (lista de sensibilidad) 
begin 
    case 
        señal_condición is 
    when valor_condición_l => 
         -- asignaciones 
         … 
    when valor_condición_n => 
         -- asignaciones 
    when others => 
         -- asignaciones 
    end case; 
end process; 

--------------------------------------------- 
-- Ejemplo 
--------------------------------------------- 
process (control, A, B) 
begin 
    case control is when “00” => 
        resultado <= A+B; 
    when “11” => 
        resultado <= A-B; 
    when others => 
        resultado <= A; 
    end case; 
end process; 
----------------------------------------------

Dentro de las asignaciones pueden parecer también sentencias if-else. Es necesario que aparezca en la estructura when others, pero no es necesario que tenga asignaciones, se puede dejar en blanco. 



Igual que en los lenguajes software, existen distintos tipos de bucles: 

FOR – LOOP 
process (lista de sensibilidad) 
begin 
for loop_var in range loop 
-- asignaciones 
end loop; 
end process;


Para el for range puede ser 0 to N o N downto 0. 

--------------------------------------------- 
-- Ejemplo 
--------------------------------------------- 
process (A) 
begin 
for i in 0 to 7 loop 
    B(i+1) <= A(i); 
end loop; 
end process; --------------------------------------------- 



WHILE – LOOP 
process (lista de sensibilidad) 
begin 
while 
condición loop 
-- asignaciones 
end loop; 
end process; 

--------------------------------------------- 
-- Ejemplo 
--------------------------------------------- 
process (A) 
variable i: natural := 0; 
begin 
    while i < 7 loop 
        B(i+1) <= A(i); 
        i := i+1; 
    end loop; 
end process; 
--------------------------------------------- 


https://eprints.ucm.es/id/eprint/26200/1/intro_VHDL.pdf

Comentarios

Entradas populares de este blog

ARREGLO LOGICO GENERICO (GAL)

Función "rising_edge" para VHDL

Señal del reloj en VHDL