Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Diseno Secuencial

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 28

Captulo

4
Diseo lgico secuencial
con VHDL

Introduccin
Los circuitos digitales que hemos manejado con anterioridad han sido de
tipo combinacional; es decir, son circuitos que dependen por completo de los
valores que se encuentran en sus entradas, en determinado tiempo. Si bien
un sistema secuencial puede tener tambin uno o ms elementos combinacionales, la mayora de los sistemas que se encuentran en la prctica incluyen elementos de memoria, los cuales requieren que el sistema se describa en
trminos de lgica secuencial.
En este captulo se describen algunos de los circuitos secuenciales ms
utilizados en la prctica, como flip-flops, contadores, registros, etc., adems
se desarrollan ejercicios para aprender la programacin de circuitos secuenciales en los que se integran los conceptos adquiridos en los captulos anteriores.

4.1 Diseo lgico secuencial


Un sistema secuencial est formado por un circuito combinacional y un elemento de memoria encargado de almacenar de forma temporal la historia del
sistema.
En esencia, la salida de un sistema secuencial no slo depende del valor presente de las entradas, sino tambin de la historia del sistema, segn se observa
en la figura 4.1.

94

V H D L : El arte de programar sistemas digitales

Figura 4.1 Estructura de un sistema secuencial.

Bsicamente hay dos tipos de sistemas secuenciales: sncronos y asincronos; el comportamiento de los primeros se encuentra sincronizado mediante el pulso de reloj del sistema, mientras que el funcionamiento de los
sistemas asincronos depende del orden y momento en el cual se aplican sus
seales de entrada, por lo que no requieren un pulso de reloj para sincronizar sus acciones.

4.2 Flip-flops
El elemento de memoria utilizado indistintamente en el diseo de los sistemas sncronos o asincronos se conoce como flip-flop o celda binaria.
La caracterstica principal de un flip-flop es mantener o almacenar un bit
de manera indefinida hasta que a travs de un pulso o una seal cambie de estado. Los flip-flops ms conocidos son los tipos SR, JK, T y D. En la figura 4.2
se presenta cada uno de estos elementos y la tabla de verdad que describe su
comportamiento.

S
0
0
0
0
1
1
1
1

R Q Qt+i
0 0
0
1
0 1
1 0
0
11
0
1
0 0
1
0 1
1 0
11
*

a)
Figura 4.2

J
0
0
0
0
1
1
1
1

K Q Qt+1
0 0
0
1
0 1
1 0
0
11
0
1
0 0
1
0 1
1
1 0
11
0
b)

Flip-flops y tablas de verdad caractersticas.

D
0
0
1
1

Q Qt+1
0 0
1 0
0
1
1 1
c)

T
0
0
1
1

Q Qt+1
0 0
1 1
1
0
1 0
d)

Diseo lgico secuencial con VHDL JQl

Es importante recordar el significado de la notacin Q y Q( t +i) ;


Q = estado presente o actual
Q t +1 = estado futuro o siguiente
Por ejemplo, consideremos la tabla de verdad que describe el funcionamiento del flip-flop tipo D, mostrado en la figura 4.2c) y que se muestra de
nuevo en la figura 4.3a).

D
0
0
1
1
clk

Q
0
1
0
1

Q(t+i)

0
0
1
1

a)

clk
b)

Figura 4.3 a) Diagrama y tabla de verdad del flip-flop D, b) Flujo de informacin en el dispositivo.

Cuando el valor de la entrada D es igual a 1, figura 4.3b), la salida Q t + i


adopta el valor de 1: Q t +i = 1 siempre y cuando se genere un pulso de reloj. Es importante resaltar que el valor actual en la entrada D es transferido
a la salida Q t + sin importar cul sea el valor previo que haya tenido la salida Q en el estado presente.
En el diseo secuencial con VHDL las declaraciones If-then*else son
las ms utilizadas; por ejemplo, el programa del listado 4.1 usa estas declaraciones.
La ejecucin del proceso es sensible a los cambios en clk (pulso de reloj);
esto es, cuando clk cambia de valor de una transicin de 0 a 1 (clk 1), el
valor de D se asigna a Q y se conserva hasta que se genera un nuevo pulso.
A la inversa, si clk no presenta dicha transicin, el valor de Q se mantiene
igual. Esto puede observarse con claridad en la simulacin del circuito,
fig. 4.4.

