Introducción Un flip-flop es un circuito lógico capaz de mantener los valores de sus salidas independientemente de los cambios en los valores de entrada, es decir, que comprende un estado de “memoria”. Este es el elemento que permite la transición de la lógica combinacional a la lógica secuencial.Existen varios tipos de flip-flops: Astables, Biestables y Monoestables.Astable: Es un flip-flop compuesto por 2 estados inestables y que conmuta de forma periódica (periodo T) y espontánea de un estado a otro.al otro.Biestable: Que tiene dos estados estables. En lógica, esto se traduce a los estados lógicos “1” o “0”.Monoestable: Que tiene solo un estado estable, el otro estado es temporal.Hay dos tipos de flip-flops: asíncronos y síncronos. Los flip-flops síncronos tienen una entrada de reloj, lo que no es el caso de los flip-flops asíncronos.Flip-flops asíncronos– El balancín RS– El pestillo en forma de DChanclas sincrónicas– El rockero D– El interruptor JK ¿Cuál es la diferencia entre un flip-flop y una puerta lógica? Un flip-flop es un circuito lógico capaz de mantener los valores de sus salidas independientemente de los cambios en los valores de entrada, es decir, que comprende un estado de “memoria”. Este es el elemento que permite la transición de la lógica combinacional a la lógica secuencial. Un flip-flop suele estar compuesto de varias puertas lógicas. He aquí un ejemplo con el flip-flop D: ¿Cuál es la diferencia entre un interruptor y un pestillo? La principal diferencia entre un flip-flop y un latch es que el flip-flop verifica las entradas pero sólo cambia la salida en los momentos definidos por la señal de reloj o cualquier otra señal de control, mientras que el latch verifica las entradas continuamente y responde inmediatamente a los cambios de entrada. Sommaire masquer 1 Introducción 1.1 ¿Cuál es la diferencia entre un flip-flop y una puerta lógica? 1.2 ¿Cuál es la diferencia entre un interruptor y un pestillo? 2 Flip-flop D 2.1 ¿Cómo funciona el flip-flop D? 3 Flip-flop JK Flip-flop D Ahora veremos un flip-flop D con reinicio asincrónico. Para ello utilizaremos un input de datos con los datos que desea comunicar. Necesitamos un reloj (clk) porque es un flip-flop sincrónico. Por último la función de reinicio para pasar los datos de d a q o para reiniciar el flip-flop. ¿Cómo funciona el flip-flop D? Si el reinicio es 1, entonces la salida q toma el valor de 0.Si el reinicio es 0, entonces transmitimos el valor proveniente de d con q en cada tic del reloj. LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY bascule_D IS PORT (d, clk, rst: IN STD_LOGIC; q: OUT STD_LOGIC); END bascule_D; ARCHITECTURE comportement OF bascule_D IS BEGIN PROCESS (clk, rst) BEGIN IF (rst='1') THEN q <= '0'; ELSIF (clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; END comportement; Aquí está el resultado en simulación: Primer tic del reloj: el reloj está alto, el reinicio también, por lo que la señal de entrada d no puede pasar a la señal de salida q. Flip-flop JK El flip-flop JK es un tipo de flip-flop biestable, lo que significa que tiene dos estados estables distintos. Su nombre, “JK”, proviene de las letras asociadas a sus principales puertos de entrada: J y K. Cuando J y K tienen valores diferentes, el flip-flop JK cambia de estado según una secuencia bien definida. Si J es alto (1) y K es bajo (0), el flip-flop tomará el estado “SET” (1). Si J es bajo (0) y K es alto (1), el flip-flop tomará el estado “RESET” (0). Si J y K son ambos altos (1), el flip-flop alternará entre estados con cada pulso de reloj. library ieee; use ieee.std_logic_1164.all; entity Bascule is port(J,K,Clk,Set, Reset : in std_logic; Q, Q_bar : out std_logic); end Bascule; architecture bascule_JK of Bascule is signal SIG : std_logic; signal JK : std_logic_vector (1 downto 0); begin JK(1) <= J; JK(0) <= K; process(Clk, Set, Reset) begin if (Reset = '0'and Set = '0') then SIG <= '0'; elsif (Reset = '0' and Set = '1') then Sig <= '0'; elsif (Reset ='1' and Set ='0') then Sig <='1'; elsif (Reset = '1' and Set ='1') then if (Clk'event and Clk ='0') then case JK is when "00" => SIG <= SIG; when "01" => SIG <= '0'; when "10" => SIG <= '1'; when "11" => SIG <= not SIG; when others => SIG <= '-'; end case; else SIG <= SIG; end if; end if; end process; Q <= SIG; Q_bar <= not SIG; end bascule_JK; Aquí está el resultado en simulación: