Vous êtes sur la page 1sur 13

INGENIERO TCNICO DE TELECOMUNICACIN.

ESPECIALIDAD TELEMTICA.

DISEO DE SISTEMAS ELECTRNICOS.


EJERCICIOS RESUELTOS DE VHDL.

Dpto de Tecnologa Electrnica

Problema 1.

Concurrencia.
Construya el listado VHDL que describa el circuito Cero de la figura adjunta,
sabiendo que presenta el comportamiento descrito en la tabla de verdad que la
acompaa.
x
0
0
0
0
1
1
1
1
x
0
0

x
y

CERO

y
0
0
1
1
0
0
1
1
y
0
0

z
0
1
0
1
0
1
0
1
z
0
1

-- Solucin 1: Generacin de la tabla de


verdad.

-- Solucin 2: Minimizando (Ecuaciones


lgicas)

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY Cero IS
PORT ( sX, sY, sZ: IN std_logic;
sH: OUT std_logic);
END Cero;

ENTITY Cero IS
PORT ( sX, sY, sZ: IN std_logic;
sH: OUT std_logic);
END Cero;

ARCHITECTURE CeroArch OF Cero IS


BEGIN
sH <= 1 WHEN (sX=1 and sY = 1 and sZ =
0) ELSE
1 WHEN (sX=1 and sY = 0 and sZ =
1) ELSE
0;

ARCHITECTURE CeroArch OF Cero IS


BEGIN
sH <= sX and (sY xor sZ);
END CeroArch;

END CeroArch;

H
0
0
0
0
0
1
1
0
H
0
0

Problema 2

Operador Concatenacin.
Considere dos vectores A(a 3a2a1a0) y B(b3b2b1b0), los cuales van a ser las entradas
de un sistema digital. Se desea modelar en VHDL este sistema, sabiendo que
presenta una salida (S) definida por el siguiente comportamiento:
S = 1 si:
a3 = b 3 a2 = b2 a1 = b 1 a0 = b0

S=0
en cualquier otro caso.

donde indica el operador negacin.

-- Solucin 1: Estructura I F-THEN-ELSE

LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY Comparador IS
PORT ( svA, s vB: IN std_logic _vector(3
DOWNTO 0);
sS: OUT std_logic);
END Comparador;

ENTITY Comparador IS
PORT ( svA, s vB: IN std_logic _vector(3
DOWNTO 0);
sS: OUT std_logic);
END Comparador;

ARCHITECTURE ComparadorArch OF
Comparador IS
BEGIN
PROCESS (svA, svB)
SIGNAL svAux: std_logic _vector(3 DOWNTO 0);
BEGIN
svAux <= svB(3)&(not svB(2))&svB(1)&(not
svB(0));

ARCHITECTURE ComparadorArch OF
Comparador IS
BEGIN
PROCESS (svA, svB)
BEGIN
IF (svA(3) /= svB(3)) THEN sS<=0;
ELSIF (svA(2) /= not svB(2)) THEN sS<=0;
ELSIF (svA(1) /= svB(1)) THEN sS<=0;
ELSIF (svA(0) /= not svB(0)) THEN sS<=0;
ELSE sS<=1;
END IF;

-- Se efecta la comparacin sobre la va riable


-- auxiliar
IF (svA = svAux) THEN sS<=1;
ELSE sS<=0;
END ComparadorArch;

END PROCESS;
END ComparadorArch;

-- Solucin 2: CONCATENACIN

Problema 3

Uso de configuraciones.
Escriba la descripcin VHDL estructural (metodologa de instanciacin) del circuito
de la figura adjunta:

LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

--Configuracin para puerta OR


ARCHITECTURE OR2Arch OF Puerta2 IS
BEGIN
sOut <= sIn1 or sIn2;
END OR2Arch;

-- Se declara la misma entidad


-- para diferentes configuraciones.
-- (Todas son puertas de dos entradas
-- y una salida).
ENTITY Puerta2 IS
PORT (sIn1, sIn2: IN std_logic;
sOut: OUT std_logic
);
END Puerta2;

--Configuracin para puerta AND


ARCHITECTURE AND2Arch OF Puerta2 IS
BEGIN
sOut <= sIn1 and sIn2;
END AND2Arch;
--Configuracin para puerta NAND
ARCHITECTURE NAND2Arch OF Puerta2 IS
BEGIN
sOut <= sIn1 nand sIn2;
END NAND2Arch;

--Configuracin para puerta XOR


ARCHITECTURE XOR2Arch OF Puerta2 IS
BEGIN
sOut <= sIn1 xor sIn2;
END XOR2Arch;

LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

--Configuracin para puerta XNOR


ARCHITECTURE XNOR2Arch OF Puerta2 IS
BEGIN
sOut <= sIn1 xnor sIn2;
END XNOR2Arch;

