Está en la página 1de 100

TEMA 2: SISTEMAS SECUENCIALES Y

DISPOSITIVOS PROGRAMABLES

SDII_T2_20200317
ó
Un sistema secuencial se puede definir como un circuito en el cual el valor de las salidas en cualquier instante depende,
tanto del valor presente en las entradas en dicho instante como de la historia pasada, es decir, de la secuencia de entradas
aplicada al circuito con anterioridad.

Para ello, un sistema secuencial debe disponer de cierta cantidad de memoria para almacenar la información referente a las
entradas anteriores aplicadas al mismo.

Así pues, un sistema secuencial se obtiene de la combinación de un sistema combinacional con algún elemento de memoria,
siendo su diagrama de bloques general el representado en la siguiente figura.

Entradas Salidas
Sistema
combinacional

Estado Estado
presente siguiente
Elementos
de
memoria

La historia pasada del sistema secuencial se guarda en los elementos de memoria en forma de "vector de estado"
constituyendo lo que se conoce como estado interno del circuito. En cuanto al estado interno, es necesario distinguir entre
estado presente, es decir, el estado en que se encuentra un circuito en un instante determinado, y estado siguiente, que es
el estado al que pasará el circuito al producirse un cambio de estado, para un estado presente y una combinación de entrada
determinados.

El vector de estado del sistema está compuesto por m variables de estado interno (Qm-1 - Q0). Dado que el conjunto de
variables del vector de estado es finito, el número máximo de estados del sistema (2m) también es finito, razón por la cual los
sistemas secuenciales también son conocidos como autómatas de estados finitos. Las variables de estado presente se
representan como q, Qt o Qn, mientras que las respectivas variables de estado siguiente se representan como Q, Qt+1 o Qn+1.
Por tanto, un sistema secuencial es un circuito digital que posee 2n estados de entrada para n entradas (Xn-1 - X0), 2m estados
internos para m variables de estado interno (Qm-1 - Q0), y 2p estados de salida para p variables de salida (Yp-1 - Y0).

2
ó

Autómatas de Mealy
En un autómata o máquina de Mealy, tanto las señales de salida como las señales del estado siguiente dependen tanto
de las señales de entrada como de las señales del estado presente.

Entradas Sistema Sistema


Combinacional Combinacional Salidas
(I) (II)

Estado Elementos
Estado
presente de siguiente
memoria

Autómatas de Moore
En un autómata o máquina de Moore, las señales del estado siguiente dependen tanto de las señales de entrada como
de las señales del estado presente, pero las señales de salida dependen únicamente de las señales de estado
presente.

Entradas Sistema Sistema


Combinacional Combinacional Salidas
(I) (II)

Estado Elementos Estado


presente de siguiente
memoria

3
Según la forma de realizar el elemento de memoria nos podemos encontrar distintos tipos de sistemas secuenciales,
principalmente dos:

• Sistemas Secuenciales Síncronos: su comportamiento puede definirse en instantes discretos de tiempo. Se necesita
una sincronización de los elementos del sistema mediante una señal de reloj, que no es más que un tren de pulsos
periódico. Las variables internas no cambian hasta que llega un pulso del reloj.
• Sistemas Secuenciales Asíncronos: actúan de forma continua en el tiempo, un cambio de las entradas provoca
cambios en las variables internas sin esperar a la intervención de un reloj. Son sistemas más difíciles de diseñar.

El cambio de las variables internas se puede producir de dos maneras en un sistema secuencial síncrono:
• Por niveles: cuando permiten que las variables de entrada actúen sobre el sistema en el instante en el que la señal de
reloj toma un determinado nivel lógico (0 ó 1).
• Por flancos, o cambios de nivel: cuando la acción de las variables de entrada sobre el sistema se produce cuando
ocurre un flanco activo del reloj. Este flanco activo puede ser de subida (cambio de 0 a 1) o de bajada (cambio de 1 a 0).

El elemento de memoria básico de los circuitos secuenciales síncronos es el biestable. Almacena el estado 0 ó el estado 1,
y de ahí su nombre, tienen dos estados estables de funcionamiento. También se les suele conocer como FLIP-FLOPS.

4
í

Concepto de señal de sincronismo: el reloj


La señal de reloj es la que “sincroniza” el funcionamiento de las memorias en el sistema secuencial. Esto significa que la
señal de sincronismo llega al mismo tiempo a todos los biestables. El biestable totalmente síncrono sólo puede cambiar su estado
interno (el bit que almacena) cuando se produce un determinado cambio en la señal de reloj.
La señal de reloj es una señal periódica generada normalmente mediante un oscilador de cuarzo.
• El periodo T de la señal es el tiempo duración de un ciclo de la misma. Se mide en segundos (submúltiplos: μs, ns).
• La frecuencia f (1/T) es el número de ciclos por segundo que posee la señal. Se mide en Hercios (múltiplos: MHz, GHz).
• Los cambios de estado se producen en intervalos de tiempo regulares (múltiplos del periodo T de la señal de reloj).

Nivel alto
Flanco de subida Flanco de bajada Múltiplos de Nº de ciclos en un
frecuencia segundo
Nivel bajo
Kilohercio (KHz) 1000

Megahercio (MHz) 106


Ciclo de reloj
Gigahercio
109
(GHz)

Entradas Salidas
Sistema Entradas
combinacional
E. siguiente
Estado Estado
presente siguiente
E. presente
Elementos
de
memoria Reloj
Reloj

5
ñ

Sistemas activos POR NIVEL

Fases de transparencia Fases de transparencia

Señal de reloj Señal de reloj

Señal de entrada Señal de entrada

Variable de estado Variable de estado

Sistema síncrono activado por niveles altos Sistema síncrono activado por niveles bajos

Sistemas activos POR FLANCO

Fases de transparencia Fases de transparencia

Señal de reloj Señal de reloj

Señal de entrada Señal de entrada

Variable de estado Variable de estado

Sistema síncrono activado por flancos de subida Sistema síncrono activado por flancos de bajada

6
Los biestables son los elementos de memoria más básicos, dado que pueden almacenar un solo bit de información (0 ó 1).

Según su grado de transparencia los biestables pueden ser asíncronos, activados por niveles (latches), o activados por flancos o
cambios de nivel (flip-flops).

Los biestables asíncronos son biestables que no poseen señal de reloj, en los cuales, los valores presentes en las entradas actúan
en todo momento sobre el contenido almacenado en los mismos, siendo el retardo de la lógica el único impedimento para que se
produzca el cambio de estado.

Biestable asíncrono tipo SR

Los biestables asíncronos tipo SR pueden obtenerse estableciendo una doble realimentación entre dos puertas NOR o dos puertas
NAND, como se muestra a continuación.

Biestable asíncrono SR NOR

R S R Q
Q S 0 0 q
0 1 0
1 0 1
Q R 1 1 No usar
S

Circuito lógico Símbolo lógico Tabla de funcionamiento reducida

Biestable asíncrono SR NAND

S S R Q
Q S 0 0 No usar
0 1 1
1 0 0
Q R 1 1 q
R

Circuito lógico Símbolo lógico Tabla de funcionamiento reducida


7
Biestable asíncrono tipo SR
q S R Q
SR 0 0 0 0 q Q S R
q 00 01 11 10 0 0 1 0 0 0 0 X
S
0 0* 0* 1 0 1 0 1 0 1 1 0
0 1 1 - 1 0 0 1
R 1 1* 0 1* Q = S + Rq 1 0 0 1 1 1 X 0
1 0 1 0
Símbolo lógico Ecuación de estado
Q 1 1 0 1 Tabla de excitación

Tabla de estados 1 1 1 -

Tabla de funcionamiento

Biestable asíncrono tipo JK

JK
J q 00 01 11 10 q J K Q
0 0 0 0 q Q J K
0 0 * 0 * 1 1 0 0 1 0
K Q = Jq + Kq 0 1 0 1
0 0 0 X
0 1 1 X
1 1* 0 0 1* Ecuación de estado 0 1 1 1 1 0 X 1
Símbolo lógico 1 0 0 1 1 1 X 0
Q 1 0 1 0
Tabla de excitación
Tabla de estados 1 1 0 1
1 1 1 0

Tabla de funcionamiento

8
Biestable asíncrono tipo T

T
q Q T
q 0 1 q T Q
T 0 0 0 0 0 0
0 0* 1 Q = Tq + Tq 0 1 1 0 1 1
Ecuación de estado 1 0 1 1 0 1
1 1* 0 1 1 0 1 1 0

Símbolo lógico Q Tabla de funcionamiento Tabla de excitación

Tabla de estados

Biestable asíncrono tipo D

D
q 0 1 q D Q q Q D
0 0 0 0 0 0
D 0 0 * 1 Q=D 0 1 1 0 1 1
1 0 0 1 0 0
1 0 1 * Ecuación de estado
1 1 1 1 1 1

Q Tabla de funcionamiento Tabla de excitación


Símbolo lógico
Tabla de estados

9
– Los flip-flops son biestables síncronos activados por flancos o cambios de nivel.
– En este tipo de biestables, las variables de entrada únicamente afectan al valor almacenado en los mismos durante una
de las transiciones de la señal de reloj (la ascendente o la descendente). Este hecho se indica en los símbolos de los flip-
flops representando la entrada de reloj de una de las formas siguientes.

Flip-flop activado por flancos de subida Flip-flop activado por flancos de bajada

– Aparte de la entradas síncronas (S, R, J, K, D o T), que están controladas por la señal de reloj, los biestables síncronos
suelen disponer de otras entradas asíncronas, que no están controladas por dicha señal, y que de hecho tienen prioridad
sobre ésta. Estas entradas sirven para forzar el biestable a uno de sus dos posibles estados de salida, es decir, para
inicializarlo.
– La entrada asíncrona denominada clear (CL) inicializa el biestable con el valor 0 al ser activada, mientras que la
denominada preset (PR) lo inicializa con el valor 1. Estas dos entradas nunca deben ser activadas simultáneamente.
– A continuación se representa el símbolo y la tabla de funcionamiento de dos flip-flops tipo D, uno de ellos activado por
flancos de subida, con entradas asíncronas PR y CL activas a nivel alto, y otro activado por flancos de bajada, con
entradas asíncronas PR y CL activas a nivel bajo.

PR CL CLK D Q PR CL CLK D Q
PR 0 1 X X 0 PR 0 1 X X 1
D 1 0 X X 1 D 1 0 X X 0
0 0 0 X q 1 1 0 X q
0 0 1 X q 1 1 1 X q
0 0  X q 1 1  X q
CL 0 0  0 0 CL 1 1  0 0
0 0  1 1 1 1  1 1

10
Para que los biestables funcionen correctamente, es necesario que se cumplan una serie de relaciones temporales entre las señales
de entrada síncronas de los mismos y la señal de reloj.
Los únicos biestables que no presentan este tipo de restricciones son los biestables asíncronos, ya que en este tipo de biestables las
salidas reaccionan ante los valores de las entradas en todo momento, debido a que carecen de señal de reloj.

