Processing math: 100%

Cursos / Automação Industrial / Sistemas Digitais / Aula

arrow_back Aula 18 - Roteiro Prático da Aula 09

Construindo um Flip-Flop JK

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
Tabela 1 - Tabela do Flip-Flop JK

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.

  • Expressão 01:((CLKevent)and(CLK=1))
  • Expressão 02:((CLKevent)and(CLK=0))

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.

x
1
        library ieee;
2
        use ieee.std_logic_1164.all;
3
4
        --Entidade--
5
        entity flipflopJK is
6
        port(J, K, clk: in std_logic;
7
        Q, notQ: inout std_logic);
8
        end flipflopJK;
9
10
        --Arquitetura--
11
        architecture ffJK of flipflopJK is
12
        begin
13
        process(J, K, clk)
14
        begin
15
        if(clk'event and clk='1') then
16
        if(J='0' and K='0') then
17
        Q <= Q;
18
        notQ <= notQ;
19
        elsif(J='1' and K='0') then
20
        Q <= '1';
21
        notQ <= '0';
22
        elsif(J='0' and K='1') then
23
        Q <= '0';
24
        notQ <= '1';
25
        elsif(J='1' and K='1') then
26
        Q <= not Q;
27
        notQ <= not notQ;
28
        end if;
29
        end if;
30
        end process;
31
        end ffJK;
32
    
33
    
Código 1

Versão 5.3 - Todos os Direitos reservados