Está en la página 1de 16

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

Unidad 7 Diseo de Sistemas Secuenciales


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

TEMARIO

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

CONTENIDO
Unidad 7. Diseo de Sistemas Secuenciales. 7.1. Introduccin. 7.2. Diseo basado en elementos MSI. 7.3. Descripcin VHDL de lgica 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 aplicacin: Divisor de frecuencia.

OBJETIVOS ESPECFICOS
Repasar el funcionamiento de los componentes bsicos secuenciales. Ser capaz de modelar usando el lenguaje de descripcin de hardware VHDL cualquier componente o sistema secuencial.

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

7.1 INTRODUCCIN
En la unidad anterior se han modelado sistemas combinacionales; es decir, aquellos sistemas cuyas salidas en un instante determinado slo dependen de los valores que se encuentran presentes en sus entradas en ese momento. Si bien un sistema secuencial puede tener tambin uno o ms elementos combinacionales, la mayora de los sistemas digitales que se encuentran en la prctica incluyen elementos de memoria, los cuales requieren que el sistema se describa en trminos de lgica secuencial. Entradas CIRCUITO COMBINACIONAL Salidas

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 slo depende del valor presente en las entradas en un instante determinado, sino tambin de la historia del sistema (se dice que los secuenciales son circuitos con memoria, mientras que los combinacionales no tienen memoria). Bsicamente hay dos tipos de sistemas secuenciales: s Sncronos: su comportamiento se encuentra sincronizado mediante el pulso de reloj del sistema (CLK). s Asncrono: Su funcionamiento depende del orden y momento en el que se aplican las seales de entrada. En esta unidad se disearn los circuitos secuenciales ms utilizados en el diseo lgico a travs del lenguaje de descripcin de hardware VHDL.
3

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

7.2 DISEO BASADO EN ELEMENTOS MSI


Al igual que en la unidad anterior, se desarrollarn este tipo de sistemas mediante el uso del pensamiento estructurado: un circuito o sistema complejo se concibe como una coleccin de subsistemas ms pequeos, cada uno de los cuales tiene una descripcin ms sencilla. En el caso de los sistemas secuenciales, se partir del elemento mnimo que ser el biestable. Este bloque secuencial de construccin constituye el ladrillo con los que se edifican los sistemas secuenciales (equivalente a las puertas lgicas en los sistemas combinacionales). Uno de los bloques electrnicos ms importantes de este tipo lo constituyen los denominados elementos MSI (Medium Scale of Integration) secuenciales estudiados en la asignatura de Electrnica Digital: circuitos contadores, registros de desplazamiento. En esta unidad se describen las estructuras secuenciales ms importantes desde una perspectiva de los lenguajes de descripcin de hardware, en concreto usando el lenguaje VHDL.

7.3 DESCRIPCIN VHDL DE LGICA SECUENCIAL


Uno de los conceptos nuevos que aparece en VHDL a la hora de describir sistemas secuenciales es la forma de describir la activacin por flanco de reloj. Atributo event. En el lenguaje VHDL los atributos sirven para definir caractersticas que se pueden asociar con cualquier tipo de datos, objeto o entidades. El atributo event (evento, donde indica que se trata de un atributo) se utiliza para describir un hecho u ocurrencia de una seal particular. Considerando una seal de reloj (CLK), la sentencia CLKevent es cierta slo cuando ocurre un cambio de valor (paso de 0 a 1 o de 1 a 0). Combinndola con una sentencia de comprobacin de igualdad del nuevo valor es posible definir la activacin por el tipo de flanco que se desee: Flanco de Subida IF(CLKevent and CLK=1)
4

Flanco de Bajada IF(CLKevent and CLK=0)

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo 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 realimentacin, lo que consiste en conectar las salidas con las entradas. Es posible agrupar los biestables en dos grupos: Asncronos: La salida cambia de estado cuando cambian las entradas. Sncronos: La salida cambia de estado (en funcin de las entradas) de forma acompasada con una seal de reloj. Este tipo de dispositivos sncronos a su vez se clasifican en: s Activos por nivel (alto o bajo): La salida cambia de estado slo cuando la seal de reloj se encuentra en el estado lgico 1 (nivel alto) 0 (nivel bajo). s Activos por flanco (subida o bajada): La salida cambia de estado slo cuando la seal de reloj pasa de un nivel lgico de 0 a 1 (flanco de subida) o de 1 a 0 (flanco bajada). Tipos de biestables. Independientemente del momento de activacin, es posible catalogar los biestables en los siguientes tipo:
D Q Q T Q Q

BIESTABLE D D 0 1
S R

BIESTABLE T T 0 1
J K

Q* 0 1
Q Q

Q* Q
Q
Q Q

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


5

BIESTABLE J-K J 0 0 1 1 K 0 1 0 1 Q* Q 0 1
Q

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

Ej_1: Biestable S-R asncrono.


S R Q Q

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

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY BiestableSR IS PORT ( sS, sR: IN std_logic; sQ, sQn: INOUT std_logic); -- Por realimentacin INOUT END BiestableSR; ARCHITECTURE BiestableSRArch OF BiestableSR IS BEGIN -- Descripcin mediante las ecuaciones -- caractersticas (Realimentacin) sQ <= sS nor sQn; sQn <= sR nor sQ; END BiestableSRArch;

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY BiestableSR IS PORT ( sS, sR: IN std_logic; sQ, sQn: INOUT std_logic); END BiestableSR; -- Versin secuencial ARCHITECTURE BiestableSRArch2 OF BiestableSR IS BEGIN PROCESS(sS, sR) BEGIN 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 <= -; -- Se usa - para el caso no vlido END IF; END PROCESS; END BiestableSRArch2;

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

Ej_2: Biestable S-R sncrono activo en nivel alto.


S R CLK Q Q

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY BiestableSRNivel IS PORT ( sS, sR: IN std_logic; --Seales de entrada. sCLKH: IN std_logic; --Seal 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 slo 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;

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

u Modelado VHDL de la activacin por flanco. Tal y como se ha comentado anteriormente, la principal opcin que ofrece VHDL para modelar la activacin por flanco en los circuitos secuenciales es mediante el atributo event. Sin embargo, es posible modelarlos tambin mediante dos formas adicionales: Dentro de un proceso con la sentencia WAIT UNTIL. Usando las macros VHDL93 rising_edge(seal) y falling_edge(seal); Flanco de Subida IF(CLKevent and CLK=1) WAIT UNTIL CLK = 1 Rising_edge(CLK) Flanco de Bajada IF(CLKevent and CLK=0) WAIT UNTIL CLK = 0 Falling_edge(CLK)
D CLK Q

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

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FlipFlopD IS PORT ( sD, CLK: IN std_logic; sQ: OUT std_logic); END FlipFlopD; --Arquitectura con eventos. ARCHITECTURE FlipFlopDArch OF FlipFlopD IS BEGIN PROCESS (CLK) BEGIN IF (CLKevent and CLK = 1) THEN sQ <= sD; END IF; --Hubiera sido aquivalente a usar

--la macro rising_edge poniendo: --IF (rising_edge(CLK)) THEN --sQ <= sD; --END IF; END PROCESS; END FlipFlopDArch; --Arquitectura con WAIT --Mtodo no recomendado. ARCHITECTURE FlipFlopDArch2 OF FlipFlopD IS BEGIN PROCESS BEGIN WAIT UNTIL CLK = 1; sQ <= sD; END PROCESS; END FlipFlopDArch2;

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

u Modelizacin VHDL de las seales de inicializacin. 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 seales de inicializacin, que fuerzan la salida del biestable a un valor conocido. Tpicamente podemos clasificar esta clase de seales en dos grupos: Seales de inicializacin asncrona. En cuanto se activan la salida del biestable pasa automticamente a tomar el valor correspondiente. Pueden ser activas a nivel alto o bajo. RESET Q = 0 SET Q = 1

Seales de inicializacin sncrona. Cuanto se activan la salida del biestable espera la seal de reloj para tomar el valor correspondiente. Pueden ser activas a nivel alto o bajo. CLEAR Q = 0 PRESET Q = 1

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

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


RESET

D CLK

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FlipFlopD IS PORT ( sD, CLK: IN std_logic; sResetH: IN std_logic; sQ: OUT std_logic); END FlipFlopD;

ARCHITECTURE FlipFlopDArch OF FlipFlopD IS BEGIN PROCESS (CLK, sResetH) BEGIN IF (sResetH = 1) THEN sQ <= 0; ELSIF (CLKevent and CLK = 1) THEN sQ <= sD; END IF; END PROCESS; END FlipFlopDArch;

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


El CLEAR y PRESET se suelen colocar junto a las entradas a fin de indicar que son seales sncronas

CLEAR CLK

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FlipFlopD IS PORT ( sD, CLK: IN std_logic; sClearH: IN std_logic; sQ: OUT std_logic); END FlipFlopD;

ARCHITECTURE FlipFlopDArch OF FlipFlopD IS BEGIN PROCESS (CLK, sClearH) BEGIN IF (CLKevent and CLK = 1) THEN IF (sClearH = 1) THEN sQ <= 0; ELSE sQ <= sD; END IF; END IF; END PROCESS; END FlipFlopDArch;

10

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo 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 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; --Seal 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

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

7.3.3 CONTADORES
Se trata de dispositivos que en su salida presentan una cuenta que se actualiza mediante la seal de reloj. Ej_7: Contador de N bits.
Q 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; --Seal de reloj. svQ: INOUT std_logic_vector(iNAncho-1 DOWNTO 0)); END ContadorNb;

--Vector Salida

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 realimentacin se pone svQ como INOUT. END IF; END PROCESS; END ContadorNbArch;

EJERCICIO PROPUESTO AL ALUMNO: CONTADOR UP/DOWN


12

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

Ej_8: Contador de N bits con RESET y carga paralelo sncrona (LOAD#).


C7C0

LOAD CLK
RESET

S7S0

Si LOAD = 0 Los biestables se cargan con los valores C7C0 y se muestra en la salida. LOAD = 1. Se produce una cuenta ascendente sobre S7S0.

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; --Seal de Reloj. sLoadL: IN std_logic; -- Seal de Carga. sResetH: IN std_logic; -- Seal 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 -- Anlisis 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

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

7.3.4 REGISTROS DE DESPLAZAMIENTO.


Es un registro de N bits con una disposicin para recorrer sus datos almacenados por una posicin de bit en cada activacin de la seal de reloj.
D CLK
CLK

D CLK

D CLK

D 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; --Seal de Reloj. sEntrada: IN std_logic; -- Seal de Entrada. svSalida: OUT std_logic_vector(iNAncho-1 DOWNTO 0)); END RegistroDespl;

--Vector Salida

ARCHITECTURE RegistroDesplArch OF RegistroDespl IS --Seal 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 -- Aplicacin del operador concatenacin 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; -- Actualizacin de la seal de salida. END PROCESS; END RegistroDesplArch;

14

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

Ej_10: Registro de desplazamiento de 8 bits configurable. Se pide que disee un registro de desplazamiento con seal de RESET, dos seales de entrada (Izquierda y Derecha) y posibilidad de carga de datos (D7D0) que, en funcin de los valores de unas lneas de seleccin en las que aparece un nmero codificado sobre 3 bits (S2S0), presente el comportamiento siguiente: S2 0 0 0 0 S1 0 0 1 1 S0 0 1 0 1 Funcionalidad Retencin (Hold) Carga Desp. Derecha Desp. Izquierda. S2 1 1 1 1 S1 0 0 1 1 S0 0 1 0 1 Funcionalidad Desp. Circular a Dcha. Desp. Circular a Izda. Desp. Aritm. a Dcha. Desp. Aritm. a Izda.

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY RegistroConf IS PORT (CLK, sResetH, sEntIzda, sEntDcha: IN std_logic; svSeleccion: IN std_logic_vector(2 DOWNTO 0); svDatos: IN std_logic_vector(7 DOWNTO 0); svQ: OUT std_logic_vector(7 DOWNTO 0)); END RegistroConf;

ARCHITECTURE RegistroConfArch OF RegistroConf IS --Seal auxiliar. SIGNAL svAux: std_logic_vector(7 DOWNTO 0); BEGIN PROCESS(CLK, sResetH, svAux) BEGIN --Primero se realiza la comprobacin del RESET IF (sResetH = 1) THEN svAux<=(OTHERS=>0); -Inicializacin asncrona. ELSIF (rising_edge(CLK)) THEN

-- Aplicacin de la MACRO conv_integer para aumentar la legibilidad CASE conv_integer(svSeleccion) IS WHEN 0 => NULL;--Retencin. WHEN 1 => svAux<= svDatos;--Carga. WHEN 2 => svAux<= sEntDcha &svAux(7 DOWNTO 1);-Despl. Dcha. WHEN 3 => svAux<= svAux(6 DOWNTO 0)& sEntIzda;-Despl. Izda. WHEN 4 => svAux<= svAux(0)&svAux(7 DOWNTO 1);-Despl. Circular Dcha. WHEN 5 => svAux<= svAux(6 DOWNTO 0)& svAux(7);-Despl. Circular Izda. WHEN 6 => svAux<= svAux(7)&svAux(7 DOWNTO 1);-Despl. Aritm. Dcha. WHEN 7 => svAux<= svAux(6 DOWNTO 0)& 0;--Despl. Aritm. Izda. WHEN OTHERS => NULL;--Prevencin frente a valores atpicos. END CASE; END IF; svQ <= svAux; -- Actualizacin de la seal de salida. END PROCESS; END RegistroConfArch;

15

Diseo de Sistemas Electrnicos-DB4

Unidad 7. Diseo de Sistemas Secuenciales

7.4 EJEMPLO DE APLICACIN: DIVISOR DE FRECUENCIA.


1

T
CLK

Q CLK
X1

T CLK

Q
X2

T CLK

Ej_11 Divisor de frecuencia por 8 (23).


-- Descripcin del divisor de frecuencia. ENTITY DivisorFrec8 IS PORT (sCLK: IN std_logic; svSalida: INOUT std_logic); END DivisorFrec8; ARCHITECTURE DivisorFrec8Arch OF DivisorFrec8 IS --Descripcin del componente a usar (Flip-Flop). COMPONENT FlipFlopT PORT (CLK, sT: IN std_logic; sQ: INOUT std_logic); END COMPONENT; --Seales auxiliaries SIGNAL sX1, sX2: std_logic; BEGIN FF0: FlipFlopT PORT MAP(CLK=>sCLK, sT=>1, sQ=>sX1); FF1: FlipFlopT PORT MAP(CLK=> sX1, sT=>1, sQ=>sX2); FF2: FlipFlopT PORT MAP(CLK=> sX2, sT=>1, sQ=> svSalida); END DivisorFrec8Arch;

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -- Descripcin del Biestable T. ENTITY FlipFlopT IS PORT (CLK, sT: IN std_logic; sQ: INOUT std_logic); END FlipFlopT; ARCHITECTURE FlipFlopTArch OF FlipFlopT IS BEGIN PROCESS(CLK, sT) BEGIN IF (rising_edge(CLK)) THEN IF (sT = 1) THEN sQ<= not sQ; ELSE sQ<= sQ; END IF; END IF; END PROCESS; END FlipFlopTArch;

16

También podría gustarte