Latches
En el caso de los latches sí que existe una señal de reloj, y por tanto, se debe imponer una serie de restricciones temporales que,
básicamente, son las siguientes:

 Anchura del pulso de reloj (tw): Es el mínimo tiempo que la señal de reloj debe permanecer en su nivel activo.

 Tiempo de establecimiento (tsetup): Es el mínimo tiempo que los datos de entrada deben permanecer estables antes de que la
señal de reloj adopte su nivel inactivo.

 Tiempo de mantenimiento (thold): Es el mínimo tiempo que los datos de entrada deben permanecer estables después de que
la señal de reloj haya adoptado su nivel inactivo.

CLK tw

D tsetup thold

11
Fundamentos de computadores 11
Flip-flops
En el caso de los flip-flops, se deben tener en cuenta las siguientes restricciones:

 Anchura del nivel bajo de la señal de reloj (tw(L)): Es el mínimo tiempo que la señal de reloj debe permanecer a nivel bajo.

 Anchura del nivel alto de la señal de reloj (tw(H)): Es el mínimo tiempo que la señal de reloj debe permanecer a nivel alto.

 Frecuencia máxima del reloj (fMAX): Es la máxima frecuencia de la señal de reloj que asegura un correcto funcionamiento del
biestable. El inverso de este parámetro (1/fMAX) es el periodo mínimo que debe tener dicha señal.

 Tiempo de establecimiento (tsetup): Es el mínimo tiempo que los datos de entrada deben permanecer estables antes del flanco
activo de la señal de reloj.

 Tiempo de mantenimiento (thold): Es el mínimo tiempo que los datos de entrada deben permanecer estables después del
flanco activo de la señal de reloj.

1/fMAX

CLK tw(L) tw(H)

D tsetup thold

12
Fundamentos de computadores 12
Consideraciones en la señal de reloj en autómatas

El cambio de estado de un biestable síncrono se produce coincidiendo con el flanco activo de la onda de reloj; en el caso de un
biestable síncrono tipo D, en ese momento (flanco activo del reloj), la salida efectúa una copia del valor presente en la entrada.
Obviamente existe un pequeño retraso entre el flanco activo de la señal de reloj y la consolidación del correspondiente estado en la
salida: tiempo de propagación del dato tp. Además, para asegurar el correcto funcionamiento del biestable D, cuando llega el flanco
activo del reloj es necesario que el valor correcto del dato se encuentre presente en la entrada D con una cierta anticipación a dicho
flanco (setup: ts) y que tal valor se mantenga durante un cierto intervalo posterior (hold: th).

En un autómata, la salida de los biestables (estado presente) se conecta al sistema combinacional. Este sistema también tiene
un retardo t’p. Las salidas del sistema combinacional deben estar estables en las entradas de los biestables antes de que empiece
el tiempo de setup ts, para que cuando llegue el siguiente flanco activo de reloj el biestable tome valores correctos.

Entradas Salidas
Sistema
combinacional

Estado Estado
presente siguiente
Elementos
de
memoria

Reloj

13
Fundamentos de computadores 13
Biestables (Descripción de biestables en VHDL)

Descripción del reloj en circuitos síncronos

La descripción de la señal de reloj CK ha de hacerse dentro de un proceso, de las siguientes formas:

• si todo el proceso es síncrono

process --sin lista de sensibilidad


begin
wait on CK until CK = '1'; -- flanco ascendente

• si hay una parte asíncrona (por ejemplo, un borrado asíncrono con R)

process (R, CK)


begin
if R = '1' then ………
elsif CK'event and CK = '1' then -- flanco ascendente

O también: elsif rising-edge(CK) then -- flanco ascendente

14
Fundamentos de computadores 14
Biestables (Descripción de biestables en VHDL)

Concepto de memoria implícita (I)

En VHDL, los procesos tienen memoria implícita, esto quiere decir que si una señal recibe una asignación condicional dentro de
un proceso, y el conjunto de asignaciones no es completo (es decir, existe alguna condición en que la asignación a dicha señal no
está especificada), el proceso asigna por defecto la conservación del valor de dicha señal. Es como si al comienzo del proceso
existiera la asignación señal <= señal, referida a cada una de las señales que reciben alguna asignación dentro del proceso.
Ejemplo:
process (a, b)

begin

if a = ‘1’ then p <= b; end if;

end process;

En este caso, cuando a adopta el valor ‘1’, p adopta el valor de b, y cuando a = 0, como no se ha especificado nada dentro del
proceso, p conserva el valor que tenía anteriormente.
En los biestables, la salida actúa también como entrada (realimentación) y, habida cuenta que las salidas VHDL (port out) no
pueden «ser leídas» desde dentro del circuito (es decir, no pueden actuar como entradas de ninguna asignación), es necesario
utilizar para la realimentación una señal interior, del mismo valor que la salida:

.......
port ( q :out std_logic;
.......

architecture nombre_de_la_arquitectura of nombre_de_la_entidad is


signal q_interna: std_logic;
begin
q <= q_interna;
…….

15
Fundamentos de computadores 15
Biestables (Descripción de biestables en VHDL)

Concepto de memoria implícita (II)

La necesidad de «duplicar» una señal de salida que se realimenta dentro de un proceso no es necesaria cuando la realimentación
se refiere solo a la memoria implícita que presenta el proceso; es decir, cuando simplemente conserva el valor de la señal sin
efectuar ninguna asignación explícita en la que intervenga dicha señal como entrada. Si q recibe asignaciones dentro de un proceso
y en ninguna de ellas interviene en la parte derecha de la asignación, no es necesario introducir q_interna.

Veamos a continuación distintas formas de describir un biestable básico SR (se muestra sólo la parte más significativa de la
arquitectura). Vemos que no es necesario emplear q_interna en los dos últimos ejemplos, aprovechando además la memoria
implícita del proceso:

q_interna <= ‘0’ when R = ‘1’ else ‘1’ when S = ‘1’ else q_interna;
----------------------------------------------------------------------------------------------
process (R, S)
begin
if R = ‘1’ then q <= ‘0’; end if;
if S = ‘1’ then q <= ‘1’; end if;
end process;
-----------------------------------------------------------------------------------------------
process (R, S)
begin
if S = ‘1’ then q <= ‘1’; elsif R = ‘1’ then q <= ‘0’; end if;
end process;

16
Fundamentos de computadores 16
Biestables (Descripción de biestables en VHDL)

Ejemplos de procesos de descripción de biestables

• Biestable síncrono D con habilitación (E) y con borrado asíncrono (R)


E
process (R, CK, E, D)
begin
if R = '1' then q <= '0'; D
elsif CK'event and CK = '1' then R
if E = '1' then q <= D; end if;
end if;
end process;

• Biestable síncrono JK con puesta a uno (PR) y borrado (CL) asíncronos


PR
process (CL, PR, CK, J, K, q_interna) J
begin
if CL = '1' then q_interna <= '0';
elsif PR = '1' then q_interna <= '1'; K
elsif CK'event and CK = '1' then CL
if J = '1' and K = '1' then q_interna <= not q_interna;
elsif J = '1' then q_interna <= '1';
elsif K = '1' then q_interna <= '0';
end if;
end if;
end process;

En este biestable es necesario emplear q_interna, ya que necesitamos


realizar una asignación a una señal que interviene también en el lado
derecho de la asignación (q_interna <= not q_interna)

17
Fundamentos de computadores 17
á

El análisis de un sistema secuencial consiste en obtener las expresiones booleanas que describen su comportamiento, su tabla de
estados y su diagrama de estados, a partir del diagrama lógico del mismo.

Para llevar a cabo el análisis de un sistema secuencial con biestables se deben seguir los siguientes pasos:

1. Representar la ecuación de estado del tipo de biestable empleado en el circuito.

2. Obtener las ecuaciones de excitación de los biestables del circuito.

3. Obtener las ecuaciones de estado del circuito.

4. Obtener las ecuaciones de las salidas del circuito.

5. Representar la tabla de estados del circuito, que constará de cuatro secciones:


 Estado presente: Estados posibles de los biestables antes de la ocurrencia del pulso de reloj.
 Entradas: Posibles combinaciones de entrada que se pueden producir en cada estado presente del sistema.
 Estado siguiente: Estados de los biestables tras la ocurrencia del pulso de reloj, para cada estado presente del sistema y
cada posible situación de entrada.
 Salidas: Valores de las diferentes señales de salida del sistema, para cada estado presente del mismo y cada posible
situación de entrada.

6. Representar el diagrama de estados del circuito con los estados codificados en binario.

7. Representar la tabla de asignación de estados del circuito.

8. Representar el diagrama de estados del circuito con nombres de estados simbólicos.

Para ilustrar el proceso de análisis descrito anteriormente, a continuación se realizan varios ejemplos.

18
Fundamentos de computadores 18
á

Ejemplo 1: Analizar el sistema secuencial de la figura (máquina de Mealy).

q0
S

R CL

E q1
S

R CL

CLK
RESET

En el circuito se emplean flip-flops tipo SR cuya ecuación de estado es la siguiente: Q  S  Rq


A partir del diagrama lógico se obtienen las ecuaciones de excitación de los biestables.

S1 = q1 q0 E
R1 = q1 q0
S0 = q0 E
R0 = q1 E  q1 q0 E

19
Fundamentos de computadores 19
á

Sustituyendo las ecuaciones de excitación de los biestables obtenidas anteriormente en la ecuación de estado del biestable tipo SR
se obtienen las ecuaciones de estado del circuito.

Q 1  S1  R1 q1  q1 q0 E  q1 q0 q1  q1 q0 E  (q1  q0 ) q1  q1 q0 E  q1 q0

Q 0  S0  R0 q0  q0 E  q1 E  q1 q0 E q0  q0 E  q1 E q1 q0 E q0  q0 E  (q1  E)(q1  q0  E) q0 
 q0 E  (q1  E)(q1  q0  E) q0  q0 E  (q1 q0  q1 E  q1 E  q0 E) q0  q0 E  q1 q0 E  q1 q0 E

La ecuación correspondiente a la salida S del circuito es la siguiente:

S = q1 q0 E  q1 E
Como se puede apreciar, se trata de un autómata de Mealy, ya que el valor de la salida depende tanto de las variables de estado
interno (q1, q0) como de la variable de entrada E. Esto quiere decir que la salida responde de forma inmediata a un cambio en la
entrada, sin esperar al flanco activo de reloj.
Y la tabla de estados del circuito es:
q1 q0 E Q1 Q0 S
0 0 0 0 0 0
0 0 1 0 1 0
0 1 0 0 1 1
0 1 1 1 0 0
1 0 0 1 0 0
1 0 1 1 1 1
1 1 0 0 0 0
1 1 1 0 1 1

20
Fundamentos de computadores 20
á

El diagrama de estados del circuito con los estados codificados en binario es el representado a continuación:

0/1

E/S
1/0
01 1/0

0/0 00 1/1 10 0/0

0/0 1/1
11

El estado inicial del sistema es el 00, ya que es este estado en el adopta el mismo cuando se aplica un nivel bajo al la entrada Reset.
Por último, se representan la tabla de asignamiento de estados y el diagrama con nombres de estados simbólicos.

0/1
q1 q0 Estado
0 0 A
E/S
0 1 B
1/0
B 1/0
1 0 C
1 1 D
0/0 A 1/1 C 0/0
Tabla de asignación de estados

0/0 1/1
D

21
Fundamentos de computadores 21
á

Ejemplo 2: Analizar el sistema secuencial de la figura (máquina de Moore).

q0
D

E CL

q1
D

CL

CLK
RESET

En este caso se emplean flip-flops tipo D, cuya ecuación de estado es la siguiente: Q D

A partir del diagrama lógico se obtienen las ecuaciones de excitación de los biestables.

D1 = q0 E  q1 q0 E
D0 = q1 E + q0 E + q1 q0

22
Fundamentos de computadores 22
á

Sustituyendo las ecuaciones de excitación de los biestables obtenidas anteriormente en la ecuación de estado del biestable tipo SR
se obtienen las ecuaciones de estado del circuito.

Q 1  D1  q0 E  q1 q0 E
Q 0  D0  q1 E  q0 E  q1 q0

La ecuación correspondiente a la salida S del circuito es la siguiente:

S = q1 q0
En este caso se trata de un autómata de Moore, ya que el valor de la salida depende únicamente de las variables de estado interno
(q1, q0). Al no depender de la entrada, la salida cambia de forma síncrona con el reloj, al producirse el cambio de estado interno.
La tabla de estados del circuito es:

q1 q0 E Q1 Q0 S q1 q0 E Q1 Q0 q1 q0 S
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 1 1 0 0 1 0
0 1 0 1 1 0 0 1 0 1 1 1 0 1
0 1 1 0 0 0 0 1 1 0 0 1 1 0
1 0 0 0 1 1 1 0 0 0 1
1 0 1 0 0 1 1 0 1 0 0
1 1 0 1 1 0 1 1 0 1 1
1 1 1 0 1 0 1 1 1 0 1

Fundamentos de computadores 23
á

El diagrama de estados del circuito con los estados codificados en binario es el representado a continuación:

E/S 10
1 1 0

1
00 1 01
0
0 0
1

11 0
0

0
El estado inicial del sistema es el 00, ya que es este estado en el adopta el mismo cuando se aplica un nivel bajo al la entrada Reset.
Por último, se representan la tabla de asignación de estados y el diagrama con nombres de estados simbólicos.

E/S C
1 1 0
q1 q0 Estado
1
0 0 A A 1 B
0
0 1 B 0 0
1
1 0 C
1 1 D C 0
0
Tabla de asignación de estados

Fundamentos de computadores 24
ñ

Consideraciones sobre las salidas en los autómatas de Mealy y Moore

 Las salidas en un autómata de Mealy dependen de las entradas. Esto quiere decir que la salida responde de forma inmediata a
un cambio en las entradas, sin esperar al flanco activo de reloj.

 Las salidas en un autómata de Moore no dependen de las entradas. Por tanto, cambian de forma síncrona con el reloj, al
cambiar los estados internos.

 Si queremos que las salidas de un autómata de Mealy cambien de forma síncrona con el reloj, tendremos que añadirles
biestables, de forma que sólo aparecerán cambios en las salidas al llegar el flanco de reloj. Si hacemos esto, la transición que
nos ha hecho cambiar de estado es la que indica la salida que va a aparecer cuando llegue el flanco de reloj.

0/1
E/S C
E/S 1 1 0

1/0
B 1/0
1
A 1 B
0
0 0
1
0/0 A 1/1 C 0/0
C 0
0
0/0 1/1
D
0
Ejemplo Mealy Ejemplo Moore

25
ñ ó

El proceso de diseño de sistemas secuenciales consiste en la obtención de un circuito cuyo funcionamiento responda a unas
especificaciones de diseño.

Para llevar a cabo el diseño de un sistema secuencial con biestables, codificando los estados en binario natural, se deben seguir
los siguientes pasos:

1. A partir de las especificaciones de funcionamiento, representar el diagrama de estados.

2. Proceder a la reducción del número de estados del diagrama (opcional).

3. Determinar el número de variables de estado necesarias para codificar los estados del diagrama en binario y asignar
un símbolo a cada una de ellas.

4. Representar la tabla de codificación de estados, donde se asignan combinaciones binarias a cada estado del
diagrama.

5. Representar el diagrama de estados con los estados codificados en binario natural.

6. Representar la tabla de estados.

7. Elegir el tipo de flip-flop a utilizar.

8. Representar la tabla de excitación del tipo de flip-flop a utilizar.

9. Representar la tabla de excitación del circuito.

10. A partir de la tabla de excitación del circuito, obtener las ecuaciones de excitación de los biestables y las ecuaciones
de las salidas.

11. Simplificar las ecuaciones obtenidas en el paso anterior mediante alguno de los métodos conocidos, o generarlas
mediante el uso de dispositivos MSI y SSI combinacionales.

12. Representar el diagrama lógico del circuito.

26
Fundamentos de computadores 26
ñ ó

Ejemplo 1: Diseñar un sistema secuencial basado en el uso de flip-flops tipo JK cuyo funcionamiento se corresponda con el siguiente
diagrama de estados.
1/1

E/S
1/0
B 0/0

0/0 A C 0/0

1/1 1/0
D

0/1

En primer lugar, se codifican los estados del diagrama en binario natural. Como el diagrama posee cuatro estados, serán necesarias
dos variables de estado interno que se denotarán como q1 y q0.
1/1

E/S
Estado q1 q0 1/0
01 0/0
A 0 0
B 0 1
0/0 00 10 0/0
C 1 0
D 1 1 1/0
1/1
11
Tabla de codificación de estados

0/1

27
Fundamentos de computadores 27
ñ ó

A partir del diagrama de estados del circuito se representa la tabla de estados del mismo.

1/1
q1 q0 E Q1 Q0 S
E/S 0 0 0 0 0 0
1/0
01 0/0 0 0 1 0 1 0
0 1 0 1 0 0
0/0 00 10 0/0 0 1 1 0 1 1
1 0 0 1 0 0
1/1 1/0 1 0 1 1 1 0
11 1 1 0 1 1 1
1 1 1 0 0 1
0/1

Dado que se van a utilizar flip-flops tipo JK, se representa la tabla de excitación de este tipo de biestables y basándose en ella la tabla
de excitación del circuito.

q1 q0 E Q1 Q0 S J1 K1 J0 K0
0 0 0 0 0 0 0 X 0 X
q Q J K 0 0 1 0 1 0 0 X 1 X
0 0 0 X 0 1 0 1 0 0 1 X X 1
0 1 1 X 0 1 1 0 1 1 0 X X 0
1 0 X 1 1 0 0 1 0 0 X 0 0 X
1 1 X 0 1 0 1 1 1 0 X 0 1 X
1 1 0 1 1 1 X 0 X 0
1 1 1 0 0 1 X 1 X 1

28
Fundamentos de computadores 28
ñ ó

A partir de la tabla de excitación del circuito se obtienen las ecuaciones de las entradas de los biestables y de las salidas.

q1 q0 E Q1 Q0 S J1 K1 J0 K0 J1 = 3 (2) +  (4, 5, 6, 7)
0 0 0 0 0 0 0 X 0 X
0 0 1 0 1 0 0 X 1 X K1 = 3 (7) +  (0, 1, 2, 3)
J0 = 3 (1, 5) +  (2, 3, 6, 7)
0 1 0 1 0 0 1 X X 1
0 1 1 0 1 1 0 X X 0
1 0 0 1 0 0 X 0 0 X
K0 = 3 (2, 7) +  (0, 1, 4, 5)
1 0 1 1 1 0 X 0 1 X
1 1 0 1 1 1 X 0 X 0 S = 3 (3, 6, 7)
1 1 1 0 0 1 X 1 X 1

A continuación, se simplifican las ecuaciones usando el método de Karnaugh.

Eq0 Eq0 Eq0


q1 00 01 11 10 q1 00 01 11 10 q1 00 01 11 10
0 0 1 0 0 0 0 X X 1 0 0 0 1 0
1 X X X X 1 0 X X 1 1 0 1 1 0
J1 = q0 E J0 = E S = q1 q0  q0 E
Eq0 Eq0
q1 00 01 11 10 q1 00 01 11 10
0 X X X X 0 X 1 0 X
1 0 0 1 0 1 X 0 1 X
K1 = q0 E K0 = q1 E  q1 E
29
Fundamentos de computadores 29
ñ ó

Por tanto, el diagrama lógico del circuito será el siguiente:

q0
J

K CL

E q1
J

K CL

CLK
RESET

30
Fundamentos de computadores 30
ñ ó

Ejemplo 2 (Opción A): Un depósito debe llenarse con una mezcla de tres líquidos diferentes, para lo cual se han instalado tres
electroválvulas (A, B y C) que controlan el vertido al tanque de los diferentes líquidos y cuatro detectores de nivel (N1, N2, N3 y N4) de
los cuales el N1 es el que señala el nivel inferior del tanque y el N4 el que indica el nivel de llenado máximo del mismo. Solamente
cuando el nivel del depósito descienda por debajo del mínimo N1 debe producirse un ciclo de llenado, que consistirá en llenar en
primer lugar hasta el nivel N2 con el líquido A, a continuación llenar con el líquido B hasta el nivel N3 y, finalmente, llenar con el líquido
C hasta completar el depósito (nivel N4). Realizar el diseño del circuito de control para este sistema usando biestables tipo D y
elementos combinacionales SSI y MSI.
En primer lugar se va a desarrollar la solución tipo Moore.

N2
A N1N2N3N4 / ABC
Líquido A
B
Líquido B
C Líquido A
Líquido C
N1 A N2
N4

Espera Líquido B
Líquido C N1 N3
- B

N3
Líquido B N3
N4 Líquido C
N2
C
Líquido A
Diagrama de estados tipo Moore
N1
N4

31
Fundamentos de computadores 31
ñ ó

Asignación de valores binarios a cada estado


Una vez obtenido el diagrama de estados, el siguiente paso consiste en asignar combinaciones binarias a los estados.
La asignación de combinaciones a los diferentes estados es libre, siendo la única condición necesaria que cada estado esté
representado mediante una combinación binaria distinta. Las diferentes asignaciones posibles darán lugar a circuitos distintos, pero
equivalentes, ya que evolucionarán según el mismo diagrama de estados.

N2 N2
N1N2N3N4 / ABC N1N2N3N4 / ABC

Líquido A 01
N1 A N2 Estado q1 q0 N1 A N2

Espera 0 0
Espera Líquido B Líquido A 0 1 00 10
N1 N3 N1 N3
- B Líquido B 1 0 - B

Líquido C 1 1
N3 N3
N4 Líquido C N4 11
Tabla de codificación de estados
C C

N4 N4

32
Fundamentos de computadores 32
ñ ó

Obtención de la tabla de estados del sistema

N2
N1N2N3N4 / ABC

01
N1 N2 q1 q0 N1 N2 N3 N4 Q1 Q0 q1 q0 A B C
A
0 0 0 X X X 0 1 0 0 0 0 0
0 0 1 X X X 0 0 0 1 1 0 0
0 1 X 0 X X 0 1 1 0 0 1 0
N1 00 10 N3 0 1 X 1 X X 1 0 1 1 0 0 1
- B
1 0 X X 0 X 1 0
1 0 X X 1 X 1 1
N3 1 1 X X X 0 1 1
N4 11
1 1 X X X 1 0 0
C

N4

33
Fundamentos de computadores 33
ñ ó

Obtención de la tabla de excitación del sistema


Para la implementación del sistema se van a emplear biestables tipo D, cuya tabla de excitación es la siguiente:

q Q D
0 0 0
0 1 1
1 0 0
1 1 1

Así pues, la tabla de excitación del sistema queda como se muestra a continuación.

q1 q0 N1 N2 N3 N4 Q1 Q0 D1 D0
0 0 0 X X X 0 1 0 1
0 0 1 X X X 0 0 0 0
0 1 X 0 X X 0 1 0 1
0 1 X 1 X X 1 0 1 0
1 0 X X 0 X 1 0 1 0
1 0 X X 1 X 1 1 1 1
1 1 X X X 0 1 1 1 1
1 1 X X X 1 0 0 0 0

Obtención de las ecuaciones de excitación de los biestables

D1  q1 q0 n2  q1 q0 n3  q1 q0 n3  q1 q0 n4
D0  q1 q0 n1  q1 q0 n2  q1 q0 n3  q1 q0 n4

34
Fundamentos de computadores 34
ñ ó

Obtención de las ecuaciones de salida del sistema

A = 2 (1) = q1 q0
q1 q0 A B C
0 0 0 0 0
0 1 1 0 0 B = 2 (2) = q1 q0
1 0 0 1 0
C = 2 (3) = q1 q0
1 1 0 0 1

Diagrama lógico del circuito

Bloque combinacional de evolución del estado

Bloque combinacional de salida

Variables de estado (2 biestables)

35
Fundamentos de computadores 35
ñ ó

Ejemplo 2 (Opción B): Un depósito debe llenarse con una mezcla de tres líquidos diferentes, para lo cual se han instalado tres
electroválvulas (A, B y C) que controlan el vertido al tanque de los diferentes líquidos y cuatro detectores de nivel (N1, N2, N3 y N4) de
los cuales el N1 es el que señala el nivel inferior del tanque y el N4 el que indica el nivel de llenado máximo del mismo. Solamente
cuando el nivel del depósito descienda por debajo del mínimo N1 debe producirse un ciclo de llenado, que consistirá en llenar en
primer lugar hasta el nivel N2 con el líquido A, a continuación llenar con el líquido B hasta el nivel N3 y, finalmente, llenar con el líquido
C hasta completar el depósito (nivel N4). Realizar el diseño del circuito de control para este sistema usando biestables tipo D y
elementos combinacionales SSI y MSI.
A continuación se presenta la solución tipo Mealy.

N2/A
N1N2N3N4 / ABC

Líquido A N1N2N3N4 / ABC


N1/A N2/B N1/A

N2/A
N1/- Espera Líquido B N3/B N1/- Espera Llenado N2N3/B
N3N4/C

N3/C N4/-
N4/- Líquido C

Diagramas de estados tipo Mealy

N4/C
36
Fundamentos de computadores 36
ñ ó

Asignación de valores binarios a cada estado


N2/A
N1N2N3N4 / ABC
N2/A
N1N2N3N4 / ABC

01
N1/A N2/B
Líquido A
N1/A N2/B
Estado q1 q0
Espera 0 0 N1/- 00 10 N3/B
N1/- Espera Líquido B N3/B Líquido A 0 1
Líquido B 1 0
N3/C
N4/-
N3/C
Líquido C 1 1 11
N4/- Líquido C

Tabla de codificación de estados

N4/C
N4/C

Obtención de la tabla de estados del sistema q1 q0 N1 N2 N3 N4 Q1 Q0 A B C


0 0 0 X X X 0 1 1 0 0
En el caso de la solución tipo Mealy, la tabla de 0 0 1 X X X 0 0 0 0 0
estados del sistema incluye también a las funciones 0 1 X 0 X X 0 1 1 0 0
de salida. Estas salidas dependen tanto del estado
0 1 X 1 X X 1 0 0 1 0
presente como del valor actual de las entradas. Esto
1 0 X X 0 X 1 0 0 1 0
quiere decir que no precisan de una transición en la
1 0 X X 1 X 1 1 0 0 1
señal de reloj para cambiar, ya que una variación en
1 1 X X X 0 1 1 0 0 1
el estado de las entradas provoca de forma
1 1 X X X 1 0 0 0 0 0
inmediata un cambio en el vector de salida.

37
Fundamentos de computadores 37
ñ ó

Obtención de las ecuaciones del sistema


D1  q1 q0 n2  q1 q0 n3  q1 q0 n3  q1 q0 n4
D0  q1 q0 n1  q1 q0 n2  q1 q0 n3  q1 q0 n4
A  q1 q0 n1  q1 q0 n2
B  q1 q0 n2  q1 q0 n3
C  q1 q0 n3  q1 q0 n4
Diagrama lógico del circuito

38
Fundamentos de computadores 38
ó

Descripción de estados en VHDL

Para describir los estados de un autómata en VHDL se da nombre y número binario a los estados mediante la definición de
un tipo (en el ejemplo que se muestra este tipo se denomina mis_estados) y la enumeración de los estados y asignación de
valores a ellos, a través de su declaración como constantes. Esto se señala dentro de architecture, antes del begin:

subtype mis_estados is std_logic_vector (1 downto 0);


constant reposo : mis_estados :="00";
constant liquido_A : mis_estados :="01";
constant liquido_B : mis_estados :="10";
constant liquido_C : mis_estados :="11";
signal estado : mis_estados;

Otra forma que conduce exactamente a la misma declaración de estados y asignación de valores, es la siguiente:

type mis_estados is (reposo, liquido_A, liquido_B, liquido_C);


attribute enum_encoding: string;
attribute enum_encoding of mis_estados: type is “00 01 10 11”;
signal estado: mis_estados;

También puede hacerse una declaración de estados sin asignar valores, permitiendo que el compilador efectúe esta asignación
de forma automática. Generalmente, si no elegimos otra opción del compilador, los numera en binario natural, aunque esto
depende del compilador):

