Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guia Flip Flop VHDL PDF
Guia Flip Flop VHDL PDF
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
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
⋅2⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
7.1 INTRODUCCIÓN
ELEMENTO
DE MEMORIA
⋅3⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
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.
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:
⋅4⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
7.3.1 BIESTABLES
S Q J Q
R Q K Q
⋅5⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
S Q
R Q
BIESTABLE S-R
S R Q*
0 0 Q
0 1 0
1 0 1
1 1 No Valido
⋅6⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
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;
⋅7⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
CLK
⋅8⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
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’
⋅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
⋅10⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
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.
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;
⋅11⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
7.3.3 CONTADORES
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;
⋅12⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
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;
⋅13⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
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
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;
⋅14⋅
Diseño de Sistemas Electrónicos-DB4 Unidad 7. Diseño de Sistemas Secuenciales
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
‘1’ ‘1’ Q
‘1’ T Q T Q T
⋅16⋅