ENTITY Circuito IS
PORT (sA, sB: IN std_logic;
sU, sV: IN std_logic;
3

sX, sY: IN std_logic;


sF1, sF2, sF3: OUT std_logic
);
END Circuito;

G2: Puerta2 PORT MAP(sIn1=>sU,


sIn2=>sV,
sOut=>sX2
);
G3: Puerta2 PORT MAP(sIn1=>sX,
sIn2=>sY,
sOut=>sX3
);

ARCHITECTURE CircuitoArch OF Circuito IS


--Declaracin de componentes.
COMPONENT Puerta2 IS
PORT (sIn1, sIn2: IN std_logic;
sOut: OUT std_logic
);
END COMPONENT;
--Declaracin de variables auxiliares.
SIGNAL sX1, sX2, sX3, sX4, sX5: std_logic;

G4: Puerta2 PORT MAP(sIn1=>sX1,


sIn2=>sX2,
sOut=>sX4
);
G5: Puerta2 PORT MAP(sIn1=>sX2,
sIn2=>sX3,
sOut=>sX5
);

--Declaracin de configuraciones .
FOR G1: Puerta2 USE ENTITY
Puerta2(XNOR2Arch);
FOR G2: Puerta2 USE ENTITY
Puerta2(AND2Arch);
FOR G3: Puerta2 USE ENTITY
Puerta2(XOR2Arch);
FOR G4: Puerta2 USE ENTITY
Puerta2(OR2Arch);
FOR G5: Puerta2 USE ENTITY
Puerta2(AND2Arch);
FOR G6: Puerta2 USE ENTITY
Puerta2(NAND2Arch);

G6: Puerta2 PORT MAP(sIn1=>sX4,


sIn2=>sX5,
sOut=>sF2
);
-- Se actualizan las funciones de salida
-- (Almacenadas en las seales auxiliares).
sF1<= sX1;
sF3<= sX5;
-- NOTA: Otra forma de resolucin podra
-haber sido declarando las sF como
-tipo INOUT. Entonces se podran leer
-y podran colocarse en las instanciaciones
-de los componentes.
END CircuitoArch;

BEGIN
G1: Puerta2 PORT MAP(sIn1=>sA,
sIn2=>sB,
sOut=>sX1
);

Problema 4

Uso de configuraciones (II).


Escriba la descripcin VHDL estructural (metodologa de instanciacin) del circuito
de la figura adjunta:

BEGIN
sOut <= sIn1 or sIn2;
END OR2Arch;

LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

-- Se declara la misma entidad


-- para diferentes configuraciones.
-- (Todas son puertas de dos entradas
-- y una salida).
ENTITY Puerta2 IS
PORT (sIn1, sIn2: IN std_logic;
sOut: OUT std_logic
);
END Puerta2;

-- Descripcin del FLIP -FLOP D


ENTITY FlipFlopD IS
PORT (sD, CLK: IN std_logic;
sQ: OUT std_logic
);
END FlipFlopD;

--Configuracin para puerta XOR


ARCHITECTURE XOR2Arch OF Puerta2 IS
BEGIN
sOut <= sIn1 xor sIn2;
END XOR2Arch;

ARCHITECTURE FlipFlopDArch OF FlipFlopD IS


BEGIN
PROCESS (CLK)
BEGIN
--Declaracin del flanco de bajada.
IF (falling_edge(CLK)) THEN sQ<= sD;
ELSE NULL;
END PROCESS;
END FlipFlopDArch;

--Configuracin para puerta NOR


ARCHITECTURE NOR2Arch OF Puerta2 IS
BEGIN
sOut <= sIn1 nor sIn2;
END NOR2Arch;
--Configuracin para puerta OR
ARCHITECTURE OR2Arch OF Puerta2 IS
5

-- Descripcin VHDL estructural del circuito.

--Declaracin de configuraciones .
FOR G1: Puerta2 USE ENTITY
Puerta2(OR2Arch);
FOR G2: Puerta2 USE ENTITY
Puerta2(NOR2Arch);
FOR G3: Puerta2 USE ENTITY
Puerta2(XOR2Arch);

LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
ENTITY Circuito IS
PORT (sU, sV: IN std_logic;
CLK_C: IN std_logic;
sS: OUT std_logic
);
END Circuito;

BEGIN
G1: Puerta2 PORT MAP(sIn1=>sU,
sIn2=>sV,
sOut=>sX1
);

ARCHITECTURE CircuitoArch OF Circuito IS


--Declaracin de componentes.
COMPONENT Puerta2 IS
PORT (sIn1, sIn2: IN std_logic;
sOut: OUT std_logic
);
END COMPONENT;

G2: Puerta2 PORT MAP(sIn1=>sU,


sIn2=>sV,
sOut=>sX2
);
FD_1: FlipFlopD PORT MAP(sD=>sX2,
CLK=>CLK_C,
sQ=>sX3
);

COMPONENT FlipFlopD IS
PORT (sD, CLK: IN std_logic;
sQ: OUT std_logic
);
END COMPONENT;

G3: Puerta2 PORT MAP(sIn1=>sX2,


sIn2=>sX3,
sOut=>sS
);
END CircuitoArch;

--Declaracin de variables auxiliares.


SIGNAL sX1, sX2, sX3: std_logic;

Problema 5.

Control de vagoneta.
Se pretende disear un circuito de control de la vagoneta esquematizada en la
figura adjunta; el cual se debe comportar de la siguiente manera:
Mientras no se pulse el pulsador (P), la vagoneta se encontrar parada en
el punto A.
Al activar el pulsador (P), independientemente de que se vuelva a pulsar P,
la vagoneta se dirigir hacia el punto B y, una vez que haya llegado,
automticamente regresar al punto A.
De nuevo en el punto A, si pulsamos P se repetir el ciclo y si no se pulsa la
vagoneta se para.
Se sabe adems que:
La deteccin de la posicin de la vagoneta se lleva a cabo mediante dos
sensores (SA y SB) colocados en los puntos A y B respectivamente, los
cuales toman el valor lgico 1 al detectar la presencia de la vagoneta y el
de 0 en caso contrario.
El sentido del movimiento de la vagoneta se controla mediante la
combinacin de dos seales digitales (I, D) atendiendo a las siguientes
combinaciones:
I
0
0
1
1

D
0
1
0
1

Accin
Motor parado
Mover Derecha
Mover Izquierda
No Valido

SB

SA
A

a) Descripcin de la interfaz:
Entradas: Tres entradas asociadas a los sensores de deteccin (SA y SB) y
al pulsador (P) ms una seal de reloj (CLK) y otra de
inicializacin (ResetH), asociadas a la parte secuencial.
Salidas: Dos (I y D), encargadas de controlar el sentido del movimiento.

SA
SB

MQUINA
DE
ESTADOS

P
CLK

ResetH

b) Diagrama de estados inicial

P SA SB / I D
E
Notacin Mealy

Equivalentes

P SA SB / I D

c) Diagrama de estados final

E
Notacin Mealy

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ControlVagoneta IS
PORT ( sA, sB, sP: IN std_logic; --Seal de
entrada.
CLK: IN std_logic;
--Seal de reloj.
sResetH: IN std_logic; --Seal de
inicializacin
s I, sD: OUT std_logic); --Salida
END ControlVagoneta ;
ARCHITECTURE ControlVagoneta Arch OF
ControlVagoneta IS
--Declaracin del tipo asociado a los estados.
TYPE TipoEstados IS (IZQUIERDA, DERECHA);
--Seales auxiliares para la codificacin del
--estado actual y siguiente.
SIGNAL tEstadoActual, tEstadoSiguiente:
TipoEstados;
BEGIN
-- Proceso dedicado a la lgica de estado:
LOGICA_ESTADO: PROCESS(tEstadoActual,
sEntrada)
BEGIN
CASE (tEstadoActual) IS
WHEN IZQUIERDA =>
IF (sP = 1 and sA = 1 and sB=0) THEN
tEstadoSiguiente <= DERECHA;
ELSE tEstadoSiguiente <= IZQUIERDA;
END IF;
WHEN DERECHA =>

IF (sA = 0 and sB=1) THEN tEstadoSiguiente <=


IZQUIERDA;
ELSE tEstadoSiguiente <= DERECHA;
END IF;
END CASE;
END PROCESS LOGICA_ESTADO;
-- Proceso dedicado a la Memoria de Estado
MEM_ESTADO: PROCESS(CLK, sResetH,
tEstadoSiguiente)
BEGIN
--Inicializacin con RESET_H
IF (sResetH =1) THEN tEstadoActual<=
tEstadoSiguiente<=
IZQUIERDA;
ELSIF(rising_edge(CLK)) THEN tEstadoActual <=
tEstadoSiguiente;
END IF;
END PROCESS MEM_ESTADO;
--Zona concurrente dedicada a modelar la
--lgica de salida.
sI <= 1 WHEN (tEstadoActual = IZQUIERDA and sA
= 0 )
ELSE 0;
sD <= 1 WHEN (tEstadoActual = DERECHA and sB
= 0 )
ELSE 0;
-- sSalida = f(Estado, Entradas) => Mquina de
MEALY.
END ControlVagonetaArch;

Problema 6.
Detector de secuencia.
Se pide disear un circuito que acepte una entrada de datos serie y presente una
salida que se activar (tomar el valor lgico 1) cuando en los instantes de
muestreo aparezca la secuencia 1011.
a) Descripcin de la interfaz:
Entradas: Una entrada de datos (sDataIn ) ms una seal de reloj (CLK) y
otra de inicializacin (ResetH), asociadas a la parte secuencial.
Salidas: Una sDetect, encargada de activarse cuando se ha detectado la
secuencia.