type mis_estados is (reposo, liquido_A, liquido_B, liquido_C);


signal estado: mis_estados;

La evolución del estado de un sistema secuencial se describe muy bien con la asignación múltiple case para
referirse a cada uno de los estados y, dentro de ella, utilizando adecuadamente la asignación condicional if para las
transiciones entre estados.

39
Fundamentos de computadores 39
ó

Descripción VHDL del ejemplo del depósito (versión autómata de MOORE)


N2
N1N2N3N4 / ABC

Líquido A

N1 A N2

Espera Líquido B
N1 N3
- B

N3
N4 Líquido C

N4

También pueden especificarse con otro proceso,


según puede verse en la siguiente diapositiva

40
Fundamentos de computadores 40
ó
Otra forma de describir las salidas del ejemplo del depósito (versión autómata de MOORE)

Obsérvese que el proceso que especifica las salidas


sólo depende del estado.

N2
N1N2N3N4 / ABC

Líquido A

N1 A N2

Espera Líquido B
N1 N3
- B

N3
N4 Líquido C

N4

41
Fundamentos de computadores 41
ó

Descripción VHDL del ejemplo del depósito (versión autómata de MEALY) 1 de 2

Vamos a describir el circuito de control del depósito mediante VHDL a partir N2/A
N1N2N3N4 / ABC
del diagrama de estados de tipo MEALY. En esta diapositiva puede verse el
proceso de evolución.

Líquido A
N1/A N2/B

N1/- Espera Líquido B N3/B

N3/C
N4/- Líquido C

N4/C

42
Fundamentos de computadores 42
ó

Descripción VHDL del ejemplo del depósito (versión autómata de MEALY) 2 de 2

Vamos a describir el circuito de control del depósito mediante VHDL a partir


del diagrama de estados de tipo MEALY. En esta transparencia vemos el
proceso de definición de las salidas.

Obsérvese que el proceso que especifica las salidas


en el autómata de Mealy depende tanto del estado
como de las entradas.

N2/A
N1N2N3N4 / ABC

Líquido A
N1/A N2/B

N1/- Espera Líquido B N3/B

N3/C
N4/- Líquido C

N4/C
43
Fundamentos de computadores 43
ó

Resumen

Como puede observarse en los ejemplos anteriores, un sistema secuencial definido por su diagrama de
estados puede ser descrito mediante dos procesos: uno de ellos para la evolución del estado y el otro para la
activación de las salidas; en cada uno de ellos un case recorrerá todos los estados:

 El primer proceso (evolución del estado) asignará a cada estado las transiciones que deben producirse
desde el mismo, a través de sus correspondientes condiciones if referidas a las variables de entrada.

 El segundo proceso (activación de las salidas) incluirá, para cada estado, las variables de salida que se
activan en el mismo y, en el caso de autómatas de Mealy, las condiciones if de las variables de entrada que
influyen en tal activación. La lista de sensibilidades en este segundo proceso será el estado actual en
autómatas de Moore y el estado actual y las entradas en el autómata de Mealy.

Es importante recordar la propiedad de memoria implícita de los procesos en VHDL. Si


no se especifica el valor que debe tomar una señal, el proceso asigna por defecto la
conservación del valor de la señal.

44
Fundamentos de computadores 44
ó

Ejercicio

Describa en VHDL el autómata de Mealy que controla el depósito del ejemplo anterior, pero basándose en el diagrama de dos
estados que se representa en la figura.

A
Líquido A
B
Líquido B
C
Líquido C N1N2N3N4 / ABC
N4
N1 / A
N1 N1N2 N3N4 / A
Líquido C Reposo Llenado N1N2 N3N4 / A
N4 N1N2 N3N4 / B
N3 N1N2 N3N4 / C
Líquido B
N2

Líquido A
N1

45
Fundamentos de computadores 45
ñ ó

Otra alternativa a la hora de diseñar sistemas secuenciales con biestables consiste en codificar los estados del diagrama empleando
una codificación uno entre n (un flip-flop por estado). Cuando se emplea esta codificación en cada estado interno del sistema está
activo un único biestable.
Este tipo de codificación suele ser útil para el diseño de autómatas de Moore en los que en cada estado interno debe activarse una
sola salida, pues permite asignar directamente cada salida a una variable de estado interno.
Para el diseño de sistemas secuenciales usando la codificación uno entre n se emplean biestables tipo D.
Como desventaja de este tipo de codificación cabe destacar que se necesitan más biestables para la implementación del sistema.

