0% encontró este documento útil (0 votos)
5 vistas5 páginas

Lógica Combinacional y VHDL en Circuitos

Este documento describe la implementación de lógica combinacional utilizando VHDL. Se presentan tablas de verdad, ecuaciones booleanas y código VHDL para diseñar un circuito digital con 4 entradas y 1 salida.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas5 páginas

Lógica Combinacional y VHDL en Circuitos

Este documento describe la implementación de lógica combinacional utilizando VHDL. Se presentan tablas de verdad, ecuaciones booleanas y código VHDL para diseñar un circuito digital con 4 entradas y 1 salida.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1

Laboratorio N°3 Implementación de lógica


combinacional con VHDL
Andrea Yuliana Triana Camacho, Código: 20171572023 - Javier Ricardo Cossio Vargas, Código: 20181572009
-Sebastián Góngora Quiroga, Código: 20182572036

I. A SIGNACIONES DE SEÑALES CONCURRENTES CON B. Diseño de circuito digital:


OPERADORES LÓGICOS :

Los operadores lógicos vistos en clase se pueden utilizar


junto con asignaciones de señales concurrentes para crear cir-
cuitos lógicos combinacionales individuales, como se muestra
en la figura 1.

Fig. 1. Señales concurrentes

A. Tabla de verdad:
C. Código VHDL:
library IEEE;
use IEEE.std_logic_1164.all;
A B C D F use IEEE.numeric_std.all;
0 0 0 0 0 use IEEE.std_logic_unsigned.all;
0 0 0 1 0 entity systemj is
0 0 1 0 0
0 0 1 1 0 Port ( A, B, C, D: in bit;
0 1 0 0 1 F: out bit);
0 1 0 1 1 end entity;
0 1 1 0 0
0 1 1 1 1
architecture systemj_arq of systemj is
1 0 0 0 0 begin
1 0 0 1 0 F<= (B and (not C)) or (B and D);
1 0 1 0 0 end architecture;
1 0 1 1 0
1 1 0 0 1 ________________
1 1 0 1 1 Testbench
1 1 1 0 0 library IEEE;
1 1 1 1 1
TABLE I
use IEEE.std_logic_1164.all;
TABLA DE VERDAD use IEEE.numeric_std.all;
use IEEE.std_logic_textio.all;
entity Simulacion_TB is
end entity;
Ecuaciones booleanas: architecture SistemaX_TB_arq of Simulacion_TB is
component systemj
A’.B.C’.D’ + A’.B.C’.D + A’.B.C.D + A.B.C’.D’ + Port (A, B, C, D: in bit;
A.B.C’.D + A.B.C.D F: out bit);
(A+B+C+D).(A+B+C+D’).(A+B+C’+D).(A+B+C’+D’). end component;
signal A_TB, B_TB, C_TB, D_TB : bit;
(A+B’+C’+D).(A’+B+C+D) . (A’+B+C+D’).(A’+B+C’+D). signal F_TB : bit;
(A’+B+C’+D’).(A’+B’+C’+D) begin
DUT1 : systemj port map (A => A_TB,
La expresión minizada es:
B => B_TB,
B.C’ + B.D C => C_TB,
2

D => D_TB, de 4 entradas y una sola salida, utlizando las asignaciones


F => F_TB); de señales simultáneas y operadores lógicos, este proceso se
ESTIMULO : process puede observar en la simulación obtenida del código desarrol-
begin lado.
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’0’;
wait for 125 ns; II. A SIGNACIONES DE SEÑALES CONDICIONALES
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’1’;
El verdadero potencial de un HDL es cuando el com-
wait for 125 ns;
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’0’; portamiento del sistema se puede describir completamente
wait for 125 ns; sin requerir ningún diseño manual. La asignación de señales
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’1’; condicionales nos permite describir una asignación de señal
wait for 125 ns; concurrente utilizando condiciones booleanas que afectan los
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’0’; valores del resultado. En este tipo de asignación la palabra
wait for 125 ns; when se usa para describir la asignación de señal para una
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’1’; condición booleana particular. La palabra clave else se utiliza
wait for 125 ns; para describir las asignaciones de señales para cualquier otra
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’0’; condición. La condiciones booleanas se pueden colocar entre
wait for 125 ns; paréntesis para facilitar la lectura.
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’1’;
wait for 125 ns; A. Tabla de verdad:
A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’0’;
wait for 125 ns; A B C D F
A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’1’; 0 0 0 0 0
0 0 0 1 0
wait for 125 ns; 0 0 1 0 0
A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’0’; 0 0 1 1 0
wait for 125 ns; 0 1 0 0 1
A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’1’; 0 1 0 1 1
0 1 1 0 0
wait for 125 ns; 0 1 1 1 1
A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’0’; 1 0 0 0 0
wait for 125 ns; 1 0 0 1 0
A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’1’; 1 0 1 0 0
1 0 1 1 0
wait for 125 ns; 1 1 0 0 1
A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’0’; 1 1 0 1 1
wait for 125 ns; 1 1 1 0 0
A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’1’; 1 1 1 1 1
TABLE II
wait for 125 ns; TABLA DE VERDAD
end process;
end architecture;
Ecuaciones booleanas:
D. Simulación: A’.B.C’.D’ + A’.B.C’.D + A’.B.C.D + A.B.C’.D’ +
A.B.C’.D + A.B.C.D
(A+B+C+D).(A+B+C+D’).(A+B+C’+D).(A+B+C’+D’).
(A+B’+C’+D).(A’+B+C+D) . (A’+B+C+D’).(A’+B+C’+D).
(A’+B+C’+D’).(A’+B’+C’+D)
La expresión minizada es:
B.C’ + B.D

