Está en la página 1de 4

ANÁLISIS DE UN CÓDIGO EN VHDL

Del siguiente código:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Com_or is
port(
a,b: in std_logic;
l1: out std_logic);
end Com_or;

architecture Funcional of Com_or is


begin
process (a,b)
begin
if(a='0' and b='0') then
l1<='0';
else
l1<='1';
end if;
end process;
end Funcional;

Describa su funcionamiento.
Como vemos tenemos una sentencia IF en donde especificamos que solo va hacer ‘0’
cuando sus dos entradas se encuentre bajas a=’0’ AND b =’0’, si creamos la tabla de
verdad de esta condición podemos notar algo interesante:

a b L1 a b L1
0 0 0 0 0 0
0 1 1 = 0 1 1
1 0 1 1 0 1
1 1 1 1 1 1
Condición (a AND b) Compuerta OR

Como vemos la tabla de verdad del código y de la compuerta OR, entonces, en el código
planteado lo que hacemos es representar la compuerta OR a través de una compuerta
AND esto lo comprobamos con la ley de DE MORGAN en donde:

𝐴 𝑜𝑟 𝐵 = ̅̅̅̅̅̅̅̅̅̅̅
𝐴̅ 𝑎𝑛𝑑 𝐵̅

Nombre: Elias Ortega Chilán Curso: N5A


Si representamos esta ley en compuertas lógica tenemos lo siguiente:

Este resultado lo vamos al ver el esquemático de entidad/arquitectura que el Xilinx nos


muestra de la configuración:

El resultado de la arquitectura es una compuerta AND con sus entradas a y b negadas y


las salida l1 también se encuentran negada, como lo demostramos con la ley de DE
MORGAN.

PROCESS
Un PROCESS, como se ha dicho antes, es una sentencia concurrente en el sentido de
que todos los PROCESS y todas las demás sentencias concurrentes se ejecutarán sin un
orden establecido. No obstante las sentencias que hay dentro del PROCESS se ejecutan
de forma secuencial.
Por lo tanto se puede decir que una estructura secuencial va en el interior de un
PROCESS.
La estructura genérica de esta sentencia es:

PROCESS [lista de sensibilidad]


[Declaración de variables]
BEGIN
[Sentencias secuenciales]
END PROCESS;

Nombre: Elias Ortega Chilán Curso: N5A


La lista de sensibilidad es una serie de señales que, al cambiar de valor, hacen que se
ejecute el PROCESS.

Un ejemplo sería:

PROCESS (señal1, señal2)


...

El PROCESS anterior sólo se ejecutará cuando señal1 o señal2 cambien de valor.

Sentencias secuenciales
IF... THEN... ELSE

La construcción de la sentencia IF y sus variantes son usadas para seleccionar un


conjunto de sentencias para ser ejecutadas según la evaluación de una condición o
conjunto de condiciones, cuyo resultado debe ser o true o false.
Permite la ejecución de un bloque de código dependiendo de una o varias condiciones.

La sintaxis en VHDL es:

IF <condición1> THEN
[Sentencias 1]
ELSIF <condición2> THEN
[Sentencias 2]
ELSE
[Sentences N]
END IF;

Un ejemplo es:

IF (reloj='1' AND enable='1') THEN


salida<=entrada;
ELSIF (enable='1') THEN
salida<=tmp;
ELSE
salida<='0';
END IF;

Nombre: Elias Ortega Chilán Curso: N5A


Retrasos
El retraso es uno de los elementos más importantes de la simulación, puesto que el
comportamiento de un circuito puede cambiar dependiendo del cambio de las
diferentes señales. Cuando se realiza una asignación se produce de forma inmediata,
puesto que no se ha especificado ningún retraso. Este comportamiento puede ser
alterado mediante la opción AFTER cuando se asigna un valor a una señal. Su sintaxis
corresponde a la siguiente línea.

Señal <= valor AFTER tiempo;

Donde tiempo es un valor de tiempo indicado en us, ns, ms,... Un ejemplo puede ser el
siguiente.

rst <= '0' AFTER 15 ns;

Pero esta sentencia es mucho más compleja, por ejemplo se puede asignar inicialmente
un valor y modificarlo posteriormente o incluso que sea modificado cada cierto tiempo.

signal clk : std_logic := '0';


....
rst <= '1', '0' AFTER 15 ns; -- Inicialmente rst=1, despues de 15 ns rst=0
clk <= not clk AFTER 5 ns; -- Cada 5 ns clk cambia de valor

Nombre: Elias Ortega Chilán Curso: N5A

También podría gustarte