Para llevar a cabo el diseño de un sistema secuencial con biestables, empleando la codificación uno entre n, se deben seguir los
siguientes pasos:

1. A partir de las especificaciones de funcionamiento, representar el diagrama de estados.

2. Proceder a la reducción del número de estados del diagrama (opcional).

3. Determinar el número de variables de estado necesarias para codificar los estados del diagrama mediante
codificación uno entre n, que será igual al número de estados del diagrama.

4. Representar la tabla de codificación de estados, donde se asignan combinaciones binarias a cada estado del
diagrama.

5. Representar el diagrama de estados con los estados codificados usando codificación uno entre n.

6. A partir del diagrama de estados codificado, obtener las ecuaciones de excitación de los biestables y las ecuaciones
de las salidas.

7. Representar el diagrama lógico del circuito, colocando un biestable por cada variable de estado interno y conectando
adecuadamente las entradas asíncronas PR y CL de los mismos para permitir llevar el circuito al estado inicial al
activar la señal de Reset.

46
Fundamentos de computadores 46
ñ ó

Ejemplo: Diseñar un sistema secuencial cuyo funcionamiento se corresponda con el siguiente diagrama de estados empleando una
codificación uno entre n.

E/S
1/0
B 0/1

1/0
0/1 A C 1/1

1/1 0/0
D

0/0

En primer lugar, se codifican los estados del diagrama mediante codificación uno entre n. Como el diagrama posee cuatro estados,
serán necesarias cuatro variables de estado interno, que se denotarán como q3, q2, q1 y q0.

E/S
0010
1/0 0/1
Estado q3 q2 q1 q0
A 0 0 0 1 1/0
0/1 0001 0100 1/1
B 0 0 1 0
C 0 1 0 0
D 1 0 0 0 1/1 0/0
1000
Tabla de codificación de estados

0/0
47
Fundamentos de computadores 47
ñ ó

A partir del diagrama de estados con los estados codificados se obtienen las ecuaciones de entrada de los biestables y de las salidas.
La ecuación de entrada de cada biestable se obtiene observando las flechas que llegan al estado correspondiente al mismo.
Para el ejemplo que nos ocupa se obtienen las ecuaciones siguientes.

E/S
0010
1/0 0/1

D0 = Q 0 = q0 E + q1 E + q3 E
1/0
0/1 0001 0100 1/1 D1 = Q 1 = q0 E
D2 = Q 2 = q1 E + q2 E

1/1 0/0 D3 = Q 0 = q2 E + q3 E
1000
S = q0 E + q1 E + q2 E + q3 E

0/0

Por último, a partir de las ecuaciones obtenidas en el paso anterior se representa el diagrama lógico del circuito.
Para ello se debe tener en cuenta que se necesitarán cuatro flip-flops (uno por cada variable de estado interno).
Además, para poder llevar el circuito al estado inicial (0001) se debe conectar la entrada de inicialización (Reset) al terminal PR del
biestable q0 y a los terminales CL de los biestables q1, q2 y q3.

48
Fundamentos de computadores 48
ñ ó

Con todo ello, el diagrama de estados del circuito es el mostrado a continuación.

VCC

q0
D PR

CL
E
q1
D PR

CL

q2
D PR

CL

q3
D PR

CL
CLK
RESET
S
49
Fundamentos de computadores 49
Los registros pueden disponer de una serie de recursos adicionales, tales como:

 Entrada de inicialización (Reset o Clear): Pone a cero el contenido del registro de manera asíncrona.

 Entrada de habilitación de carga (Load): Debe adoptar un determinado estado lógico, para que se cargue en el registro
nueva información al recibirse una transición activa en la entrada de reloj.

 Entrada para el control del tercer estado de las salidas (Enable): Debe adoptar un determinado nivel lógico para que la
salida de los biestables sea accesible desde el exterior. En caso contrario la salida permanece en estado de alta
impedancia.

El símbolo de un registro con entrada y salida en paralelo, activado por flancos de subida y dotado de una entrada asíncrona de
inicialización, así como de habilitaciones de carga y de salida, todas ellas activas a nivel bajo, es el siguiente.

REG
R
LD
EN
D0 Q0
D1 Q1
... ...
Dn-1 Qn-1

50
Fundamentos de computadores 50
Registros de desplazamiento
Los registros de desplazamiento son registros que, además de almacenar información binaria, poseen la capacidad de desplazarla.
Cuando cada bit de una combinación se desplaza hasta la posición de peso inmediatamente superior, se dice que el desplazamiento
es hacia la izquierda. La línea por la que entra la información que se desplaza a la izquierda recibe el nombre de entrada serie
izquierda (LSI) y la línea por la que sale dicha información se denomina salida serie izquierda (Qn-1 para un registro de n bits). Por el
contrario, cuando cada bit se desplaza hasta la posición de peso inmediatamente inferior, se dice que el desplazamiento es hacia la
derecha, denominándose las líneas por las que entra y sale la información en el registro entrada serie derecha (RSI) y salida serie
derecha (Q0), respectivamente.
Atendiendo a la forma de introducir y extraer la información de los mismos, pueden distinguirse distintos tipos de registros de
desplazamiento.
 Registros de desplazamiento con entrada y salida en serie.
 Registros de desplazamiento con entrada en serie y salida en paralelo.
 Registros de desplazamiento con entrada en paralelo y salida en serie.
 Registros de desplazamiento universales.

Registros de desplazamento con entrada y salida en serie


Estos registros aceptan datos en serie, es decir, un bit por cada pulso de reloj, a través de una única línea (entrada serie) y devuelven
la información a su salida también en serie, igualmente a través de una sola línea (salida serie).

SRG
Entrada de datos serie Salida de datos serie

51
Fundamentos de computadores 51
Registros de desplazamento universales
Los registros de desplazamiento universales son registros que pueden recibir y suministrar la información, tanto en serie como en
paralelo, así como desplazar su contenido en ambos sentidos.
El símbolo lógico de uno de estos dispositivos se representa a continuación.

SRG
R
S0
S1
LSI
D0 Q0
D1 Q1
D2 Q2
D3 Q3
RSI

Aplicando la combinación adecuada a las líneas S1 y S0 puede seleccionarse la operación a realizar por el registro en cada momento,
de acuerdo con la tabla de operaciones proporcionada por el fabricante.

S 1 S0 Operación
0 0 Mantener la información
0 1 Desplazar a la derecha
1 0 Desplazar a la izquierda
1 1 Carga paralela

52
Fundamentos de computadores 52
Registros de desplazamento universales
El registro universal descrito en la diapositiva anterior puede representarse en VHDL según se muestra a continuación. Obsérvese
que no es necesario añadir Q_interior <= Q_interior en when others, ya que un proceso tiene memoria implícita (conserva los valores).

SRG
R
S0
S1
LSI
D0 Q0
D1 Q1
D2 Q2
D3 Q3
RSI

S1 S0 Operación
0 0 Mantener la información
0 1 Desplazar a la derecha
1 0 Desplazar a la izquierda
1 1 Carga paralela

53
Fundamentos de computadores 53
ñ

En el diseño de sistemas secuenciales mediante dispositivos MSI, los elementos de memoria a emplear pueden ser tanto registros
como contadores. No obstante, el diseño de sistemas secuenciales mediante contadores queda fuera de los contenidos de esta
asignatura.
El diseño secuencial MSI mediante registros con entrada y salida en paralelo es similar al diseño de sistemas secuenciales con
biestables tipo D, ya que éstos últimos constituyen la base de los primeros.
El diagrama de bloques general de un sistema secuencial de este tipo es el siguiente:

REGISTRO
RESET R n z
D Q Variables de salida
CLK SISTEMA
m COMBINACIONAL
Variables de entrada

Las n variables de salida del registro (variables de estado interno) junto con las m variables de entrada del sistema secuencial,
constituyen las entradas del sistema combinacional, el cual genera las z variables de salida del sistema secuencial y n variables para
la carga paralela del registro, las cuales determinan el estado siguiente del sistema.

54
Fundamentos de computadores 54
Un contador es un sistema secuencial que recorre una secuencia predefinida de estados al aplicar pulsos de reloj a su entrada de
sincronismo. Dicha secuencia de estados puede seguir, en principio, cualquier código binario.
Los contadores suelen utilizarse para contar las veces que ocurre un determinado evento, como divisores de frecuencia, o bien, para
el control de la secuencia de operaciones a ejecutar por un sistema digital.
El símbolo de un contador básico de n bits se representa en la siguiente figura.

CTR
Q0
Q1
...
Qn-1

Atendiendo al sentido en que recorren su secuencia de estados al aplicarles los pulsos de reloj, los contadores puede ser de tres
tipos:
 Ascendentes: Con cada pulso recibido pasan a la combinación inmediatamente superior en su código de contaje.
 Descendentes: En cada cuenta pasan a la combinación inmediatamente inferior en su código de contaje.
 Reversibles: Disponen de una línea para la selección del sentido de la cuenta (denominada A/D o UP/DOWN), que les
permite contar tanto en sentido ascendente como en sentido descendente.
A/D
E0 E0 E0
1 0

E1 E1 E1
0 1 0 1

E2 E2 E2
1 0

En-1 En-1 En-1

55
Fundamentos de computadores 55
ó í

A continuación se muestra el diseño de un contador síncrono de 4 bits módulo 10 (cuenta entre 0 y 9), con habilitación, borrado, carga
paralela y bidireccional.

CTR
RS Max_Min
UP/DOWN
D0 Q0
D1 Q1
D2 Q2
D3 Q3
LOAD
E

CK

56
Fundamentos de computadores 56
ó

La asociación de contadores consiste en la conexión de varios bloques funcionales con objeto de obtener un contador con mayor
módulo, es decir, con mayor capacidad de contaje.
Dicha asociación puede realizarse de dos modos diferentes:
 Asociación de contadores asíncrona: Se emplea el cambio de nivel de determinadas salidas de un contador para atacar la
entrada de reloj del otro. El resultado es un contador de mayor capacidad, pero que deja de ser síncrono, ya que el segundo
contador debe esperar a que cambie de valor la salida del primero para modificar su contenido.
En la siguiente imagen se muestra un contador binario de 8 bits obtenido mediante la asociación asíncrona de dos contadores
binarios de 4 bits.
Como se puede apreciar, el contador de la izquierda solamente cuenta cuando recibe un flanco de bajada en su entrada de
reloj, lo cual únicamente ocurre cuando el contador de la derecha pasa de 1111 a 0000. Es decir cada vez que el contador de la
derecha cuenta 16 pulsos de reloj, el contador de la izquierda se incrementa en una unidad.

Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0

CTR CTR
VCC G VCC G
Q0 Q0
Q1 Q1
Q2 Q2
Q3 Q3
CT=15 CT=15

CLK

Fundamentos de computadores 57
ó

 Asociación de contadores síncrona: Se emplean las entradas y salidas de habilitación de cuenta. El contador obtenido con