B. Código VHDL:
Design
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_unsigned.all;
Fig. 2. Comparador entity systemj is
Port ( A, B, C, D: in bit;
E. Análisis de resultados: F: out bit);
En este ejercicio nos podemos dar cuenta como se im- end entity;
plemento el comportamiento descrito por los maxitérminos architecture Systemj_arq of systemj is
3

begin A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’0’;
F<= ’0’when (A=’0’ and B= ’0’ and C= ’0’ and D=’0’) wait for 125 ns;
else A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’1’;
’0’when (A=’0’ and B= ’0’ and C= ’0’ and D=’1’) else wait for 125 ns;
’0’when (A=’0’ and B= ’0’ and C= ’1’ and D=’0’) else A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’0’;
’0’when (A=’0’ and B= ’0’ and C= ’1’ and D=’1’) else wait for 125 ns;
’1’when (A=’0’ and B= ’1’ and C= ’0’ and D=’0’) else A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’1’;
’1’when (A=’0’ and B= ’1’ and C= ’0’ and D=’1’) else wait for 125 ns;
’0’when (A=’0’ and B= ’1’ and C= ’1’ and D=’0’) else A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’0’;
’1’when (A=’0’ and B= ’1’ and C= ’1’ and D=’1’) else wait for 125 ns;
’0’when (A=’1’ and B= ’0’ and C= ’0’ and D=’0’) else A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’1’;
’0’when (A=’1’ and B= ’0’ and C= ’0’ and D=’1’) else wait for 125 ns;
’0’when (A=’1’ and B= ’0’ and C= ’1’ and D=’0’) else A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’0’;
’0’when (A=’1’ and B= ’0’ and C= ’1’ and D=’1’) else wait for 125 ns;
’1’when (A=’1’ and B= ’1’ and C= ’0’ and D=’0’) else A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’1’;
’1’when (A=’1’ and B= ’1’ and C= ’0’ and D=’1’) else wait for 125 ns;
’0’when (A=’1’ and B= ’1’ and C= ’1’ and D=’0’) else
end process;
’1’when (A=’1’ and B= ’1’ and C= ’1’ and D=’1’);
end architecture;
end architecture;
________________
Testbench C. Simulación:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_textio.all;
entity Simulacion_TB is
end entity;
architecture SistemaX_TB_arq of Simulacion_TB is
component systemj
Port (A, B, C, D: in bit;
F: out bit);
end component;
signal A_TB, B_TB, C_TB, D_TB : bit;
signal F_TB : bit; Fig. 3. Señales condicionales
begin
DUT1 : systemj port map (A => A_TB, D. Análisis de resultados:
B => B_TB,
C => C_TB, Para la solución y ejecución de este ejercicio se tuvieron
D => D_TB, en cuenta los maxitérminos de 4 entradas y la utilización de
F => F_TB); asignación de señales condicionales.
ESTIMULO : process
begin III. A SIGNACIONES DE SEÑALES SELECCIONADAS
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’0’;
wait for 125 ns; En este enfoque la asignación de la señal se basa en un
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’1’; valor específico de la señal de entrada. La palabra clave with se
wait for 125 ns; utiliza para comenzar la asignación de la señal seleccionada. A
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’0’; continuación, le sigue el nombre de la entrada que se utilizará
wait for 125 ns; para dictar el valor de la salida. Solo se puede listar un único
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’1’; nombre de variable de entrada, luego si la asignación se basa
wait for 125 ns; en múltiples variables, primero debe concatenarse en un solo
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’0’; vector antes de realizar la asignación. Después de que se
wait for 125 ns; enumera la entrada, la palabra clave select indica el comienzo
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’1’; de las asignaciones de señales. Se realiza una asignación a
wait for 125 ns; una señal basada en una lista de posibles valores de entrada
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’0’; que siguen a la palabra clave when. Se pueden usar múltiples
wait for 125 ns; valores de códigos de entrada y se separan por comas. La
A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’1’; palabra clave others se usa para cubrir cualquier valor de
wait for 125 ns; entrada que no se indique explícitamente.
4

