Introdução Um flip-flop é um circuito lógico capaz de manter os valores de suas saídas independentemente de alterações nos valores de entrada, ou seja, compreendendo um estado de “memória”. Este é o elemento que permite a transição da lógica combinacional para a lógica sequencial.Existem vários tipos de flip-flops: Astáveis, Biestáveis e Monoestáveis.Astável: É um flip-flop que compreende 2 estados instáveis e que muda periodicamente (período T) e espontaneamente de um estadopara o outro.Biestável: Ter dois estados estáveis. Em lógica, isso se traduz nos estados lógicos “1” ou “0”.Monoestável: Possui apenas um estado estável, sendo o outro estado temporário.Existem dois tipos de flip-flops: assíncronos e síncronos. Os flip-flops síncronos têm uma entrada de relógio, o que não é o caso dos flip-flops assíncronos.Flip-flops assíncronos– O roqueiro RS– A Trava DFlip-flops síncronos– O roqueiro D– O interruptor JK Qual é a diferença entre um flip-flop e uma porta lógica? Um flip-flop é um circuito lógico capaz de manter os valores de suas saídas independentemente de alterações nos valores de entrada, ou seja, compreendendo um estado de “memória”. Este é o elemento que permite a transição da lógica combinacional para a lógica sequencial. Um flip-flop geralmente é composto de várias portas lógicas. Aqui está um exemplo com o flip-flop D: Qual é a diferença entre uma alavanca e uma trava? A principal diferença entre um flip-flop e um latch é que o flip-flop verifica as entradas, mas só altera a saída em momentos definidos pelo sinal de clock ou qualquer outro sinal de controle, enquanto o latch verifica as entradas continuamente e responde imediatamente às alterações nas entradas. Sommaire masquer 1 Introdução 1.1 Qual é a diferença entre um flip-flop e uma porta lógica? 1.2 Qual é a diferença entre uma alavanca e uma trava? 2 Flip-flop D 2.1 Como funciona o flip-flop D? 3 Flip-flop JK Flip-flop D Agora veremos um flip-flop D com reinicialização assíncrona. Para isso, usaremos uma entrada de dados para os dados que você deseja comunicar. Precisamos de um relógio (clk) porque ele é um flip-flop síncrono. Finalmente, a função de reset para passar os dados de d para q ou para resetar o flip-flop. Como funciona o flip-flop D? Se o reset for 1, a saída q assume o valor 0.Se a redefinição for 0, então transmitimos o valor vindo de d com q a cada tique do relógio. 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; Aqui está o resultado da simulação: 1º tique do relógio: O relógio está alto, o reset também, então o sinal de entrada d não pode passar para o sinal de saída q. Flip-flop JK O flip-flop JK é um tipo de flip-flop biestável, o que significa que ele tem dois estados estáveis distintos. Seu nome, “JK”, vem das letras associadas aos seus principais portos de entrada: J e K.Quando J e K têm valores diferentes, o flip-flop JK muda de estado de acordo com uma sequência bem definida. Se J for alto (1) e K for baixo (0), o flip-flop assumirá o estado “SET” (1). Se J for baixo (0) e K for alto (1), o flip-flop assumirá o estado “RESET” (0). Se J e K forem ambos altos (1), o flip-flop alternará entre os estados com cada pulso de clock. 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; Aqui está o resultado da simulação: