aad64ebc953ab9cf02601a62b9ec4233

Projeto Contador Síncrono 2021/2

Projeto deste semestre:

projeto_sync_dig2_2021_2

Como resolver?

1) Quantos FF's?

Solução:

Considerações iniciais: o contador proposto possui 6 estados. 6 estados => 3 FF's. 3 FF's. permitem 23=8 estados diferentes, isto significa que 2 estados (ou combinações de contagem) não fazem parte da sequencia prevista para contagem. Estes estados/combinações podem ser usados como condições "don't care" durante a realização do projeto.

As combinações binárias ou estados que não são atingidas pelo circuto usando os 3 FF's, são os estados: 0 e 5.

2) Como continuar?

Solução: Levantar tabela de transição.

A tabela de transição relaciona como o contador parte de certo estado atual, q(t) e evolui para o próximo estado, Q(t+1), à cada novo pulso ativo de clock e dependendo do nível lógico da variável M. Para simplificar o projeto é mais prático considerar a variável M que controla forma como esta contador funciona, como sendo a MSB (mais significativa), assim, a tabela que relaciona q(t)Q(t+1) é mais fácil de se construída, além do que, fica dividida entre a forma como o contador deve se comportar quando M=0 e quando M=1. Outro detalhe no momento da confecção desta tabela (de transição): os estados atuais do circuito são relacionados seguindo a sequencia numérica crescente tradicional, não a forma como o contador se comporta. Isto exige alguma atenção no momento de completar as colunas Q(t+1) (você deve considerar o nível lógico da entrada M e as condições atuais de contagem, q(t)). Note que este circuito vai fazer uso de 3 FF's, assim, esta tabela relaciona: Mq2(t)q1(t)q0(t)Q2(t+1)Q1(t+1)Q0(t+1); a fim de simplificar esta representação, vamos simplesmente escrever na tabela as colunas |Mq2q1q0||Q2Q1Q0|.

Em resumo esta tabela (de transição) é necessária para que possamos estabelecer a forma como devem ser ajustadas as entradas de cada FF adotado (no caso, FF's D) para que o circuito realize cada uma das transições (de estado) desejadas: qi(t)Qi(t+1)|Di(t).

Num primeiro momento, a tabela de transição fica igual com a representada abaixo:

RefMq2 q1 q0Q2 Q1 Q0d2d1d0
000 0 0X X XXXX
100 0 11 1 1   
200 1 01 1 0   
300 1 11 0 0   
401 0 00 0 1   
501 0 1X X XXXX
601 1 00 1 1   
701 1 10 1 0   
810 0 0X X XXXX
910 0 10 1 0   
1010 1 00 1 1   
1110 1 11 1 1   
1211 0 00 0 1   
1311 0 1X X XXXX
1411 1 01 0 0   
1511 1 11 1 0   

Terminando/completando a tabela:

q(t)Q(t+1)

Considerando a tabela de transição do FF adotado teremos:

q(t)Q(t+1)D(t)000011100111

Nota-se que para "programar" o FF-D, basta simplesmente "copiar" na entrada D, o próximo estado que o mesmo deve assumir, Q(t+1). No caso do FF-JK seria diferente, mas optamos pelo FF-D para não quer levantar uma tabela de transição que relaciona 6 colunas de saída: 3×FFs×2 entradas (J e K).

Completando então a Tabela de transição do circuito:

RefMq2 q1 q0Q2 Q1 Q0d2d1d0
000 0 0X X XXXX
100 0 11 1 1111
200 1 01 1 0110
300 1 11 0 0100
401 0 00 0 1001
501 0 1X X XXXX
601 1 00 1 1011
701 1 10 1 0010
810 0 0X X XXXX
910 0 10 1 0010
1010 1 00 1 1011
1110 1 11 1 1111
1211 0 00 0 1001
1311 0 1X X XXXX
1411 1 01 0 0100
1511 1 11 1 0110

Lembrando que qualquer linha incorreta relacionada acima, vai levar a um comportamento incorredo do circuito.

Continuando...

3) Levantando as equações para as entradas de controle dos FFs adotados:

Através de Mapas de Karnaugh para cada um dos FF's:

mapa_k_d2

mapa_k_d1

mapa_k_d0

Esta solução, baseada em Mapas de Karnaugh, pressupõe que serão usadas portas lógicas básicas. Isto leva a um total de:

Total somente para a parte de comando dos FF's: 6 x CI's + CI para os 3 x FF's D (com saída Q).

Lembrando que queremos usar o CI 74LS175 (Quad FF type D), à exemplo do que já foi usado em semestre anterior, para outro contador síncrono "diferente", ver: https://fpassold.github.io/Digitais_2/2020_1/projeto_contador_sincrono_2020_1.html:

Segue o Datasheet da Motorola para 74LS175:

74LS175_motorola_pag1

Revela:

74LS175_motorola_detalhe

4) Mais considerações para o projeto...

Podemos usar a pastilha 74LS175, mas... existe um porém, se esta pastilha for usada, só conseguimos inicializar o circuito no estado: q2q1q0=000(2)=010 e percebe-se que justamente este estado não está previsto neste projeto.

Supondo que ativamos o "Master Reset" do 74LS175 quando o circuto é recém alimentado fazendo uso de um circuito RC, somos obrigados à analizar os Mapas de Karnaugh anteriores para prever como o circuito se comportará quando colocado no estado inicial "0".

A questão é:

Então somos obrigados à prever como o circuito se comporta quando for inicializado no estado "0".

As situações à serem verificadas são as seguintes:

Então, analizando os Mapas de Karnaugh e agrupamentos realizados para cada entrada dos FF's, temos:

Podemos resumir todo este comportamento num diagrama de estados final:

projeto_sync_dig2_2021_2_b

Note que esta sequencia incomum caso o circuito seja inicializado em "0" também ocorre com a pastilha comercial 74LS190 quando a mesma é inicializada (usado PL = "Parallel Load") com o estado "12" por exemplo:

74ls190_motorola_state_diagram

No caso desta pastilha se foi realizado o "PL" com q(t)=12(10), e o mesmo estiver ajustado para contar de maneira crescente, a seguinte sequencia de estados será assumida: seq_74190_start_12 E se estiver no modo descrente, esta pastilha vai realizar: seq_74190_down_12

Então o fato de eventualmente o circuito apresentar um comportamento inicial estranho não desabona o projeto. O importante é garantir que se os FF's internos da pastilha 74LS175 forem inicializados com uma borda ascendente de "Master Reset", que o circuito evolua para a sequência de estados esperada.

5) Últimas considerações...

Porém... Uma opção que temos para evitar esta inicialização algo confusa e considerando que só podemos iniciar os FF's do nosso circuito no estado "0" (uso do pino de Master Reset da pastilha 74LS175), uma opção mais interessante e possível já que estamos realizando o projeto, é definir explicitamente quais os próximos estados desejados para o nosso circuito depois que os FF's iniciam todos resetados.

Ou seja, ao invés de deixar a "própia sorte", poderíamos "forçar" as transições iniciais e realizar algo como:

Ou seja, significa que queremos agora fazer (diagrama de estados final):

projeto_sync_dig2_2021_2_c

Isto significa que temos que alterar algumas linhas na nossa tabela de transição do circuito para "forçar" estas transições iniciais...

Até aqui em 08/10/2021.


Continuando o projeto em 15/10/2021.

Considerando como podemos implementar o circuito de comando dos FF's...

Ao invés de gastar 6 CI's apenas com portas lógicas básicas necessárias para propiciar o comando desejado aos FF's-D, poderíamos implementar as equações necessárias para D2, D1 e D0 usando DEC ou MUX. Neste caso, "programamos" as tabelas verdade necessárias para as entradas D da forma que queremos (incluindo as transições iniciais para o estado inicial "0").

A solução usando DEC, implica, usar 1× CI DEC de 4 para 16 linhas (uma pastilha de 24 pinos) mais:

Resumindo, além do DEC serão necessárias + 3 pastilhas (AND/NAND) de 8 entradas (existente comercialmente), totalizando uma solução que empregaria: 1× 74LS175 (4× FF's) + 1 CI DEC 4/16 + 3 CI's AND/NAND(8) = 5 pastilhas).

A solução usando MUX exigiria um MUX de 16 canais de saída para cada FF, também uma pastilha "grande" (de 24 pinos). Mas a "programação" destes MUXes também pode ser realizada usando MUXes de 8 canais de saída (pastilhas "tradicionais" de 14 ou 16 pinos). Neste caso, estariámos empregado: 1× 74LS175 (4× FF's) + 3 CIs MUX 3/8 + 1 CI portas NOT = 5 pastilhas no total.

Optando pela solução usando MUXes:

Optando pela opção 2: Usando MUXES de 8 canais de saída.

Programando os MUXes:

Lembrando a "programação" especial desejado para o circuito quando o mesmo inicia com os FF's resetados (circuito inicia com borda ascendente da entrada Master Reset do CI 74LS175):

estados_ini

0M=04D2D1D0=100(2)=4(10).

0M=11D2D1D0=001(2)=1(10).

Programação do MUX(8) para D2:

Programação do MUX(8) para D1:

MUX_d1

Programação do MUX(8) para D0:

5) Circuito elétrico/lógico final

Parte da pastilha com FF's-D:

circuito_parte_FFs-D

Parte da entrada M e visualização do estado atual:

circuito_entrada_M_monitora_estado

Parte dos MUXes (programação dos comandos dos FF's):

circuito_MUXes

Parte extra (opcional) que organiza um "painel mímico" que visa imitar o digrama de estados proposto para este contador:

circuito_parte_mimica

Alimentação dos CIs:

CI74LS17574LS15174LS0474LS138
Vcc:Pin 16Pin 16Pin 14Pin 16
GND:Pin 8Pin 8Pin 7Pin 8

6) Simulações

As figuras à seguir mostram o diagrama de estados desejado o resultado simulado do circuito:

Simulação iniciando circuito com M=1 :

SimulaçãoDiagrama Estados
cont_sync_dif_2021_2_M_1projeto_sync_dig2_2021_2_d

Simulação iniciando circuito com M=0:

SimulaçãoDiagrama Estados
cont_sync_dif_2021_2_M_0projeto_sync_dig2_2021_2_d

Simulação variando M com circuito em execução:

SimulaçãoDiagrama de Estados
cont_sync_dif_2021_2_M_0_1projeto_sync_dig2_2021_2_d

Lista de Material:


Prof. Fernando Passold, em 15.10.2021.

3ea36808677e22df8531428157e567a7