Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Automação Industrial / Sistemas Digitais / Aula
Como visto nas aulas anteriores, o circuito flip-flop (FF) serve como base para a construção de circuitos de armazenamento. O Flip-Flop JK é um dos exemplos dessa classe de circuitos de armazenamento, podendo ser de borda de subida ou borda de descida. Aqui vamos implementar o FF JK com borda de subida, que funciona de acordo com a tabela 01.
J | K | Q | ¯Q |
0 | 0 | Q | ¯Q |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | ¯Q | Q |
Considerando Q′ o valor anterior de Q. Para ocorrer essa atribuição dos valores de Q e ¯Q é necessário que ocorra uma borda de subida do clock (CLK) do circuito, ou melhor, o CLK passe do valor ‘0’ para ‘1’. A linguagem de descrição de hardware VHDL tem uma função específica para sentir essa mudança no clock, chamada de “event”.
A função “event” é aplicada a um sinal e retorna verdadeiro quando ocorre qualquer mudança no sinal. Veja nas duas expressões abaixo como sentir quando ocorre uma borda de subida ou uma borda de descida no sinal CLK.
A expressão 01, acima, tem duas condições, uma que retorna verdadeiro quando ocorre uma mudança no sinal CLK, realizada pela função “event”, e outra que verifica se o sinal CLK é o valor ‘1’ naquele momento. Essa expressão realiza verificação de uma borda de subida no sinal CLK. Verifique que a expressão 02 implementa uma borda de descida no sinal CLK.
Agora que você já sabe como implementar uma borda de subida ou descida analise o código 01, dado abaixo, que implementa um circuito do FF JK.
library ieee;
use ieee.std_logic_1164.all;
--Entidade--
entity flipflopJK is
port(J, K, clk: in std_logic;
Q, notQ: inout std_logic);
end flipflopJK;
--Arquitetura--
architecture ffJK of flipflopJK is
begin
process(J, K, clk)
begin
if(clk'event and clk='1') then
if(J='0' and K='0') then
Q <= Q;
notQ <= notQ;
elsif(J='1' and K='0') then
Q <= '1';
notQ <= '0';
elsif(J='0' and K='1') then
Q <= '0';
notQ <= '1';
elsif(J='1' and K='1') then
Q <= not Q;
notQ <= not notQ;
end if;
end if;
end process;
end ffJK;
Versão 5.3 - Todos os Direitos reservados