96

V H D L : El arte de programar sistemas digitales

library ieee;
use ieee.std_logic_1164.all ;
entity f fd is port (
D,clk: in std_logic;
Q:
out std_logic) ;
end ffd;
architecture arq_ffd of ffd is
begin
process (clk) begin
if (clk'event and clk='l') then
Q <= D;
end if ;
end process ;
end arq_ffd;
Listado 4.1 Descripcin de un flip-flop disparado por flanco positivo.

Figura 4.4 Simulacin del flip-flop D.

Notemos que la salida Q toma el valor de la entrada D slo cuando la


transicin del pulso de reloj es de 0 a 1 y se mantiene hasta que se ejecuta de
nuevo el cambio de valor de la entrada clk.
Atributo event
En el lenguaje VHDL los atributos sirven para definir caractersticas que se
pueden asociar con cualquier tipo de datos, objeto o entidades. El atributo
event 1 (evento) se utiliza para describir un hecho u ocurrencia de una seal
en particular.
En el cdigo del listado 4-1 podemos observar que la condicin if
clk 'event es cierta slo cuando ocurre un cambio de valor; es decir, un suceso (event) de la seal clk. Como se puede apreciar, la declaracin (if-then)
no maneja la condicin else, debido a que el compilador mantiene el valor
de Q hasta que no exista un cambio de valor en la seal clk.

El apstrofo' indica que se trata de un atributo.

Diseo lgico secuencial con VHDL JQl

Para mayor informacin de los atributos predefinidos en VHDL consulte el apndice C.


Ejemplo 4.1

Escriba un programa que describa el funcionamiento de un flip-flop SR con


base en la siguiente tabla de verdad.

clk

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

Q
0
1
0
1
0
1
0
1

Qt+i
0
1
0
0
1
1
X
X

Figura E4.1 Tabla de funcionamiento.

Solucin
La tabla de verdad del flip-flop SR muestra que cuando la entrada S es
igual a 1 y la entrada R es igual a 0, la salida Q t + i toma valores lgicos de
1. Por otro lado, cuando S = 0 y R = l , la salida Q t + i = 0; en el caso
de que S y R sean ambas igual a 1 lgico, la salida Q t + j queda indeterminada; es decir, no es posible precisar su valor y ste puede adoptar el 0
o 1 lgico.
Por ltimo, cuando no existe cambio en las entradas S y R es decir, son
igual a 0, el valor de Q t + i mantiene su estado actual Q.
Con base en el anlisis anterior, el programa en VHDL puede realizarse
utilizando instrucciones condicionales y un nuevo tipo de datos: valores no
importa ('-'), los cuales permiten adoptar un valor de 0 o 1 lgico de manera indistinta (Listado 4-2).

98

V H D L : El arte de programar sistemas digitales

1 library ieee;
2 use ieee.std_logic_1164.all ;
3 entity ffsr is port (
4
S,R,clk: in std_logic;
5
Q, Qn: inout std_logic);
6 end ffsr;
7 architecture a_ffsr of ffsr is
8 begin
9 process (elk, S, R)
11 begin
10
if (elk'event and elk = '1') then
11
if (S = ' 0'and R = '1') then
12
Q <= '0';
13
Qn <= '1' ;
14
elsif (S = '1' and R = '0') then
15
Q <= '1';
16
Qn <= '0';
17
elsif (S - '0' and R = '0') then
18
Q <= Q;
19
Qn <= Qn;
20
else
21
Q <=
;
22
Qn <= '-';
23
end if;
24
end if;
25
end process;
26 end a_ffsr;
Listado 4.2 Cdigo VHDL de un registro de 8 bits.

4.3 Registros
En la figura 4.5 se presenta la estructura de un registro de 8 bits con entrada
y salida de datos en paralelo. El diseo es muy similar al flip-flop anterior, la
diferencia radica en la utilizacin de vectores de bits en lugar de un solo bit,
como se observa en el listado 4.2.
D[0:7]

Figura 4.5 Registro paralelo de 8 bits.

-Q[0:7]

Diseo lgico secuencial con VHDL JQl

library ieee;
use ieee.std_logic_1164.all;
entity reg is port (
D:
in std_logic_vector(0 to 7);
clk: in std_logic;
Q:
out std_logic_vector(0 to 7));
end reg ;
architecture arqreg of reg is
begin
process (clk) begin
if (clk'event and clk='l') then
Q <= D;
end if;
end process;
end arqreg;
Listado 4 . 2

Ejemplo 4.2

Cdigo V H D L de un registro de 8 bits.

Escriba un programa de un registro de 4 bits, como el que se muestra en


la figura E4.2. Realice el diseo utilizando instrucciones if-then-else y
procesos.

Figura E 4 . 2

Solucin
Como puede observarse en la tabla que describe el comportamiento del circuito, si CLR = 0, las salidas Q adoptan el valor de 0; pero si CLR 1, toman el valor de las entradas DO, DI, D2 y D3.

100

V H D L : El arte de programar sistemas digitales

CLR

QN

Dn

Dn

Dn

El cdigo del programa se observa en el siguiente listado.

1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity reg4 is port(
4
D: in std_logic_vector(3 downto 0);
5 CLK,CLR: in std_logic;
6
Q/Qn: inout std_logic_vector(3 downto 0));
7 end reg4 ;
8 architecture a_reg4 of reg4 is
9 begin
10
process (CLK,CLR) begin
11
if (CLK'event and CLK ='1') then
12
if (CLR = '1' )then
13
Q <=
14
Qn <=
15
else
16
Q <=
17
Qn <=
18
end if ;
19
end if ;
20
end process;
21 end a_reg4;

D;
not Q;
"0000";
"1111";

Listado E4.2

Las variables sensitivas que determinan el comportamiento del circuito


se encuentran dentro del proceso (CLR y CLK). Para transferir los datos de
entrada hacia la salida es necesario, segn se expuso, generar un pulso
de reloj a travs del atributo event (CLK'revent and CLK = T)

Diseo lgico secuencial con V H D L

JQl

4.4 Contadores
Los contadores son entidades muy utilizadas en el diseo lgico. La forma
usual para describirlos en VHDL es mediante operaciones de incremento,
decremento de datos o ambas.
Como ejemplo veamos la figura 4.6 que representa un contador ascendente de 4 bits, as como el diagrama de tiempos que muestra su funcionamiento.

Figura 4.6 Contador binario de cuatro bits.

Cabe mencionar que la presentacin del diagrama de tiempos de este circuito tiene la finalidad de ilustrar el procedimiento que se sigue en la programacin, ya que puede observarse con claridad el incremento que presentan
las salidas cuando se aplica un pulso de reloj a la entrada (listado 4.3).

library ieee;
use ieee.std_logic_1164.all ;
use work.std_ari th.all ;
entity cont4 is port (
elk: in std_logic;
Q: inout std_logic_vector(3 downto 0));
end cont4;
architecture arqeont of cont4 is
begin
process (elk)
begin
If (elk'event and elk = '1') then
Q <= Q + 1;
end if;
end process ;
end arqeont;
Listado 4.3 Cdigo que describe un contador de 4 bits.

102

V H D L : El arte de programar sistemas digitales

Cuando requerimos la retroalimentacin de una seal (Q <= Q + l ) ,


ya sea dentro o fuera de la entidad, utilizamos el modo inout (Vea seccin
de Modos en Captulo 2). En nuestro caso el puerto correspondiente a Q
se maneja como tal, debido a que la seal se retroalimenta en cada pulso
de reloj. Notemos tambin el uso del paquete std_arith que, como ya se
mencion, permite usar el operador + con el tipo std_logic_vector.
El funcionamiento del contador se define bsicamente en un proceso,
en el cual se llevan a cabo los eventos que determinan el comportamiento
del circuito. Al igual que en los otros programas, una transicin de 0 a 1 efectuada por el pulso de reloj provoca que se ejecute el proceso, lo cual incrementa en 1 el valor asignado a la variable Q. Cuando esta salida tiene el
valor de 15 ("1111") y si el pulso de reloj se sigue aplicando, el programa empieza a contar nuevamente de 0.

Ejemplo 4.3

Elabore un programa que describa el funcionamiento de un contador de 4


bits. Realice en el diseo una seal de control (Up/Down) que determine
el sentido del conteo: ascendente o descendente (Fig. E4.3).

UP/DOWN

ACCION

Cuenta ascendente

Cuenta descendente

Figura E4.3 Contador binario de cuatro bits.

Solucin
La seal de control Up/Down permite definir si el conteo se realiza en sentido ascendente o descendente. En nuestro caso, un cero aplicado a esta seal
determina una cuenta ascendente: del 0 al 15. De esta forma, el funcionamiento del circuito queda determinado por dos seales: el pulso de reloj (clk)
y la seal Up/Down, como se ve en el siguiente programa.

Diseo lgico secuencial con VHDL

JQl

library ieee;
use ieee.std_logic_1164.all ;
use work.std_arith.all;
entity contador is port (
clk: in std_logic;
UP:in std_logic;
Q: inout std_logic_vector(3 downto 0));
end contador;
architecture a_contador of contador is
begin
process (UP, clk) begin
if (clk'event and clk = 'l')then
if (UP = '0') then
Q <= Q+l;
else
Q <= Q-l;
end if ;
end if ;
end process ;
end a_contador;
Listado E4.3.

Contador con reset y carga en paralelo (load)


La entidad de diseo que aparece en la figura 4.7a) es un ejemplo de un circuito contador sncrono de 4 bits. Este contador tiene varias caractersticas
adicionales respecto al anterior. Su funcionamiento se encuentra predeterminado por los valores que se hallan en la tabla de la figura 4.7b). Como se puede observar, este contador posee las entradas de control Enp y Load y segn
el valor lgico que tengan en sus terminales realizarn cualesquiera de las
operaciones reseadas en la tabla. Note que la seal de Reset se activa en nivel alto de forma asincrona; por ltimo, el circuito tiene cuatro entradas en
paralelo declaradas como P3, P2, PI y P0.

b)
Figura 4.7 a) Contador binario de cuatro bits, b) Tabla de funcionamiento.

104

V H D L : El arte de programar sistemas digitales

El propsito de describir este ejemplo radica en subrayar el uso de varias


condiciones, de tal manera que no sea posible evaluar una instruccin si la(s)
condicin (es) predeterminada (s) no se cumple (n). Por ejemplo, observemos
el listado 4.4, donde la lnea 11 presenta la lista sensitiva de las variables que
intervienen en el proceso (clk, ENP, LOAD, R E S E T ) . Ntese que no importa el orden en que se declaran. En la lnea 12 se indica que si R E S E T = 1,
las salidas Q toman el valor de 0; si no es igual a 1, se pueden evaluar las siguientes condiciones (es importante resaltar que la primera condicin debe
ser RESET). En la lnea 15 se observa el proceso de habilitar una carga en
paralelo, por lo que si L O A D 0 y ENP es una condicin de no importa
('-') que puede tomar el valor de 0 o 1 (segn la tabla 4.7b), las salidas Q
adoptarn el valor que se halle en las entradas P (P3, P2, P l , P0). Este ejemplo muestra de forma didctica el uso de la declaracin elsif (si no-si).

1 library ieee;
2 use ieee.std_logic_1164.all;
3 use work.std_arith.all;
4 entity cont is port(
5
P: in std_logic_vector(3 downto 0) ;
6
Clk,LOAD,ENP,RESET: in std_logic;
7
Q: inout std_logic_vector(3 downto 0));
8 end cont;
9 architecture arq_cont of cont is
10 begin
11
process (elk, RESET,LOAD, ENP) begin
12
if (RESET = '1') then
13
Q <= "0000";
14
elsif (elk'event and elk = '1') then
15
if (LOAD = '0' and ENP = '-') then
16
Q <= P;
17
elsif (LOAD = '!' and ENP = '0') then
18

19

Q <= Q;
elsif (LOAD = '1' and ENP = '1') then

20

Q <= Q + 1;

21
end if;
22
end if;
23
end process;
24 end arq_cont;

Listado 4 . 4 Contador con reset, enable y carga en paralelo.

Diseo

lgico

secuencial

con

VHDL

JQl

4.5 Diseo de sistemas secuenciales sncronos


Como ya se mencion, la estructura de los sistemas secuenciales sncronos
basa su funcionamiento en los elementos de memoria conocidos como
flip-flops. La palabra sincrona se refiere a que cada uno de estos elementos de memoria que interactan en un sistema se encuentran conectados
a la misma seal de reloj, de forma tal que slo se producir un cambio de
estado en el sistema cuando ocurra un flanco de disparo o un pulso en la
seal de reloj.
Existe una divisin en el diseo de los sistemas secuenciales que se refiere al momento en que se producir la salida del sistema.

En la estructura de Mealy (Fig. 4.8) las seales de salida dependen tanto


del estado en que se encuentra el sistema, como de la entrada que se aplica en determinado momento.
En la estructura de Moore (Fig. 4.9) la seal de salida slo depende del
estado en que se encuentra.

Salidas

Figura 4.8 Arquitectura secuencial de Mealy.

106

V H D L : El arte de programar sistemas digitales

Salidas

Figura 4.9 Arquitectura secuencial de Moore.

Un sistema secuencial se desarrolla a travs de una serie de pasos generalizados que comprenden el enunciado del problema, diagrama de estados, tabla
de estados, asignacin de estados, ecuaciones de entrada a los elementos de memoria y diagrama electrnico del circuito.
Como ejemplo consideremos el diseo del siguiente sistema secuencial
(Fig, 4.10), en el cual se emite un pulso de salida Z ( Z = l ) cuando en la lnea de entrada (X) se reciben cuatro unos en forma consecutiva; en caso
contrario, la salida Z es igual a cero.

Figura 4 . 1 0 Detector de secuencia.

Diseo

lgico

secuencial

con

VHDL

JQl

Diagramas de estado
El uso de diagramas de estados en la lgica programable facilita de manera
significativa la descripcin de un diseo secuencial, ya que no es necesario
seguir la metodologa tradicional de diseo. En VHDL se puede utilizar un
modelo funcional en que slo se indica la transicin que siguen los estados
y las condiciones que controlarn el proceso.
De acuerdo con nuestro ejemplo (Fig. 4.12), vemos que el sistema secuencial se puede representar por medio del diagrama de estados de la figura 4.12a): arquitectura Mealy. En este diagrama se advierte que el sistema
cuenta con una seal de entrada denominada X y una seal de salida Z. En
la figura 4.12b) se muestra la tabla de estados que describe el comportamiento del circuito.
Cuando se est en el estado dO y la seal de entrada X es igual a uno, se
avanza al estado di y la salida Z durante esta transicin es igual a cero; en
caso contrario, cuando la entrada X es igual a cero, el circuito se mantiene
en el estado dO y la salida tambin es cero (Fig. 4.11).

Figura 4.11 Transicin de un estado a otro.

Con un poco de lgica se puede intuir el comportamiento del diagrama


de estados. Observe como slo la secuencia de cuatro unos consecutivos provoca que la salida Z = 1.

Edo. presente
dO
d1
d2
d3

Edo. futuro
X=0 X=1
dO
d1
d1
d2
d2
d3
dO
d3

Salida Z
X=0 X=1
0
0
0
0
0
0
0
1

b)
Figura 4.12 a) Diagrama de Estados, b) Tabla de estados.

108

V H D L : E l arte d e programar sistemas digitales

Este diagrama se puede codificar con facilidad mediante una descripcin


de alto nivel en VHDL. Esta descripcin supone el uso de declaraciones
case-when las cuales determinan, en un caso particular, el valor que tomar
el siguiente estado. Por otro lado, la transicin entre estados se realiza por
medio de declaraciones if-then'else, de tal forma que stas se encargan de
establecer la lgica que seguir el programa para realizar la asignacin del estado.
Como primer paso en nuestro diseo, consideremos los estados dO, di,
d2 y d3. Para poder representarlos en cdigo VHDL, hay que definirlos dentro de un tipo de datos enumerado 2 (apndice C) mediante la declaracin
type. Observemos la forma en que se listan los identificadores de los estados,
as como las seales utilizadas para el estado actual (edo_presente) y siguiente (edofuturo):
type estados is (dO, di, d2,d3) ;
signal edo_presente, edo_futuro : estados;
El siguiente paso consiste en la declaracin del proceso que definir el
comportamiento del sistema. En ste debe considerarse que el edo_futuro
depende del valor del edo_presente y de la entrada X. De esta manera la lista sensitiva del proceso quedara de la siguiente forma:
procesol: process (edo_presente, X)
Dentro del proceso se describe la transicin del edo_presente al edo_futuro. Primero se inicia con la declaracin case que especifica el primer estado que se va a evaluar e n nuestro caso consideremos que el anlisis comienza en el estado dO (when dO), donde la salida Z siempre es cero sin
importar el valor de X. Si la entrada X es igual a 1 el estado futuro es di; en
caso contrario, es dO.
De este modo, la declaracin del proceso quedara de la siguiente manera:
procesol: process (edo_presente, X) begin
case edo__presente is
when dO => Z<= 'O';
if X
1' then
edo_futuro <= di;
else
edo_futuro <= dO;
end if;

