Vous êtes sur la page 1sur 18

ESCUELA SUPERIOR POLITCNICA DE CHIMBORAZO

FACULTAD DE INFORMTICA Y ELECTRNICA


ESCUELA DE INGENIERA ELECTRNICA EN TELECOMUNICACIONES Y REDES
VHDL
PRIMER PARCIAL DE VHDL
NOMBRE: Marco Lema
CDIGO: 509 FECHA: 27/11/2017
SENTENCIA PROCESS
EJEMPLO 1
library ieee;
use ieee.std_logic_1164.all;
entity Secuencial is
port(
s: in std_logic;
a,b,c,d: in std_logic;
y1,y2,y3,y4: out std_logic
);
end Secuencial;

architecture aSecuencial of Secuencial is


begin
process (s,a,b,c,d)
begin
y1<= s and c;
y2<= c or a;
y3<= '1';
y4<=d or not b;
end process;
end aSecuencial;

DIAGRAMA RTL
EJEMPLO 2

CDIGO DEL PROGRAMA


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; --permite trabajar vectores como nmero sin signo

entity Ejemplo is
port(
a,b: in std_logic_vector(3 downto 0);
y: out std_logic_vector(3 downto 0)
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
proceso_1:
process(a) is

begin
y<=a+b;
end process proceso_1;
end aEjemplo;
CONCLUSIONES:

En este caso podemos ver que Quartus II debido a su versin tiene problemas al ejecutar este tipo de programas
secuenciales pues la condicin primaria para que dichos programas se ejecuten es que alguna de las variables sensitivas
cambie, sin embargo, el software no lo ejecuta correctamente.

Adems, el sumador presenta el defecto de que, si los vectores son de 4 elementos, lo que nos permitira sumar
un mximo de 15 + 15 lo que nos dara 30, sin embargo, la salida no podra mostrar dicho resultado pues necesitara 5
elementos de vector.

Esto pone en evidencia que la compilacin de Quartus II nos permite encontrar errores de sintaxis, mas no de
semntica.
SENTENCIA IF

MULTIPLEXOR CON IF

CDIGO DEL PROGRAMA

library ieee;
use ieee.std_logic_1164.all;

entity Ejemplo is
port(
a,b,c,d: in std_logic;
s: in std_logic_vector(1 downto 0);
y: out std_logic
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
process(s,a,b,c,d) is
begin
if s = "00" then
y<= a;
elsif s = "01" then
y<= b;
elsif s = "10" then
y<= c;
else
y<= d;
end if;
end process;
end aEjemplo;

DIAGRAMA RTL
CDIGO DEL PROGRAMA MODIFICADO SIN ELSE

library ieee;
use ieee.std_logic_1164.all;

entity Ejemplo is
port(
a,b,c,d: in std_logic;
s: in std_logic_vector(1 downto 0);
y: out std_logic
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
process(s,a,b,c,d) is
begin
if s = "00" then
y<= a;
elsif s = "01" then
y<= b;
elsif s = "10" then
y<= c;
elsif s = "11" then
y<= d;
end if;
end process;
end aEjemplo;

DIAGRAMA RTL
CONCLUSIONES:

Se recomienda mucho que siempre se termine la instruccin if con la palabra reservada else, ya que caso contrario
como se vio entre los RTL del ejemplo 1 y 2 de la sentencia IF el hardware utilizado tambin vara como la evidencia la
aparicin de un flip-flop al final del segundo.
COMPARADOR

CDIGO DEL PROGRAMA

library ieee;
use ieee.std_logic_1164.all;

entity Ejemplo is
port(
a,b: in std_logic_vector(3 downto 0);
y: out std_logic
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
process(a,b) is
begin
if a = b then
y<= '1';
else
y<= '0';
end if;
end process;
end aEjemplo;

DIAGRAMA RTL
IF INCOMPLETO SIN CERRAR CON ELSE (MISMO PROGRAMA)

CDIGO DEL PROGRAMA

library ieee;
use ieee.std_logic_1164.all;

entity Ejemplo is
port(
a,b: in std_logic_vector(3 downto 0);
y: out std_logic
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
process(a,b) is
begin
if a = b then
y<= '1';
end if;
end process;
end aEjemplo;

DIAGRAMA RTL
COMPARADOR CON TRES SALIDAS (SIN ELSE)

CDIGO DEL PROGRAMA

library ieee;
use ieee.std_logic_1164.all;

entity Ejemplo is
port(
a,b: in std_logic_vector(3 downto 0);
menor, igual, mayor: out std_logic
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
process(a,b) is
begin
if a = b then
igual<= '1';
elsif a < b then
menor<= '1';
elsif a > b then
mayor<= '1';
end if;
end process;
end aEjemplo;

DIAGRAMA RTL
COMPARADOR CON TRES SALIDAS (SIN ELSE MEJOR DECLARADO)

CDIGO DEL PROGRAMA

library ieee;
use ieee.std_logic_1164.all;

entity Ejemplo is
port(
a,b: in std_logic_vector(3 downto 0);
menor, igual, mayor: out std_logic
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
process(a,b) is
begin
if a = b then
igual<= '1';
mayor<= '0';
menor<= '0';
elsif a < b then
igual<= '0';
mayor<= '0';
menor<= '1';
elsif a > b then
igual<= '0';
mayor<= '1';
menor<= '0';
end if;
end process;
end aEjemplo;

DIAGRAMA RTL
CONCLUSIN

Siempre es recomendable nunca olvidarse de dar el valor a las dems variables del programa, no se puede asumir que el
programa de por s asignar un valor de, 0 en este caso, a las variables que no se usan.
COMPARADOR CON TRES SALIDAS CON ELSE

CDIGO DEL PROGRAMA


library ieee;
use ieee.std_logic_1164.all;

entity Ejemplo is
port(
a,b: in std_logic_vector(3 downto 0);
menor, igual, mayor: out std_logic
);
end Ejemplo;

architecture aEjemplo of Ejemplo is


begin
process(a,b) is
begin
if a = b then
igual<= '1';
mayor<= '0';
menor<= '0';
elsif a < b then
igual<= '0';
mayor<= '0';
menor<= '1';
else
igual<= '0';
mayor<= '1';
menor<= '0';
end if;
end process;
end aEjemplo;

DIAGRAMA RTL
CONCLUSIN

Como podemos ver la diferencia entre los circuitos mostrados por los diagramas RTL es clara, notndose el gran impacto
que tiene el poner o no poner el else al final de la sentencia if y del correcto uso de las variables al momento de la
declaracin de las sentencias secuenciales del process.

Vous aimerez peut-être aussi