sDataIn

MQUINA
DE
ESTADOS

CLK

sDetect

ResetH
b) Diagrama de estados versin MOORE

Data
E
S

10

Data
E
S

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SecMoore IS
PORT ( sDataIn: IN std_logic; --Seal de
entrada.
CLK: IN std_logic;
--Seal de
reloj.
sResetH: IN std_logic; --Seal de
inicializacin
sDetect: OUT std_logic); --Salida
END SecMoore;
ARCHITECTURE SecMooreArch OF SecMoore IS
--Declaracin del tipo asociado a los estados.
TYPE TipoEstados IS (E0, E1, E10, E101,
E1011);
--Seales auxiliares para la codificacin del
--estado actual y siguiente.
SIGNAL tEstadoActu al, tEstadoSiguiente:
TipoEstados;
BEGIN
-- Proceso dedicado a la lgica de estado:
LOGICA_ESTADO: PROCESS(tEstadoActual,
sEntrada)
BEGIN
CASE (tEstadoActual) IS
WHEN E0 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <= E0;
ELSE tEstadoSiguiente <= E1;
END IF;
WHEN E1 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <=
E10;
ELSE tEstadoSiguiente <= E1;
END IF;

WHEN E10 =>


IF (sDataIn = 0) THEN tEstadoSiguiente <= E0;
ELSE tEstadoSiguiente <= E101;
END IF;
WHEN E101 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <=
E10;
ELSE tEstadoSiguiente <= E1011;
END IF;
WHEN E1011 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <=
E10;
ELSE tEstadoSiguiente <= E1;
END IF;
END CASE;
END PROCESS LOGICA_ESTADO;
-- Proceso dedicado a la Memoria de Estado
MEM_ESTADO: PROCESS(CLK, sResetH,
tEstadoSiguiente)
BEGIN
--Inicializacin con RESET_H
tEstadoSiguiente<= E0;
IF (sResetH =1) THEN tEstadoActual<=E0
ELSIF(rising_edge(CLK)) THEN tEstadoActual
<= tEstadoSiguiente;
END IF;
END PROCESS MEM_ESTADO;
--Zona concurrente dedicada a modelar la
--lgica de salida.
sDetect <= 1 WHEN (tEstadoActual = E1011)
ELSE 0;
-- sSalida = f(Estado) => Mquina de MOORE.
END SecMooreArch;

11

c) Diagrama de estados versin MEALY


Data / Detect
E
Notacin Mealy

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SecMealy IS
PORT ( sDataIn: IN std_logic; --Seal de
entrada.
CLK: IN std_logic;
--Seal de
reloj.
sResetH: IN std_logic; --Seal de
inicializacin
sDetect: OUT std_logic); --Salida
END SecMealy;
ARCHITECTURE SecMealyArch OF SecMealy IS
--Declaracin del tipo asociado a los estados.
TYPE TipoEstados IS (E0, E1, E10, E101);
--Seales auxiliares para la codificacin del
--estado actual y siguiente.
SIGNAL tEstadoActual, tEstadoSiguiente:
TipoEstados;
BEGIN
-- Proceso dedicado a la lgica de estado:
LOGICA_ESTADO: PROCESS(tEstadoActual,
sEntrada)
BEGIN
CASE (tEstadoActual) IS
WHEN E0 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <=
E0;
ELSE tEstadoSiguiente <= E1;
END IF;
WHEN E1 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <=
E10;
ELSE tEstadoSiguiente <= E1;

END IF;
WHEN E10 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <=
E0;
ELSE tEstadoSiguiente <= E101;
END IF;
WHEN E101 =>
IF (sDataIn = 0) THEN tEstadoSiguiente <=
E10;
ELSE tEstadoSiguiente <= E1;
END IF;
END CASE;
END PROCESS LOGICA_ESTADO;
-- Proceso dedicado a la Memoria de Estado
MEM_ESTADO: PROCESS(CLK, sResetH,
tEstadoSiguiente)
BEGIN
--Inicializacin con RESET_H
IF (sResetH =1) THEN tEstadoActual<=E0
tEstadoSiguiente<= E0;
ELSIF(rising_edge(CLK)) THEN tEstadoActual
<= tEstadoSiguiente;
END IF;
END PROCESS MEM_ESTADO;
--Zona concurrente dedicada a modelar la
--lgica de salida.
sDetect <= 1 WHEN (tEstadoActual = E101 and
sDataIn = 1)
ELSE 0;
-- sSalida = f(Estado, Entrada) => Mquina de
MEALY.
END SecMealyArch;

12

Vous aimerez peut-être aussi