2 Se llaman tipos enumerados porque en ellos se agrupan o enumeran elementos que pertenecen a un mismo
gnero.

Diseo

lgico

secuencial

con

VHDL

JQl

Ntese que en cada estado debe indicarse el valor de la salida (Z < = 0)


despus de la condicin when, siempre y cuando la variable Z no cambie de
valor.
En el listado 4.5 se muestra la definicin completa del cdigo explicado.
Como podemos observar, en el programa se utilizan dos procesos. En el primero, proceso 1 (lnea 11) se describe la transicin que sufren los estados y
las condiciones necesarias que determinan dicha transicin. En el segundo,
proceso2 (lnea 42) se lleva a cabo de manera sncrona la asignacin del estado futuro al estado presente, de suerte que cuando se aplica un pulso de
reloj, el proceso se ejecuta.
En la lnea 31 se describe la forma de programar la salida Z en el estado
d3 cuando sta obtiene el valor de 0 o 1, segn el valor de la entrada X.

1 library ieee;
2 use ieee.std_logic_1164 . all;
3 entity diagrama is port(
4 clk,x: in std_logic;
5
z: out std_logic) ;
6 end diagrama;
7 architecture arq_diagrama of diagrama is
8
type estados is (dO, di, d2, d3);
9
signal edo_presente, edo_futuro: estados;
10
begin
11
procesol: process (edo_presente, x) begin
12
case edo__presente is
13
when dO => z <= '0';
14
if x =' 1' then
15
edo_futuro <= di;
16
else
17
edo_futuro <= dO;
18
end if;
19
when di => z <='0';
20
if x='l' then
21
edo_futuro <= d2;
22
else
23
edo_futuro <= di;
24
end if;
25
when d2 => z <='0';
26
if x='l' then
27
edo_futuro <= d3;
28
else
29
edo_futuro <= dO;
30
end if;
Contina

110

V H D L : El arte de programar sistemas digitales

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

when d3 =>
if x='l' then
edo_futuro <= dO;
z <='1';
else
edo_futuro <= d3;
z <= '0';
end if;
end case;
end process procesol;
proceso2: process(clk) begin
if (clk'event and clk='l') then
edo_presente <= edo_futuro;
end if;
end process proceso2;
end arq_diagrama ;

Listado 4.5 Diseo de un diagrama de estados.

Ejemplo 4 . 4

Se requiere programar el diagrama de estados de la figura E4-4.

Figura E4.4 Diagrama de estados.

Solucin
Por ejemplo, en la figura E4-4 notamos que el circuito pasa al estado ql con el
primer 1 de entrada y al estado q2 con el segundo. Las salidas asociadas con estas dos entradas son 0, segn se seala. La tercera entrada consecutiva de 1 genera un 1 en la salida y hace que el circuito pase al estado q3. Una vez que se
encuentra en q3, el circuito permanecer en este estado, emitiendo salidas 0.

Diseo

lgico

secuencial

con

VHDL

JQl

En lo que respecta a la programacin en VHDL, este ejemplo sigue la


misma metodologa que el ejercicio anterior (Fig. 4.12), la cual consiste en
usar estructuras case - when y tipo de datos enumerado, que en este caso
contiene los cinco estados (qO, q l , q2, q3 y q4) que componen el diagrama.
El listado correspondiente al programa se encuentra a continuacin listado E4.4.

library ieee;
use ieee.std_logic_1164.all;
entity diag is port (
clk,x: in std_logic;
z: out std_logic);
end diag;
architecture arq_diag of diag is
type estados is (q0,ql/q2,q3/q4);
signal edo_pres, edo_fut: estados;
begin
procesol: process (edo_pres,x) begin
case edo_pres is
when qO => z <= ' 0';
if x = '0' then
edo_fut <= q4;
else
edo_fut <= ql;
end if;
when ql => z <= '0';
if x = '0' then
edo_fut <= q4;
else
edo_fut <= q2;
end if;
when q2 =>
if x = '0' then
edo_fut <= q4;
z <= '0';
else
edo_fut <= q3;
z <= '1';
end if;
when q3 => z <= '0';
if x = '0' then
Contina

112

V H D L : El arte de programar sistemas digitales

edo_fut <= q3;


else
edo_fut <= q3;
end if;
when q4 => z <= '0';
if x = '0' then
edo_fut <= q4;
else
edo_fut <= ql;
end if;
end case;
end process procesol;
proceso2: process (clk) begin
if (clk'event and clk='l')then
edo_pres <= edo_fut;
end if;
end process proceso2;
end arqL_diag;

Listado E4.4.

Diseo

lgico

secuencial

con

VHDL

JQl

Ejercicios
Flip-Flop
4.1 Realice un programa en VHDL que describa el funcionamiento del flipflop tipo JK. Auxliese para su descripcin con la tabla caracterstica del
Flip-Flop.

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

Qt+i
0
1
0
0
1
1
1
0

Tabla caracterstica del Flip-Flop JK

4.2. Realice un programa en VHDL que describa el funcionamiento del flipflop tipo T. Auxliese para su descripcin con la tabla caracterstica del
Flip-Flop.
T

Qt+i

0
0
1
1

0
1
0
1

0
1
1
0

Tabla caracterstica del Flip-Flop T

Registros
4.3. Disee un registro de 4 bits como el mostrado en la siguiente figura y
cuyo funcionamiento se encuentra regulado por las seales de control
SO y S I , tal y como se muestra en la siguiente tabla:

114

V H D L : El arte de programar sistemas digitales

SO
0
0
1
1

CLK=
SO, S1 =
DO...03=
RST=
Q0...Q3 =
L=
R=

SI
0
1
0
1

ACCION
Hold (Reten)
Desplazamiento Izquierda SL
Load (Carga)
Desplazamiento Derecha SR

Reloj
Seales de control
Entradas de datos
Reset,
Salida de datos
Entrada serie desplazamiento a la izquierda
Entrada serie desplazamiento a la derecha.

4-4 En la figura siguiente se muestra el esquema lgico de un registro de desplazamiento con entrada serie/ paralelo y salida serie. Realice un programa en VHDL que realice la misma funcin.

Diseo

lgico

secuencial

con

VHDL

JQl

4.5 En la figura siguiente se muestra el esquema lgico de un registro de


desplazamiento con salida en paralelo. La tabla de funcionamiento correspondiente se muestra a continuacin. Realice un programa en
VHDL que realice la funcin del circuito.

Contadores
4.6

Disee y programe un contador que realice la secuencia 0,1,3, 5 y repita el ciclo. El circuito debe contar con una seal de reset activo en bajo, que coloca las salidas Q en estado bajo.

4.7

Disee y programe un contador que realice la secuencia 0,1,2,3,4,5,6,7


y repita el ciclo. El circuito debe contar con una seal de reset activo en
bajo, que coloca las salidas Q en estado bajo.

J 116

V H D L : El arte de programar sistemas digitales

4.8

Programe un circuito contador ascendente / descendente del 0 al 3


mediante una seal de control X. Si X = 0 , el contador cuenta ascendente, si X= 1, el contador cuenta descendente.

4.9

Programe un circuito contador ascendente / descendente del 0 al 15


mediante una seal de control X. Si X = 0 , el contador cuenta ascendente; si X = l , el contador cuenta descendente.
Existen dos seales de salida denominadas Z1 y Z2 que se activan de
la siguiente forma:
Z1 = 1 Cuando el contador se encuentra en los estados pares, en caso
contrario Z1 = 0.
Z2 = 1 Cuando el contador se encuentra en los estados impares, en caso contrario 72=0

4.10 En la siguiente figura se muestra el cronmetro digital configurado para contar del 0 al 99 mediante dos contadores SN 7493 conectados en
cascada. Realice un programa en V H D L que cuente del 0 al 99.

4-11

Realice un programa para un cronmetro que debe contar del 0 al 245


y repita el ciclo.

Diseo

Sistemas

lgico

secuencial

con

VHDL

JQl

secuenciales

4.12 Realice un programa que resuelva el siguiente diagrama de estados:

4.13

Realice un programa que resuelva el siguiente diagrama de estados:

4.14 En la figura se muestra el crucero de una avenida controlada a travs


de un semforo.

J118

V H D L : El arte de programar sistemas digitales

Los automviles pueden circular en la direccin NS o EO mediante la siguiente secuencia:

Los tiempos de duracin de las luces del semforo son: rojo 20 segundos, verde
20 segundos, mbar 5 segundos.
Proponga el diagrama de estados correspondiente y realice el programa
del sistema secuencial.
4.15 El semforo mostrado en la figura del ejercicio de la pgina 117 ha sido
modificado tal y como se muestra en la siguiente figura.

Se requiere agilizar la entrada y salida de vehculos por medio de sensores (S) que detectan la entrada o salida de ellos. Generalmente el semforo
EO siempre se encuentra en verde y en contraparte el semforo NS est en

Diseo

lgico

secuencial

con

VHDL

JQl

rojo; cuando alguno de los sensores detecta la entrada o salida del vehculo
enva una seal al sistema que gobierna el semforo para que ste realice la
secuencia siguiente:

Nuevamente la duracin de encendido de los focos del semforo son: roja 20


segundos, verde 20 segundos, mbar 5 segundos.
Proponga el diagrama de estados correspondiente y realice el programa
del sistema secuencial.

4.16 Programe un detector de secuencia que produce una salida Z = 1 slo


cuando en la seal de entrada X se produce la siguiente secuencia X =

110011.
4-17 Programe un detector de secuencia cuya salida Z= 11011111 cuando
aplicamos a la entrada la secuencia X= 01101010.
4.18 Realice el programa correspondiente al sistema secuencial especificado
en la siguiente tabla.
X=0
X=1
Futuro

Presente
A
B
C
D
E

B/0
A/1
B/0
C/0
D/l

E/0
C/l
C/l
E/0
A/0

Considere la siguiente asignacin de estados:


A 000

B001

C010

D 011

E 100

J120

V H D L : E l arte d e programar sistemas digitales

4.19 Realice el programa de un contador ascendente /descendente de nmeros seudo aleatorios de 3 bits. El circuito tiene una entrada de
control X .Cuando X = 0 , el contador cuenta ascendente , si X = 1 el
contador genera nmeros seudo aleatorios, tal y como se muestra en
la tabla.

Presente
0
1
2
3
4
5
6
7

X=0
X=1
Futuro
1
2
3
4
5
6
7
0

0
4
5
1
2
6
7
3

4.20 Programe el sistema secuencial correspondiente a una mquina despachadora de refrescos, el valor del refresco es de $ 5.00 pesos y la mquina acepta monedas de $5.00, $ 10.00 y $ 20.00. Cuando se introduce una
moneda de diez o veinte pesos, la mquina debe dar cambio en monedas
de $5.00 pesos hasta completar el cambio correspondiente.
Para realizar este programa no considere el sistema detector de monedas ni el sistema de servicio encargado de dar el refresco.
Programe exclusivamente el sistema secuencial encargado de controlar la secuencia descrita anteriormente.

También podría gustarte