Está en la página 1de 16

Diseño de Sistemas Electrónicos-DB4 Unidad 7.

Diseño de Sistemas Secuenciales

Unidad 7

Diseño de Sistemas
Secuenciales

Andres.Iborra@upct.es
Juan.Suardiaz@upct.es

Mayo 2003
TEMARIO

⋅1⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

CONTENIDO

Unidad 7. Diseño de Sistemas Secuenciales.

7.1. Introducción.
7.2. Diseño basado en elementos MSI.
7.3. Descripción VHDL de lógica secuencial.
7.3.1. Biestables.
7.3.2. Registros de almacenamiento.
7.3.3. Contadores.
7.3.4. Registros de desplazamiento.
7.4. Ejemplo de aplicación: Divisor de frecuencia.

OBJETIVOS ESPECÍFICOS

• Repasar el funcionamiento de los componentes básicos secuenciales.


• Ser capaz de modelar usando el lenguaje de descripción de hardware VHDL
cualquier componente o sistema secuencial.

⋅2⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

7.1 INTRODUCCIÓN

En la unidad anterior se han modelado sistemas combinacionales; es decir, aquellos


sistemas cuyas salidas en un instante determinado sólo dependen de los valores que
se encuentran presentes en sus entradas en ese momento.

Si bien un sistema secuencial puede tener también uno o más elementos


combinacionales, la mayoría de los sistemas digitales que se encuentran en la práctica
incluyen elementos de memoria, los cuales requieren que el sistema se describa en
términos de lógica secuencial.

Entradas CIRCUITO Salidas


COMBINACIONAL

ELEMENTO
DE MEMORIA

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 sólo depende del valor presente en las
entradas en un instante determinado, sino también de la historia del sistema (se dice
que los secuenciales son circuitos con memoria, mientras que los combinacionales no
tienen memoria).

Básicamente hay dos tipos de sistemas secuenciales:


s Síncronos: su comportamiento se encuentra sincronizado mediante el pulso de reloj
del sistema (CLK).
s Asíncrono: Su funcionamiento depende del orden y momento en el que se aplican
las señales de entrada.

En esta unidad se diseñarán los circuitos secuenciales más utilizados en el diseño


lógico a través del lenguaje de descripción de hardware VHDL.

⋅3⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

7.2 DISEÑO BASADO EN ELEMENTOS MSI

Al igual que en la unidad anterior, se desarrollarán este tipo de sistemas mediante el


uso del pensamiento estructurado: un circuito o sistema complejo se concibe como una
colección de subsistemas más pequeños, cada uno de los cuales tiene una descripción
más sencilla.

En el caso de los sistemas secuenciales, se partirá del elemento mínimo que será el
biestable. Este bloque secuencial de construcción constituye el ladrillo con los que se
edifican los sistemas secuenciales (equivalente a las puertas lógicas en los sistemas
combinacionales). Uno de los bloques electrónicos más importantes de este tipo lo
constituyen los denominados elementos MSI (Medium Scale of Integration)
secuenciales estudiados en la asignatura de Electrónica Digital: circuitos contadores,
registros de desplazamiento…. En esta unidad se describen las estructuras
secuenciales más importantes desde una perspectiva de los lenguajes de descripción
de hardware, en concreto usando el lenguaje VHDL.

7.3 DESCRIPCIÓN VHDL DE LÓGICA SECUENCIAL

Uno de los conceptos nuevos que aparece en VHDL a la hora de describir sistemas
secuenciales es la forma de describir la activación por flanco de reloj.

• Atributo ‘event.
En el lenguaje VHDL los atributos sirven para definir características que se pueden
asociar con cualquier tipo de datos, objeto o entidades. El atributo ‘event (evento,
donde ‘ indica que se trata de un atributo) se utiliza para describir un hecho u
ocurrencia de una señal particular.
Considerando una señal de reloj (CLK), la sentencia CLK’event es cierta sólo
cuando ocurre un cambio de valor (paso de ‘0’ a ‘1’ o de ‘1’ a ‘0’). Combinándola
con una sentencia de comprobación de igualdad del nuevo valor es posible definir la
activación por el tipo de flanco que se desee:

Flanco de Subida Flanco de Bajada

IF(CLK’event and CLK=’1’) IF(CLK’event and CLK=’0’)

⋅4⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

7.3.1 BIESTABLES

Se trata de un dispositivo de almacenamiento temporal de dos estados, que pueden