este tipo de asociación sigue siendo síncrono, ya que los pulsos del generador se aplican simultáneamente a ambos
contadores.
En la siguiente imagen se muestra un contador binario de 8 bits obtenido mediante la asociación síncrona de dos contadores
binarios de 4 bits. En este caso, el contador de la izquierda sólo cuenta cuando está activa su entrada G, situación que
únicamente se produce cuando la cuenta del contador de la derecha es 15 (1111).
Igual que en el caso anterior, el contador de la izquierda realizará una única cuenta por cada 16 pulsos de la señal de reloj.

Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0

CTR CTR
G VCC G
Q0 Q0
Q1 Q1
Q2 Q2
Q3 Q3
CT=15 CT=15

CLK

Fundamentos de computadores 58
División de frecuencias
La cuenta de los pulsos de la señal de reloj se encuentra asociada directamente a la división de la frecuencia de los mismos.
Los biestables de un contador que cuenta en binario natural proporcionan en sus salidas ondas digitales cuyas frecuencias son la
mitad (Q0), la cuarta parte (Q1), la octava parte (Q2), etc., de la frecuencia de los pulsos de entrada.
Dado que el periodo (T) es el inverso de la frecuencia (T = 1/f), la división de la frecuencia por 2 implica la multiplicación por 2 del
período, la división de la frecuencia por 4 la multiplicación del periodo por 4, y así sucesivamente.
Las ondas de salida obtenidas mediante la división de frecuencias son simétricas, es decir, la duración tanto del nivel alto como del
nivel bajo del periodo a igual a T/2.

CLK

Q0

Q1

Q2

Q3

59
Fundamentos de computadores 59
ó á

Memorias RAM estáticas (I)


La agrupación de m registros de n bits, controlados a través de k entradas de direccionamiento (m=2k), de forma que cada registro
queda seleccionado por su número en binario, da lugar a un bloque de memoria RAM, memoria de acceso directo o aleatorio (random
access memory).
Los terminales de entrada y de salida de los registros son comunes para todos ellos y, en cada momento, el vector presente en las
entradas de control o direccionamiento indicará sobre cuál de los registros se actúa.

60
ó á

Memorias RAM estáticas (II)

Además, por simplicidad de acceso, no hay distinción entre terminales de entrada y terminales de salida de los registros (es decir, la
misma línea actúa como entrada y como salida), de forma que el tipo de acceso al registro seleccionado (lectura del registro o escritura del
mismo) ha de ser indicado por una línea adicional R/W (lectura/escritura).

Un bloque RAM tendrá k líneas de direccionamiento Ai , que actúan como entradas, n líneas de datos Di , que actúan
bidireccionalmente, una entrada de selección de la operación a realizar R/W, que distingue entre lectura y escritura y una
entrada de habilitación E.

Su esquema conceptual (mostrado abajo a la derecha) está conformado por un módulo central que contiene los m registros de n
biestables, un decodificador de k líneas de entrada que selecciona los registros (m = 2k) y un circuito adaptador de entradas/salidas que
controla la actuación de las n líneas de datos a tenor de las entradas de habilitación E y lectura/escritura R/W.
De esta forma, se dispone de unidades de memoria (biestables D) capaces de almacenar y conservar un bit, de registros (conjuntos
de biestables D) capaces de almacenar una palabra binaria y de bloques de memoria (conjuntos de registros numerados) capaces de
almacenar múltiples datos ordenados (numerados).

61
ó á

Memorias RAM estáticas (III)

• El tiempo de ciclo de escritura es el tiempo máximo que transcurre desde que se pone la dirección hasta completar todas las
operaciones internas que necesita la memoria para almacenar una palabra.

62
ó á

Memorias RAM estáticas (IV)

• El tiempo de acceso de una operación de lectura es el tiempo máximo que transcurre desde la aplicación de la dirección
hasta que aparece la información en la salida de datos.

63
Triestado: alta impedancia

La forma de configurar el estado de alta impedancia en señales triestado es la siguiente:

salidas : out std_logic_vector (7 downto 0);


….
salidas <= "ZZZZZZZZ" when E = '0' else y;
-- para no especificar el número de valores,
salidas <= (others => 'Z') when E = '0' else y;
-- dentro de un proceso
if E = '0' then salidas <= (others => 'Z')
else salidas <= y; end if;

Terminal bidireccional

Para configurar un terminal bidireccional se efectuarán dos asignaciones relativas a ese terminal; en una de ellas se le hará
asignación como salida y se le indicará alta impedancia (Z) cuando actúe como entrada; en la segunda asignación se «leerá» dicho
terminal como entrada, asignando su valor a otra señal.

A : inout std_logic;
….
signal entrada, E : std_logic;
signal salida : std_logic;
begin
A <= salida when E = '1' else 'Z';
entrada <= A;

Cuando el terminal bidireccional A actúa como entrada (E = '0'), recibe el valor de fuera; en tal situación su asignación como salida
debe hacerse a Z (alta impedancia).

64
Funciones

Una función consiste en un conjunto de asignaciones, cuya aplicación a las entradas de la función sirve para devolver un valor.
Se describe al inicio de la arquitectura, antes del begin de ésta y puede ser llamada, dentro de la arquitectura, cuantas veces sea
necesaria; también puede estar descrita en un paquete de una librería.
Dentro de una función no puede ir una instrucción de espera (wait), ni una actuación por flancos (reloj). Su descripción general
es de la forma:

function nombre_de_la_función (entradas: tipo)


return tipo_de_la_salida is
begin
asignaciones (como en un proceso)
return ……; end;

llamada a la función:
señal <= nombre_de_la_función (entradas);

65
Ejemplo de uso de funciones: Diseñar un sistema que reciba 4 números de 8 bits cada uno y que proporcione a la salida
el mayor de los 4.

66
Procedimientos

Un procedimiento es un subcircuito o módulo circuital que se describe antes del begin de la arquitectura para utilizarlo luego
múltiples veces a lo largo de ella; también puede estar descrito en un paquete dentro de una librería como módulo reutilizable.

Permite no tener que repetir la descripción de un mismo subcircuito cuando este aparece varias veces dentro de una arquitectura.
Su descripción general es de la forma:

procedure nombre_del_procedimiento (parámetros) is


begin
asignaciones (como en un proceso)
end procedure;

llamada al procedimiento:

nombre_del_procedimiento (parámetros);

En buena medida la descripción (y también la utilidad) de un procedimiento se asemeja a la de un proceso (process); es una
especie de proceso reutilizable.

Importante: En los diseños en los que una señal de un procedimiento aparezca en ambos lados de una
asignación (por ejemplo q <= q + 1), debemos declarar esa señal como tipo inout y no como out.

67
Ejemplo de uso de procedimientos (I):
Descripción en VHDL de un registro en forma de
procedimiento y construcción de una pila FIFO
(First In First Out: Primero en Entrar, Primero en
Salir) de 6 registros de 8 bits cada uno.

Un pila FIFO es un conjunto de registros ordenados


de tal manera que cuando entra un nuevo dato por
los terminales de entrada, este dato “empuja” a los
demás a la salida, de manera que el primer dato que
entró es el primero que sale de la pila. La pila que
diseñaremos tiene una línea de habilitación E y una
entrada de reloj (CK), además de las líneas de
entrada y de salida de datos. Dispone también de una
línea de puesta a cero asíncrona (RS).

68
Ejemplo de uso de procedimientos (II): Pila FIFO de 6 registros en VHDL.

69
Simulación funcional del la pila FIFO

70
ó

Parametrización en VHDL (I)

La descripción paramétrica de un sistema es aquella que acepta parámetros que pueden alterar el comportamiento del mismo sin
necesidad de cambiar su descripción (considerando el lenguaje VHDL, sin necesidad de modificar su arquitectura).

La parametrización de una descripción VHDL se realiza en la entidad, que es el medio con el que se comunica con el exterior.
Dentro de la entidad, además de los puertos, se pueden declarar unos parámetros, llamados genéricos, que se utilizan para llevar a
cabo dicha parametrización, de tal forma que la sintaxis de la entidad queda de la siguiente forma:

entity nombre_de_entidad is
generic (
<nombre_parametro_1> : <tipo := <valor_por_defecto>;

<nombre_parametro_N> : <tipo> := <valor_por_defecto>);
port (
<nombre_puerto_1> : <sentido> <tipo>;

<nombre_puerto_N> : <sentido> <tipo>);
end nombre_entidad;

Ejemplo:
generic( m : integer := 8 );

71
ó

Parametrización en VHDL (II)

En el caso de querer utilizar el valor por defecto, en la llamada del componente no se especificará el valor del parámetro. Dentro del
cuerpo de la arquitectura del módulo de jerarquía superior, la llamada a este componente se realiza de la siguiente forma:

Identificador_componente: <nombre>
generic map (
<nombre_parametro_1> => <valor_parametro_1>;

<nombre_parametro_N> => <valor_parametro_N>);
port map (
<nombre_puerto_1> => <señal_1>;

<nombre_puerto_N> => <señal_N>);

72
ó

Parametrización en VHDL (III)

Ejemplo: Entidad de un módulo VHDL con parámetros Ejemplo de llamada al componente antirrebote en la
arquitectura de un módulo de jerarquía superior (o en un
fichero de test):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; ARCHITECTURE behavior OF antirrebote_test IS
use IEEE.STD_LOGIC_UNSIGNED.ALL; COMPONENT antirrebote
GENERIC(
entity antirrebote is max : integer;
generic ( cont_bit : integer);
max : integer := 1000000; PORT(
cont_bit : integer := 20); clk : IN std_logic;
port ( clk : in STD_LOGIC; reset : IN std_logic;
reset : in STD_LOGIC; boton : IN std_logic;
boton : in STD_LOGIC; F : OUT std_logic);
F : out STD_LOGIC); END COMPONENT;
end antirrebote; …

BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: antirrebote
GENERIC MAP (
max => 20,
cont_bit => 20);
PORT MAP (
clk => clk,
reset => reset,
boton => boton,
F => F);

73
Bucle para generar varios módulos: generate

Cuando se trata de conectar varios nódulos del mismo tipo, la «instrucción» generate actúa en forma de bucle según un índice que
recorre un intervalo de valores:

etiqueta: for i in … to … generate


inserción de módulos
end generate;

Ejemplo de uso de la instrucción generate y de declaraciones de genéricos: Diseñar una pila FIFO como la del ejemplo anterior
empleando la instrucción generate. Este diseño consta de dos ficheros, el primero de ellos define un registro de tamaño num_bits y
el segundo define una pila, basada en los registros definidos en el primer fichero, de tamaño tam_pila. Simplemente cambiando el
valor de estas dos constantes es fácil generar una pila de cualquier tamaño sin modificar el código fuente.

Fichero de declaración del registro

74
Fichero de declaración de la pila que emplea registros como el definido en la
diapositiva anterior

75
í

Librerías y paquetes (I)

 Una librería es una «carpeta» (un directorio) en la que se almacenan diseños (con su entidad y su arquitectura, cada uno de
ellos) que pueden ser utilizados como componentes en otros diseños. También se almacenan en las librerías los paquetes, que
contienen tipos, subtipos, constantes, componentes, funciones, procedimientos… como módulos disponibles para su uso en
otros diseños.
 Librerías y paquetes sirven para organizar y ordenar los diseños y para aprovechar el trabajo generando módulos reutilizables.
 La librería directa de trabajo, en la que se desarrolla el diseño actual, se denomina work y no es necesario declararla.
 Ejemplo de librerías y paquetes son los declarados habitualmente al inicio del texto:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

 Esta declaración indica el uso de la librería ieee; dentro de ella se usan los paquetes std_logic_1164 y std_logic_unsigned; y
dentro de dichos paquetes pueden utilizarse todos los elementos contenidos en ellos. Si se necesitase solo un componente del
paquete, bastaría poner el nombre del elemento (en lugar de all).
 El «paquete» std_logic_unsigned describe operaciones aritméticas entre vectores y entre un vector y un entero. En el caso de
que sean de longitud inferior a la señal que recibe el resultado de la operación, añade «ceros» delante hasta completar tal
longitud.
 El «paquete» std_logic_signed describe las mismas operaciones pero completa dicha longitud duplicando el bit de signo, el
primero de ellos; es decir, añade «unos» si el bit más significativo es 1 (lo cual equivale a considerar a los números codificados
en complemento a 2).

76
í

Librerías y paquetes (II)

 La librería básica necesaria para las señales de los tipos introducidos en la normalización de IEEE (std_logic) se encuentra
disponible en los compiladores; también el diseñador puede crear sus propias librerías y paquetes.

 Un paquete es un fichero, dentro de una librería, en el que se declaran tipos y subtipos, se declaran y se asigna valor a
constantes, se describen componentes, funciones y procedimientos…

 Un paquete se describe por «duplicado» mediante:


 una parte declarativa (que, simplemente, enumera los contenidos del paquete con cierto detalle de su tipo y sus
«parámetros»)
 y otra parte descriptiva (que describe, en la forma habitual, cada uno de los módulos contenidos en el paquete a través
de las asignaciones correspondientes).

 La declaración de un paquete y la descripción del mismo se realizan, una detrás de otra, en un mismo fichero de texto, con el
nombre del paquete y la extensión .vhd.

 En el caso de que los componentes del paquete utilicen otros paquetes es necesario declarar estos y sus librerías.

77
í
Declaración y descripción de un paquete:

-- Declaración previa de librerías y paquetes que se utilizan


library IEEE;
use IEEE.STD_LOGIC_1164.all;

-- parte declarativa
package nombre_del_paquete is
-- declaración de tipos, constantes, componentes, funciones, procedimientos…
type nombre is … …;
subtype nombre is … …;
constant <constant_name> : time := <time_unit> ns;
constant <constant_name> : integer := <value;
component nombre port( … … … ) end component;
function <function_name> (signal <signal_name> : in <type_declaration>) return <type_declaration>;
procedure <procedure_name> (<type_declaration> <constant_name> : in <type_declaration>);
end nombre_del_paquete;

-- parte descriptiva
package body nombre_del_paquete is
-- descripción de componentes, funciones y procedimientos (los tipos o subtipos no figuran en la descripción del paquete porque ya -- -- han sido
definidos, por completo, en su declaración)
-- descripción completa de cada función
function nombre (entradas) return tipo is
begin
asignaciones
return expresión;
end;
-- descripción completa de cada procedimiento
procedure nombre (parámetros)
begin
asignaciones
end procedure;
end nombre_del_paquete;

78
í

Ejemplo de uso de librerías y paquetes (I)


Definimos un paquete (paquete1) donde se define el registro de la pila FIFO , las constantes tam_pila y num_bits y el tipo
colección dentro de una librería (libreria1).

79
í

Ejemplo de uso de librerías y paquetes (II)

Definimos de nuevo la pila FIFO (FIFO.vhd), pero usando ahora la librería (libreria1) que contiene el paquete (paquete1) que define el
registro, las constantes tam_pila y num_bits y el tipo coleccion.

80
í

Ejemplo de uso de librerías y paquetes (III)

A continuación puede verse como relaciona los distintos ficheros del diseño el software ISE WebPACK de Xilinx y el esquemático RTL
sintetizado (declarando una pila de 6 registros).

81
ó

• Se entiende por Dispositivo Programable aquel circuito de propósito general que posee una estructura interna que puede
ser modificada por el usuario final para implementar una amplia gama de aplicaciones después de haber sido fabricado.

• Los dispositivos lógicos programables comenzaron con la familia de dispositivos ROM (Read-Only Memory, ver tema 1). Estos
dispositivos se basan en una matriz fija, en la que se encuentran todos los productos lógicos de las señales de entrada y una
matriz programable en la que se suman los productos que intervendrán en cada salida. De hecho, los dispositivos ROM nacieron
como dispositivos de memoria para acompañar a los microcontroladores, donde las señales de entrada son las señales de
dirección.

• Después aparecieron los dispositivos PLA y PAL (tema 1). También surgen dispositivos GAL (Generic Array Logic) que añaden
biestables a sus salidas; de esta forma, se proporciona a la estructura PAL o PLA capacidad de memoria y, por tanto, de
realización de circuitos secuenciales. En este caso, los términos producto de la PAL o PLA han de admitir como variables,
además de las propias variables de entrada, las salidas de los biestables; es decir, las variables de estado (almacenadas en los
biestables) han de realimentarse como entradas sobre los módulos PAL o PLA que configuran las funciones de evolución del
estado.

• Con el inicio de la metodología RTL (Register Transfer Level), comienza la evolución de los sistemas programables a sus
versiones más complejas, empezando con la familia CPLD (Complex Programmable Logic Device). Estos dispositivos están
formados por varios dispositivos GAL conectados a una matriz de interconexión programable.

• Existen dispositivos más complejos denominados FPGA (Field Programmable Gate Array). Estos dispositivos también están
basado en dispositivos GAL, pero debido a la utilización de un mayor número de estos últimos, y a su arquitectura diferente, se
dispone de una mayor versatilidad.

• Actualmente las mejoras en dispositivos programables se centran en añadir cores (núcleos de procesamiento) a los dispositivos
FPGA. Los cores no son más que componentes fijos de aplicación específica. Dependiendo de la familia de FPGA, podemos
encontrar diferentes tipos de cores; entre los más usuales podemos encontrar procesadores completos, bloques de memoria RAM,
multiplicadores, componentes DSP (Digital Signal Processor) o bloques DCM (Digital Clock Manager).

82
PAL con capacidad secuencial (I)

Ejemplo de dispositivo PLD con capacidad secuencial


de baja densidad, modelo PAL16R8.

Como ejercicio básico, se recomienda al alumno que


analice cómo se puede implementar un sistema
secuencial en esta estructura

83
PAL con capacidad secuencial (II)

Detalle de una salida del dispositivo PAL16R8, donde se observan las siguientes características:

• 8 productos para cada flip-flop D.


• Flip-flop D: flanco de subida y reloj común.
• La Q del flip-flop se realimenta hacia el plano AND-OR (Útil para autómatas secuenciales y contadores).
• Control triestado para todos los pines de salida (output pins).
.

84
Los circuitos programables han experimentado un extraordinario desarrollo en las dos últimas décadas (de 1990 a nuestros
días), con la integración de un alto número de módulos en el mismo circuito y el aumento de prestaciones de tales módulos. El
módulo básico «suma de productos + biestable» ha incorporado diversos «selectores» programables, así como la posibilidad de
salida «triestado». En algunos fabricantes estas estructuras reciben el nombre genérico de macroceldas.

Una macrocelda (figura en diapositiva siguiente) está compuesta habitualmente (aunque varía entre distintos fabricantes y
modelos) por:

 Una suma de productos programables de múltiples entradas entre las que se encuentran las salidas de las propias
macroceldas (realimentación), estando disponible cada entrada en su forma directa y negada.

 Una puerta "o-exclusiva" (XOR) programable que permite configurar la función de la macrocelda (suma de términos producto)
en forma directa o negada, pudiendo optar por la que menor número de términos producto requiera (lo cual equivale a poder
elegir entre resolver la función por «unos» o por «ceros»).

 Un biestable que recibe dicha función.

 Un selector que permite «puentear» el biestable y que configura, por tanto, la macrocelda como combinacional o como
secuencial.

 Un adaptador triestado con capacidad para «desconectar» la macrocelda respecto del terminal de salida, lo cual da lugar a las
siguientes posibilidades:
• la simple desconexión (alta impedancia) del terminal.
• su utilización bidireccional (I/O).
• su disponibilidad como entrada, en el caso de que la macrocelda no sea utilizada.

85
Los circuitos integrados programables que utilizan macroceldas suelen ser aludidos con las siglas PLD (Programmable Logic
Device).

Mientras el número de macroceldas contenido en un PLD no es alto, cada una de ellas recibe todas las entradas del dispositivo y la
realimentación de todas las salidas del mismo, que coinciden directamente con las salidas de todas las macroceldas del dispositivo: en
el caso de que alguna de las macroceldas no sea utilizada, la salida correspondiente puede ser usada como entrada.
Uno de estos dispositivos es el PAL22V10 cuya denominación proviene de sus 22 terminales (11 entradas, 10 salidas y reloj) y 10
macroceldas; las 10 macroceldas que contiene presentan diferente número de términos producto: hay 2 macroceldas con 8 términos
producto, otras 2 con 10, 2 con 12, 2 con 14 y 2 con 16 términos producto. La configuración del circuito integrado programable 22V10
está representada en la figura de la página siguiente; de los 22 terminales que ofrece, 12 son entradas exteriores (uno de ellos para el
reloj) y 10 son de tipo I/O, correspondientes a las salidas de las 10 macroceldas (cuando una macrocelda no es utilizada, su terminal de
salida puede ser aprovechado como una entrada exterior más para el resto de las macroceldas).

86
Esquema del circuito PAL22V10 (se muestran sólo las primeras 4 macroceldas y su estructura PAL asociada)

87
Esquema de macrocelda de salida del circuito PAL22V10.

88
Equivalente de las macroceldas según su configuración mediante los fusibles S1 y S0 en la PAL22V10.

89
Dispositivos Lógicos Programables Complejos

• Cuando se trata de un gran número de macroceldas dentro de un mismo circuito integrado, no resulta adecuado que cada una de
ellas reciba todas las entradas y se conecte con todas las macroceldas, ya que la cantidad de conexiones programables sería
sumamente elevada; tampoco es necesario que las salidas de todas las macroceldas se conecten a terminales de salida del
circuito integrado.