A. Código VHDL: A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’0’;
Design wait for 125 ns;
use IEEE.std_logic_1164.all; A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’1’;
use IEEE.numeric_std.all; wait for 125 ns;
use IEEE.std_logic_unsigned.all; A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’0’;
entity systemk is wait for 125 ns;
Port ( A, B, C, D: in bit; A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’1’;
F: out bit); wait for 125 ns;
end entity; A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’0’;
architecture systemk_arq of systemk is wait for 125 ns;
signal ABCD : bit_vector(3 downto 0); A_TB <= ’0’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’1’;
begin wait for 125 ns;
ABCD<= A & B & C & D; A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’0’;
with (ABCD) select wait for 125 ns;
F <=’1’when "0000", A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’1’;
’1’when "0001", wait for 125 ns;
’1’when "0010", A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’0’;
’0’when "0011", wait for 125 ns;
’1’when "0100", A_TB <= ’1’; B_TB <= ’0’; C_TB <= ’1’; D_TB <= ’1’;
’1’when "0101", wait for 125 ns;
’1’when "0110", A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’0’;
’0’when "0111", wait for 125 ns;
’1’when "1000", A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’0’; D_TB <= ’1’;
’1’when "1001", wait for 125 ns;
’1’when "1010", A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’0’;
’0’when "1011", wait for 125 ns;
’1’when "1100", A_TB <= ’1’; B_TB <= ’1’; C_TB <= ’1’; D_TB <= ’1’;
’1’when "1101", wait for 125 ns;
’1’when "1110", end process;
’0’when "1111"; end architecture;
end architecture;
________________ B. Análisis de resultados:
Testbench
library IEEE; Para la ejecución de este código VHDL se tuvo en cuenta
use IEEE.std_logic_1164.all; la tabla de verdad anexa en la práctica y junto con eso se
use IEEE.numeric_std.all; utilizaron las señales seleccionadas.
use IEEE.std_logic_textio.all;
entity Simulacion_TB is IV. D ISEÑO ESTRUCTURAL USANDO COMPONENTES
end entity; El diseño estructural en VHDL se refiere a incluir sub-
architecture SistemaX_TB_arq of Simulacion_TB is sistemas de nivel inferior dentro de un sistema de nivel
component systemk superior para producir la funcionalidad deseada. Un diseño
Port (A, B, C, D: in bit; VHDL puramente estructural no contendría ningún modelo
F: out bit); de comportamiento en la arquitectura, como asignaciones de
end component; señales, sino que sólo contendría la creación de instancias y
signal A_TB, B_TB, C_TB, D_TB : bit; las interconexiones de otros subsistemas. Un subsistema se
signal F_TB : bit; denomina componente en VHDL. Para cualquier componente
begin que se vaya a utilizar en una arquitectura, debe declararse
DUT1 : systemk port map (A => A_TB, antes de la declaración de inicio. Un componente específico
B => B_TB, solo necesita ser declarado una vez. Después de la declaración
C => C_TB, de inicio, se puede usar tantas veces como sea necesario.
D => D_TB,
F => F_TB);
ESTIMULO : process A. Código VHDL (Mapeo explícito de puertos) :
begin library IEEE;
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’0’; use IEEE.std_logic_1164.all;
wait for 125 ns; use IEEE.numeric_std.all;
A_TB <= ’0’; B_TB <= ’0’; C_TB <= ’0’; D_TB <= ’1’; use IEEE.std_logic_unsigned.all;
wait for 125 ns; entity systemk is
5

Port ( A, B, C, D: in bit; F : out bit);


F: out bit); end component;
end entity; begin
architecture systemk_arq of systemk is U1 : INV1 port map (A,An);
signal An, Bn, Cn, Dn : bit; U2 : INV1 port map (B,Bn);
signal m0, m1, m2, m3 : bit; U3 : INV1 port map (C,Cn);
component INV1 ---declare INV1 U4 : INV1 port map (D,Dn);
port ( A: in bit; U5 : OR4 port map (A, B, Cn, Dn, m0);
F: out bit); U6 : OR4 port map (A, Bn, Cn, Dn, m1);
end component; U7 : OR4 port map (An, B, Cn, Dn, m2);
Component OR4 ---Declare OR4 U8 : OR4 port map (An, Bn, Cn, Dn, m3);
port(A, B, C, D : in bit; U9 : AND4 port map (m0, m1, m2, m3, F);
F : out bit); end architecture;
end component;
Component AND4 ---Declare AND4 C. Análisis de resultados:
port(A, B, C, D : in bit;
Para esta parte del mapeo observamos la tabla de verdad
F : out bit);
anexa en la práctica, para crear un código de diseño estructural
end component;
y con compuertas básicas: Primero, utlizamos las señales con-
begin
currentes y los operadores lógicos, y por segundo modificamos
U1 : INV1 port map (A=>A, F=>An);
el modelo anterior usando un mapeo de puertos posicionales.
U2 : INV1 port map (A=>B, F=>Bn);
U3 : INV1 port map (A=>C, F=>Cn);
V. C ONCLUSIONES
U4 : INV1 port map (A=>D, F=>Dn);
U5 : OR4 port map (A=>A, B=>B, C=>Cn, D=>Dn,
F=>m0);
U6 :OR4 port map (A=>A, B=>Bn, C=>Cn, D=>Dn,
F=>m1);
U7 : OR4 port map (A=>An, B=>B, C=>Cn, D=>Dn,
F=>m2);
U8 : OR4 port map (A=>An, B=>Bn, C=>Cn, D=>Dn,
F=>m3);
U9 : AND4 port map (A=>m0, B=>m1, C=>m2, D=>m3,
F=>F);
end architecture;

B. Código VHDL (Mapeo de puertos posicional) :


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_unsigned.all;
entity systemk is
Port ( A, B, C, D: in bit;
F: out bit);
end entity;
architecture systemk_arq of systemk is
signal An, Bn, Cn, Dn : bit;
signal m0, m1, m2, m3 : bit;
component INV1 ---declare INV1
port ( A: in bit;
F: out bit);
end component;
Component OR4 ---Declare OR4
port(A, B, C, D : in bit;
F : out bit);
end component;
Component AND4 ---Declare AND4
port(A, B, C, D : in bit;

También podría gustarte