permanecer en cualquiera de sus dos estados gracias a la capacidad de
realimentación, lo que consiste en conectar las salidas con las entradas.
Es posible agrupar los biestables en dos grupos:
• Asíncronos: La salida cambia de estado cuando cambian las entradas.
• Síncronos: La salida cambia de estado (en función de las entradas) de forma
acompasada con una señal de reloj. Este tipo de dispositivos síncronos a su vez se
clasifican en:
s Activos por nivel (alto o bajo): La salida cambia de estado sólo cuando la
señal de reloj se encuentra en el estado lógico ‘1’ (nivel alto) ó ‘0’ (nivel
bajo).
s Activos por flanco (subida o bajada): La salida cambia de estado sólo
cuando la señal de reloj pasa de un nivel lógico de ‘0’ a ‘1’ (flanco de
subida) o de ‘1’ a ‘0’ (flanco bajada).
• Tipos de biestables.
Independientemente del momento de activación, es posible catalogar los biestables
en los siguientes tipo:
T Q
D Q
Q
Q
BIESTABLE T
BIESTABLE D
T Q*
D Q*
0 Q
0 0
1 Q
1 1

S Q J Q
R Q K Q

BIESTABLE S-R BIESTABLE J-K


S R Q* J K Q*
0 0 Q 0 0 Q
0 1 0 0 1 0
1 0 1 1 0 1
1 1 No Valido 1 1 Q

⋅5⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

• Ej_1: Biestable S-R asíncrono.

S Q
R Q

BIESTABLE S-R
S R Q*
0 0 Q
0 1 0
1 0 1
1 1 No Valido

LIBRARY IEEE; LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_1164.ALL;

ENTITY BiestableSR IS ENTITY BiestableSR IS


PORT ( sS, sR: IN std_logic; PORT ( sS, sR: IN std_logic;
sQ, sQn: INOUT std_logic); sQ, sQn: INOUT std_logic);
-- Por realimentación INOUT END BiestableSR;
END BiestableSR; -- Versión secuencial
ARCHITECTURE BiestableSRArch2 OF
ARCHITECTURE BiestableSRArch OF BiestableSR IS
BiestableSR IS BEGIN
BEGIN PROCESS(sS, sR)
-- Descripción mediante las ecuaciones BEGIN
-- características (Realimentación) IF (sS = ‘0’ and sR = ‘0’) THEN
sQ <= sS nor sQn; sQ <= sQ; sQn <= sQn;
sQn <= sR nor sQ; ELSIF (sS = ‘0’ and sR = ‘1’) THEN
END BiestableSRArch; sQ <= ‘0’; sQn <= ‘1’;
ELSIF (sS = ‘1’ and sR = ‘0’) THEN
sQ <= ‘1’; sQn <= ‘0’;
ELSE sQ <= ‘-‘; sQn <= ‘-‘;
-- Se usa ‘-‘ para el caso no válido
END IF;
END PROCESS;
END BiestableSRArch2;

⋅6⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

• Ej_2: Biestable S-R síncrono activo en nivel alto.

S Q
R
CLK Q

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY BiestableSRNivel IS
PORT ( sS, sR: IN std_logic; --Señales de entrada.
sCLKH: IN std_logic; --Señal de reloj.
sQ, sQn: INOUT std_logic); --Salida
END BiestableSRNivel;

ARCHITECTURE BiestableSRNivelArch OF BiestableSRNivel IS


BEGIN
PROCESS(sS, sR, sCLKH)
BEGIN
-- Se cambia de estado sólo si el reloj está a nivel alto ‘1’
IF (sCLKH = ‘1’) THEN
IF (sS = ‘0’ and sR = ‘0’) THEN
sQ <= sQ; sQn <= sQn;
ELSIF (sS = ‘0’ and sR = ‘1’) THEN
sQ <= ‘0’; sQn <= ‘1’;
ELSIF (sS = ‘1’ and sR = ‘0’) THEN
sQ <= ‘1’; sQn <= ‘0’;
ELSE sQ <= ‘-‘; sQn <= ‘-‘;
END IF;
ELSE NULL;
END IF;
END PROCESS;
END BiestableSRNivelArch;

⋅7⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

u Modelado VHDL de la activación por flanco.


Tal y como se ha comentado anteriormente, la principal opción que ofrece VHDL
para modelar la activación por flanco en los circuitos secuenciales es mediante el
atributo ‘event. Sin embargo, es posible modelarlos también mediante dos formas
adicionales:
· Dentro de un proceso con la sentencia WAIT UNTIL.
· Usando las macros VHDL’93 rising_edge(señal) y falling_edge(señal);

Flanco de Subida Flanco de Bajada

IF(CLK’event and CLK=’1’) IF(CLK’event and CLK=’0’)


WAIT UNTIL CLK = ‘1’ WAIT UNTIL CLK = ‘0’
Rising_edge(CLK) Falling_edge(CLK)

• Ej_3: Flip-Flop D activo en flanco de subida. D Q

CLK

--la macro rising_edge poniendo:


LIBRARY IEEE; --IF (rising_edge(CLK)) THEN
USE IEEE.STD_LOGIC_1164.ALL; --sQ <= sD;
--END IF;
ENTITY FlipFlopD IS END PROCESS;
PORT ( sD, CLK: IN std_logic; END FlipFlopDArch;
sQ: OUT std_logic);
END FlipFlopD; --Arquitectura con WAIT
--Método no recomendado.
--Arquitectura con eventos. ARCHITECTURE FlipFlopDArch2 OF
ARCHITECTURE FlipFlopDArch OF FlipFlopD IS
FlipFlopD IS BEGIN
BEGIN PROCESS BEGIN
PROCESS (CLK) BEGIN WAIT UNTIL CLK = ‘1’;
IF (CLK’event and CLK = ‘1’) THEN sQ <= sD;
sQ <= sD; END PROCESS;
END IF; END FlipFlopDArch2;
--Hubiera sido aquivalente a usar

⋅8⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

u Modelización VHDL de las señales de inicialización.


Cuando los biestables se alimentan, pueden adoptar un valor indeterminado “a
priori”, dependiendo de la forma en que lo haya implementado el fabricante.

Suele ser habitual el uso de señales de inicialización, que fuerzan la salida del
biestable a un valor conocido. Típicamente podemos clasificar esta clase de señales
en dos grupos:
• Señales de inicialización asíncrona.
∗ En cuanto se activan la salida del biestable pasa automáticamente a tomar el
valor correspondiente.
∗ Pueden ser activas a nivel alto o bajo.
RESET ⇒ Q = ‘0’ SET ⇒ Q = ‘1’

• Señales de inicialización síncrona.


∗ Cuanto se activan la salida del biestable espera la señal de reloj para tomar el
valor correspondiente.
∗ Pueden ser activas a nivel alto o bajo.
CLEAR ⇒ Q = ‘0’ PRESET ⇒ Q = ‘1’

⋅9⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

D Q
• Ej_4: Flip-Flop D activo en flanco de subida con RESET.
CLK
RESET

LIBRARY IEEE; ARCHITECTURE FlipFlopDArch OF


USE IEEE.STD_LOGIC_1164.ALL; FlipFlopD IS
BEGIN
ENTITY FlipFlopD IS PROCESS (CLK, sResetH) BEGIN
PORT ( sD, CLK: IN std_logic; IF (sResetH = ‘1’) THEN
sResetH: IN std_logic; sQ <= ‘0’;
sQ: OUT std_logic); ELSIF (CLK’event and CLK = ‘1’) THEN
END FlipFlopD; sQ <= sD;
END IF;
END PROCESS;
END FlipFlopDArch;

• Ej_5: Flip-Flop D activo en flanco de subida con CLEAR. D Q


El CLEAR y PRESET se suelen CLEAR
colocar junto a las entradas a fin de
CLK
indicar que son señales síncronas

LIBRARY IEEE; ARCHITECTURE FlipFlopDArch OF


USE IEEE.STD_LOGIC_1164.ALL; FlipFlopD IS
BEGIN
ENTITY FlipFlopD IS PROCESS (CLK, sClearH) BEGIN
PORT ( sD, CLK: IN std_logic; IF (CLK’event and CLK = ‘1’) THEN
sClearH: IN std_logic; IF (sClearH = ‘1’) THEN sQ <= ‘0’;
sQ: OUT std_logic); ELSE sQ <= sD;
END FlipFlopD; END IF;
END IF;
END PROCESS;
END FlipFlopDArch;

⋅10⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

7.3.2 REGISTROS DE ALMACENAMIENTO

Presentan una estructura similar a los flip-flops. La diferencia radica en que almacenan
el estado de un vector de bits en lugar de un solo bit.

• Ej_6: Registro de almacenamiento de N bits.

D Q

CLK

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY Registro IS
GENERIC(iNAncho: integer := 8);
PORT ( svD: IN std_logic_vector(iNAncho-1 DOWNTO 0); --Vector Entrada.
CLK: IN std_logic; --Señal de reloj.
svQ: OUT std_logic_vector(iNAncho-1 DOWNTO 0)); --Vector Salida
END Registro;