• Para limitar el tamaño del circuito y el número de terminales, las macroceldas se agrupan en bloques disjuntos y reciben
solamente la realimentación de las macroceldas del propio bloque; no todas las salidas de las macroceldas están conectadas a
terminales de salida sino solamente un número reducido de cada bloque. Los bloques se conectan entre sí (y con las entradas del
circuito) a través de un bus central de conexiones programables conformando una estructura ramificada: un canal o eje de
conexiones (a manera de tronco) sobre el cual se insertan los bloques de macroceldas (como ramas del mismo). [Véase la figura
de la diapositiva siguiente].

• Este tipo de circuitos integrados programables de amplio número de macroceldas con arquitectura ramificada es nombrado con
las siglas CPLD (Dispositivos Lógicos Programables Complejos). Para reducir la superficie de integración y evitar un alto
desaprovechamiento de las estructuras PAL, el número de términos producto de cada macrocelda suele ser pequeño (4 ó 6) y
para ampliarlo, cuando se necesite, se incluyen en cada bloque «expansores», en forma de términos producto adicionales que,
sin pertenecer directamente a ninguna de las macroceldas del bloque, pueden ser utilizados por cualquiera de ellas (o, incluso,
pueden ser compartidos por varias macroceldas del bloque).

90
Esquema general de un CPLD (abajo) y aspecto de la arquitectura
de un CPLD genérico de 256 macroceldas (derecha).

En el CPLD de 256 macroceldas mostrado, solamente 64 de ellas pueden utilizarse como


salidas exteriores (las otras 192 macroceldas son internas); el circuito dispone de una
entrada específica de reloj y de 12 entradas exteriores, pudiéndose emplear también
como entradas los terminales correspondientes a macroceldas que no se usen como
tales.

91
Dispositivos FPGA (I)

Las FPGA (Field Programmable Gate Array), introducidas por Xilinx en 1985, son los dispositivos programables por el usuario
más flexibles y potentes. También se denominan LCA (Logic Cell Array). Consisten en una matriz bidimensional de bloques
configurables (Configurable Logic Blocks: CLB) que se pueden conectar mediante recursos de interconexión programables.
Estos recursos incluyen segmentos de pista de diferentes longitudes, mas unos conmutadores programables para enlazar bloques
a pistas o pistas entre si. En realidad, lo que se programa en una FPGA son los conmutadores que sirven para realizar las
conexiones entre los diferentes bloques, además de la configuración de los bloques.

92
Dispositivos FPGA (II)

Principales características

Los FPGAs son dispositivos orientados a satisfacer una muy amplia gama de aplicaciones, desde simple lógica combinacional
hasta sistemas con microprocesador embebido, transmisión tipo Ethernet, transmisión de datos series a varios Gb/s, todo con el
mismo dispositivo. Por ello los FPGAs tienen características diversas, pero se podría decir que las principales son las siguientes:

• Gran cantidad de terminales de E/S. Desde 100 hasta más de 1400 terminales de E/S
• Elevado número de bloques CLB.
• Buffers de E/S programables: control de corriente, configuración del estándar de E/S , pull-up y pull-down configurables.
• Gran cantidad de Flips-Flops, los dispositivos mas grandes pueden tener más de 40.000 FFs
• Bloques de Memoria (BRAM) de doble puerto, puerto simple, de varios Mbits, configurables como RAM, ROM, FIFO y otras
configuraciones
• Bloques DSP (Digital Signal Processing).
• Bloques dedicados de multiplicación.
• Transceptores para transmisión serie de muy alta velocidad, del orden de varios Gb/s.
• Procesadores en hardware embebidos, por ejemplo procesadores ARM.
• Procesadores descriptos en software (soft cores), similares a microcontroladores o procesadores.
• Controladores de reloj tipo Delay Lock Loop (DLL) y Phase Lock Loop (PLLs).
• Interface DDR/DDR2/DDR3 SDRAM
• Interfaz con estándares de E/S tipo diferencial tales como LVDS, SSTL diferencial, etc.
• Se fabrican en distintos grados: comercial, automoción, militar, espacial.

93
Dispositivos FPGA (III)

Tecnologías de configuración
El elemento básico de un FPGA desde el punto de visto no-lógico, es decir que no tiene una función digital lógica, es la celda de
configuración. Esta celda es la que va a determinar la configuración de cada elemento lógico, por ejemplo si un flip-flop se va a
usar o no, y en caso de usarlo, si se configura por ejemplo como de tipo D o T. La celda de configuración también determina la
configuración de los elementos de ruteo y de las interconexiones.
Existen en la actualidad cuatro tipos de celdas de configuración en las FPGAs:

• Celda SRAM, que como su nombre indica se usa una pequeña celda SRAM para mantener la configuración de cada parte
configurable del FPGA.
• Celda anti-fuse (anti-fusible), que consiste en una estructura microscópica la que, a diferencia de un fusible regular, esta
normalmente abierta. Cuando se hace circular una cierta cantidad de corriente durante la configuración del dispositivo,
causa una gran potencia de disipación en un área muy pequeña, lo que provoca el derretimiento de un aislante dieléctrico
entre dos electrodos formando una unión permanente muy fina.
• Celda Flash, que a diferencia de las SRAM, permiten mantener la configuración aún después de desconectada la
alimentación del dispositivo.
• Celdas Flash - SRAM. Las celdas Flash se usan para mantener los datos de configuración del FPGA y las SRAM para la
configuración lógica del FPGA.

94
Dispositivos FPGA (IV)
Comparación con otras soluciones para implementar sistemas digitales

La diferencia entre la programación hardware y la programación software puede definirse así:

En la programación software, el diseñador va a describir el comportamiento del sistema utilizando una formulación
abstracta, denominada código, la cual será ejecutada en un dispositivo de aplicación general capaz de interpretar
instrucciones de código.

En la programación hardware, el diseñador va a describir el comportamiento del sistema utilizando una formulación que
será adaptada a una estructura formando un dispositivo de aplicación específica.

• En la programación software, el único nivel de abstracción en el que el diseñador puede interactuar es el nivel de sistema o
de algoritmo. En dicho sistema, el comportamiento se describe mediante un algoritmo (igual que en la descripción software) y
los componentes que se utilizan.

• En los sistemas ASIC (Application-Specific Integrated Circuit), el diseñador puede influir en cualquier nivel de
abstracción del proceso de diseño. En las metodologías de diseño full-custom pueden llegar hasta el nivel geométrico con la
realización del layout (distribución geométrica de las diferentes capas de material del circuito integrado). En las metodologías
de diseño semi-custom suelen llegar únicamente hasta el nivel lógico, ya que los componentes están previamente
diseñados en las librerías de celdas.

• En el caso de la programación hardware con dispositivos programables, el nivel de abstracción más bajo al que el
diseñador puede tener acceso es el nivel lógico, ya que los componentes ya están incluidos (y por lo tanto diseñados) en el
dispositivo programable.

95
Dispositivos FPGA (V)

Arquitectura básica

Los dispositivos FPGAs están formados por cuatro elementos diferentes, como se muestra en la figura. Se puede observar que el
dispositivo está rodeado por un anillo de bloques de entrada-salida. En el interior del dispositivo se pueden distinguir los tres
elementos restantes: elementos genéricos de procesado (CLBs), matriz de interconexiones y primitivas o cores.

96
Dispositivos FPGA (VI)

Estructura (I)

Cada fabricante de FPGAs denomina a cada uno de estos elementos con una notación propia. Considerando los dos principales
fabricantes de FPGAs (Xilinx y Altera), y a modo de ejemplo, las denominaciones utilizadas para los elementos genéricos de
procesado son CLB (Configurable Logic Block) y LAB (Logic Array Block) respectivamente.

• En la celda lógica SRAM, en vez de puertas lógicas convencionales, una tabla de búsqueda (Look-up Table: LUT) determina
la salida basada en los valores de las entradas. Una LUT simplemente almacena la tabla de verdad de la función.
• En la configuración LUT las funciones se construyen a través de su tabla funcional, mediante un multiplexor que «toma valores»
sobre dicha tabla; dichos valores pueden ser almacenados en un registro.
• Las conexiones entre funciones (o entre módulos) son seleccionadas, también, a través de biestables: el valor booleano (1/0)
almacenado en un biestable determina que las dos líneas conductoras enlazadas queden conectadas entre sí o permanezcan
independientes.

Cómo se implementa una función lógica en una LUT

97
Dispositivos FPGA (VII)

Estructura (II)

Celdas, módulos y bloques lógicos


Las matrices de celdas programables FPGA son dispositivos compuestos por una matriz de bloques lógicos, formados por varias
parejas de celdas lógicas de reducido tamaño (y limitada capacidad booleana), separados por canales de conexión verticales y
horizontales, con celdas de entrada/salida situadas en la periferia, que conectan con los terminales del dispositivo.
La descripción que se presenta en este tema intenta ser una aproximación conceptual y genérica a la conformación de las FPGA. La
configuración concreta de una FPGA depende del fabricante y de la serie específica y alcanza progresivamente mayores niveles de
complejidad.
Las celdas lógicas cuentan con una parte combinacional, capaz de realizar una función booleana de pocas entradas (generalmente
4 entradas), un biestable y algunos «multiplexores de configuración»; las funciones se construyen mediante multiplexores por el
procedimiento de «búsqueda sobre tabla» LUT (look-up-table).

Una celda lógica genérica como la mostrada puede


programarse para que se comporte como:
- una función de 4 variables,
- una función de 4 variables + biestable,
- un registro de desplazamiento de hasta 17 bits,
- una pequeña memoria ROM de 16 x 1 bits,
- una pequeña memoria RAM de 16 x 1 bits,
- un multiplexor de 2 líneas de entrada.

98
Dispositivos FPGA (VIII)

Estructura (III)

Celdas, módulos y bloques lógicos (II)

Dos celdas lógicas se agrupan en un módulo lógico, con un multiplexor de las dos salidas LUT a fin de poder configurar funciones
de 5 variables.

Las FPGA «avanzadas», de alta capacidad, contienen varios módulos


lógicos en cada bloque lógico (en cada celdilla de su matriz):

99
Dispositivos FPGA (IX)
Ejemplos de primitivas de la familia Spartan 3 (Xilinx)

1. DCM (Digital Clock Manager). El bloque DCM tiene la misión de gestionar las señales de reloj. Para ello, a partir de un señal
de reloj de entrada, puede realizar las siguientes funciones:
• Auto-calibración.
• Distribución.
• Retraso, es decir, obtener una señal de la misma frecuencia pero retrasada un determinado tiempo.
• Multiplicación de frecuencia, es decir, obtener una señal con una frecuencia mayor.
• División de frecuencia, es decir, obtener una señal con una frecuencia menor.
• Desplazamiento de fases, es decir, obtener una señal de la misma frecuencia pero diferente razón en los semiperiodos.

2. Bloques de memoria RAM. Los bloques de memoria RAM son elementos destinados al almacenamiento “masivo” de
información. Cada bloque puede tener distintas capacidades .

3. Multiplicadores. Los multiplicadores son implementaciones eficientes de este tipo de operadores. Estos multiplicadores
pueden utilizar un tamaño de dato de entrada de diferente número de bits.
100

También podría gustarte