Suponha que queiramos construir um contador síncrono capaz de executar a seguinte sequência de contagem:
Obs.: A variável serve para ajustar o sentido da contagem. Funcionaria como a entrada de um CI 74LS190.
Projeto ?
Notamos que o maior valor assumido nesta contagem é e o menor valor é , o que significa que FF's bastam para resolver este circuito. Resta escolher que tipo de FF adotar. Se usarmos FF´s-JK será necessário deduzir equações (circuitos). Se optarmos por FF´s-D, teremos que deduzir apenas 1 circuito (equação) por FF.
Seque tabela de sequência de contagem deste contador:
xxxxxxxxxx
Ref | m q2 q1 q0 | Q2 Q1 Q0 | d2 d1 d0 | Obs: q(t) --> Q(t+1)
----+------------+----------+----------+---------------------
0 | 0 0 0 0 | X X X | X X X | 0 --> X
1 | 0 0 0 1 | X X X | X X X | 1 --> X
2 | 0 0 1 0 | X X X | X X X | 2 --> X
----+------------+----------+----------+---------------------
3 | 0 0 1 1 | 1 0 0 | 1 0 0 | 3 --> 4
4 | 0 1 0 0 | 1 0 1 | 1 0 1 | 4 --> 5
5 | 0 1 0 1 | 1 1 0 | 1 1 0 | 5 --> 6
6 | 0 1 1 0 | 1 1 1 | 1 1 1 | 6 --> 7
7 | 0 1 1 1 | 0 1 1 | 0 1 1 | 7 --> 3
----+------------+----------+----------+---------------------
8 | 1 0 0 0 | X X X | X X X | 0 --> X
9 | 1 0 0 1 | X X X | X X X | 1 --> X
10 | 1 0 1 0 | X X X | X X X | 2 --> X
----+------------+----------+----------+---------------------
11 | 1 0 1 1 | 1 1 1 | 1 1 1 | 3 --> 7
12 | 1 1 0 0 | 0 1 1 | 0 1 1 | 4 --> 3
13 | 1 1 0 1 | 1 0 0 | 1 0 0 | 5 --> 4
14 | 1 1 1 0 | 1 0 1 | 1 0 1 | 6 --> 5
15 | 1 1 1 1 | 1 1 0 | 1 1 0 | 7 --> 6
Lembrando que a tabela de transição do FF-D é:
xxxxxxxxxx
q(t) --> Q(t+1) | D
----------------+---
0 ---> 0 | 0
0 ---> 1 | 1
1 ---> 0 | 0
1 ---> 1 | 1
Seguem os Mapas de karnaught e equações para as entradas dos FF´s adotados neste projeto:
Isto implica usar: 1 OR(4) + 3 AND(2) + 3 NOT (a portas NOT geram: , e ).
Implica usar: 1 OR(5) + 5 AND(3) + 1.
Implica usar: 1 OR(3) + 1 AND(2) + 1 AND(3).
Total:
Um total de 8 pastilhas TTL.
Próximo passo: desenhar o circuito lógico (diagrama elétrico).
Mas... poderíamos ter usado o Logisim para realizar esta parte do projeto (a eletrônica digital combinacional necessária para comandar os FF's): arquivo: projeto_2024_1.circ . Neste caso, esta ferramenta nos sugere:
D2: | D1: | D0: |
---|---|---|
Percebemos que a solução sugerida para está melhor (implica: 1 OR(4) + 4 AND(3)).
O Logisim termina sugerindo o seguinte circuito para a eletrônica combinacional de comando dos FF's:
Obs.: Este circuito lógico, principalmente a eletrônica combinacional associada com a entrada (FF-1), exige um circuito algo grande.
Detalhes
Isto é:
Resposta:
Considerando a lógica de controle dos FF's o circuito sugerido pelo Logisim, notamos que:
Caso do circuito partir em 0:
Caso :
Caso :
Caso do circuito partir em 1:
Caso :
Caso :
Caso do circuito partir em 2:
Caso :
Caso =1.
Resumindo, podemos compor o seguinte diagrama de estados final para este circuito:
Outras soluções de circuito para lógica de controle:
Lembramos que podemos sinterizar uma função lógica combinacional usando MUX ou DEC. Se optarmos por MUX, seria necessário um MUX com 4 entradas de seleção (correspondendo as variáveis: , , e ), de 16 canais (uma pastilha algo grande, com 24 pinos), ou até podemos adaptar a solução para um MUX de 8 canais e usar a varíavel mais significativa, para completar a adaptação para circuito combinacional usando um MUX menor (de 8 canais; 16 pinos).
Temos então que deduzir a "programação" de cada um dos MUXes de 8 canais, um para cada circuito combinacional ncessário aqui (um para a entrada do FF-0, outro para entrada do FF-1 e o terceiro MUX associado com a entrada do FF-2).
Faremos isto na próxima aula (10/05/2024) e tentaremos simular este circuito no Proteus.
Obs.: para acessar estes videos eventualmente será necessário você autenticar sua conta @upf.br.
Continuação (aula de 10/05/2024)...
Resolvendo o circuito usando
Note que neste caso, todas as transições de estado são "programadas", incluindo as "don´t care", ou seja, antes, tínhamos o projeto assim:
Transições Definidas | Transições "don´t care" |
---|---|
Agora necessitamos definir o que acontece se o circuito parte destes estados, porque não podemos programar as entras , e do MUX com um nível lóligo indeterminado
Neste caso, foi optado (deliberadamente) por definir como o circuito deve continuar à partir dos estados anteriores, resultando em:
Programando os MUXes:
xMUX para d2:
| | S2 S1 S0 <-- Entradas Select do MUX
Ref | M | q2 q1 q0 | Q2 Q1 Q0 | d2 | Obs | Entradas MUX
-----+---+----------+----------+-----+---------------+-------------
0 | 0 | 0 0 0 | 1 1 1 | 1 | 0 --> 7 (M=0) | I0 = 1
1 | 0 | 0 0 1 | 1 1 1 | 1 | 1 --> 7 (M=0) | I1 = 1
2 | 0 | 0 1 0 | 1 1 1 | 1 | 2 --> 7 (M=0) | I2 = 1
-----+---+----------+----------+-----+---------------+-------------
3 | 0 | 0 1 1 | 1 0 0 | 1 | 3 --> 4 (M=0) | I3 = 1
4 | 0 | 1 0 0 | 1 0 1 | 1 | 4 --> 5 (M=0) | I4 = /M
5 | 0 | 1 0 1 | 1 1 0 | 1 | 5 --> 6 (M=0) | I5 = 1
6 | 0 | 1 1 0 | 1 1 1 | 1 | 6 --> 7 (M=0) | I6 = 1
7 | 0 | 1 1 1 | 0 1 1 | 0 | 7 --> 3 (M=0) | I7 = M
====================================================================
8/0 | 1 | 0 0 0 | 1 0 0 | 1 | 0 --> 4 (M=1)
9/1 | 1 | 0 0 1 | 1 0 0 | 1 | 1 --> 4 (M=1)
10/2 | 1 | 0 1 0 | 1 0 0 | 1 | 2 --> 4 (M=1)
-----+---+----------+----------+-----+---------------+-------------
11/3 | 1 | 0 1 1 | 1 1 1 | 1 | 3 --> 7 (M=1)
12/3 | 1 | 1 0 0 | 0 1 1 | 0 | 4 --> 3 (M=1)
13/5 | 1 | 1 0 1 | 1 0 0 | 1 | 5 --> 4 (M=1)
14/6 | 1 | 1 1 0 | 1 0 1 | 1 | 6 --> 5 (M=1)
15/7 | 1 | 1 1 1 | 1 1 0 | 1 | 7 --> 6 (M=1)
xMUX para d1:
| | S2 S1 S0 <-- Entradas Select do MUX
Ref | M | q2 q1 q0 | Q2 Q1 Q0 | d1 | Obs | Entradas MUX
-----+---+----------+----------+----+---------------+-------------
0 | 0 | 0 0 0 | 1 1 1 | 1 | 0 --> 7 (M=0) | I0 = /M
1 | 0 | 0 0 1 | 1 1 1 | 1 | 1 --> 7 (M=0) | I1 = /M
2 | 0 | 0 1 0 | 1 1 1 | 1 | 2 --> 7 (M=0) | I2 = /M
-----+---+----------+----------+----+---------------+-------------
3 | 0 | 0 1 1 | 1 0 0 | 0 | 3 --> 4 (M=0) | I3 = M
4 | 0 | 1 0 0 | 1 0 1 | 0 | 4 --> 5 (M=0) | I4 = M
5 | 0 | 1 0 1 | 1 1 0 | 1 | 5 --> 6 (M=0) | I5 = /M
6 | 0 | 1 1 0 | 1 1 1 | 1 | 6 --> 7 (M=0) | I6 = /M
7 | 0 | 1 1 1 | 0 1 1 | 1 | 7 --> 3 (M=0) | I7 = 1
==================================================================
8/0 | 1 | 0 0 0 | 1 0 0 | 0 | 0 --> 4 (M=1)
9/1 | 1 | 0 0 1 | 1 0 0 | 0 | 1 --> 4 (M=1)
10/2 | 1 | 0 1 0 | 1 0 0 | 0 | 2 --> 4 (M=1)
-----+---+----------+----------+----+---------------+-------------
11/3 | 1 | 0 1 1 | 1 1 1 | 1 | 3 --> 7 (M=1)
12/4 | 1 | 1 0 0 | 0 1 1 | 1 | 4 --> 3 (M=1)
13/5 | 1 | 1 0 1 | 1 0 0 | 0 | 5 --> 4 (M=1)
14/6 | 1 | 1 1 0 | 1 0 1 | 0 | 6 --> 5 (M=1)
15/7 | 1 | 1 1 1 | 1 1 0 | 1 | 7 --> 6 (M=1)
xMUX para d0:
| | S2 S1 S0 <-- Entradas Select do MUX
Ref | M | q2 q1 q0 | Q2 Q1 Q0 | d0 | Obs | Entradas MUX
-----+---+----------+----------+----+---------------+-------------
0 | 0 | 0 0 0 | 1 1 1 | 1 | 0 --> 7 (M=0) | I0 = /M
1 | 0 | 0 0 1 | 1 1 1 | 1 | 1 --> 7 (M=0) | I1 = /M
2 | 0 | 0 1 0 | 1 1 1 | 1 | 2 --> 7 (M=0) | I2 = /M
-----+---+----------+----------+----+---------------+-------------
3 | 0 | 0 1 1 | 1 0 0 | 0 | 3 --> 4 (M=0) | I3 = M
4 | 0 | 1 0 0 | 1 0 1 | 1 | 4 --> 5 (M=0) | I4 = 1
5 | 0 | 1 0 1 | 1 1 0 | 0 | 5 --> 6 (M=0) | I5 = 0
6 | 0 | 1 1 0 | 1 1 1 | 1 | 6 --> 7 (M=0) | I6 = 1
7 | 0 | 1 1 1 | 0 1 1 | 1 | 7 --> 3 (M=0) | I7 = /M
==================================================================
8/0 | 1 | 0 0 0 | 1 0 0 | 0 | 0 --> 4 (M=1)
9/1 | 1 | 0 0 1 | 1 0 0 | 0 | 1 --> 4 (M=1)
10/2 | 1 | 0 1 0 | 1 0 0 | 0 | 2 --> 4 (M=1)
-----+---+----------+----------+----+---------------+-------------
11/3 | 1 | 0 1 1 | 1 1 1 | 1 | 3 --> 7 (M=1)
12/4 | 1 | 1 0 0 | 0 1 1 | 1 | 4 --> 3 (M=1)
13/5 | 1 | 1 0 1 | 1 0 0 | 0 | 5 --> 4 (M=1)
14/6 | 1 | 1 1 0 | 1 0 1 | 1 | 6 --> 5 (M=1)
15/7 | 1 | 1 1 1 | 1 1 0 | 0 | 7 --> 6 (M=1)
Obs.: durante resolução sem aula, a programação para as linhas Ref = 12, 13 e 15 estava equivocada!
Diagrama elétrico e simulação:
Este circuito ( contador_diferente_2024_1.pdsprj - Proteus 8.13 SP0 ) ocupa simplesmente 5 pastilhas.
Segue uma simulação:
Detalhe: a pastilha 74LS175 não permite um "Parallel Load", isto é, não permite inicializar seus FF´s em qualquer estado. Temos disponível apenas o Master Reset (pino ).
O Proteus permite forçar a inicialização da pastilha 74LS175, se, depois de selecionarmos a mesma (botão direito do mouse sobre a pastilha), selecionamos Propriedades e alteramos o valor da caixa de texto "Inicial Output State of Lath" para o valor desejado (no caso, por padrão, estão o valor ). Ver figura abaixo:
Ou podemos optar por criar um circuito usando pastilhas 74LS74 + outras portas lógicas básicas para incorporar uma função similar ao "Parallel Load":
Mais ums poucas modificações no circuito anterior e então teremos:
Esta última solução ( circuito: contador_diferente_2024_1_PL.pdsprj ) exige 8 pastilhas.
Fernando Passold, em 03/05/2024.