ARCHITECTURE RegistroArch OF Registro IS


BEGIN
PROCESS(CLK)
BEGIN
-- Uso de la MACRO rising_edge
IF (rising_edge(CLK)) THEN
svQ <= svD;
END IF;
END PROCESS;
END RegistroArch;

⋅11⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

7.3.3 CONTADORES

Se trata de dispositivos que en su salida presentan una cuenta que se actualiza


mediante la señal de reloj.

• Ej_7: Contador de N bits.

CLK

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ContadorNb IS
GENERIC(iNAncho: integer := 8);
PORT (CLK: IN std_logic; --Señal de reloj.
svQ: INOUT std_logic_vector(iNAncho-1 DOWNTO 0)); --Vector Salida
END ContadorNb;

ARCHITECTURE ContadorNbArch OF ContadorNb IS


BEGIN
PROCESS(CLK)
BEGIN
-- Uso de la MACRO rising_edge
IF (rising_edge(CLK)) THEN
svQ <= svQ + 1; -- Debido a esta realimentación se pone svQ como INOUT.
END IF;
END PROCESS;
END ContadorNbArch;

EJERCICIO PROPUESTO AL ALUMNO: CONTADOR UP/DOWN

⋅12⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

• Ej_8: Contador de N bits con RESET y carga paralelo síncrona (LOAD#).


C7…C0
Si
LOAD = 0 Los biestables se cargan con los
LOAD Q S7…S0 valores C7…C0 y se muestra en la
salida.
CLK LOAD = 1. Se produce una cuenta
RESET
ascendente sobre S7…S0.

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ContadorLoad IS
GENERIC(iNAncho: integer := 8);
PORT (CLK: IN std_logic; --Señal de Reloj.
sLoadL: IN std_logic; -- Señal de Carga.
sResetH: IN std_logic; -- Señal de Reset.
svC: IN std_logic_vector(iNAncho-1 DOWNTO 0); --Vector de Carga
svQ: INOUT std_logic_vector(iNAncho-1 DOWNTO 0)); --Vector Salida
END ContadorLoad;

ARCHITECTURE ContadorLoadArch OF ContadorLoad IS


BEGIN
PROCESS(CLK, sResetH, sLoadL)
BEGIN
-- Análisis de la posibilidad de RESET
IF (sResetH =’1’) THEN svQ <= (OTHERS =>’0’);
-- Uso de la MACRO rising_edge
ELSIF (rising_edge(CLK)) THEN
IF(sLoadL = ‘0’) THEN svQ <= svC;
ELSE svQ <= svQ+1;
END IF;
END IF;
END PROCESS;
END ContadorLoadArch;

⋅13⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

7.3.4 REGISTROS DE DESPLAZAMIENTO.

Es un registro de N bits con una disposición para recorrer sus datos almacenados por
una posición de bit en cada activación de la señal de reloj.
D Q D Q D Q … D Q


CLK CLK CLK … CLK

CLK

R(0) R(1) R(2) R(N-1)

• Ej_9: Registro de desplazamiento de N bits.

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY RegistroDespl IS
GENERIC(iNAncho: integer := 8);
PORT (CLK: IN std_logic; --Señal de Reloj.
sEntrada: IN std_logic; -- Señal de Entrada.
svSalida: OUT std_logic_vector(iNAncho-1 DOWNTO 0)); --Vector Salida
END RegistroDespl;

ARCHITECTURE RegistroDesplArch OF RegistroDespl IS


--Señal auxiliar para llevar a cabo el desplazamiento.
SIGNAL svAux: std_logic_vector(iNAncho-1 DOWNTO 0);
BEGIN
PROCESS(CLK, sEntrada, svAux) BEGIN
IF (rising_edge(CLK)) THEN
-- Aplicación del operador concatenación para efectuar el desplazamiento.
-- El bit 0 de svAux se pierde, ya que entra el valor de la entrada.
svAux <= sEntrada & svAux(iNAncho-1 DOWNTO 1);
END IF;
svSalida <= svAux; -- Actualización de la señal de salida.
END PROCESS;
END RegistroDesplArch;

⋅14⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

• Ej_10: Registro de desplazamiento de 8 bits configurable.

Se pide que diseñe un registro de desplazamiento con señal de RESET, dos


señales de entrada (Izquierda y Derecha) y posibilidad de carga de datos
(D7…D0) que, en función de los valores de unas líneas de selección en las que
aparece un número codificado sobre 3 bits (S2…S0), presente el comportamiento
siguiente:

S2 S1 S0 Funcionalidad S2 S1 S0 Funcionalidad
0 0 0 Retención (Hold) 1 0 0 Desp. Circular a Dcha.
0 0 1 Carga 1 0 1 Desp. Circular a Izda.
0 1 0 Desp. Derecha 1 1 0 Desp. Aritm. a Dcha.
0 1 1 Desp. Izquierda. 1 1 1 Desp. Aritm. a Izda.

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; -- Aplicación de la MACRO conv_integer para aumentar la
legibilidad
ENTITY RegistroConf IS CASE conv_integer(svSeleccion) IS
PORT (CLK, sResetH, sEntIzda, sEntDcha: IN std_logic; WHEN 0 => NULL;--Retención.
svSeleccion: IN std_logic_vector(2 DOWNTO 0); WHEN 1 => svAux<= svDatos;--Carga.
svDatos: IN std_logic_vector(7 DOWNTO 0); WHEN 2 => svAux<= sEntDcha &svAux(7 DOWNTO 1);-
svQ: OUT std_logic_vector(7 DOWNTO 0)); -Despl. Dcha.
END RegistroConf; WHEN 3 => svAux<= svAux(6 DOWNTO 0)& sEntIzda;--
Despl. Izda.
WHEN 4 => svAux<= svAux(0)&svAux(7 DOWNTO 1);--
Despl. Circular Dcha.
ARCHITECTURE RegistroConfArch OF RegistroConf IS WHEN 5 => svAux<= svAux(6 DOWNTO 0)& svAux(7);--
Despl. Circular Izda.
--Señal auxiliar. WHEN 6 => svAux<= svAux(7)&svAux(7 DOWNTO 1);--
SIGNAL svAux: std_logic_vector(7 DOWNTO 0); Despl. Aritm. Dcha.
BEGIN WHEN 7 => svAux<= svAux(6 DOWNTO 0)& ‘0’;--Despl.
PROCESS(CLK, sResetH, svAux) Aritm. Izda.
BEGIN WHEN OTHERS => NULL;--Prevención frente a valores
--Primero se realiza la comprobación del RESET atípicos.
IF (sResetH = ‘1’) THEN svAux<=(OTHERS=>’0’); -- END CASE;
Inicialización asíncrona. END IF;
ELSIF (rising_edge(CLK)) THEN svQ <= svAux; -- Actualización de la señal de salida.
END PROCESS;
END RegistroConfArch;

⋅15⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales

7.4 EJEMPLO DE APLICACIÓN: DIVISOR DE FRECUENCIA.

‘1’ ‘1’ Q
‘1’ T Q T Q T

CLK CLK CLK


CLK X1 X2

• Ej_11 Divisor de frecuencia por 8 (23).

-- Descripción del divisor de frecuencia.


LIBRARY IEEE; ENTITY DivisorFrec8 IS
USE IEEE.STD_LOGIC_1164.ALL; PORT (sCLK: IN std_logic;
svSalida: INOUT std_logic);
-- Descripción del Biestable T. END DivisorFrec8;
ENTITY FlipFlopT IS
PORT (CLK, sT: IN std_logic; ARCHITECTURE DivisorFrec8Arch OF
sQ: INOUT std_logic); DivisorFrec8 IS
END FlipFlopT; --Descripción del componente a usar
(Flip-Flop).
ARCHITECTURE FlipFlopTArch OF COMPONENT FlipFlopT
FlipFlopT IS PORT (CLK, sT: IN std_logic;
BEGIN sQ: INOUT std_logic);
PROCESS(CLK, sT) END COMPONENT;
BEGIN --Señales auxiliaries
IF (rising_edge(CLK)) THEN SIGNAL sX1, sX2: std_logic;
IF (sT = ‘1’) THEN sQ<= not sQ; BEGIN
ELSE sQ<= sQ; FF0: FlipFlopT PORT MAP(CLK=>sCLK,
END IF; sT=>’1’, sQ=>sX1);
END IF; FF1: FlipFlopT PORT MAP(CLK=> sX1,
END PROCESS; sT=>’1’, sQ=>sX2);
END FlipFlopTArch; FF2: FlipFlopT PORT MAP(CLK=> sX2,
sT=>’1’, sQ=> svSalida);
END DivisorFrec8Arch;

⋅16⋅

También podría gustarte