UNIVERSIDAD DE EL SALVADOR
FACULTAD DE INGENIERIA Y ARQUITECTURA INGENIERIA ELECTRICA
MATERIA: SISTEMAS DIGITALES I
DOCENTE GERMAN
ESTUDIANTES ROMERO GRANADOS, GERSON BENEDICTO RG13039 OLIVA HERNANDEZ, MIGUEL ANGEL
OH13007
FECHA DE ENTREGA martes, 16 de junio de 2015
1
Índice
Pág. Introducción .
.
.
.
.
.
.
.
.
3
Objetivos
.
.
.
.
.
.
.
.
.
4
Desarrollo
.
.
.
.
.
.
.
.
.
5
Observaciones
.
.
.
.
.
.
.
.
24
Conclusiones
.
.
.
.
.
.
.
.
25
2
Introducción
Los Flipflops son multivibradores capaces de permanecer en uno de dos estados posibles durante un tiempo indefinido en ausencia de perturbaciones, es decir, por una señal de reloj (clk). Esta característica es sumamente útil en cuanto a electrónica digital para asi memorizar información, cambiarla o reiniciar el circuito hecho. Los FlipFlops son capaces de tener dos estados presentes y mantenerlos hasta que llega una señal de reloj que le indica que deberá cambiar. Tambien son conocidos como BIESTABLES, en general estos multivibradores son utilizados para la creación de contadores ya sean estos de manera ascendente (UP) o de manera descendente(DOWN), a su vez dependiendo del tipo de entradas los FFs se dividen en: - Asincronos - Sincronos
Que se explicaran mas adelante en el ppresente trabajo, por lo general las entradas de control asíncronas prevalecen sobre las síncronas y se usan normalmente en unidades llamadas "registros", para el almacenamiento de datos numéricos binarios.
3
Objetivos
-
General: a) Conocer el funcionamiento de los flipflops para la elaboración de relojes digitales usando distintas combinaciones de entrada, y a su vez el análisis de circuitos mediante tablas de excitación.
-
Especificos: a) Usar los flipflops para la construcción de un reloj de 24 horas mediante contadores síncronos y asíncronos. b) Simular el comportamiento de los FFs en circuito elaborado en TINA
4
FLIP – FLOPS DISPARADOS POR FLANCO
Los Flip – Flops son dispositivos síncronos, de dos estados, también conocidos como multivibradoresbiestables. Un Flip - Flop es muy diferente a un Latch ya que estos están diseñados para trabajar con niveles en cambio los FFs a trabajar con flancos o cambios de estado, es decir, sus salidas cambiaran dependiendo del tipo de flanco que se escoja ya sea de subida o de bajada formados por la señal de reloj. Como se muestra acontinuacion:
D
Q
D
C
Q
C Q
(a) Positive edge-triggered
Q
(b) Negative edge-triggered
FLIP-FLOP (S-R) El flip-flop RS síncrono opera en conjunción con un reloj, en otras palabras opera sincronizadamente. Cuando S está a nivel ALTO, y R está a nivel BAJO, la salida Q se pone a nivel ALTO con el flanco de disparo del pulso de reloj, pasando el Flip-Flop al estado SET.
S R CLK
Q Q ̃
Comentarios
NC NC
No cambio
0
0
X
0
1
↑
0
1
RESET
1
0
↑
1
0
SET
1
1
↑
1
1
Condición no válida
5
FLIP-FLOP TIPO D
El flip-flop D es uno de los FF más sencillos. Su función es dejar pasar lo que entra por D, a la salida , después de un pulso del reloj. Es, junt con el FF JK, uno de los flip-flopsm s comunes con reloj, además resulta m y útil cuando se necesita almacenar un único bit de datos (1 o 0).
FLIP-FLOP J-K
El flip-flop J-K es una m zcla entre el flip-flop S-R y el flip-flop T. Esto ocurre de la siguiente manera: En J=1, K=1 actúa como Flip-flop T De otra forma, actúa como flip-flop S-R Este Flip-Flop es idénti o al de un S-R en las condiciones de peración SET, RESET y de permanen ia en estado NO Cambio. La diferencia está en que el Flip-Flop J-K no tiene condición no válida como ocurre en el S-R.
6
ENTRADAS ASÍNCRONAS DE INICIALIZACIÓN Y BO
RADO
Cuando se están utilizando flip-flops en la construcción de circuit s, es necesario poder control r el momento en el que un FF empieza funcionar y el valor con el que inicia su secuencia. Para esto, los flip-flops cuentan con dos entradas que le permite al diseñador seleccionar los valores ini iales del FF y el momento en el que e pieza a funcionar. Estas entradas son llamadas en Inglés: Clear y Preset.
-
Clear - inicializa
en cero sin importar entradas o reloj (
-
Preset - inicializa Q en 1 sin importar entradas o reloj (
). ).
Para ambas entradas, si reciben el valor de:
-
0 : inicializan el F en el valor correspondiente.
-
1: el flip-flop oper normalmente
Si queremos que el Fl ip-Flop funcione síncronamente, debe os desactivar estas entradas colocándolas en un nivel ALTO.
7
Flip Flop JK
Código VHDL entityffjk is port( j, k, clk, set, reset : in bit; q, q_neg : out bit); endffjk; architecturejk of ffjk is signalpre_q : bit; begin process(set, reset, clk) begin if (set='0' and reset='0') then ifclk='1' then if (j='0' and k='1') then pre_q<= '0'; elsif (j='1' and k='0') then pre_q<= '1'; elsif (j='1' and k='1') then pre_q<= not pre_q; end if; end if; elsif (set='0' and reset='1') then pre_q<= '0'; elsif (set='1' and reset='0') then pre_q<= '1'; end if; end process; q <= pre_q; q_neg<= not pre_q; endjk;
8
Capturas del Funcionamiento
9
FlipFlop RS
Código VHDL entityffsr is port( s, r, clk, set, reset : in bit; q, q_neg : out bit); endffsr; architecturesr of ffsr is signalpre_q : bit; begin process(set, reset, clk) begin if (set='0' and reset='0') then ifclk='1' then if (s='0' and r='1') then pre_q<= '0'; elsif (s='1' and r='0') then pre_q<= '1'; end if; end if; elsif (set='0' and reset='1') then pre_q<= '0'; elsif (set='1' and reset='0') then pre_q<= '1'; end if; end process; q <= pre_q; q_neg<= not pre_q; end sr;
10
Capturas del Funcionamiento
11
FlipFlop D
Código VHDL entityffd is port( d, clk, set, reset : in bit; q, q_neg : out bit); endffjk; architecture d of ffd is signalpre_q : bit; begin process(set, reset, clk) begin if (set='0' and reset='0') then ifclk='1' then if d='0' then pre_q<= '0'; elsif d='1' then pre_q<= '1'; end if; end if; elsif (set='0' and reset='1') then pre_q<= '0'; elsif (set='1' and reset='0') then pre_q<= '1'; end if; end process; q <= pre_q; q_neg<= not pre_q; end d;
12
Capturas del funcionamiento
13
FlipFlop T
Código VHDL
entityfft is port( t, clk, set, reset : in bit; q, q_neg : out bit); endfft; architecturearch_t of fft is signalpre_q : bit; begin process(set, reset, clk) begin if (set='0' and reset='0') then ifclk='1' then ift='1' then pre_q<= not pre_q; end if; end if; elsif (set='0' and reset='1') then pre_q<= '0'; elsif (set='1' and reset='0') then pre_q<= '1'; end if; end process; q <= pre_q; q_neg<= not pre_q; endarch_t;
14
Funcionamiento
15
Contador asíncrono mod 10 UP/DOWN : = 0 → = 1 →
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
A Qa Qb Qc Qd Pa Ca Pb Cb Pc Cc Pd Cd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 X 0 1 0 X 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 X X X X 0 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 X X X X 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 X 0 0 1 0 1 X 0
Ecuaciones: = = =
16
Capturas Funcionamiento
17
Contador síncrono mod 10 UP/DOWN A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
QA QB QC QD 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
QA* QB* QC* QC* 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 X XXX X XXX X XXX X XXX X XXX X XXX 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 X XXX X XXX X XXX X XXX X XXX X XXX
JA KA 0 X 0 X 0 X 0 X 0 X 0 X 0 X 1 X X 0 X 1 X X X X X X X X X X X X 1 X 0 X 0 X 0 X 0 X 0 X 0 X 0 X X 1 X 0 X X X X X X X X X X X X
JB KB 0 0 0 1 X X X X 0 0 X X X X X X 0 0 0 0 X X X X 1 0 X X X X X X
X X X X 0 0 0 1 X X X X X X X X X X X X 1 0 0 0 X X X X X X X X
JC KC 0 1 X X 0 1 X X 0 0 X X X X X X 0 X X X 1 0 X X 1 0 X X X X X X
X X 0 1 X X 0 1 X X X X X X X X X 0 1 0 X X 1 0 X X X X X X X X
JD KD 1 X 1 X 1 X 1 X 1 X X X X X X X 1 X 1 X 1 X 1 X 1 X X X X X X X
X 1 X 1 X 1 X 1 X 1 X X X X X X X 1 X 1 X 1 X 1 X 1 X X X X X X
Ecuaciones: ̅ + = ̅ + = ̅ + = ̅ + =
+ = ̅ = + = = 1
18
Reloj digital de 24 horas Se usara un contador mod 3, mod 6, mod 10
Código VHDL para contador MOD 3 libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_arith.all; ENTITY counter3 IS PORT ( clk, set, reset : IN std_logic; QA, QB : OUT std_logic); END counter3; ARCHITECTURE MOD3 OF counter3 IS SIGNAL pre_q: unsigned(0 to 1); BEGIN PROCESS(clk, set, reset) BEGIN IF reset='1' THEN pre_q<= "00"; ELSIF (clk='1') THEN pre_q<= pre_q + 1; ELSIF (pre_q="11") THEN pre_q<= pre_q + 1; ELSIF (set='1') THEN pre_q<= pre_q + 1; END IF; END PROCESS; QA <= pre_q(0); QB <= pre_q(1); END MOD3;
19
Código VHDL para contador MOD 6 libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_arith.all; ENTITY counter6 IS PORT ( clk, set, reset : IN std_logic; QA, QB,QC : OUT std_logic); END counter6; ARCHITECTURE MOD6 OF counter6 IS SIGNAL pre_q: unsigned( 0 to 2); BEGIN PROCESS(clk, set, reset) BEGIN IF reset='1' THEN pre_q<= "000"; ELSIF (clk='1') THEN pre_q<= pre_q + 1; ELSIF (pre_q="110") THEN pre_q<= pre_q + 2; ELSIF (set='1') THEN pre_q<= pre_q + 1; END IF; END PROCESS; QA <= pre_q(0); QB <= pre_q(1); QC <= pre_q(2); END MOD6;
20
Código VHDL para contador MOD 10 libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_arith.all; ENTITY counter10 IS PORT ( clk, set, reset : IN std_logic; QA, QB, QC, QD : OUT std_logic); END counter10; ARCHITECTURE MOD10 OF counter10 IS SIGNAL pre_q: unsigned(0 to 3); BEGIN PROCESS(clk, set, reset) BEGIN IF reset='1' THEN pre_q<= "0000"; ELSIF (clk='1') THEN pre_q<= pre_q + 1; ELSIF (pre_q="1010") THEN pre_q<= pre_q + 6; ELSIF (set='1') THEN pre_q<= pre_q + 1; END IF; END PROCESS; QA <= pre_q(0); QB <= pre_q(1); QC <= pre_q(2); QD <= pre_q(3); END MOD10;
21
Funcionamiento
22
23
24
Observaciones
1) Tina casua problemas al momento de simular el trabajo con FFs.
2) Es difícil aplicar la teoría de querer hacer trabajar a un FFs ya elaborado para que este trabaje a menor capacidad en TINA
3) Si se desea crear o elaborar un contador en TINA, resulta más factible hacerlo con contadores asíncronos, ya que s construcción es más fácil.
25
Conclusiones
1) El uso de los FFs para poder realizar un conteo mediante una señal de reloj, facilita la creación de relojes dijitales que muestran las horas, minutos y segundos.
2) Los FFs son una herramienta muy útil en el mundo de la informática digital, permitiendo asi ordenar de manera ascendente o descendente una cantidad de datos en binario.
PREGUNTAS DE INVESTIGACION:
Investigue las librerías de ALTERA, que permiten usar flip-flop ya diseñados, escriba el código necesario para usar estos componentes
architecturearchitff of tffis beginprocess (clk) beginif (clk'event and clk = '1') then if (t = '1') then q <= not(q); else q <= q; endif; endif; endprocess; endarchitff; ese es un flipflop ya simulado Si la entrada de control t esta a nivel lógico alto el flipflop bascula, si esta a nivel bajo, mantiene su valor anterior.
26
Investigue algunas formas de crear un tren de pulsos.
el generador q se usa son tablas de verdad de modo asi generar el diagrama Dibujamos la tabla de verdad para el diseño, para esto utilizamos el Diagrama de pulsos y la ecuacion general del FlipFlop JK: Las columnas A(t+1) y B(t+1) son las que se obtiene a partir del diagrama de pulsos. Por ejemplo en UP los primeros valores de A = A(t) = 1 y B = B(t) = 0 le corresponden a A(t+1) = 1 y B(t+1) =1, es decir, le corresponde el siguiente valor, o valor en t+1, y asi sucesivamente hasta completar todos los valores.
¿Es posible generar con un 555 un tren de pulsos con Duty-Cicle de 50%? Si su respuesta es sí, ¿Cómo se hace? Si su respuesta es no ¿por qué?
la respuesta es si El temporizador 555 fue introducido al mercado en el año 1971 (hace más de 30 años!!!!.) por la empresa SigneticsCorporation con el nombre: SE555/NE555 y fue llamado "The IC Time Machine" (el Circuito integrado máquina del tiempo"), que en esos momentos era el único integrado de su tipo disponible. Hoy día sigue tan vigente como entonces y tiene múltiples aplicaciones en los mas variados entornos y cometidos. Como hemos visto anteriormente podemos generar con el NE555 un pulso de forma que la relación entre el tiempo que permanece en alto y el que lo está en bajo o DutyCycle es configurable. Esto se conoce como PWM o Pulse WidthModulation o modulación del ancho del pulso.
Investigue el uso de las librerías en VHDL existentes en VHDL para simplificar el trabajo de codificación usado decodificadores, codificadores, multiplexores, demultiplexores y sumadores
Hasta ahora se han visto varios elementos del lenguaje, como pueden ser las entidades, las arquitecturas, los paquetes, etc. Cuando se realiza una descripción en VHDL se utilizan estas unidades, en uno o más f icheros, éstos se denominan ficheros de diseño. Posteriormente, estos ficheros serán compilados para obtener una librería o biblioteca de diseño, de forma que esta biblioteca contiene los elementos que componen el circuito. La biblioteca donde se guardan los resultados de la compilación se denomina work. Una librería se compone de dos partes bien diferenciadas, dependiendo de las unidades que la formen. Por un lado, están las unidades primarias, que corresponderán a entidades, paquetes y archivos de configuración. Mientras
27
que las unidades secundarias serán arquitecturas y cuerpos de paquetes. Por lo tanto, se puede sacar la conclusión de que cada unidad secundaria deberá estar asociada con una unidad primaria. Al realizar una compilación se analizarán las unidades que vayan apareciendo en el texto. Por consiguiente, es importante establecer un orden lógico de las distintas unidades, para que de esta forma se puedan cumplir las dependencias existentes entre las mismas. La forma que toma la librería una vez compilada es muy diversa; dependiendo de la herramienta de compilación utilizada así será el resultado obtenido, esto se debe a que en VHDL no existe un estándar para crear bibliotecas. Como ejemplo se muestra a continuación la declaración de un package que contiene a dos componente, un contador y un decodificador. --Primero se declaran las librerías que se van a emplear libraryieee; use ieee.std_logic_1164.all; usework.std_arith.all; --Empieza la declaración del package "UNO" package uno iscomponentcountport( clk,reset:in bit; conta :buffer std_logic_vector(1 downto 0)); endcomponent; componentdecoderport ( seleccion :in std_logic_vector(1 downto 0); enable1,enable2:in bit; salida :outstd_logic_vector(3 downto 0)); endcomponent; endpackage; --Declaración de las estidadeslibraryieee; use ieee.std_logic_1164.all; usework.std_arith.all; usework.uno.all; entitycountisport ( clk,reset:in bit; conta:bufferstd_logic_vector(1 downto 0)); endcount; architecturearchicount of countisbegin contador :process (clk,reset) beginif (reset='1') thenconta<= (others => '0') ; elsifclk'event and clk='1' thenconta<= conta + 1; endif; endprocess contador; endarchicount; --Declaración de las arquitecturas --Descripcion del decodificador 3/8 (74ls138) libraryieee;
28
use ieee.std_logic_1164.all; usework.uno.all; entitydecoderisport ( seleccion :in std_logic_vector(1 downto 0); enable1,enable2:in bit; salida :outstd_logic_vector(3 downto 0)); enddecoder; --Descripción del decodificador architecturearchidecoder of decoderisbegindecodificador:process(seleccion,enable1,enable2) beginif enable2='1' then salida<=(others=>'0'); elsif enable2='0' and enable1='0' then salida<=(others => '0'); elsif(enable1='1') then case seleccioniswhen "00" => salida <= "0001"; when "01" => salida <= "0010"; when "10" => salida <= "0100"; when "11" => salida <= "1000"; whenothers => salida <="1111"; end case; endif; endprocess decodificador; endarchidecoder; Para poder hacer uso, de cualquier componente de elpackage "uno" (el decodificador o el contador),es necesario que primero se incluya la sentencia: usework.uno.all;
29