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
begin
if condición then
-- asignaciones
elsif otra_condición then
-- asignaciones
else
-- asignaciones
end if;
end process;
-- 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;
-- 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;
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;
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
Publicar un comentario