Part III - Instituto Superior Técnico

Propaganda
Sistemas Digitais (Part III)
Page 1 of 111
Sistemas Digitais (Part III)
Page 2 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 3 of 111
16aº Projecto
Esta é a primeira sessão dedicada à Síntese de Circuitos Sequenciais Síncronos, isto é, ao desenho de Circuitos
Sequenciais com flip-flops recebendo directamente impulsos de relógio da mesma fonte... Tal como as demais
sessões, ir-se-á partir de um Projecto concreto…
Considere-se um condutor que, para abrir a porta da viatura, recorre a um dispositivo de controlo remoto: clicao, e ele emite repetidamente, por rádio frequência (RF), e ao ritmo do relógio, a sequência de bits ‘1011’.
Ao lado, apresenta-se o diagrama temporal representativo da sequência referida – e o objectivo é precisamente
desenhar um circuito sequencial síncrono capaz de o gerar.
O essencial na Síntese de Circuitos Sequenciais Síncronos é discernir os Estados que o circuito pode assumir –
e como é que de um deles se transita para os outros. No caso entre mãos, é claro que o circuito vai passando
ciclicamente por quatro estados, denominem-se eles de {A, B, C e D}. Mais ainda: em cada momento, tanto a
evolução do circuito (por outras palavras: qual o estado seguinte?) como a saída, seja ‘Z’, dependem só do estado
em que o circuito se encontra. Um circuito assim diz-se autónomo: não contando, é claro, com o sinal de relógio,
não há quaisquer entradas externas, o seu estado é a única “entrada” de que a saída depende.
Em Projectos não tão simples, será exigir muito ao intelecto humano discernir sem mais quais os Estados
possíveis do circuito, e a relação entre eles – pelo que a praxis recomendável é começar pelo desenho do seu
Diagrama de Estados. Este deve, aliás, ser considerado o ponto crítico no desenho de um Circuito sequencial
síncrono: o que se lhe segue é automático – já que não será difícil conceber software que, recebendo como input
tal Diagrama, indique como se deverão interligar flip-flops e chips combinatórias para concretizar o circuito.
1. Considere-se o momento em que o condutor clica no seu dispositivo de controlo… Conforme ao enunciado,
o circuito deverá ingressar num estado – seja ‘A’ – em que irá produzir ‘1’ na saída; fá-lo-á até ao próximo impulso
de relógio (doravante, substitui-se impulso de relógio por, mais brevemente, clock). Graficamente,
– esse estado representa-se por um círculo nomeado por, embora não obrigatoriamente, uma maiúscula, ‘A’;
– a saída, ‘1’, é indicada no seio do círculo, precedida pelo símbolo ‘/’;
– o caracter inicial do estado é denotado por uma seta dirigida da esquerda para o próprio círculo.
2. Admita-se agora que ocorre um clock. Conforme ao enunciado, o circuito deverá ingressar num novo estado,
‘B’, em que irá produzir ‘0’. Graficamente,
– esse estado e saída representam-se como acima: um círculo nomeado ‘B’, em cujo seio se indica a saída ‘0’;
– a transição, entre os estados ‘A’ e ‘B’, representa-se por uma seta dirigida do círculo ‘A’ para o círculo ‘B’.
3. Com outro clock, o circuito irá ingressar num novo estado, ‘C’, em que irá gerar ‘1’. Intui-se como é que isso
se representa: uma seta dirigida de ‘B’ para um novo círculo, ‘C’, apropriadamente rotulado…
4. E com um novo clock, o circuito irá ingressar num novo estado, ‘D’, continuando a gerar o bit ‘1’. Isso
representa-se por uma seta dirigida de ‘C’ para um novo círculo, ‘D’, adequadamente rotulado…
5. Com o próximo clock, o circuito irá regressar ao estado inicial, ‘A’, continuando a gerar o bit ‘1’. Isso
representa-se por uma seta dirigida do círculo ‘D’ para o círculo ‘A’ …
O diagrama de estados ocupa uma superfície de papel não despicienda, pelo que se prefere convertê-la numa
bem mais compactada Tabela de Estados/Saída. Esta é constituída, de facto, por duas Tabelas:
– uma que indica, para cada estado actual ‘Q(t)‘, qual a saída actual, ‘Z(t)‘;
– e uma outra que indica, para cada estado actual ‘Q(t)‘, qual o estado seguinte, ‘Q(t+1)‘.
Na prática, dispõe-se:
– à esquerda uma coluna, ‘Q(t)‘, onde se listam, linha a linha, os estados que constam no diagrama de estados;
– à direita, duas colunas, ‘Z(t)‘ e ‘Q(t+1)‘, em que, linha a linha, se inscreve a saída e o estado seguinte, tais como
o indicam o diagrama de estados.
Por exemplo, o diagrama de estados indica que, para o estado actual ‘B’, a saída é ‘0’ e o estado seguinte é ‘C’;
isso volve-se em escrever, na linha ‘B’ da Tabela de Estados/Saída: ‘0’ na coluna de ‘Z(t)’ e ‘C’ na coluna ‘Q(t+1)’.
(Na vida real, e para maior segurança, os dispositivos de abertura da porta de viaturas geram sequências mais
longas e, aliás, variáveis; mas, para o fim em vista, basta uma sequência fixa de 4 bits, não é preciso complicar…)
Sistemas Digitais (Part III)
Page 4 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 5 of 111
Síntese Clássica com Flip-Flops T
De posse da Tabela de Estados/Saída, resta concretizá-la mediante flip-flops e chips combinatórios: ANDs,
ORs e NOTs, ou só NANDs, ou só NORs, como se fará adiante, ou decoders e ORs, ou multiplexers, etc…
O método de desenho dito clássico visa usar não mais que o menor número de flip-flops capaz de concretizar a
Tabela. A esse respeito, a Tabela ao lado apresenta quatro estados – do que se deduz que serão necessários, e
suficientes, dois flip-flops, designem-se eles de {Q1, Q0}.
Isso decidido, o passo seguinte é proceder à codificação dos estados – isto é, estabelecer uma correspondência
biunívoca entre cada estado e uma combinação particular de dois bits {Q1 Q0}. Aquela que se privilegia ao lado
usa o CBN (Código Binário Natural); mas há outras possibilidades, nomeadamente o código de Gray… De facto,
há muitas mais maneiras de codificar os 4 estados: após escolher, para codificar ‘A’, um dos 4 pares de bits
possíveis, sobram 3 pares; após escolher, para codificar ‘B’, um desses 3 pares, sobram 2 pares; e após escolher,
para codificar ‘C’, um desses 2 pares, resta 1 par, que será usado para codificar ‘D’: um total, portanto, de 4!=24
possibilidades distintas – que, se suspeitará, conduzem a circuito diferentes! Eles poderão ser mais ou menos
complicados – o que recomenda a praxis de explorar várias possibilidades, visando chegar à solução mais simples.
A etapa seguinte é transformar a Tabela de Estados/Saída na assim designada Tabela de Transições e Saídas –
ou preferivelmente, já antevendo o que seguirá, num Mapa de Karnaugh, vidé ao lado: cada literal {A, B, C, D}
designando um estado é substituído pelo par de bits {Q1 Q0} que o codifica…
Obtida essa Tabela de Transições e Saídas, torna-se viável escrever a expressão simplificada da saída ‘Z’ do
circuito; em geral, usar-se-á o método de Karnaugh, mas no caso presente nem isso é preciso: a expressão da POS
é suficiente…
Resta determinar as expressões simplificadas das entradas dos flip-flops – e isso exige, é claro, precisar o tipo
de flip-flop a usar – e de novo se intui que consoante a escolha, assim se obterão circuitos distintos! Poderão ser
mais ou menos complexos – o que recomenda a praxis de explorar várias possibilidades, visando a mais simples…
Admita-se que, neste Projecto, se opta por flip-flops T (advertindo desde já que a seu tempo, e no contexto de
novos Projectos, serão explorados outros tipos de flip-flops); como auxiliar de memória, apresentam-se ao lado o
diagrama de estados do flip-flop T e a correspondente Tabela de Excitação.
O passo imediato será obter a Tabela de Excitações do circuito: para tal, desdobra-se a Tabela de Transições em
duas Tabelas, uma por cada um dos estados seguintes de {Q1, Q0} - e depois substituem-se os valores nas colunas
‘Q1(t+1)’ e ‘Q0(t+1)’ pelos valores a impor nas entradas {T1, T0} para lograr as transições de estado em causa.
Considere-se, por exemplo, a linha em que Q1=0 e Q0=0. O estado seguinte de ‘Q1’ é ‘0’ e o estado seguinte de
‘Q0’ é ‘1’– e isso remete para a pergunta: para que aconteçam essas “transições” em {Q1, Q0}, como se devem
excitar as entradas dos flip-flops? A resposta da Tabela de Excitação do flip-flop T é: a transição ‘0’→‘0’ logra-se
aplicando ‘0’ na entrada ‘T1’ e a transição ‘0’→‘1’ logra-se aplicando ‘1’ na entrada ‘T0’. São precisamente esses
valores, ‘0’ e ‘1’, que se escrevem nas Tabelas de ‘T1’ e ‘T0’.
A etapa final é deduzir as expressões simplificadas das entradas {T1 e T0} dos flip-flops; em geral, usar-se-á o
método de Karnaugh, mas no caso presente nem isso é preciso, basta um olhar atento…
Conhecidas tais expressões, é hora de desenhar o logigrama do circuito com a geografia habitual:
– entradas à esquerda – o que neste caso, em que não há entradas externas, se reduz a dispor à esquerda os dois
flip-flops, ficando ‘Q1’ (a de maior peso) por baixo de ‘Q0’;
– saídas, que neste caso se reduzem a ‘Z’, à direita;
– à direita dos flip-flops: malha combinatória que produz ‘Z’ e os valores que excitam as entradas {T1 T0}
Ainda que não indispensável, convirá etiquetar as linhas com os nomes das funções (por exemplo, ‘T1’) que
“transportam”;
– setas apropriadas nas linhas em que o fluxo se processa da direita para a esquerda ou de baixo para cima;
– entradas de clock dos flip-flops ligadas à mesma fonte de clocks… No logigrama ao lado, pressupõe-se que
eles são edge-triggered comutando no flanco descendente do relógio – mas também seria válido ter-se escolhido
flip-flops edge-triggered comutando no flanco ascendente do relógio.
Sistemas Digitais (Part III)
Page 6 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 7 of 111
Análise de Circuito com Flip-flops T
Quando um Projectista se engaja no desenho de um circuito, e antes de o materializar de facto, e para evitar
posteriores dissabores, há que “fazer a prova dos nove”: será que o circuito concebido segue mesmo o diagrama de
estados desenhado inicialmente? E este passo de maneira nenhuma se deve omitir!
Essa “conferência” deve ser independente do método usado na síntese do circuito – e na prática suporta-se na
Equação característica dos flip-flops usados, como já se testemunhou algures e agora se volta a aplicar:
O circuito envolve dois flip-flops T – cujos estados se designam de {Q1, Q0}. O primeiro passo na análise do
circuito é, a partir do respectivo logigrama, escrever as expressões algébricas que traduzem o comportamento da
saída do circuito e das entradas dos flip-flops, vidé ao lado.
Tendo em mira o desenho do Diagrama de Estados, o segundo passo é substituir as expressões das entradas dos
flip-flops na equação característica do flip-flop T. O resultado são expressões que exprimem o estado seguinte de
cada flip-flop – em função dos estados dos flip-flops no instante em que ocorre o flanco descendente do relógio.
O terceiro passo é converter tais expressões nas assim denominadas Tabelas de Estado/Saída – que indicam,
para cada combinação das entradas internas {Q1, Q0} num instante ‘t’, a saída ‘Z’ do circuito nesse instante, e, a
ocorrer em ‘t’ o flanco descendente do relógio, os estados dos flip-flops no instante ‘t+1’ seguinte.
No total, existirão três Tabelas, para {Z, Q1 e Q0}:
– à esquerda, dispõem-se duas colunas, representando outros tantos flip-flops, {Q1, Q0};
– estando envolvidos dois flip-flops, e pois que cada um pode assumir dois valores {Q=0 e Q=1}, o circuito
poderá assumir quatro estados distintos, que convirá nomear por códigos binários: {‘00’, ‘01’, ‘10’ e ‘11’}.
O preenchimento das Tabelas não deverá provocar engulhos. As expressões de {Z, Q1 e Q0} são claras:
– ‘Z’ será ‘0’ apenas para a combinação Q1=0 e Q0=1;
– ‘Q1(t+1)‘ é o XOR de Q1(t) e Q0(t), pelo que será ‘1’ apenas quando ‘Q1(t)‘ e ‘Q0(t)‘ forem diferentes;
– e ‘Q0(t+1)‘ é o complemento de ‘Q0(t)‘, pelo que a coluna ‘Q0(t+1)‘ será o complemento da coluna ‘Q0(t)‘.
Resta desenhar o Diagrama de Estados: a cada estado, associa-se um círculo, etiquetado com um código
binário; depois, traçam-se setas rotuladas, descrevendo graficamente a Tabela obtida.
Veja-se como exemplo a primeira linha, relativa ao estado ‘00’: a saída é Z=1, e o estado seguinte será ‘01’;
isso volve-se numa seta dirigida do círculo ‘00’ para o círculo ‘01’. Para denotar que, no estado ‘00’, a saída é
Z=1, o correspondente círculo é rotulado por /1.
É hora de o Projectista comparar o diagrama de estados obtido a partir do logigrama do circuito com o
diagrama de estados que ele inicialmente concebeu – e ficar tranquilo, que o circuito a que chegou está ok: afora os
nomes, o número de estados, a interligação entre eles e as saídas são idênticos…
Uma questão que não é de somenos importância é a seguinte: quando se faz o power-on ao circuito, qual o
estado em que ele ingressa? A resposta é: não se sabe, em particular não se pode pressupor que os estados estão a
‘0’ inicialmente! No Projecto entre mãos, isso não terá provavelmente nenhuma importância: qualquer que seja o
estado inicial, entre {‘00’, ‘01’, ‘10’ e ‘11’}, e afora um eventual período transitório, o circuito acaba por gerar
repetidamente, ao ritmo do relógio, a sequência de bits ‘1011’… Mas haverá Projectos em que isso terá mesmo
importância – pelo que então há que recorrer a entradas assíncronas (Preset e Clear) para obrigar a que o estado
inicial seja um específico.
Sistemas Digitais (Part III)
Page 8 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 9 of 111
16bº Projecto
O 16aº Projecto é um sistema autónomo, isto é: não envolve entradas externas. É hora de avançar para um
Projecto já com uma entrada externa…
Admita-se que a abertura da porta de uma viatura pode ser detonada por um dispositivo de controlo remoto. Ela
dispõe dum receptor de RF cuja saída, seja ‘X’, é uma sucessão indefinida de ‘0’s e ‘1’s… Pretende-se um circuito
sequencial síncrono que reporte a detecção da sequência ‘1011’ (Não se consideram sequências sobrepostas).
O ponto crítico para obter um Circuito sequencial síncrono é o desenho do seu Diagrama de Estados:
1. Considere-se o momento em que se faz o power-on… O circuito nada “sabe” então do que se passou antes –
pelo que será pacífico iniciá-lo a um estado em que irá assinalar ‘0’ na sua saída. Graficamente, esse estado
representa-se por um círculo com um nome significativo, como seja ‘S0’, em cujo seio se indica, precedida pelo
símbolo ‘/’, a saída a assinalar, ‘0’, a ser mantida até ao próximo "clock; o caracter inicial do estado é denotado
por uma seta dirigida da esquerda para o círculo ‘S0’.
2. Recorde-se, entretanto, que tal circuito está recebendo, do receptor de RF, uma sucessão de ‘0’ e ‘1’s…
– admita-se que, logo após o power-on, ele recebe um ‘1’; o circuito pode “julgar” que ele é já o primeiro bit do
padrão ‘1011’ – pelo que irá transitar para um novo estado, em que continuará a gerar ‘0’ (pois só passará a gerar
‘1’ quando houver detectado todo o padrão ‘1011’). Essa situação representa-se por um círculo nomeado ‘S1’ (em
cujo seio se indica a saída ‘0’), e uma seta do círculo ‘S0’ para o círculo ‘S1’;
– mas suponha-se, em alternativa, que o primeiro bit a ser recebido é um ‘0’; então, o circuito irá permanecer
no mesmo estado, ‘S0’ – o que se representa por uma seta do círculo ‘S0’ para ele mesmo.
Em consequência, de ‘S0’ “saem” duas setas. Para distinguir o que motiva aquela dirigida para ‘S1’, ela é
rotulada por X=1, ou, conforme à lei do menor esforço, ‘1’; intui-se que a seta dirigida para ‘S0’ é rotulada por ‘0’.
Repare-se que o estado/círculo ‘S0’ fica assim completamente especificado: estando o circuito nesse estado,
sabe-se qual é então a sua saída, e como evolui o circuito se receber, do receptor de RF, um ‘0’ ou um ‘1’…
3. “Resolvido” o estado ‘S0’, considere-se, então, que o circuito se encontra no estado ‘S1’. Sabe-se qual a sua
saída, resta decidir como evolui ele quando receber, do receptor de RF, um ‘0’ ou um ‘1’; não custa descortiná-lo:
– se ele receber um ‘0’, o circuito pode “julgar” que esse é o segundo bit do padrão ‘1011’ – pelo que irá
transitar para um novo estado, em que irá continuar a assinalar ‘0’. Isso representa-se por um círculo nomeado ‘S10’
(onde se indica a saída ‘0’), e uma seta de ‘S1’ para ‘S10’;
– se, porém, receber um ‘1’, irá concluir que estava errada a suposição de que o ‘1’ precedente era o primeiro
bit do padrão ‘1011’ – mas talvez o ‘1’ que acaba de receber o seja; isso remete para uma seta de ‘S1’ para ‘S1’.
Para clarificar o que motiva as setas “saindo” de ‘S1’, elas são devidamente rotuladas – pelo valor de ‘X’ que
conduz à transição de estados que representam…
4. Considere-se, agora, que o circuito se encontra no estado ‘S10’. Como evolui ele quando receber outro bit?
– se receber um ‘1’, o circuito pode “julgar” que esse é o terceiro bit do padrão ‘1011’ – pelo que irá transitar
para um novo estado, em que irá continuar a gerar ‘0’. Isso representa-se por um círculo nomeado ‘S101’ (onde se
indica a saída ‘0’), e uma seta rotulada por ‘1’ de ‘S10’ para ‘S101’;
– se, porém, receber um ‘0’, concluirá que afinal os bits ‘10’ precedentes não eram o começo do padrão ‘1011’:
tem que regressar ao início – o que remete para uma seta rotulada por ‘0’ de ‘S10’ para ‘S0’.
5. Considere-se, agora, que o circuito se encontra no estado ‘S101’. Como evolui ele quando receber outro bit?
– se receber um ‘1’, o circuito conclui que esse é o quarto bit do padrão ‘1011’ – pelo que irá transitar para um
novo estado, seja ‘S1011’, em que irá assinalar ‘1’. Isso representa-se por um círculo nomeado ‘S1011’ (onde se indica
a saída ‘1’), e uma seta rotulada por ‘1’ de ‘S101’ para ‘S1011’;
– se, porém, receber um ‘0’, concluirá que afinal os bits ‘101’ precedentes não eram o começo do padrão ‘1011’
– mas talvez os últimos ‘10’ o sejam, o que remete para uma seta rotulada por ‘0’ de ‘S101’ para ‘S10’.
6. Considere-se, enfim, que o circuito se encontra no estado ‘S1011’. Como evolui quando receber um outro bit?
– se receber um ‘1’, o circuito pode “julgar” que ele é já o primeiro bit de um novo padrão ‘1011’ – pelo que irá
transitar para ‘S1’. Isso representa-se por uma seta rotulada por ‘1’ de ‘S1011’ para ‘S1’;
– se, porém, receber um ‘0’, concluirá que ainda não começou a receber o padrão ‘1011’: tem que regressar ao
início – o que remete para uma seta rotulada por ‘0’ de ‘S1011’ para ‘S0’…
Com isso, fica completo o Diagrama de Estados – a converter numa Tabela de Estados/Saída, vidé ao lado – em
que há que organizar a Tabela de ‘Q(t+1)’ em duas colunas, correspondendo aos casos em que X=0 e X=1.
Sistemas Digitais (Part III)
Page 10 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 11 of 111
Síntese Clássica com Flip-Flops D
De posse da Tabela de Estados/Saída, a sua concretização segundo o método de desenho dito clássico
acompanha pari passu as etapas seguidas aquando do 16aº Projecto; em particular, e porquanto a Tabela apresenta
cinco estados, deduz-se que serão necessários, e suficientes, três flip-flops, designem-se eles de {Q2, Q1, Q0}.
Isso decidido, o passo seguinte é proceder à codificação dos estados – isto é, estabelecer uma correspondência
biunívoca entre cada estado e uma combinação particular de três bits {Q2 Q1 Q0}. Aquela que se elegeu ao lado
usa o CBN (Código Binário Natural)…
A etapa seguinte é transformar a Tabela de Estados/Saída na assim designada Tabela de Transições e Saídas –
ou preferivelmente, já antevendo o que seguirá, num Mapa de Karnaugh, vidé ao lado: cada nome designando um
estado é substituído pelo trio de bits {Q2 Q1 Q0} que o codifica…
Repare-se que a Tabela de Estados se limita a cinco estados, todavia há oito combinações possíveis de três bits:
sobram três combinações, que de certo modo podem ser consideradas como codificando estados inexistentes – pelo
que as respectivas linhas na Tabela de Transições e Saídas são preenchidas com indiferenças, ‘X’…
Obtida essa Tabela de Transições e Saídas, a aplicação do método de Karnaugh habilita a escrever a expressão
simplificada da saída ‘Z’…
Resta determinar as expressões simplificadas das entradas dos flip-flops – e isso exige, é claro, precisar o tipo
de flip-flop a usar. Admita-se que, neste 16bº Projecto, se opta por flip-flops D; como auxiliar de memória,
apresentam-se ao lado o diagrama de estados do flip-flop D e a correspondente Tabela de Excitação.
O passo imediato será obter a Tabela de Excitações do circuito: para tal, começa-se por desdobrar a Tabela de
Transições em três Tabelas, uma por cada um dos estados seguintes de {Q2, Q1, Q0}. Considerando o que se fez a
propósito do 16aº Projecto, prevê-se que a seguir se deveria proceder à substituição dos valores nas colunas
‘Q2(t+1)’, ‘Q1(t+1)’ e ‘Q0(t+1)’ pelos valores a impor nas entradas {D2, D1 e D0} para lograr as transições de estado em
causa; acontece que, tendo-se agora optado pelo flip-flop D, isso é desnecessário: se se pretende que ele transite
para um estado genérico ‘Q’, o que há a fazer é impor, na sua entrada ’D’, o valor D=Q! Ou seja: as Tabelas de
{D2, D1 e D0} são exactamente iguais às de ‘Q2(t+1)’, ‘Q1(t+1)’ e ‘Q0(t+1)’, não é preciso duplicá-las…
A etapa final é – usando em geral o método de Karnaugh – deduzir as expressões simplificadas das entradas
{D2, D1 e D0} dos flip-flops… e proceder ao desenho do correspondente logigrama com a geografia habitual, vidé
ao lado, em que se pressupõe que os flip-flops são edge-triggered comutando no flanco descendente do relógio.
Uma peculiaridade deste circuito é que a saída, ‘Z’, depende apenas dos estados dos flip-flops: não depende
directamente da entrada, ‘X’! A isso não será alheio, certamente, a decisão de, ao desenhar o Diagrama de Estados
do circuito, seguir o assim denominado modelo de Moore: a saída do circuito é inscrita dentro dos círculos que
representam os estados.
Sistemas Digitais (Part III)
Page 12 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 13 of 111
Análise de Circuito com Flip-flops D
Será que o circuito concebido segue mesmo o diagrama de estados desenhado inicialmente? Eis um passo que
de maneira nenhuma se deve omitir!
Essa “conferência” deve ser independente do método usado na síntese do circuito – e na prática suporta-se na
Equação característica dos flip-flops usados, como já se testemunhou algures e agora se volta a aplicar:
O circuito envolve três flip-flops D – cujos estados se designam de {Q2, Q1, Q0}. O primeiro passo na análise
do circuito é, a partir do respectivo logigrama, escrever as expressões algébricas que traduzem o comportamento
da saída do circuito e das entradas dos flip-flops, vidé ao lado.
O segundo passo é substituir as expressões das entradas dos flip-flops na equação característica do flip-flop D.
O resultado são expressões que exprimem o estado seguinte de cada flip-flop – em função dos estados dos flipflops e da entrada externa ‘X’ no instante em que ocorre o flanco descendente do relógio.
O terceiro passo é converter tais expressões nas assim denominadas Tabelas de Transições/Saída – que
indicam, para cada combinação das entradas internas {Q2, Q1, Q0} num instante ‘t’, a saída ‘Z’ do circuito nesse
instante, e, a ocorrer em ‘t’ o flanco descendente do relógio, os estados dos flip-flops no instante ‘t+1’ seguinte.
No total, existirão quatros Tabelas, para {Z, Q2, Q1 e Q0}:
– à esquerda, dispõem-se três colunas, representando outros tantos flip-flops, {Q2, Q1, Q0};
– e no topo dispõe-se uma linha representando a entrada externa ‘X’;
– estando envolvidos três flip-flops, e pois que cada um pode assumir dois valores {Q=0 e Q=1}, o circuito
poderá assumir oito estados distintos, que convirá identificar por códigos binários: {‘000’, ‘001’, ‘010’, etc.}.
O preenchimento das Tabelas não deverá provocar engulhos. As expressões de {Z, Q2, Q1 e Q0} são claras:
– Z=Q2, pelo que a coluna ‘Z’ será igual à coluna ‘Q2’;
– Q0(t+1) será ‘0’ quando X=0 ou Q1(t)=Q0(t)=1;
– Q1(t+1) será ‘1’ apenas quando Q0(t)=1 e X=0, ou Q1(t)=1 e Q0(t)=0 e X=1;
– Q2(t+1) será ‘1’ apenas quando Q1(t)=Q0(t)=X=1.
O passo seguinte será aglutinar as Tabelas dos estados seguintes dos flip-flops, {Q2, Q1, Q0}, numa única, dita
do estado seguinte do circuito, ‘Q2Q1Q0(t+1)’; veja-se o caso da primeira linha, em que, conforme X=0 ou X=1,
assim advém {Q2=0, Q1=0, Q0=0} ou {Q2=0, Q1=0, Q0=1}; aglutinar significa preencher a primeira linha da nova
Tabela com ‘000’ e ‘001’, respectivamente nas colunas ‘X=0’ e ‘X=1’. Para as outras linhas, o método é o mesmo.
A Tabela obtida pode reescrever-se (embora isso não se mostre ao lado) numa outra, dita de Tabela de Estados,
em que cada trio de bits {Q2 Q1 Q0} é entendido como o código binário de um número, e ele é substituído por um
nome como seja ‘S’ indexado pela representação desse número na base 10; essa Tabela descreve “para que Estado”
evoluem os Estados {S0, S1, S2, etc.} do circuito, à medida que se vai alterando a entrada ‘X’.
Resta desenhar o Diagrama de Estados: a cada estado, associa-se um círculo, etiquetado com um nome (ou
código binário); depois, traçam-se setas rotuladas, descrevendo graficamente a Tabela obtida.
Veja-se como exemplo a primeira linha, relativa ao estado ‘000’: a saída é Z=1, e o estado seguinte será ‘000’
ou ‘001’ conforme o valor de ‘X’; isso volve-se em duas setas: uma de ‘S0’ para ‘S0’ rotulada com X=0, ou,
conforme à lei do menor esforço, ‘0’; e uma outra de ‘S0’ para ‘S1’ rotulada com ‘1’. Para denotar que, no estado
‘000’, a saída é Z=0, o correspondente círculo é rotulado por /0.
É hora de se comparar o diagrama de estados obtido a partir do logigrama do circuito com o diagrama de
estados inicialmente concebido – e constatar que aquele está ok: se se confinar a comparação somente a cinco
estados {S0, S1, S2, S3, S4}, e afora os nomes, são idênticas as saídas e a interligação entre eles…
Há, entretanto, que inquirir: quando se faz o power-on ao circuito, qual o estado em que ele ingressa? A
resposta é: não se sabe! No Projecto entre mãos, isso tem importância: se, ao fazer-se o power-on, o circuito
ingressar no estado S5, S6 ou mesmo S7, o circuito assinalará, de imediato, erroneamente (porquanto ainda se não
recebeu a sequência ‘1011’), o valor ‘1’ na sua saída – pelo que convirá recorrer a entradas assíncronas (Clear)
para obrigar a que o estado inicial do circuito seja S0.
Sistemas Digitais (Part III)
Page 14 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 15 of 111
16cº Projecto
Esta sessão começou por um Projecto sem entradas externas, e progrediu para outro com uma entrada externa,
mas ambos com uma só saída; o aumento da complexidade propõe agora duas entradas externas e duas saídas…
Adivinha-se que, com estas poucas “novidades”, a síntese e análise do logigrama obtido seguirão pari passu a
etapas do 16bº Projecto – pelo que não será de estranhar a referência ao lado “Se sobrar tempo na aula…”.
Admita-se que a abertura da porta de uma garagem pode ser detonada por um dispositivo de controlo remoto: o
condutor clica-o, e ele emite um impulso de curta duração. A porta começará a subir, e assim continuará até um
sensor sinalizar “resistência”: a porta encontra-se então completamente aberta. Para a fechar, o condutor clica
novamente no comando… A porta começará a descer, e assim continuará até o sensor sinalizar “resistência”: a
porta encontra-se então completamente fechada. Em qualquer momento, poderá o condutor interromper o
movimento da porta – clicando no comando; quando, depois, voltar a clicar no comando, a porta regressará à
posição de fechada, independentemente do que estava fazendo no momento em que foi interrompida.
O ponto crítico para obter um Circuito sequencial síncrono é o desenho do seu Diagrama de Estados:
Antes de mais, há que codificar as entradas {C, S} e saídas {M, A} do circuito. Vidé o lado uma possibilidade:
– quando activados, tanto o comando ‘C’ como o sensor ‘S’ emitem impulsos curtos – que se poderão
compreender como um ‘1’ com a duração do período dos clocks, seguido de ‘0’s…
– a porta movendo-se é codificada com M=1, e abrindo-se é codificada com A=1.
1. Considere-se o momento anterior a ter o condutor clicado no seu dispositivo de controlo… A porta estará
fechada: o circuito encontrar-se-á num estado inicial em que o motor deverá estar parado. Esse estado representase por um círculo com um nome significativo, como seja ‘F’ - em cujo seio se indica, precedidas pelo símbolo ‘/’,
as saídas a assinalar, M=0 (que torna ‘A’ irrelevante), a ser mantidas até ao próximo "clock; o caracter inicial do
estado é denotado por uma seta dirigida da esquerda para o círculo ‘F’.
2. Admita-se, então, que o condutor clica no seu comando… Isto é, ocorre C=1 (e S=0, no sentido de que,
estando a porta então parada, o sensor não poderá então sinalizar “resistência”); o motor irá fazer subir a porta.
Essa situação representa-se por um círculo nomeado ‘A:2’ (significando algo como porta meio-aberta), em
cujo seio se indicam as saídas M=1 e A=1 (ou, conforme à lei do menor esforço, ‘11’), e uma seta do círculo ‘F’
para o círculo ‘A:2’, rotulada com C=1 e S=0 (ou, conforme à lei do menor esforço, ‘10’);
3. Algo mais tarde, o sensor sinalizará “resistência”… Isto é, irá ocorrer C=0 e S=1; o motor irá parar a porta.
Essa situação representa-se por um círculo nomeado ‘A’ (significando porta aberta), em cujo seio se indicam as
saídas ‘0X’ (isto é: M=0 e ‘A’ irrelevante), e uma seta do círculo ‘A:2’ para o círculo ‘A’, rotulada com ‘01’ (isto
é: C=0 e S=1);
4. Mais tarde, o condutor irá clicar no comando… Isto é, irá ocorrer C=1 e S=0; o motor irá fechar a porta.
Essa situação representa-se por um círculo nomeado ‘F:2’ (significando porta meio-fechada), em cujo seio se
indicam as saídas ‘10’, e uma seta do círculo ‘A’ para o círculo ‘F:2’, rotulada com ‘10’;
5. Algo mais tarde, o sensor sinalizará “resistência”… Isto é, ocorrerá C=0 e S=1; o circuito irá retornar ao
estado inicial.
Essa situação representa-se por uma seta do círculo ‘F:2’ para o círculo ‘F’, rotulada com ‘01’;
6. Enquanto a porta está abrindo ou fechando, o condutor poderá clicar no comando: poderá ocorrer C=1 e S=0
nos estados ‘A:2’ ou ‘F:2’; o motor deverá parar.
Essa situação pode representar-se por um círculo nomeado ‘P’ (significando porta parada), em cujo seio se
indicam as saídas ‘0X’, e setas dos círculos ‘A:2’ ou ‘F:2’ para o círculo ‘P’, rotuladas com ‘10’ (A menção “pode
representar-se” significa que é possível fazer de outra maneira mais simples, que adiante se aborda)
7. Quando o condutor voltar a clicar no comando, isto é, ocorrer C=1 e S=0, o motor irá fechar a porta.
Essa situação representa-se por uma seta do círculo ‘P’ para o círculo ‘F:2’, rotulada com ‘10’
As transições acima enumeradas encontram-se explicitadas no Diagrama de Estados ao lado – mas muitas mais
combinações das entradas se poderiam congeminar – que todavia lá não estão: o Diagrama está incompletamente
especificado! Pois que as entradas são duas, a sua especificação cabal poderia volver-se em quatro setas “saindo”
de cada estado (isto é: originando um total de 20 setas) – o que tornaria o Diagrama algo como uma ilegível sopa
de esparguete… O mais recomendado será suspender o desenho do Diagrama, e passar directamente à construção
da Tabela de Estados e Saídas: é o que se fará de imediato…
Sistemas Digitais (Part III)
Page 16 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 17 of 111
Síntese Clássica com Flip-Flops D
Considere-se então a porção do Diagrama de Estados já traçada; a partir dela, poder-se-á dar início ao
preenchimento da Tabela de Estados e Saídas, vidé ao lado – onde estão definidas as células correspondentes às
setas naquele traçadas: falta preencher treze células. O resto do preenchimento não deverá provocar engulhos…
1. Quando C=0 e S=0 (isto é, nem o comando nem o sensor sinalizam actividade), o que corresponde à coluna
da Tabela mais à esquerda, intui-se que o estado do circuito não se deve alterar: nomeadamente, se a porta estava
abrindo), continua abrindo e se estava fechada, assim continua… Essa coluna será então uma cópia da coluna ‘Qt’;
2. A ocorrência de S=1 nos estados ‘F’, ‘A’ e ‘P’ (isto é: com a porta imóvel, o sensor sinaliza “resistência”),
deve ser considerada impossível – pelo que devem preencher-se as correspondentes (6) células com ‘X’;
3. Resta preencher duas células – correspondentes aos casos em que C=1 e S=1 quando a porta se encontra
movendo. Ora, S=1 significa “resistência” – pelo que a porta se deve imobilizar; e¸ quando a porta se encontra
movendo, C=1 significa o mesmo: o condutor pretende interromper o movimento da porta… Ou seja: naquelas
duas células, o circuito deve ingressar num estado em que a porta esteja imóvel – mas quanto a isso há três
possibilidades, a saber: ‘F’, ‘A’ e ‘P’. Qual delas deve ser a eleita?
Para o caso em que a porta se está abrindo (em ‘A:2’), será pacífico que a interrupção do seu movimento
conduza o circuito ao estado ‘P’ (mas a escolha do estado ‘A’ seria igualmente válida).
Já para o caso em que a porta se está fechando (em ‘F:2’), a escolha não será tão pacífica… pelo se deverá
considerar o enunciado incompletamente especificado – e acrescentar-lhe: deve ser ignorado o clicar no comando
(para interromper o movimento da porta) se ocorrer exactamente quando ela está a acabar de se fechar.
(Abra-se um parêntesis: esta é uma prática comum; eventualmente, em provas de avaliação, o próprio estudante
será confrontado com ela: poderão elas conter algum enunciado incompletamente especificado, no sentido de ser
omisso relativamente a alguns detalhes - cabendo-lhe então completá-lo, com algumas assunções razoáveis…)
Construída a Tabela de Estados e de Saídas, e optando por recorrer a flip-flops D, os subsequentes passos no
sentido de lograr o correspondente circuito seguirão pari passu o que se fez a propósito do 16bº Projecto…
Porém, e antes de o fazer, convirá olhar cuidadosamente para a Tabela a que se chegou. E desde logo sobressai
a quase igualdade entre as linhas respeitantes aos estados ‘A’ e ‘P’: ambos geram as saídas {M=0 e A=X}, e as
células com os estados seguintes contêm exactamente o mesmo para todas as combinações de {C, S} excepto para
{C=0 e S=0} – e mesmo neste caso o comportamento do circuito em ambos os estados vem a ser o mesmo: o
estado não se altera. Pelo que é lícita deduzir que os estados ‘A’ e ‘P’ são equivalentes: em termos práticos, podem
ser colapsados em um único estado, como seja o próprio ‘A’. Aliás, isso mesmo já poderia ter sido decidido
aquando do traçado do Diagrama de Estados: se o condutor clica no comando quando a porta se está abrindo ou
fechando, o motor deverá parar – mas, em vez de se congeminar um novo estado, ‘P’, poder-se-ia ao invés ter
aproveitado um estado já definido, ‘A’ – que ademais tem a propriedade de, quando se clicar no comando, dele se
transitar para o estado em que a porta se estará fechando, como requerido no enunciado…
Adiante, observar-se-ão outros Projectos em que o desenho do Diagrama de Estados conduz a mais estados do
que os estritamente necessários – no sentido de que envolve estados equivalentes, que por isso mesmo deverão ser
colapsados…
Formalmente, poder-se-ão colapsar dois estados (por isso dito de equivalentes) em um único se, para qualquer
sequência de entradas, as saídas forem rigorosamente as mesmas. Esse colapso pode ser vantajoso, e o Projecto
entre mãos manifesta-o: o Diagrama de Estados envolve 5 estados, o que conduz a um mínimo de 3 flip-flops –
mas a Tabela final a que se chega (após a substituição do nome ‘P’ por ‘A’, e a remoção da linha ‘P’) já só exibe 4
estados, o que se basta em 2 flip-flops! Menos um flip-flop, portanto…
As etapas subsequentes vêm a ser, vidé ao lado:
– a codificação dos 4 estados da Tabela de Estados; ao lado, optou-se pelo CBN (Código Binário Natural);
– o preenchimento da Tabela de Transições do circuito, pela substituição dos nomes dos estados pelos seus
códigos; prevendo o subsequente uso do método de Karnaugh, convirá organizá-la de modo a que a ordem das
combinações das entradas (internas e externas) siga o código binário reflectido;
– a obtenção da Tabela de Excitações do circuito: para tal, começa-se por desdobrar a Tabela de Transições em
duas Tabelas, uma por cada um dos estados seguintes de {Q1, Q0}…
– a dedução das expressões das entradas {D1 e D0} dos flip-flops…
Sistemas Digitais (Part III)
Page 18 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 19 of 111
Análise de Circuito com Flip-flops D
Será que o circuito concebido segue mesmo o diagrama de estados desenhado inicialmente?
A resposta deve ser por um método independente daquele usado na síntese do circuito – e na prática suporta-se
na Equação característica dos flip-flops usados, como já se testemunhou algures e agora se volta a aplicar:
O circuito envolve dois flip-flops D – cujos estados se designam de {Q1, Q0}. O primeiro passo na análise do
circuito é, a partir do respectivo logigrama, escrever as expressões algébricas que traduzem o comportamento das
saídas do circuito e das entradas dos flip-flops, vidé ao lado.
O segundo passo é substituir as expressões das entradas dos flip-flops na equação característica do flip-flop D.
O resultado são expressões que exprimem o estado seguinte de cada flip-flop – em função dos estados dos flipflops e das entradas externas {C, S} no instante em que ocorre o flanco descendente do relógio.
O terceiro passo é converter tais expressões nas assim designadas Tabelas de Transições/Saída – que indicam,
para cada combinação das entradas internas {Q1, Q0} num instante ‘t’, as saídas {M, A} do circuito nesse
instante, e, a ocorrer em ‘t’ o flanco descendente do relógio, os estados dos flip-flops no instante ‘t+1’ seguinte.
No total, existirão três Tabelas, para {Z, Q1 e Q0}:
– à esquerda, dispõem–se duas colunas, representando outros tantos flip-flops, {Q1, Q0};
– e no topo dispõem-se duas linhas representando as entradas externas {C, S};
– estando envolvidos dois flip-flops, e pois que cada um pode assumir dois valores {Q=0 e Q=1}, o circuito
poderá assumir quatro estados distintos, que convirá identificar por códigos binários: {‘00’, ‘01’, ‘10’, etc.}.
O preenchimento das Tabelas não deverá provocar engulhos. As expressões de {Z, Q1 e Q0} são claras:
– M=Q0, pelo que a coluna ‘M’ será igual à coluna ‘Q0’;
– A é o complemento de ‘Q1’, pelo que a coluna ‘A’ será o complemento da coluna ‘Q1’;
– quanto a ‘Q1(t+1)’ e ‘Q0(t+1)’, deixa-se ao leitor conferir o seu preenchimento…
O passo seguinte será aglutinar as Tabelas dos estados seguintes dos flip-flops, {Q1(t+1), Q0(t+1)}, numa única,
dita do estado seguinte do circuito, ‘Q1Q0(t+1)’.
A Tabela obtida pode reescrever-se (embora isso não se mostre ao lado) numa outra, dita de Tabela de Estados,
em que cada par de bits {Q1 Q0} é entendido como o código binário de um número, e ele é substituído por um
nome como seja ‘S’ indexado pela representação desse número na base 10; essa Tabela descreve “para que Estado”
evoluem os Estados {S0, S1, S2, S3} do circuito, à medida que se vão alterando as entradas {C, S}.
Resta desenhar o Diagrama de Estados: a cada estado, associa-se um círculo, etiquetado com um nome (ou
código binário); depois, traçam-se setas rotuladas, descrevendo graficamente a Tabela obtida.
Veja-se como exemplo a primeira linha, relativa ao estado ‘00’: as saídas são {M=0, A=1}, e o estado seguinte
será ‘00’, ‘10’, ‘01’ ou ‘11’ conforme os valores de {C, S}; isso volve-se em quatro setas, respectivamente de ‘S0’
para ‘S0’ (rotulada com ‘00’), de ‘S0’ para ‘S2’ (rotulada com ‘01’), de ‘S0’ para ‘S1’ (rotulada com ‘10’) e de ‘S0’
para ‘S3’ (rotulada com ‘11’). Para denotar que, no estado ‘00’, as saídas são {M=0, A=1}, o correspondente
círculo é rotulado por /01.
Atente-se que no Diagrama há setas com vários rótulos; em particular, a seta de ‘S1’ para ‘S2’ comporta três
rótulos, a saber ‘01’, ‘10’ e ‘11’: isso é preferível a traçar três setas de ‘S1’ para ‘S2’, cada uma com um desses três
rótulos…
É hora de se comparar o diagrama de estados obtido a partir do logigrama do circuito com a Tabela de estados
inicialmente concebida – e constatar que aquele está ok: afora os nomes, são “idênticas” as saídas e a interligação
entre os estados… as aspas em “idênticas” querendo significar que as indiferenças na Tabela se volveram agora em
valores concretos (o que é irrelevante, pois as indiferenças significam situações a não ter em conta).
Há, entretanto, que inquirir: quando se faz o power-on ao circuito, qual o estado em que ele ingressa? A
resposta é: não se sabe! No Projecto entre mãos, isso tem importância: a porta deve inicialmente considerar-se
fechada, isto é, o estado inicial deve ser ‘S0’ – pelo que convirá recorrer a entradas assíncronas (Clear) para
obrigar a que o estado inicial do circuito seja mesmo S0.
Sistemas Digitais (Part III)
Page 20 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Moore)/
Page 21 of 111
Forma Canónica de Moore
Após três exemplos de síntese de circuitos sequenciais síncronos, é hora de abstrair das particularidades…
Um relance aos logigramas obtidos descortina uma arquitectura comum, esquematizada ao lado:
 à esquerda, encontram-se as entradas, a saber:
– se existentes, as entradas primárias ou externas, como seja ‘X’ ou {C, S} (ou outras);
– as entradas secundárias ou internas, que são as saídas dos flip-flops usados: T ou D (ou mesmo SR e JK);
– as entradas assíncronas (Preset e Clear), destinadas a inicializar o circuito a um estado específico;
– uma entrada Clock, por onde se recebem os impulsos de relógio – e que alimenta directamente todos os
flip-flops: trata-se de um circuito sequencial síncrono.
Conforme à convenção seguida neste itinerário, as entradas externas localizam-se por cima das entradas
internas: estas são consideradas as entradas de maior peso.
 à direita, encontra-se a lógica das saídas, isto é: uma malha combinatória, alimentada pelas entradas
internas, que gera as saídas do circuito.
A dedução das suas expressões algébricas passa por preencher as Tabelas de Verdade (ou, preferivelmente,
Mapas de Karnaugh) das saídas em função das entradas internas – que são as saídas dos flip-flops.
A tal lógica das saídas está associado um certo tempo de propagação, seja ‘TZ’, que é o intervalo de tempo que
medeia entre a mudança nos estados dos flip-flops e as mudanças nas saídas.
 entre ambos, encontra-se a lógica do estado seguinte, isto é: uma malha combinatória, alimentada pelas
entradas (externas e internas), que gera os novos valores a aplicar às entradas dos flip-flops, para que eles evoluam
como deve ser.
A dedução das respectivas expressões algébricas passa por preencher as Tabelas de Verdade (ou Mapas de
Karnaugh) das entradas dos flip-flops em função das entradas (externas e internas).
A tal lógica do estado seguinte está associado um certo tempo de propagação, seja ‘TNovasEntradas’, que é o
intervalo de tempo que decorre entre a mudança nos estados dos flip-flops (ou nas entradas externas) e a mudança
nas entradas dos flip-flops.
Os flip-flops são temporalmente caracterizados por um certo tempo de preparação, tsu, e um certo tempo de
propagação, tpHL e tpLH.
Notável nesta arquitectura é que, em cada momento, as saídas dependem directamente só dos estados dos flipflops, que não das entradas externas nesse momento. Ela reflecte o facto de o seu desenho ter seguido o que se
denomina de Modelo de Moore: em termos do Diagrama de estados, ele é caracterizado pelo fato de as saídas
ficarem inscritas dentro dos círculos que representam os estados – por conseguinte independentemente das
entradas externas do circuito, vidé ao lado.
Isso tem uma consequência óbvia: como as saídas dos flip-flops podem mudar somente no próximo flanco de
comutação do relógio, também as saídas dos circuito somente poderão mudar então: elas permanecem inalteradas
durante todo um período de relógio.
Como testemunho disso, veja-se o diagrama temporal da evolução do 16cº Projecto:
– inicialmente, a porta encontra-se fechada: o circuito encontra-se no estado ‘F’, gerando a saída M=0;
– quando o condutor clica no comando, este sinaliza-o forçando C=1 – sem qualquer consequência imediata;
– a consequência só se manifesta no próximo clock: pois que se verifica C=1, o estado do circuito, e após um
certo tempo de propagação {tpHL ou tpLH}, passa a ser ‘A:2’ – gerando, após um tempo de propagação tZ, as saídas
{M=1, A=1};
– quando o sensor assinala “resistência”, ele sinaliza-o forçando S=1 – sem qualquer consequência imediata;
– a consequência manifesta-se no próximo clock: pois que se verifica S=1, o estado do circuito, e após um certo
tempo de propagação {tpHL ou tpLH}, passa a ser ‘A’ – gerando, após um tempo de propagação tZ, a saída M=0.
Moral do Modelo de Morre: ainda que uma entrada mude, as saídas só mudarão após se alterar o estado de
algum flip-flop (e isso somente sucederá no próximo clock); e, depois de mudarem, manter-se-ão assim até ao clock
seguinte.
Sistemas Digitais (Part III)
Page 22 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Mealy)/
Page 23 of 111
17aº Projecto
Abordada já a síntese de circuitos sequenciais síncronos seguindo o denominado modelo de Moore, é hora de
abordar um outro modelo, dito de Mealy – caracterizado por as saídas do circuito, em cada momento, dependerem
dos estados dos flip-flops, e também das entradas externas nesse momento. Tal como as demais sessões, irá
desenrolar-se a partir de um Projecto concreto, que, não por acaso, tem o mesmo enunciado que o 16bº Projecto…
O ponto crítico para obter um Circuito sequencial síncrono é o desenho do seu Diagrama de Estados:
1. Considere-se o momento em que se faz o power-on… O circuito nada “sabe” então do que se passou antes –
pelo que será pacífico forçá-lo a assumir um estado inicial – que se representa por um círculo identificado por um
nome significativo, ‘S0’; o seu caracter inicial é denotado por uma seta dirigida da esquerda para o círculo ‘S0’.
2. Recorde-se, entretanto, que tal circuito está recebendo, do receptor de RF, uma sucessão de ‘0’ e ‘1’s…
– seja ‘0’ ou ‘1’ o primeiro bit a ser recebido, não se pode concluir que se detectou o padrão ‘1011’ – pelo que
a saída será, em qualquer caso, Z=0. Relativamente ao estado que o circuito deverá adquirir após o próximo clock:
se esse primeiro bit for ‘1’, o circuito pode “julgar” que ele é já o primeiro bit do padrão ‘1011’, pelo que irá
transitar para um novo estado – o que se representa por um círculo nomeado ‘S1’ e uma seta do círculo ‘S0’ para o
círculo ‘S1’; mas se for ‘0’, o circuito irá permanecer em ‘S0’ – o que se representa por uma seta de ‘S0’ para ‘S0’.
Em consequência, de ‘S0’ “saem” duas setas. Para distinguir o que motiva aquela dirigida para ‘S1’ e qual a
correspondente saída, ela é rotulada por X=1/Z=0, ou, conforme à lei do menor esforço, ‘1/0’; intui-se que a seta
dirigida para ‘S0’ é rotulada por ‘0/0’.
3. “Resolvido” o estado ‘S0’, considere-se, então, que o circuito se encontra no estado ‘S1’. Qual será a sua
saída, e como evolui ele, quando receber, do receptor de RF, um ‘0’ ou um ‘1’?
– pois que não chega para decidir que se detectou o padrão ‘1011’, a saída será, em qualquer dos casos, Z=0;
– se receber um ‘0’, o circuito pode “julgar” que é o segundo bit do padrão ‘1011’, pelo que transitará para um
novo estado – o que se representa por um círculo nomeado ‘S10’ e uma seta de ‘S1’ para ‘S10’, rotulada por ‘0/0’;
– se, porém, receber um ‘1’, irá concluir que estava errada a suposição de que o ‘1’ precedente era o primeiro
bit do padrão ‘1011’ – mas talvez o ‘1’ que acaba de receber o seja; isso remete para uma seta de ‘S1’ para ‘S1’,
rotulada por ‘1/0’;
4. Considere-se, agora, que o circuito se encontra no estado ‘S10’. Que sucederá quando receber outro bit?
– pois que não chega para decidir que se detectou o padrão ‘1011’, a saída será, em qualquer dos casos, Z=0;
– se receber um ‘1’, o circuito pode “julgar” que ele é o terceiro bit do padrão ‘1011’ – pelo que irá transitar
para um novo estado – o que se representa por um círculo ‘S101’, e uma seta rotulada por ‘1/0’ de ‘S10’ para ‘S101’;
– se, porém, receber um ‘0’, concluirá que afinal os bits ‘10’ precedentes não eram o começo do padrão ‘1011’:
tem que regressar ao início – o que remete para uma seta rotulada por ‘0/0’ de ‘S10’ para ‘S0’.
5. Considere-se, agora, que o circuito se encontra no estado ‘S101’. Que sucederá quando receber outro bit?
– se receber um ‘1’, o circuito conclui que ele é o quarto bit do padrão ‘1011’ – pelo que a saída volver-se-á ‘1’.
E, no próximo clock, irá regressar ao início – o que remete para uma seta rotulada por ‘1/1’ de ‘S101’ para ‘S0’…
– se, porém, receber um ‘0’, concluirá que afinal os bits ‘101’ precedentes não eram o começo do padrão ‘1011’
– mas talvez os últimos ‘10’ o sejam, o que remete para uma seta rotulada por ‘0/0’ de ‘S101’ para ‘S10’.
Com isso, fica completo o Diagrama de Estados – a converter numa Tabela de Estados/Saída, vidé ao lado – em
que ambas as Tabelas, de ‘Q(t+1)’ e ‘Z(t)’, se organizam em duas colunas, correspondentes a X=0 e X=1.
Abra-se um parêntesis: o enunciado afirma “Não se consideram sequências sobrepostas”. Quer dizer: só depois
de findo um padrão ‘1011’ é que pode começar um outro ‘1011’. Se o enunciado admitisse sequências sobrepostas,
então, ‘1011011’ deveria ser entendido como sobreposição de dois padrões: um começando no primeiro bit,
‘1011011’ e outro começando no quarto bit: ‘1011011’ – com o que a saída deveria ser ‘1’ no 4º e no 7º bits! No
diagrama de estados, isso levaria a uma modificação: recebido o quarto bit do padrão, o circuito não retornaria ao
estado inicial ‘S0’, ingressaria, sim, no estado em que “julga” que se recebeu já o primeiro bit, ‘S1’, vidé ao lado.
O leitor poderá agora comparar os diagramas de estado logrados para o mesmíssimo enunciado:
– no modelo de Moore, seguido no 16bº Projecto, ele expande-se por cinco círculos: ‘S0’, ‘S1’, ‘S10’, ‘S101’ e
‘S1011’; a saída que eles forçam é explicitada no seio desses círculos;
– no modelo de Mealy, seguido no 17aº Projecto, ele expande-se por só quatro círculos: ‘S0’, ‘S1’, ‘S10’ e ‘S101’;
as saídas são associadas a setas, isto é, aos pares “estado de onde a seta provêm” e “entrada externa que a motiva”.
Sistemas Digitais (Part III)
Page 24 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Mealy)/
Page 25 of 111
Síntese Clássica com Flip-Flops JK
De posse da Tabela de Estados/Saída, a sua concretização segundo o método de desenho dito clássico
acompanha pari passu as etapas seguidas na precedente sessão; em particular, e porquanto a Tabela apresenta
quatro estados, deduz-se que serão necessários, e suficientes, dois flip-flops, designem-se eles de {Q1, Q0}.
Isso decidido, o passo seguinte é proceder à codificação dos estados – isto é, estabelecer uma correspondência
biunívoca entre cada estado e uma combinação particular de dois bits {Q1 Q0}. Aquela que se elegeu ao lado usa o
CBR (Código Binário Reflectido)…
A etapa seguinte é transformar a Tabela de Estados/Saída na assim designada Tabela de Transições e Saídas –
ou preferivelmente, já antevendo o que seguirá, num Mapa de Karnaugh, vidé ao lado: cada nome designando um
estado é substituído pelo par de bits {Q1 Q0} que o codifica…
Obtida essa Tabela de Transições e Saídas, a aplicação do método de Karnaugh habilita a escrever a expressão
simplificada da saída ‘Z’…
Resta determinar as expressões simplificadas das entradas dos flip-flops – e isso exige, é claro, precisar o tipo
de flip-flop a usar. Admita-se que, neste 17aº Projecto, se opta por flip-flops JK; como auxiliar de memória,
apresentam-se ao lado o diagrama de estados do flip-flop JK e a correspondente Tabela de Excitação.
O passo imediato será obter a Tabela de Excitações do circuito: para tal, começa-se por desdobrar a Tabela de
Transições em duas Tabelas, uma por cada um dos estados seguintes de {Q1, Q0}. A seguir, dever-se-á proceder à
substituição dos valores nas colunas ‘Q1(t+1)’ e ‘Q0(t+1)’ pelos valores a impor nas entradas {J1, K1} e {J0, K0} para
lograr as transições de estado em causa …
Considere-se, por exemplo, a linha em que Q1=0 e Q0=0, e atente-se no que sucede quando X=0. O estado
seguinte de ‘Q1’ é ‘0’ e o estado seguinte de ‘Q0’ é ‘0’– e isso remete para a pergunta: para que aconteçam essas
“transições” em {Q1, Q0}, como se devem excitar as entradas dos flip-flops? A resposta da Tabela de Excitação do
flip-flop JK é: a transição ‘0’→‘0’ logra-se aplicando ‘0’ na entrada ‘J’ (sendo indiferente o que se aplica em ‘K’).
São precisamente os valores ‘0X’ o que se escreve nas Tabelas de {J1, K1} e {J0, K0} para o caso em que X=0.
A etapa final é deduzir as expressões simplificadas das entradas {J1, K1, J0, K0} dos flip-flops… Para tal,
convirá desdobrar cada uma das Tabelas de {J1, K1} e {J0, K0} em duas Tabelas, uma por cada uma das entradas
{J1, K1, J0, K0}.
Considere-se, por exemplo, a linha em que Q1=0 e Q0=0, e atente-se ao que sucede quando X=0: observa-se
{J1K1=0X}, isto é, {J1=0, K1=X}; então, na correspondente posição {Q1=0 e Q0=0 e X=0} a Tabela de ‘J1’ irá
conter ‘0’ e a de ‘K1’ irá conter ‘X’. Procedendo analogamente para as restantes combinações de {Q1 e Q0 e X},
ficarão preenchidas as Tabelas de {J1, K1, J0, K0} – a que depois será hora de aplicar o método de Karnaugh…
(Abra-se um parêntesis: com algum treino, o leitor ficará capaz de passar directamente da Tabela de Transições
do circuito para as Tabelas de {J1, K1, J0, K0})
Enfim, procede-se ao desenho do correspondente logigrama com a geografia habitual, vidé ao lado, em que se
pressupõe que os flip-flops são edge-triggered comutando no flanco descendente do relógio.
Uma peculiaridade deste circuito é que a saída, ‘Z’, depende dos estados dos flip-flops e da entrada, ‘X’! A isso
não será alheio, certamente, a decisão de, ao desenhar o Diagrama de Estados do circuito, seguir o assim
denominado modelo de Mealy: a saída do circuito é inscrita nas setas que representam as transições entre estados
(Em rigor, porém, pode suceder que o projectista tenha seguido o modelo de Mealy – mas pode dar-se o caso de,
para todos os estados, as setas que “saem” de cada um deles patentearem a mesma saída; a ser assim, o método de
Karnaugh conduzirá a uma expressão para a saída que não depende das entradas externas!).
Sistemas Digitais (Part III)
Page 26 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Mealy)/
Page 27 of 111
Análise de Circuito com Flip-flops JK
Quando um projectista se engaja no desenho de um circuito, e antes de o materializar de facto, e para evitar
posteriores dissabores, há que “fazer a prova dos nove”: será que o circuito concebido segue mesmo o diagrama de
estados desenhado inicialmente? E este passo de maneira nenhuma se deve omitir!
Essa “conferência” deve ser independente do método usado na síntese do circuito – e na prática suporta-se na
Equação característica dos flip-flops usados, como já se testemunhou algures e agora se volta a aplicar:
O circuito envolve dois flip-flops JK – cujos estados se designam de {Q1, Q0}. O primeiro passo na análise do
circuito é, a partir do respectivo logigrama, escrever as expressões algébricas que traduzem o comportamento da
saída do circuito e das entradas dos flip-flops, vidé ao lado.
Tendo em mira o desenho do Diagrama de Estados, o segundo passo é substituir as expressões das entradas dos
flip-flops na equação característica do flip-flop JK. O resultado são expressões que exprimem o estado seguinte de
cada flip-flop – em função dos estados dos flip-flops e da entrada ‘X’ no instante em que ocorre o flanco
descendente do relógio.
O terceiro passo é converter tais expressões nas assim denominadas Tabelas de Estado/Saída – que indicam,
para cada combinação das entradas internas e externas {Q1, Q0, X} num instante ‘t’, a saída ‘Z’ do circuito nesse
instante, e, a ocorrer em ‘t’ o flanco descendente do relógio, os estados dos flip-flops no instante ‘t+1’ seguinte.
No total, existirão três Tabelas, para {Z, Q1 e Q0}:
– à esquerda, dispõem-se duas colunas, representando outros tantos flip-flops, {Q1, Q0};
– e no topo dispõe-se uma linha representando a entrada externa ‘X’;
– estando envolvidos dois flip-flops, e pois que cada um pode assumir dois valores {Q=0 e Q=1}, o circuito
poderá assumir quatro estados distintos, que convirá nomear por códigos binários: {‘S00’, ‘S01’, ‘S10’ e ‘S11’}.
O preenchimento das Tabelas não deverá provocar engulhos. As expressões de {Z, Q1 e Q0} são claras:
– ‘Z’ será ‘0’ apenas para a combinação Q1=1 e Q0=0 e X=1;
– quanto a ‘Q1(t+1)’ e ‘Q0(t+1)’, deixa-se ao leitor conferir o seu preenchimento…
O passo seguinte será aglutinar as Tabelas dos estados seguintes dos flip-flops, {Q1(t+1), Q0(t+1)}, numa única,
dita do estado seguinte do circuito, ‘Q1Q0(t+1)’.
A Tabela obtida pode reescrever-se (embora isso não se mostre ao lado) numa outra, dita de Tabela de Estados,
em que cada par de bits {Q1 Q0} é entendido como o código binário de um número, e ele é substituído por um
nome como seja ‘S’ indexado pela representação desse número na base 10; essa Tabela descreve “para que Estado”
evoluem os Estados {S0, S1, S2, S3} do circuito, à medida que se vai alterando a entrada {X}.
Resta desenhar o Diagrama de Estados: a cada estado, associa-se um círculo, etiquetado com um código
binário (ou pelo correspondente nome); depois, traçam-se setas rotuladas, descrevendo graficamente a Tabela.
Veja-se como exemplo a primeira linha, relativa ao estado ‘00’: conforme ‘X’ seja ‘0’ ou ‘1’, assim a saída será
Z=0 ou Z=1, e o estado seguinte será ‘00’ ou ‘01’, respectivamente; isso volve-se numa seta dirigida do círculo
‘00’ para o círculo ‘00’, rotulada com ‘X=0/Z=0’ (ou, conforme à lei do menor esforço, ‘0/0’) e numa outra
dirigida do círculo ‘00’ para o círculo ‘01’, rotulada com ‘1/0’.
É hora de o projectista comparar o diagrama de estados obtido a partir do logigrama do circuito com o diagrama
de estados que ele inicialmente concebeu – e ficar tranquilo, que o circuito a que chegou está ok: afora os nomes, o
número de estados, a interligação entre eles e as saídas são idênticos…
Há, entretanto, que inquirir: quando se faz o power-on ao circuito, qual o estado em que ele ingressa? A
resposta é: não se sabe! No Projecto entre mãos, isso tem importância: se, ao fazer-se o power-on, o circuito
ingressar no estado S10 e ocorrer X=1, o circuito assinalará, de imediato, erroneamente (porquanto ainda se não
recebeu a sequência ‘1011’), o valor ‘1’ – pelo que convirá recorrer a entradas assíncronas (Clear) para obrigar a
que o estado inicial do circuito seja S00.
Sistemas Digitais (Part III)
Page 28 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Mealy)/
Page 29 of 111
17bº Projecto
O 17aº Projecto é um detector de um padrão específico de ‘0’s e ‘1’s – e nem que seja por serem os detectores
de padrões os tipos de circuitos a que muitos estudantes serão mais avessos, será de bom-tom levar por diante a
síntese de mais um circuito detector de padrões, desta feita com flip-flops SR…
Pretende-se um circuito sequencial síncrono que sinaliza ‘1’ se e só se os últimos três bits foram ‘101’.
O ponto crítico para obter um Circuito sequencial síncrono é o desenho do seu Diagrama de Estados:
1. Considere-se o momento em que se faz o power-on… O circuito nada “sabe” então do que se passou antes –
pelo que será pacífico forçá-lo a assumir um estado inicial – que se representa por um círculo identificado por um
nome significativo, ‘S0’; o seu caracter inicial é denotado por uma seta dirigida da esquerda para o círculo ‘S0’.
2. Recorde-se, entretanto, que tal circuito está recebendo uma sucessão de ‘0’ e ‘1’s…
– seja ‘0’ ou ‘1’ o primeiro bit a ser recebido, não se pode concluir que se detectou o padrão ‘101’ – pelo que a
saída será, em qualquer caso, Z=0. Relativamente ao estado que o circuito deverá adquirir após o próximo clock:
se esse primeiro bit for ‘1’, o circuito pode “julgar” que ele é já o primeiro bit do padrão ‘101’, pelo que irá
transitar para um novo estado – o que se representa por um círculo nomeado ‘S1’ e uma seta do círculo ‘S0’ para o
círculo ‘S1’, rotulada por ‘1/0’; mas se for ‘0’, o circuito irá permanecer em ‘S0’ – o que se representa por uma seta
de ‘S0’ para ‘S0’, rotulada por ‘0/0’.
3. Considere-se, agora, que o circuito se encontra no estado ‘S1’. Que sucederá quando receber outro bit?
– pois que não chega para decidir que se detectou o padrão ‘101’, a saída será, em qualquer dos casos, Z=0;
– se receber um ‘0’, o circuito pode “julgar” que é o segundo bit do padrão ‘101’, pelo que transitará para um
novo estado – o que se representa por um círculo ‘S10’ e uma seta de ‘S1’ para ‘S10’, rotulada por ‘0/0’;
– se, porém, receber um ‘1’, irá concluir que estava errada a suposição de que o ‘1’ precedente era o primeiro
bit do padrão ‘101’ – mas talvez o ‘1’ que acaba de receber o seja; isso remete para uma seta de ‘S1’ para ‘S1’,
rotulada por ‘1/0’;
4. Considere-se, agora, que o circuito se encontra no estado ‘S10’. Que sucederá quando receber outro bit?
– se receber um ‘1’, o circuito conclui que ele é o terceiro bit do padrão ‘101’ – pelo que a saída volver-se-á ‘1’.
E, no próximo clock, irá regressar a ‘S1’ – o que remete para uma seta rotulada por ‘1/1’ de ‘S10’ para ‘S1’…
– se, porém, receber um ‘0’, concluirá que afinal os bits ‘10’ precedentes não eram o começo do padrão ‘101’ –
pelo que deverá retornar ao estado inicial, o que remete para uma seta rotulada por ‘0/0’ de ‘S10’ para ‘S0’.
Com isso, fica completo o Diagrama de Estados – a converter numa Tabela de Estados/Saída, vidé ao lado – em
que ambas as Tabelas, de ‘Q(t+1)’ e ‘Z(t)’, se organizam em duas colunas, correspondentes a X=0 e X=1.
De posse da Tabela de Estados/Saída, e porquanto a Tabela apresenta três estados, deduz-se que serão
necessários, e suficientes, dois flip-flops, designem-se eles de {Q1, Q0}. O passo seguinte é proceder à codificação
dos estados. Aquela que se elegeu ao lado usa o CBN (Código Binário Natural)…
A etapa seguinte é transformar a Tabela de Estados/Saída na assim designada Tabela de Transições e Saídas –
ou preferivelmente, já antevendo o que seguirá, num Mapa de Karnaugh, vidé ao lado: cada nome designando um
estado é substituído pelo par de bits {Q1 Q0} que o codifica…
Obtida essa Tabela de Transições e Saídas, a aplicação do método de Karnaugh habilita a escrever a expressão
simplificada da saída ‘Z’…
Optando por flip-flops SR, o passo imediato será obter a Tabela de Excitações do circuito: para tal, começa-se
por desdobrar a Tabela de Transições em duas Tabelas, uma por cada um dos estados seguintes de {Q1, Q0}. A
seguir, dever-se-á proceder à substituição dos valores nas colunas ‘Q1(t+1)’ e ‘Q0(t+1)’ pelos valores a impor nas
entradas {S1, R1} e {S0, R0} para lograr as transições de estado em causa …
Considere-se, por exemplo, a linha em que Q1=0 e Q0=0, e atente-se no que sucede quando X=0. O estado
seguinte de ‘Q1’ é ‘0’ e o estado seguinte de ‘Q0’ é ‘0’– e isso remete para a pergunta: para que aconteçam essas
“transições” em {Q1, Q0}, como se devem excitar as entradas dos flip-flops? A resposta da Tabela de Excitação do
flip-flop SR é: a transição ‘0’→‘0’ logra-se aplicando ‘0’ na entrada ‘S’ (sendo indiferente o que se aplica em ‘R’).
São precisamente os valores ‘0X’ o que se escreve nas Tabelas de {S1, R1} e {S0, R0} para o caso em que X=0.
A etapa final é deduzir as expressões simplificadas das entradas {S1, R1, S0, R0} dos flip-flops, e desenhar o
correspondente logigrama Para tal, convirá desdobrar cada uma das Tabelas de {S1, R1} e {S0, R0} em duas
Tabelas, uma por cada uma das entradas {S1, R1, S0, R0} – e aplicar depois o método de Karnaugh…
Sistemas Digitais (Part III)
Page 30 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Mealy)/
Page 31 of 111
Análise de Circuito com Flip-flops SR
Quando um projectista se engaja no desenho de um circuito, e antes de o materializar de facto, e para evitar
posteriores dissabores, há que “fazer a prova dos nove”: será que o circuito concebido segue mesmo o diagrama de
estados desenhado inicialmente? E este passo de maneira nenhuma se deve omitir!
Essa “conferência” deve ser independente do método usado na síntese do circuito – e na prática suporta-se na
Equação característica dos flip-flops usados, como já se testemunhou algures e agora se volta a aplicar:
O circuito envolve dois flip-flops SR – cujos estados se designam de {Q1, Q0}. O primeiro passo na análise do
circuito é, a partir do respectivo logigrama, escrever as expressões algébricas que traduzem o comportamento da
saída do circuito e das entradas dos flip-flops, vidé ao lado.
Tendo em mira o desenho do Diagrama de Estados, o segundo passo é substituir as expressões das entradas dos
flip-flops na equação característica do flip-flop SR. O resultado são expressões que exprimem o estado seguinte de
cada flip-flop – em função dos estados dos flip-flops e da entrada ‘X’ no instante em que ocorre o flanco
descendente do relógio.
O terceiro passo é converter tais expressões nas assim denominadas Tabelas de Estado/Saída – que indicam,
para cada combinação das entradas internas e externas {Q1, Q0, X} num instante ‘t’, a saída ‘Z’ do circuito nesse
instante, e, a ocorrer em ‘t’ o flanco descendente do relógio, os estados dos flip-flops no instante ‘t+1’ seguinte.
No total, existirão três Tabelas, para {Z, Q1 e Q0}:
– à esquerda, dispõem-se duas colunas, representando outros tantos flip-flops, {Q1, Q0};
– e no topo dispõe-se uma linha representando a entrada externa ‘X’;
– estando envolvidos dois flip-flops, e pois que cada um pode assumir dois valores {Q=0 e Q=1}, o circuito
poderá assumir quatro estados distintos, que convirá identificar por códigos binários: {‘S00’, ‘S01’, ‘S10’ e ‘S11’}.
O preenchimento das Tabelas não deverá provocar engulhos. As expressões de {Z, Q1 e Q0} são claras:
– ‘Z’ será ‘1’ apenas para a combinação Q1=1 e X=1;
– quanto a ‘Q1(t+1)’ e ‘Q0(t+1)’, deixa-se ao leitor conferir o seu preenchimento…
O passo seguinte será aglutinar as Tabelas dos estados seguintes dos flip-flops, {Q1(t+1), Q0(t+1)}, numa única,
dita do estado seguinte do circuito, ‘Q1Q0(t+1)’.
A Tabela obtida pode reescrever-se (embora isso não se mostre ao lado) numa outra, dita de Tabela de Estados,
em que cada par de bits {Q1 Q0} é entendido como o código binário de um número, e ele é substituído por um
nome como seja ‘S’ indexado pela representação desse número na base 10; essa Tabela descreve “para que Estado”
evoluem os Estados {S0, S1, S2, S3} do circuito, à medida que se vai alterando a entrada {X}.
Resta desenhar o Diagrama de Estados: a cada estado, associa-se um círculo, etiquetado com um código
binário (ou pelo correspondente nome); depois, traçam-se setas rotuladas, descrevendo graficamente a Tabela.
Veja-se como exemplo a primeira linha, relativa ao estado ‘00’: a saída será Z=0, mas, conforme ‘X’ seja ‘0’ ou
‘1’, assim o estado seguinte será ‘00’ ou ‘01’, respectivamente; isso volve-se numa seta dirigida do círculo ‘00’
para o círculo ‘00’, rotulada com ‘0/0’ e numa outra dirigida do círculo ‘00’ para o círculo ‘01’, rotulada com ‘1/0’.
É hora de se comparar o diagrama de estados obtido a partir do logigrama do circuito com o diagrama de
estados inicialmente concebido – e constatar que aquele está ok: se se confinar a comparação somente a três
estados {S0, S1, S2}, e afora os nomes, são idênticas as saídas e a interligação entre eles…
Há, entretanto, que inquirir: quando se faz o power-on ao circuito, qual o estado em que ele ingressa? A
resposta é: não se sabe! No Projecto entre mãos, isso tem importância: se, ao fazer-se o power-on, o circuito
ingressar nos estados S10 ou S11 e ocorrer X=1, o circuito assinalará, de imediato, erroneamente (porquanto ainda
se não recebeu a sequência ‘101’), o valor ‘1’ – pelo que convirá recorrer a entradas assíncronas (Clear) para
obrigar a que o estado inicial do circuito seja S00.
Sistemas Digitais (Part III)
Page 32 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Mealy)/
Page 33 of 111
Forma Canónica de Mealy
Após dois exemplos de síntese de circuitos sequenciais síncronos, é hora de abstrair das particularidades…
Um relance aos logigramas obtidos descortina uma arquitectura comum, esquematizada ao lado:
 à esquerda, encontram-se as entradas, a saber:
– as entradas primárias ou externas, como seja ‘X’ (ou outras);
– as entradas secundárias ou internas, que são as saídas dos flip-flops usados: SR e JK);
– as entradas assíncronas (Preset e Clear), destinadas a inicializar o circuito a um estado específico;
– uma entrada Clock, por onde se recebem os impulsos de relógio – e que alimenta directamente todos os
flip-flops: trata-se de um circuito sequencial síncrono.
Conforme à convenção seguida neste itinerário, as entradas externas localizam-se por cima das entradas
internas: estas são consideradas as entradas de maior peso.
 à direita, encontra-se a lógica das saídas, isto é: uma malha combinatória, alimentada pelas entradas
(externas e internas), que gera as saídas do circuito.
A dedução das suas expressões algébricas passa por preencher as Tabelas de Verdade (ou, preferivelmente,
Mapas de Karnaugh) das saídas em função das entradas, externas e internas (que são as saídas dos flip-flops).
A tal lógica das saídas está associado um certo tempo de propagação, seja ‘TZ’, que é o intervalo de tempo que
medeia entre a mudança nos estados dos flip-flops (ou nas entradas externas) e as mudanças nas saídas.
 entre ambos, encontra-se a lógica do estado seguinte, isto é: uma malha combinatória, alimentada pelas
entradas (externas e internas), que gera os novos valores a aplicar às entradas dos flip-flops, para que eles evoluam
como deve ser.
A dedução das respectivas expressões algébricas passa por preencher as Tabelas de Verdade (ou Mapas de
Karnaugh) das entradas dos flip-flops em função das entradas (externas e internas).
A tal lógica do estado seguinte está associado um certo tempo de propagação, seja ‘TNovasEntradas’, que é o
intervalo de tempo que decorre entre a mudança nos estados dos flip-flops (ou nas entradas externas) e a mudança
nas entradas dos flip-flops.
Os flip-flops são temporalmente caracterizados por um certo tempo de preparação, tsu, e um certo tempo de
propagação, tpHL e tpLH.
Notável nesta arquitectura é que as saídas, em cada momento, dependem directamente dos estados dos flip-flops
e das entradas externas nesse momento. Ela reflecte o facto de o seu desenho ter seguido o que se denomina de
Modelo de Mealy: em termos do Diagrama de estados, ele é caracterizado pelo fato de as saídas ficarem associadas
a setas, isto é, aos pares “estado de onde a seta provêm” e “entrada externa que a motiva”.
Isso tem uma consequência óbvia: as saídas do circuito poderão mudar no próximo flanco de comutação do
relógio ou aquando da alteração de algumas das entradas externas.
Como testemunho disso, veja-se o diagrama temporal da evolução do 17bº Projecto:
– inicialmente, o circuito encontra-se no estado ‘S0’, e, sendo X=0, está gerando a saída Z=0;
– quando ocorre X=1, não há qualquer consequência imediata;
– a consequência só se manifesta no próximo clock: pois que se verifica X=1, o estado do circuito, e após um
certo tempo de propagação {tpHL ou tpLH}, passa a ser ‘S1’; e, sendo X=1, continua gerando a saída Z=0;
– quando depois ocorre X=0, não há qualquer consequência imediata;
– a consequência manifesta-se no próximo clock: pois que se verifica X=0, o estado do circuito, e após um certo
tempo de propagação {tpHL ou tpLH}, passa a ser ‘S10’ ; e, enquanto X=0, continua gerando a saída Z=0;
– quando a seguir ocorre X=1, a saída, e após um tempo de propagação tZ, passa a ser Z=1.
– no próximo clock, e pois que se verifica X=1, o estado do circuito, e após um certo tempo de propagação
{tpHL ou tpLH}, passa a ser ‘S1’ ; e após um tempo de propagação tZ, fica gerando a saída Z=0…
Moral do Modelo de Mealy: as saídas poderão mudar após se alterar o estado de algum flip-flop (e isso
sucederá quando ocorrer o flanco de comutação do relógio); mas poderão não se manter assim até ao flanco de
comutação seguinte: quando uma entrada muda, elas poderão mudar de imediato.
Sistemas Digitais (Part III)
Page 34 of 111
Sistemas Digitais (Part III)
Síntese clássica (Modelo de Mealy)/
Page 35 of 111
17cº Projecto
Na síntese clássica de circuitos sequenciais síncronos sobressaem dois modelos: o de Moore e o de Mealy. Por
forma a avaliar das vantagens e desvantagens relativas, será natural finalizar esta sessão com a concretização de
um Projecto mediante ambos os modelos…
Considere que, para atravessar uma rua, e estando o semáforo vermelho para os peões, um transeunte clica num
botão (no semáforo); fá-lo durante um intervalo de tempo que é naturalmente variável… Pretende-se um circuito
que, em resposta a esse clicar, produza um impulso de curta duração: um ‘1’ com a duração do período do clock,
seguido de ‘0’s…
Ao lado, encontra-se o Diagrama de Estados seguindo o modelo de Moore:
1. Considere-se o momento do power-on… Será pacífico iniciar o circuito a um estado, seja ‘S0’, em que irá
assinalar ‘0’ na sua saída. O caracter inicial do estado é denotado por uma seta dirigida da esquerda para ‘S0’;
2. Enquanto não se clicar no botão, a entrada do circuito, ‘B’, mantém-se em ‘0’ – e o circuito continua em ‘S0’;
3. Quando o botão for clicado – mais precisamente, no primeiro flanco de comutação do relógio a seguir a esse
clicar -, o circuito ingressa num novo estado, ‘S1’, em que irá assinalar ‘1’ na saída.
4. Estando o circuito em ‘S1’, se o botão ainda continuar a ser clicado, o circuito ingressa, no flanco de
comutação do relógio seguinte, num novo estado, ‘S11’, em que assinalará ‘0’ na saída; e aí continuará até que o
botão deixe de ser clicado: no primeiro flanco de comutação do relógio que se lhe seguir, retornará ao estado
inicial, ‘S0’;
5. Estando o circuito em ‘S1’, se o botão já deixou de ser clicado, o circuito retornará ao estado inicial, ‘S0’.
Deixa-se ao leitor confirmar os vários passos que se seguem em ordem a obter o logigrama do circuito…
Ao lado, encontra-se também o Diagrama de Estados seguindo o modelo de Mealy:
1. Considere-se o momento do power-on… Será pacífico iniciar o circuito a um estado, seja ‘S0’. O caracter
inicial do estado é denotado por uma seta dirigida da esquerda para ‘S0’;
2. Enquanto não se clicar no botão, a entrada do circuito, ‘B’, mantém-se em ‘0’ – e o circuito continua em ‘S0’,
gerando a saída ‘0’;
3. Quando o botão for clicado, a saída do circuito advém ‘1’ imediatamente – e, no primeiro flanco de
comutação do relógio a seguir, o circuito ingressa num novo estado, ‘S1’, em que irá assinalar ‘0’ na saída.
4. Estando o circuito em ‘S1’, se o botão ainda continuar a ser clicado, o circuito mantém-se em ‘S1’,
continuando á assinalar ‘0’ na saída; e aí continuará até que o botão deixe de ser clicado: no primeiro flanco de
comutação do relógio que se lhe seguir, retornará ao estado inicial, ‘S0’;
Deixa-se ao leitor confirmar os vários passos que se seguem em ordem a obter o logigrama do circuito…
Comparando os logigramas a que se chegou, e também os logigramas obtidos para o 16bº Projecto e 17aº
Projecto (que partilham o mesmo enunciado), intui-se que:
– o modelo de Moore tenderá a necessitar de mais flip-flops que o de Mealy;
– o modelo de Mealy tenderá a volver-se numa lógica combinatória mais complexa que a do modelo de Moore.
A menção “tenderá” significa que nem sempre se manifestará a tendência referida…
Quanto à resposta no tempo, constata-se que:
– o modelo de Moore é mais lento a responder que o modelo de Mealy: a saída só se altera após se terem
alterado os estados dos flip-flops, o mesmo é dizer, após o flanco de comutação do relógio que se segue à alteração
das entradas que motiva a mudança na saída; mas essa nova saída manter-se-á até ao próximo flanco de comutação
do relógio…
– o modelo de Mealy é mais rápido a responder que o modelo de Moore: a saída altera-se logo após a alteração
das entradas que motiva a mudança na saída; mas essa nova saída poder-se-á manter só até ao próximo flanco de
comutação do relógio…
Sistemas Digitais (Part III)
Page 36 of 111
Sistemas Digitais (Part III)
Contadores
Page 37 of 111
/ 18aº Projecto (solução assíncrona)
Recorde-se o itinerário a propósito de circuitos combinatórios: num primeiro passo, fez-se o elenco dos tijolos
básicos (ORs, ANDs, ORs, etc.), após o que se abordou a metodologia geral concernindo a sua síntese (Tabelas de
Verdade e Mapas de Karnaugh, etc.), num segundo passo, abordaram-se blocos combinatórios general purpose
(multiplexers, decoders) – após o que se discutiu a sua aplicação na síntese de circuitos combinatórios...
A propósito de circuitos sequenciais, procede-se de um modo análogo: num primeiro passo, fez-se o elenco dos
seus tijolos básicos específicos (Latches, Flip-flops), após o que se reviu a metodologia geral concernindo a sua
síntese (Diagramas de Estado, Modelos de Moore e Mealy, etc.); ir-se-ão agora abordar blocos sequenciais general
purpose (contadores, registos, RAM) – após o que se discutirá a sua aplicação à síntese de circuitos sequenciais…
Esta sessão versa, pois, Contadores. Tal como as demais sessões, ir-se-á partir de um Projecto concreto…
Para produzir um boletim agrafado, um centro de impressão dispõe de uma agrafadora automática: é activada
por cada série de 8 folhas à saída da impressora…
Ao lado, encontra-se um Diagrama Temporal ilustrativo do que se pretende: pressuposto que a impressora
assinala o termo da impressão de uma folha com um impulso de curta duração, o circuito pretendido deverá, por
cada conjunto de 8 desses impulsos, sinalizar ‘1’ na sua saída…
Considerando o output da impressora - uma sucessão de impulsos de curta duração -, será tentador usá-los
como sinais de relógio do circuito a construir: o circuito será um sistema autónomo – no sentido de que não dispõe
de quaisquer entradas externas… Em si, não é nada de novo: o 15bº Projecto abordou precisamente dois
contadores ou Divisores de Frequência (por 2 e por 4)… Revendo-os, bastará extrapolar para um Divisor por 8…
 Vidé ao lado o Diagrama Temporal do Divisor de Frequência por 2 e o respectivo Diagrama de Estados:
Inicialmente, a saída do circuito é ‘0’; quando ocorre o flanco descendente do relógio (abreviadamente: clock),
a saída advém ‘1’; no clock seguinte, a saída volta a ser ‘0’ – e este ciclo vai-se repetindo indefinidamente… (E
constata-se que, tendo o circuito recebido 6 impulsos de relógio, a saída exibe apenas 3 impulsos…) Esse
comportamento sugere que o circuito terá apenas dois estados, sejam ‘S0’ e ‘S1’:
1. Considere-se o momento do power-on… O circuito ingressa no estado inicial ‘S0’, em que a saída é ‘0’;
2. Aquando do clock, ingressa no estado ‘S1’, em que a saída é ‘1’;
2. E, no clock seguinte, regressa ao estado inicial, ‘S0’…
De posse do Diagrama de Estados do circuito, e em ordem a chegar ao correspondente logigrama, bastará usar a
massa cinzenta: é que, bem vistas as coisas, trata-se de um circuito que está continuamente no modo Toggle - o que
sugere vivamente usar o flip-flop T em que se forçou a entrada ‘T’ a ser continuamente ‘1’, vidé ao lado.
 E quanto ao logigrama de um Divisor de Frequência por 4? Intui-se que será suficiente uma cascata de dois
flip-flops T, designem-se eles de ‘Q0’ e ‘Q1’, em que se forçou ‘1’ nas entradas ‘T’: ‘Q0’ recebe a sequência de
impulsos original, a sua saída vindo a ser o que se interliga à entrada clock de ‘Q1’, vidé ao lado: ‘Q0’ gera um
impulso somente após ter recebido dois impulsos clock, e ‘Q1’ produz um impulso apenas depois de ‘Q0’ ter gerado
dois impulsos – o que significa que, globalmente, ‘Q1’ irá gerar um impulso por cada quatro impulsos originais…
 E quanto ao logigrama de um Divisor de Frequência por 8? Por um raciocínio similar, bastará uma cascata
de três flip-flops T, designem-se eles de {Q2, Q1, Q0}, em que se forçou ‘1’ nas entradas ‘T’: globalmente, ‘Q2’ irá
gerar um impulso por cada oito impulsos originais…
Manda a curiosidade determinar qual o conteúdo dos três flip-flops à medida que se vão sucedendo os impulsos
originais – e constata-se que o conjunto {Q2, Q1, Q0} (em que Q2 e Q0 são, respectivamente, os bits de maior e
menor peso) vai assumindo ciclicamente as representações em binário dos (8) números {0, 1, 2, 3, 4, 5, 6, 7}. Por
tal motivo, ele designa-se contador cíclico ascendente de módulo 8.
Trata-se, entretanto, de um contador assíncrono: os flip-flops não reagem em simultâneo; realce-se entretanto
que a ordem com que o fazem é previsível a priori: Q2 reage só depois de Q1 o ter feito, e Q1 reage só depois de Q0
o ter feito; isso acarreta aquilo que se denomina ‘transientes’. Veja-se, em particular, o que sucede quando o
contador marca ‘011’ e ocorre um novo clock: Q0 é o primeiro a reagir (com o que o circuito fica marcando ‘010’)
e somente depois é que Q1 reage (ficando então o contador a marcar ‘000’) - e somente depois é que Q2 reage
(ficando enfim o contador a marcar ‘100’)!
Se se quisera um contador síncrono, haveria que usar as costumeiras etapas para, do Diagrama de Estados, se
chegar ao logigrama – ou, melhor ainda, usar a massa cinzenta. É o que se verá já a seguir…
Sistemas Digitais (Part III)
Page 38 of 111
Sistemas Digitais (Part III)
Contadores
Page 39 of 111
/ 18bº Projecto (solução síncrona)
Após os contadores assíncronos, é hora de abordar contadores síncronos: todos os flip-flops são alimentados
pelo mesmo clock. Ir-se-á partir dum Projecto concreto – que, não por acaso, tem o enunciado do 18aº Projecto…
 Recorda-se ao lado o Diagrama Temporal do comportamento que se pretende… Será pacífico que o circuito
vai passando ciclicamente por 8 estados distintos, designem-se eles de {S0, S1, S2, S3, S4, S5, S6, S7}.
Ao lado, encontra-se o Diagrama de Estados seguindo o modelo de Moore:
1. Considere-se o momento do power-on… Será pacífico iniciar o circuito a ‘S0’;
2. Aquando do primeiro clock, o circuito transitará para ‘S1’; e, com sucessivos clocks, irá percorrendo os
restantes estados {S2, S3, S4, S5, S6, S7}… até regressar ao estado inicial.
Desenhado o Diagrama de (8) Estados, o método clássico remete para 3 flip-flops, sejam eles {Q2, Q1, Q0}; há
que codificar os estados; por forma a que as saídas dos flip-flops se volvam nos códigos binários dos números {0,
1, 2, …6, 7}, dever-se-á usar o CBN: as saídas serão ‘000’ em ‘S0’, serão ‘001’ em ‘S1’, e assim por diante…
A etapa seguinte é preencher a Tabela de Transições/Mapa de Karnaugh, vidé ao lado, à esquerda: o nome de
cada estado é substituído pelos bits que o codificam: o circuito transita de ‘000’ para ‘001’, de ‘001’ para ‘010’, etc
Admitindo que se usam flip-flops T, o passo seguinte será obter as Tabelas com os valores a impor nas entradas
{T2, T1, T0} para lograr as transições de estado em causa – após o que se deduzem as expressões simplificadas das
entradas {T2, T1, T0} dos flip-flops e se desenha o correspondente logigrama.
(Repare-se que no logigrama não está presente qualquer saída ‘Z’: num contador, as saídas são os próprios
estados dos flip-flops - mas, se se quisera um Divisor de Frequência por 8, isto é, um circuito que produzisse um
flanco descendente após 8 flancos descendentes do relógio, a saída seria, muito simplesmente, Z=Q2)
 O contador obtido é ascendente (Up): vai incrementando, de ‘0’ até ‘7’… mas poder-se-ia antes requerer um
contador descendente (Down): quem não ouviu já a contagem final para um foguetão descolar: …, 3, 2, 1, 0?
Para o efeito, poder-se-ão seguir os passos acima (que aliás se sumarizam ao lado) – mas a lei do menor esforço
insta a usar melhor a massa cinzenta, que com menos suor se poderá chegar ao correspondente logigrama (e um
bom teste ao leitor será proceder depois de um modo semelhante para lograr o desenho do contador ascendente).
Ao lado, ao centro, encontra-se a tabela de codificação de estados para o contador ascendente: lista os
sucessivos valores que os flip-flops vão experimentando – e o desafio é: como, olhando simplesmente para ela, e
reflectindo, deduzir de imediato as expressões das entradas dos flip-flops dum contador descendente?
Obviamente, há que ler a tabela de baixo para cima: o contador marca ‘111’, depois ‘110’, etc.. e a pergunta a
responder é: quando é que um flip-flop especifico ‘Qi’ muda de estado - e portanto quando se deve forçar Ti=1?
1. Considere-se a evolução de ‘Q0’: por cada impulso de relógio que recebe, ele oscila de ‘0’ para ‘1’ (ou viceversa) - o que sugere vivamente forçar a entrada ‘T0’ a ser permanentemente ‘1’, vidé ao lado;
2. Considere-se a evolução de ‘Q1’: aquando dum impulso de relógio, ‘Q1’ oscilará de ‘0’ para ‘1’ (ou viceversa) se e só se o circuito estiver nos estados ‘110’, ‘100’, ‘010’ ou ‘000’; a estes estados é comum Q0=0 (em
contrapartida não havendo qualquer mudança quando Q0=1); por outras palavras: ‘T1’ deve ser ‘1’ apenas naqueles
quatro estados listados (isto é: quando Q0=0) – o que se resolve forçando na entrada ‘T’ o complemento de ‘Q0’;
3. Considere-se enfim a evolução de ‘Q2’: aquando de um impulso de relógio, ‘Q2’ oscilará de ‘0’ para ‘1’ (ou
vice-versa) se e só se o circuito estiver nos estados ‘100’ ou ‘000’; a estes estados é comum Q1=Q0=0 (em
contrapartida não havendo qualquer mudança quando tal não suceder); por outras palavras, ‘T2’ deve ser ‘1’ apenas
quando Q1=Q0=0) – o que se resolve forçando na entrada ‘T’ o produto dos complementos de ‘Q1’ e ‘Q0’.
Os contadores obtidos são síncronos: os flip-flops reagem “em simultâneo” - as aspas significando que, todavia,
ainda há azo à ocorrência de ‘transientes’. Veja-se, em particular, o caso de ocorrer um clock quando o contador
ascendente marca ‘011’; ele deverá passar a marcar ‘100’; porém, em virtude de os tempos de propagação não
serem efectivamente iguais, virão a suceder-se alguns estados transitórios, cuja sequência é imprevisível a priori:
- ‘011’ → ‘010’ → ‘000’ → ‘100’ (se Q0 for o primeiro a reagir e Q2 for o último a reagir);
- ‘011’ → ‘111’ → ‘101’ → ‘100’ (se Q2 for o primeiro a reagir e Q0 for o último a reagir);
- deixa-se ao leitor imaginar outros transitórios…
A duração de cada estado transitório não excede a diferença entre os tempos de propagação dos flip-flops.
Sistemas Digitais (Part III)
Page 40 of 111
Sistemas Digitais (Part III)
Contadores
Page 41 of 111
/ Contador com Enable
Considere-se de novo o 18aº Projecto – acrescentando-lhe porém um requerimento extra: além de proporcionar
a impressão de boletins de 8 folhas agrafadas, pretende-se também facultar aos clientes a impressão de uma folha
avulsa, sem a agrafar…
Como alterar o circuito desenhado, por forma a satisfazer esse requerimento? Por outras palavras: pressuposto
que a impressora continua a assinalar o termo da impressão de uma folha com um impulso, como alterar o
contador de folhas desenhado para que, quando for o caso da impressão de uma folha individual sem agrafos, ele
se mantenha inerte (em ‘000’)?
Considerando que o que faz “mexer” o contador são os impulsos na sua entrada clock, uma resposta imediata
será: interpor, entre a saída da impressora e essa entrada, um AND – a activar por um botão Enable: somente
quando ele activar o AND é que os impulsos provenientes da impressora alcançam os flip-flops do contador…
Mas esta resposta não é pacífica: ela conduz a atrasar no tempo a mudança das saídas do contador – o que, no
contexto de uma solução síncrona, é de todo desaconselhável: imaginando sistemas algo mais complexos, em que
os flip-flops em que se concretizam os contadores coexistem com outros flip-flops, há que garantir que, aquando de
um clock, todos eles reajam em simultâneo! O desafio é, portanto: como proceder ao enabe/disable do contador
sem interferir nos fios que transportam os impulsos de relógio?
A única resposta possível é, obviamente, agir sobre a entrada ‘T’ dos flip-flops – aproveitando o facto de que,
quando se lhe aplica o valor ‘0’, um flip-flop T permanece no mesmo estado!
 Veja-se o caso da versão assíncrona: num contador enabled (isto é, quando se premir o botão Enable,
Enable=1), os flip-flops deverão estar todos com as entradas T=1 – mas, se ele advir disabled (o que se traduz em
Enable=0), elas deverão ficar a ‘0’; isto sugere de imediato ligar directamente o botão Enable às entradas ‘T’ dos
flip-flops, vidé ao lado.
 Mas atente-se agora à versão síncrona. É claro que, no que respeita ao flip-flop ‘Q0’, e seguindo a mesma
ordem de ideias, ele deverá ter a sua entrada ‘T0’ directamente ligada ao botão Enable…
Já quanto às entradas dos restantes flip-flops, a solução terá que ser outra – mas será fácil descortiná-la:
Recordando o intermezzo sobre Enabling/Disabling, bastará interpor, entre a lógica do estado seguinte e cada
entrada ‘T’, um AND – activado pelo tal botão Enable:
- quando este advir inactivo (isto é: a ‘0’), as entradas ‘T’ ficam a ‘0’- e os flip-flops não mudarão de estado;
- mas se ele advir activo (isto é, a ‘1’), as entradas ‘T’ ficam com os valores que lhes devem ser aplicados para
que os flip-flops evoluam como deve ser.
(Abra-se um parêntesis: em si, o logigrama final viola a geografia habitual – de dispor à esquerda os flip-flops:
o que está à esquerda é, isso sim, um par de ANDs… Em rigor, esse par de ANDs faz parte da lógica do estado
seguinte… mas a sua implantação à esquerda quiçá torne visualmente mais explícita a sua razão de existir:
concretizar o enable/disable do contador)
Sistemas Digitais (Part III)
Page 42 of 111
Sistemas Digitais (Part III)
Contadores
Page 43 of 111
/ Inicialização de um Contador
Há que inquirir: quando se faz o power-on ao contador, qual o estado em que ele ingressa? A resposta é: não se
sabe! No Projecto entre mãos, isso tem importância: se, ao fazer-se o power-on, o contador ingressar num estado
que não seja S0, o primeiro boletim terá, agrafadas, menos que 8 folhas (e os restantes boletins estarão mal
compostos)… Pelo que há que obrigar a que o estado inicial do circuito seja mesmo S0.
 Uma primeira solução, assíncrona, é recorrer a entradas assíncronas (Clear). Pressuposto que os flip-flops
disponibilizam entradas assíncronas Clear, bastará interligar directamente o botão de inicialização do contador,
Init, a essas entradas – e isso qualquer que seja a versão (síncrona ou assíncrona) do contador, vidé ao lado.
 Uma segunda solução, síncrona, é recorrer às entradas ‘T’ dos flip-flops – aplicando-lhes os valores
pertinentes para que, quaisquer que sejam os seus estados no power-on, ingressem no estado ‘0’.
Pode entrever-se esta solução como aplicação particular de uma operação mais geral dita de carregamento em
paralelo – e que consiste em, por activação de uma entrada denominada ‘Load’, forçar o contador a um valor
específico, seja {D2 D1 D0}. É a ela que serão então devotadas as próximas linhas:
Uma primeira interrogação é esta: se se quiser que um flip-flop T fique memorizando um valor genérico ‘D’,
que é que se deve aplicar na sua entrada ‘T’? A resposta é dada pela respectiva Tabela de Excitação, vidé ao lado:
deverá aplicar-se-lhe o XOR entre o estado ‘Q’ do flip-flop e esse valor ‘D’.
Aceite este considerando e, por mor de simplificação, cingindo por agora a análise ao flip-flop ‘Q0’, o que no
fim de contas se tem em vista é o seguinte:
- que, quando Load=0, o contador se comporte como tal, isto é, incremente (em módulo 8) no próximo impulso
de clock – o que se volve em impor T0=1;
- que, quando Load=1, o contador carregue um valor {D2 D1 D0} em paralelo, isto é, que, no próximo impulso
de clock, o flip-flop Q0 tome o valor D0 – o que se volve em impor T0=Q0 XOR D0.
Por outras palavras: conforme o valor de ‘Load’, assim há que aplicar em ‘T0’ um de dois valores diferentes.
Isso aponta para, à sua entrada, se interpor um multiplexer, cuja entrada de selecção seja aquele valor ‘Load’, e
cujas entradas de dados sejam os valores que ‘T0’ poderá assumir, vidé ao lado.
O que se afirma acerca da entrada ‘T0’ pode generalizar-se às demais entradas ‘T’: a cada uma será aplicada a
saída de um multiplexers, com a mesma entrada de selecção, ‘Load’, e cujas entradas de dados serão os valores
que essa entrada ‘T’ específica poderá assumir.
E equipando esse multiplexer com uma entrada Enable, poder-se-ão providenciar três modos de funcionamento:
1. se Enable=0 (isto é: se a entrada ‘Enable’ estiver inactiva), as saídas dos multiplexers serão ‘0’ – pelo que as
entradas dos flip-flops ficarão sendo T=0: no próximo clock, não mudarão de estado;
2.- se Enable=1 (isto é: se a entrada ‘Enable’ estiver activa), as entradas dos flip-flops ficarão sendo as saídas
dos multiplexers – oferecendo-se então duas alternativas:
2.1 se Load=0, a saída do multiplexer será o valor na sua entrada de dados numerada ‘0’ – pelo que o
contador se irá comportar como tal: incrementará no próximo impulso de clock;
2.2 se Load=1, a saída do multiplexer será o valor na sua entrada de dados numerada ‘1’ – pelo que o
contador irá, no próximo impulso de clock, carregar o valor {D2 D1 D0}.
(O logigrama final volta a violar a geografia habitual – de dispor à esquerda os flip-flops: o que se encontra à
esquerda são, isso sim, multiplexers e XORs… Em rigor, eles fazem parte da lógica do estado seguinte… mas a
sua implantação à esquerda quiçá torne visualmente mais explícita a sua razão de existir: concretizar os três modos
de funcionamento do contador)
Se se dispor de um contador assim, então a sua inicialização a S0 volve-se em fazer o carregamento em paralelo
de {D2=0, D1=0, D0=0}…
Sistemas Digitais (Part III)
Page 44 of 111
Sistemas Digitais (Part III)
Contadores
Page 45 of 111
/ Contadores modulo M=2n
Os contadores sugeridos como solução para o Projecto entre mãos são de módulo 8 – mas certamente que não
será um trabalho de Hércules generalizá-los a um módulo que seja uma potência-de-2, M=2n (isto é, passando
ciclicamente pelos valores {0, 1, 2, …, M-1} e regressando depois a ‘0’, etc.…
Considere-se, nomeadamente, um contador de módulo 24=16.
Ao lado, ao centro, encontra-se a tabela de codificação de estados para o contador ascendente: lista os
sucessivos valores que os flip-flops vão experimentando – e, olhando simplesmente para ela, e reflectindo, não
custa deduzir de imediato as expressões das entradas dos flip-flops:
 Considere-se primeiramente a versão assíncrona:
1. Veja-se a evolução de ‘Q0’: por cada clock que recebe, ele oscila de ‘0’ para ‘1’ (ou vice-versa) - o que sugere
vivamente forçar a entrada ‘T0’ a ser permanentemente ‘1’, vidé ao lado;
2. Quanto a ‘Q1’: ‘Q1’ oscilará de ‘0’ para ‘1’ (ou vice-versa) se e só se ‘Q0’ passar de ‘1’ a ‘0’ – o mesmo é
dizer, quando houver um flanco descendente na saída ‘Q0’; isso sugere interligar ‘Q0’ à entrada clock do flip-flop
‘Q1’ e forçando ‘1’ na entrada ‘T1’;
3. Quanto a ‘Q2’: ‘Q2’ oscilará de ‘0’ para ‘1’ (ou vice-versa) se e só se ‘Q1’ passar de ‘1’ a ‘0’ – isto é, aquando
de um flanco descendente na saída ‘Q1’; isso sugere interligar ‘Q1’ à entrada clock do flip-flop ‘Q2’ e forçar T2=1;
4. Quanto a ‘Q3’: ‘Q3’ oscilará de ‘0’ para ‘1’ (ou vice-versa) se e só se ‘Q2’ passar de ‘1’ a ‘0’ – isto é, aquando
de um flanco descendente na saída ‘Q2’; isso sugere interligar ‘Q2’ à entrada clock do flip-flop ‘Q3’ e forçar T3=1.
 Considere-se agora a versão síncrona:
1. Considere-se a evolução de ‘Q0’: por cada clock que recebe, ele oscila de ‘0’ para ‘1’ (ou vice-versa) - o que
sugere vivamente forçar a entrada ‘T0’ a ser permanentemente ‘1’, vidé ao lado;
2. Quanto a ‘Q1’: aquando dum clock, ‘Q1’ oscilará de ‘0’ para ‘1’ (ou vice-versa) se e só nesse momento Q0=1
(em contrapartida não havendo qualquer mudança quando Q0=0); isso sugere forçar T1=Q0;
3. Quanto a ‘Q2’: aquando de um clock, ‘Q2’ oscilará de ‘0’ para ‘1’ (ou vice-versa) se e só se nesse momento
Q1=Q0=1 (em contrapartida não havendo qualquer mudança quando tal não suceder); isso sugere aplicar em T2 o
produto de ‘Q1’ e ‘Q0’;
4. Quanto a ‘Q3’: aquando de um clock, ‘Q3’ oscilará de ‘0’ para ‘1’ (ou vice-versa) se e só se nesse momento
Q2=Q1=Q0=1 (em contrapartida não havendo qualquer mudança quando tal não suceder); isso sugere aplicar em T3
o produto de ‘Q2’ , ‘Q1’ e ‘Q0’.
Deixa-se ao leitor deduzir as expressões algébricas das entradas ‘T’ para um contador síncrono descendente…
Com isso, ficam reunidas as condições para construir um contador general purpose módulo 16 – contemplando
as opções que se foram abordando ao longo desta sessão: capaz de incrementar (Up) ou decrementar (Down), ou
de carregar em paralelo (Load), e provido de entradas assíncronas (Clear) e de Enable:
- pressuposto que os flip-flops disponibilizam entradas assíncronas Clear, ter-se-á que lhes interligar
directamente uma entrada Clear (activa a High);
- e, com 4 multiplexers à esquerda e 4 XORs, poder-se-ão providenciar três modos de funcionamento:
- com uma entrada Enable (activa a High), ficará garantido que, se ela estiver inactiva, as saídas dos
multiplexers ficarão inactivas, com o que o contador não mudará de estado;
- caso contrário, e de acordo com uma entrada Load (activa a High),
- se ela estiver activa, o contador procederá ao carregamento em paralelo dos valores {D3 D2 D1 D0};
- caso contrário, contará (incrementando ou decrementado).
Para o efeito, a lógica do estado seguinte terá que concretizar ambas as expressões das entradas dos flip-flops
(para um contador Up e para um contador Down) – cabendo ao plano de multiplexers à direita, cuja entrada de
selecção é uma entrada Up (activa a Low), seleccionar as que virão a ser aplicadas nas entradas {T3, T2, T1 e T0}.
Notas: por mor de simplicidade, os contadores abordados foram desenhados usando flip-flops T; mas isso não é
obrigatório: deixa-se ao leitor o seu desenho com outros flip-flops… E por mor de clareza, os feedbacks entre as
saídas dos flip-flops e as entradas ‘T’ foram concretizados com ANDs, MUXes e XORs - com óbvias repercussões
na frequência máxima do clock: deixa-se ao leitor o seu redesenho no sentido de aumentar essa frequência…
Sistemas Digitais (Part III)
Page 46 of 111
Sistemas Digitais (Part III)
Contadores
Page 47 of 111
/ Contadores: símbolos IEC
O circuito a que se chegou requere bastantes tijolos básicos (como seja NANDs) - mas há uma boa notícia para
o leitor: o mercado disponibiliza integrados funcionando assim, como seja a série SN74161/163. Isso faz apelo a
conhecer a simbologia IEC que lhe diz respeito… Ao lado, exemplifica-se a aplicação da Standard 91-1984 à
interpretação dos esquemas de dois contadores. Todos têm o título CTR 4; mas são admissíveis outros títulos,
como sejam CTR DIV 16 e CTR DIV 10 (que assinalam contadores de módulos respectivamente 16 e 10).
Globalmente, os contadores têm uma entrada clock comum a 4 flip-flops, uma de reset assíncrono, duas enable
(‘G3’ e ‘G4’}, vários Modos de funcionamento {M1, M5, M6 e M7} e uma saída ‘CT’; mais detalhadamente:
Os contadores disponibilizam uma entrada clock – cujo símbolo explicita que eles mudam no flanco ascendente
dos impulsos nela recebidos. Estão-lhe associados dois rótulos, que, como se verá adiante, detalham a que dizem
eles respeito (Para bom entendedor: trata-se mesmo de uma só entrada: poder-se-ia, em alternativa, agregar os
rótulos ‘1,3,4+’ e ‘C2’ num só rótulo (‘1,3,4+/C2’), ou desdobrar o rótulo ‘1,3,4,7-/C2’ em dois (‘1,3,4,7-’ e ‘C2’))
Ambos os contadores oferecem também uma entrada de reset assíncrono; ela é rotulada com ‘CT=0’, e é activa
a Low: quando se lhe força um nível Low, o contador é reposicionado a ‘0000’ (Se se quisera antes especificar uma
entrada de reset síncrono, ter-se-ia que prefixar o rótulo com o pertinente sufixo da entrada clock, seja ‘2CT=0’).
O título CTR 4 assinala que se trata de um contador com 4 flip-flops; estes encontram-se na cave do símbolo –
assinalando-se que tanto as suas entradas como as saídas são acessíveis externamente; neles,
- “2D” afirma que do ponto de vista exterior se comportam como flip-flops D, o prefixo ‘2’ clarificando que
reagem a impulsos na entrada de clock ‘C2’;
- esclarece-se, com parêntesis, ‘[‘ e ‘]’, o seu peso relativo: {1, 2, 4, 8} (Para bom entendedor: o contador marca
um número, de ‘0’ a ‘15’, através do seu código binário - em que os pesos dos bits crescem de cima para baixo)
Ambos os contadores disponibilizam, além das saídas dos flip-flops, uma saída ‘CT’:
- no contador de cima, ela fica activa (advém High) se e só se o contador marcar ‘15’ - e, além disso, a entrada
enable ‘G3’ estiver activa (vidé sufixo em ‘G3’ e prefixo ‘3’ em ‘CT’);
- no contador de baixo, ela fica activa (advém Low) se e só se a entrada enable ‘G3’ estiver activa (vidé sufixo
em ‘G3’ e prefixo ‘3’ em ‘CT’) - e o contador marcar ‘0’ (estando activa a entrada ‘M7, vidé prefixo ‘7’ em ‘CT’)
ou ‘15’ (estando activa a entrada ‘M6’, vidé prefixo ‘6’ em ‘CT’);
Os contadores oferecem duas entradas de enable, ‘G’, activas a High, a que estão associados sufixos, ‘3’ e ‘4’:
- o prefixo ‘3’ ocorre nas entradas de clock e na saída ‘CT’: o contador incrementa (‘+’) ou decrementa (‘’) se
e só se a entrada ‘G3’ estiver enabled, e a saída ‘CT’ permanecerá inactiva enquanto ‘G3’ o estiver também;
- o prefixo ‘4’ ocorre nas entradas de clock: o contador incrementa (‘+’) ou decrementa (‘’) se e só se a
entrada ‘G4’ estiver enabled.
Entradas rotuladas Mi, como sejam M1, M5, M6 e M7, providenciam a escolha do modo de funcionamento do
contador; para determinar a que diz respeito um modo sufixado com ‘i’, procura-se, no símbolo IEC, entradas com
rótulos prefixados com ‘i’:
- quanto a M1, o prefixo ‘1’ surge associado aos sinais ‘+’ e ‘–’: se estiver activa, o contador conta (incrementa
ou decrementa);
- quanto a M6, o prefixo ‘6’ surge (no contador de baixo) associado ao sinal ‘+’ – de que se conclui que, quando
estiver activa, o contador incrementa;
- quanto a M7, o prefixo ‘7’ surge (no contador de baixo) associado ao sinal ‘–’ – de que se conclui que, quando
estiver activa, o contador decrementa;
- quanto a M5, o prefixo ‘5’ surge associado às entradas dos flip-flops: se estiver activa, o contador carrega em
paralelo os valores então aplicados nessas entradas.
Atente-se que {M1 e M5} caracterizam uma mesma entrada: se ela estiver High, o contador funciona no modo
‘1’ – e se estiver Low, funciona no modo ‘5’; idem para {M6 e M7}: se a entrada a que dizem respeito estiver High,
o contador funciona no modo ‘6’ – e se estiver Low, funciona no modo ‘7’.
Para facilitar a leitura, poder-se-ão incluir comentários entre parêntesis rectos; vidé, por exemplo, M5 [Load]
Resta ver como se aplica esta notação em logigramas envolvendo contadores… É o que se vai ver de mediato…
Sistemas Digitais (Part III)
Page 48 of 111
Sistemas Digitais (Part III)
Contadores
Page 49 of 111
/ 18cº Projecto
Considere-se que um grupo de amigos pretende um dado electrónico para jogar: com Start, o circuito conta os
impulsos de relógio, ciclicamente, de ‘1’ a ‘6’; com Stop, ele interrompe a contagem, e mostra o número que ele
marca, num display de 7-LEDs, vidé ao lado.
Deixando ao leitor o desenho do codificador de 7-LEDs – um circuito que, recebendo um dígito codificado em
binário de 3-bit, assinale os LEDs {a, b, c, d, e, f, g} a acender –, resta construir um contador ciclico de ‘1’ a ‘6’.
 Diferentemente dos contadores anteriores, trata-se agora de um cujo módulo, ‘6’, não é potência-de-2, e que
não “começa”/“recomeça” em ‘0’! Mas o seu desenho continua a ser trivial: conforme ao método clássico, e ao
modelo de Moore, e optando por flip-flops T, o resultado é um logigrama com três flip-flops, 2 ORs e 4 ANDs.
(Atente-se, que aquando do power-on, o circuito pode ingressar nos estados ‘000’ ou ‘111’; se isso suceder,
- as entradas ‘T’ advêm então, respectivamente, ‘001’ e ‘111’ - o que significa que no primeiro clock a seguir ao
power-on, os estados passarão a ser, respectivamente, ‘001’ e ‘000’ ;
- no clock seguinte, serão ‘010’ (que é o estado a seguir a ‘001’) e ‘001’ (que é o estado a seguir a ‘000’).
Isto é: se o Stop ocorrer após os dois primeiros clocks, o circuito já estará na contagem cíclica requerida)
 O logigrama exige vários integrados – e a lei do menor esforço leva a uma pergunta: será possível uma
solução mais fácil para este Projecto, pelo recurso a um contador no mercado? E a resposta é sim, vidé ao lado:
- antes de mais, recorre-se a um contador cujo módulo cubra os 6 estados que o circuito requere; aquele
presente no logigrama ao lado tem 4 flip-flops – portanto contando ciclicamente {0, 1, 2, …, 15};
- resta providenciar para que, ao atingir a contagem ‘6’, o contador regresse a ‘1’ no clock seguinte; isso pode
lograr-se se ele disponibilizar dois modos de funcionamento:
- um, seja ‘M1’, em que o contador incrementa {1, 2, 3, 4, 5, 6} – e que deve estar “quase sempre” activo;
- e um outro, seja ‘M4’, em que se carrega em paralelo o valor ‘1’ - que deve advir activo quando o contador
atingir o valor ‘6’, e apenas então.
A necessidade de escolher entre os dois modos de funcionamento volve-se numa entrada própria: consoante o
nível eléctrico que lhe for aplicado, High ou Low, assim respectivamente se selecciona ‘M1’ ou ‘M4’.
Resta decidir como se controla essa entrada: como obrigá-la a volver-se High ou Low? Reflicta-se:
M4’ deve ser activado precisamente quando o contador advir ‘6’ – para que, no clock seguinte, e em vez de
incrementar para ‘7’, retorne a ‘1’. “Tudo” se resume, portanto, a detectar o valor ‘6’ nas saídas do contador…
Ora, o método geral para o lograr é já conhecido: dado um conjunto de entradas, o detector de uma combinação
particular delas – isto é, um circuito cuja saída fica activa só para essa combinação – é um Mintermo dessas
entradas! No caso, em que a combinação a detectar é ‘0110’, isso conduz ao produto Q Q Q Q . Porém, há uma
3
2 1
0
solução mais simples: a lista dos (6) valores admissíveis mostra que a combinação ‘0110’ se distingue das outras
em que somente nela é que Q2=Q1=1; isso conduz a um AND entre, só, ‘Q2’ e ‘Q1’: será quando ele advir activo
que se deve activar ‘M4’ (para que o contador, em vez de incrementar para ‘7’, retorne a ‘1’).
Entretanto, no contador figurado, ‘M4’ é activo a Low – o que impõe que a saída desse AND seja activa a Low;
quando isso suceder, o contador carregará o que estiver sendo aplicado nas entradas {D3, D2, D1, D0} – e porquanto
se pretende que ele retorne a ‘1’, deverão ser-lhe aplicados precisamente os bits ‘0001’.
No próximo clock, então, o contador regressará a ‘1’ – e de imediato o AND entre ‘Q2’ e ‘Q1’ ficará produzindo
o nível High – com isso activando ‘M1’: no próximo clock, e até chegar a ‘6’, o contador irá incrementando…
Quanto às entradas Start e Stop, elas ficarão ligadas à entrada enable ‘G3’: aquando do Start, ela ficará activa, e
o contador contará ciclicamente – e, aquando do Stop, fica inactiva: pára, e mostra o seu conteúdo no display…
(Atente-se: no power-on, o contador pode ingressar nos estados ‘0000’, ‘0111’, ‘1000’, ‘1001’, ‘1010’, ‘1011’,
‘1100’, ‘1101’, ‘1110’ ou ‘1111’; se isso suceder, o estado passará a ser ‘001’ após, quando muito, seis clocks a
seguir ao power-on: se o Stop ocorrer só depois, o circuito já estará na contagem cíclica requerida)
Este Projecto envolve um contador de módulo (6) inferior ao daquele que o mercado disponibiliza (16)… pelo
que se intui o porquê do próximo Projecto: abordar um contador com um módulo superior (a 16)…
Sistemas Digitais (Part III)
Page 50 of 111
Sistemas Digitais (Part III)
Contadores
Page 51 of 111
/ 18dº Projecto
Uma linha de produção de compotas envolve embalamento automático. Os frascos de compota são dispostos
em caixas de capacidade 20, divididas por 4 linhas de 5 frascos. Estes chegam a uma plataforma um-a-um, por um
tapete rolante. Por cada 5 frascos, é actuado um “vai-vem” que os alinha e encosta aos que já estão na plataforma.
Por cada 20 frascos, é actuado um braço mecânico, que, mediante um imã, ergue os frascos e os põe numa caixa…
 O diagrama temporal ao lado lembra o do 18aº Projecto - que remeteu para um divisor de frequência por 8…
Agora, o “vai-vem” é actuado por cada 5 frascos, e o braço mecânico é actuado por cada 4 “vai-vens”; isso remete
para dois divisores de frequência: um por 5 e outro por 4… Após o Projecto anterior, será pacífico o seu desenho a
partir de dois contadores de módulo 16, {W, E}; bastará no fim dispô-los em série: a entrada clock de ‘W’
receberá um impulso por cada frasco chegando… e a entrada clock de ‘E’ receberá os impulsos à saída de ‘W’…
Ora, essa é uma solução assíncrona – e o desafio agora é elaborar uma solução síncrona – não, é claro,
seguindo os passos do método clássico, mas recorrendo a contadores de módulo 16… É o que se vai ver:
 O braço mecânico é actuado por cada 20 frascos… Sendo 161<20<162, isso obriga a dispor dois contadores,
sejam {N, S}, cujas entradas clock recebam o mesmo “clock”: um impulso por cada frasco que chegue.
Cada contador dispõe de dois modos de funcionamento {M1 e M2} (incremento e carregamento em paralelo);
tem uma saída ‘CT’ que advém High se e só se marcar ‘15’; detém uma entrada enable ‘G3’ que necessita estar
activa para que ele incremente (e para que a saída ‘CT’ possa advir activa); comporta uma entrada assíncrona de
reset, activa a Low; e disponibiliza 4 entradas onde aplicar os valores ‘0000’ que se pretende carregar em paralelo.
Activando o enable ‘G3’ e o modo ‘M1’ (e após reset inicial a {N, S}), é claro que, e por cada clock, eles irão
incrementar, marcando pari passu o mesmo valor – sem qualquer interesse… O que conviria é que {N, S} fossem
apresentando os números que se encontram ao lado à esquerda – e que, não por acaso (e substituindo os símbolos
{A, B. …, F} pelos respectivos códigos binários), são os códigos na base ‘16’ dos números {0, 1, …, 255}…
Em ordem a apreender como interligar os contadores, bastará olhar para esses números e reflectir:
- ‘N’ limita-se a incrementar em módulo 16 – o que aponta para forçar a entrada enable ‘G3’ a ser sempre High;
- já ‘S’ só incrementa quando ‘N’ atinge ‘15’; a sua entrada enable ‘G3’ deverá então ser High só quando ‘N’
marcar 15 - o que é o mesmo que dizer: quando a saída ‘CT’ de ‘N’ estiver activa; isso aponta para ligar essa saída
‘CT’ à entrada ‘G3’ de ‘S’: enquanto ‘N’ for assumindo valores {0, …, 14}, ‘CT’ mantém-se inactiva - e ‘S’ não se
altera… mas, ao chegar a 15, ‘CT’ advém High – com o que ‘G3’ advém activa: no clock seguinte, ‘S’ incrementa.
(O circuito assim obtido, incrementando ciclicamente de ‘0’ a ‘255’, é, obviamente, um contador de módulo
16×16=256; convida-se ao leitor a desenhar o logigrama de um contador de módulo 16×16×16…)
Dirá o leitor que o circuito desenhado à esquerda não serve: a contagem deveria retornar a 0 após 19 frascos!
{N, S} deveriam antes apresentar os números {00, 01, …, 34} ao lado à direita: há que alterar o circuito:
- ‘N’ incrementa em módulo 5 – o que se logra forçando a sua entrada enable ‘G3’ a ser sempre High, mas
seleccionando ‘M2’ ao marcar ‘4’, para, no clock seguinte, carregar ‘0000’; ora, a lista dos (5) valores admissíveis
mostra que ‘0100’ se distingue dos outros em que só nele é que Q2=1: deve activar-se ‘M2’ quando ‘Q2’ advir
activa (o que conduz, e sendo ‘M2’ activo a Low, a um inversor entre ‘Q2’ e a entrada ‘M2’); quando isso suceder,
deve ‘S’ incrementar – o que se logra ligando também ‘Q2’ à entrada enable ‘G3’ de ‘S’;
- ‘‘S’ incrementa em módulo 4 – o que se logra forçando o modo ‘M2’ ao marcar ‘3’, para, no clock seguinte,
carregar ‘0000’ em paralelo; olhando a lista dos (4) valores admissíveis, deduz-se que ‘M2’ deve activar-se quando
advir activo o AND entre ‘Q1’ e ‘Q0’ (devendo o AND ter uma saída com a mesma polaridade que ‘M2’: Low).
(Por mor de completude: a solução assíncrona acima não é única: no desenho de {W, E} ficou implícito o
carregamento de ‘0000’ - mas é viável outra solução: agir nas entradas assíncronas CT=0! Na prática, e em vez de
limitar {W, E} a contarem só até 5 e 4, deixar que atinjam 6 e 5 - forçando imediatamente o seu reset:
- admita-se que ‘W’ atingiu ‘0100’; no clock seguinte, transita para ‘0101’, isto é: fica sendo Q2=Q0=1; então,
incluindo um AND entre ‘Q2’ e ‘Q0’, e ligando a sua saída à entrada ‘CT’, esta advém activa, forçando ‘W’ a
retornar de imediato a ‘0000’: salvo um curtíssimo transiente, ‘W’ passou de ‘0100’ a ‘0000’: conta em módulo 5;
- admita-se que ‘E’ atingiu o valor ‘0011’; no clock seguinte, ele transita para ‘0100’, isto é: ‘Q2’ advém activo;
então, com uma ligação directa de ‘Q2’ à entrada ‘CT’, esta advém activa, forçando ‘E’ a retornar de imediato a
‘0000’: salvo um curtíssimo transiente, ‘E’ passou de ‘0011’ a ‘0000’: conta em módulo 4)
Posto que é mister uma entrada Reset que inicialize {W, E} a ‘0000’, convém, é claro, um OR à entrada ‘CT,
vidé ao lado, com a mesma polaridade que essa saída: Low)
Sistemas Digitais (Part III)
Page 52 of 111
Sistemas Digitais (Part III)
Contadores
Page 53 of 111
/ Contadores Exóticos
Os contadores desenhados até agora foram-no sobre flip-flops T: de facto, o método clássico de síntese sobre
flip-flops D aparenta ser mais rápido, no sentido de que, obtida a Tabela de Transições, estão outrossim obtidas as
Tabelas de Verdade das entradas dos flip-flops D; mas o leitor pode verificar que elas se volvem em expressões
algébricas para as entradas não tão simples como as obtidas se se usar flip-flops T…
Isso, porém, não tem demovido a investigação no sentido de inventar contadores/divisores-de-frequência
suportados em flip-flops D - com menos hardware do que aquele a que conduz tal método de síntese. Ao lado,
encontram-se os logigramas de alguns desses contadores, todos eles envolvendo apenas 3 flip-flops…
Uma característica comum dos logigramas ao lado é o serem eles uma série de flip-flops ordenados, entre um
primeiro à esquerda e um último à direita – sendo que para o segundo, terceiro, até ao último, a entrada ‘D’ de um
flip-flop D recebe o valor na saída ‘Q’ do flip-flop D que o antecede: o que é específico de cada contador é, apenas,
o valor aplicado na entrada ‘D’ do primeiro flip-flop…
Admita-se que o estado inicial é ‘100’; aquando do primeiro clock após a inicialização, e de facto para todos os
clocks seguintes, vai suceder o seguinte:
- pois que a entrada ‘D’ do segundo flip-flop D recebe o valor à saída ‘Q’ do primeiro, o seu estado vai ficar
sendo o do primeiro na altura em que ocorreu o clock;
- e, ao mesmo tempo, e pois que a entrada ‘D’ do terceiro flip-flop D recebe o valor à saída ‘Q’ do segundo, o
seu estado vai ficar sendo o do segundo na altura em que ocorreu esse clock;
- e por aí fora: há como que um deslize, do conteúdo dos dois primeiros flip-flops à esquerda para os flip-flops
adjacentes à sua direita…
As únicas interrogações que sobram são as seguintes: como vai ficar o estado do primeiro flip-flop, e qual a
subsequente contagem?
 Num contador em anel, o primeiro flip-flop recebe o valor da saída do último flip-flop.
A consequência disso revela-se na tabela que o acompanha: um ciclo através dos estados ‘100’→‘010’→‘001’,
após o que regressa ao estado inicial, ‘100’. Trata-se, pois, de um contador de módulo 3.
 Num contador Johnson, o primeiro flip-flop recebe o inverso do valor da saída do último flip-flop.
A consequência disso revela-se na tabela que o acompanha: partindo do estado inicial ‘100’, um ciclo através
de 6 estados, após o que regressa ao estado inicial. Trata-se, pois, de um contador de módulo 6.
 Num contador Linear feed-back shift-register, o primeiro flip-flop recebe o XOR dos valores das saídas dos
dois últimos flip-flop.
A consequência disso revela-se na tabela que o acompanha: partindo do estado inicial ‘100’, um ciclo através
de 7 estados, após o que regressa ao estado inicial. Trata-se, pois, de um contador de módulo 7.
Avaliando os contadores assim construídos, é clara a sua vantagem, sobretudo para os dois primeiros
contadores: não havendo gates na lógica do estado seguinte (a malha combinatória que gera os novos valores a
aplicar às entradas dos flip-flops), eles são mais rápidos; fazem-no, porém, à custa de uma desvantagem, a de que
desperdiçam o espaço admissível de contagem dos flip-flops: 3 flip-flops habilitam a construir circuitos contando
em módulo 8…
Como é da praxe, há porém que inquirir: quando se faz o power-on aos contadores, qual o estado em que eles
ingressam? A resposta é: não se sabe! Aqui, isso tem importância: se, ao fazer-se o power-on, ingressarem num
estado que não seja ‘100’, a sequência será outra, até pode suceder que não ingressem nos ciclos exibidos… Pelo
que há que obrigar a que o estado inicial do circuito seja mesmo ‘100.
Isso logra-se com uma entrada Init, e alterando o logigrama – concretamente, fazendo o carregamento em
paralelo dos valores ‘100’, vidé ao lado (ou, em alternativa, agindo sobre as entradas assíncronas de Clear e
Preset) - para que, ao advir ela activa, os flip-flops ingressem no estado inicial ‘100’.
Sistemas Digitais (Part III)
+
Page 54 of 111
Sistemas Digitais (Part III)
Registos
Page 55 of 111
/ 19aº Projecto
Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico designa de Registers –, e
buses. Como todas as outras Sessões, ir-se-á desenrolar a partir de um Projecto concreto...
Considere um dispositivo que vai registando, hora a hora, a temperatura local… Admita, para simplificar, que
basta um dígito para a representar. São exibidas em dois LEDs de 7-segmentos as temperaturas medidas nas
últimas 2 horas…
Ao lado, esquematiza-se a arquitectura do sistema… Admita-se que acaba de soar o gong das 12:00; então, o
termómetro apresenta algum valor de temperatura, seja 8º – que é memorizado num contentor apropriado, ‘R0’;
uma hora depois (isto é: às 13:00), o termómetro apresenta algum outro valor, seja 5º, que é memorizado no
mesmo contentor ‘R0’ – enquanto, ao mesmo tempo, o valor que lá estava memorizado é copiado em paralelo para
um outro contentor similar, ‘R1’. Com isso, quem consultar o painel onde se exibem as temperaturas, observará
dois LEDs, mostrando os valores, 8º e 5º, medidas nas duas últimas horas… Intui-se o que sucederá ao irem
batendo as horas seguintes…
Pressupondo que se dispõe já de um descodificador de 7-segmentos, resta, é claro, a construção dos contentores
{R0 e R1}… A esse respeito, será pacífico que, na transferência da Informação de ‘R0’ para ‘R1’, o tratamento
dado ao bit mais à esquerda (por exemplo), deverá ser idêntico àquele conferido ao bit mais à direita – e, aliás, a
qualquer outro bit: o bit de maior peso de ‘R0’ (seja ‘R3(0)’) vai ocupar a posição de maior peso de ‘R1’ (‘R3(1)’) –
enquanto ao mesmo tempo o bit de menor peso de ‘R0’ irá ocupar a posição de menor peso de ‘R1’… Assim sendo,
bastará discernir como memorizar 1 bit – que de imediato se ficará sabendo como memorizar 4, ou 8, ou 16, ou
seja lá que número de bits for…
O diagrama de estados de um circuito sequencial síncrono capaz de memorizar um bit de informação genérico
‘I’ (‘0’ ou ‘1’) apresenta-se pacífico: ele terá somente dois estados, Q0/0 e Q1/1; e deverá ser tal que, quando lhe
for forçado à entrada o valor ‘0’, ele transite para o estado Q0 – e, quando lhe for forçado à entrada o valor ‘1’, ele
transite para o estado Q1 (e isso independentemente do estado em que se encontrava antes do flanco de comutação
do relógio).
De posse do Diagrama de Estados, e da correspondente Tabela de Estados – e procedendo à codificação
{Q0→0, Q1→1} a que a lei do menor esforço conduz –, a pergunta que sobra será: a que tipo de flip-flop recorrer,
para lograr a solução mais simples? Não custa decidi-lo:
– o recurso a um flip-flop T obriga a usar um XOR na entrada ‘T’, vidé ao lado;
– o recurso a um flip-flop JK obriga a usar um inversor na entrada ‘K’;
– o recurso a um flip-flop SR obriga também a usar um inversor na entrada ‘R’;
– o recurso a um flip-flop D não obriga a usar mais nada: basta forçar na entrada ‘D’ o bit de informação ‘I’ – e
aguardar pelo flanco de comutação do relógio…
Assim, da mesma maneira que no desenho de contadores se preferiu recorrer a flip-flops T, assim agora, para
desenhar elementos de memória – isto é, capazes de memorizar 1 bit de informação –, se prefere recorrer a flipflops D: não será de admirar que, ao longo desta sessão, os circuitos se virem a suportar todos em flip-flops D…
Sistemas Digitais (Part III)
Page 56 of 111
Sistemas Digitais (Part III)
Registos
Page 57 of 111
/ Registos
Decidido como memorizar 1 bit, pode imediatamente levar-se por diante o desenho de cada um dos contentores
{R0 e R1} requeridos pelo 19aº Projecto: porquanto cada um se destina a memorizar um dígito – cujo código se
basta em 4-bits –, bastará justapor 4 flip-flops D, seja {Q3, Q2, Q1, Q0}, uns ao lado dos outros (ou, como se
patenteia ao lado, uns por cima dos outros, à maneira de um edifício de vários andares), em que
– as suas entradas clock são alimentadas pelo mesmos impulsos de relógio: o circuito é síncrono;
– a cada entrada de dados, ‘Dk’, fica aplicado um valor de informação específico, ‘Ik’ (com k=3, 2, 1, 0).
– se existentes, as entradas assíncronas de clear/reset são alimentadas pelo mesmo sinal.
A um circuito digital assim, dá-se o nome de Registo – designando-se de palavra o conjunto de bits que ele
contém. No caso, trata-se de um Registo de 4-bits, ou seja: destinado a memorizar palavras com um comprimento
de 4-bits. Mas, se se quisera um Registo para palavras com um comprimento maior, intui-se como fazê-lo:
aumentar o número de andares do Registo, pela simples política de justapor os flip-flops D necessários…
Ao lado, encontra-se o desenho do sistema correspondente ao 19aº Projecto, onde são visíveis os contentores
{R0 e R1}, agora e doravante denominados Registos, e a interligação entre as várias partes:
– pressupõe-se que as saídas do termómetro são dígitos codificados em BCD: {I3, I2, I1, I0};
– elas encontram-se ligadas às entradas dos flip-flops do Registo R0 – com o que, aquando do clock que marca a
passagem de uma hora mais, os valores {I3, I2, I1, I0} advêm memorizados/escritos em R0;
– tendo decorrido já ao menos o intervalo de tempo tpLH/tpHL, as saídas dos flip-flops advêm estáveis – e o novo
valor de temperatura, seja 8, aplicado ao descodificador de 7-segmentos, vem a ser adequadamente visualizado no
LED de 7-segmentos em cima…
– ao passar de mais uma hora, acontece o seguinte: por um lado, as saídas do termómetro {I3, I2, I1, I0} com um
novo valor de temperatura, seja 5, mantêm-se ligadas às entradas dos flip-flops do Registo R0; por outro lado, as
saídas deste Registo R0 com o precedente valor de temperatura encontram-se ligadas às entradas dos flip-flops do
Registo R1;
– com o que, aquando do clock que marca a passagem da hora, a temperatura actual advém escrita em R0 – e,
ao mesmo tempo, a temperatura precedente advém escrita em R1;
– e, tendo decorrido já ao menos o intervalo de tempo tpLH/tpHL, as saídas dos flip-flops advêm estáveis – e
ambos os valores de temperatura, o actual e o precedente, vêm a ser visualizados…
– esta dupla escrita (e esta dupla leitura) à passagem de cada hora acontece, é claro, para todas as horas, desde
que se faça o power-on ao circuito… E cá está a pergunta da praxe: quando se faz o power-on aos Registos, qual o
estado em que eles ingressam? A resposta é: não se sabe! Quiçá se justifique então, a existência de uma entrada
Clear, que, quando activada, inicializa todos os flip-flops dos Registos a ‘0’...
Recapitulando: no Projecto entre mãos, não se requerem interligações entre os diversos flip-flops de um
Registo: as únicas operações admissíveis são então as assim designadas escrita e leitura em paralelo (e Clear)
– Escrita em paralelo (Parallel-In ou Load, no jargão anglo-saxónico): para memorizar/escrever uma palavra
de informação no Registo, bastará aplicar os respectivos bits {I3, I2, I1, I0} nas entradas D dos flip-flops, e aguardar
pelo flanco de comutação do relógio: quando acontecer, todos os flip-flops mudam de estado – ao mesmo tempo! –,
as suas saídas vindo a tomar precisamente aqueles valores {I3, I2, I1, I0};
– Leitura em paralelo (Parallel-Out): para conhecer/ler a palavra de informação actualmente memorizada no
Registo, bastará consultar as saídas ‘Q’ dos flip-flops – não sendo preciso aguardar por qualquer flanco do
relógio: desde que tenha já decorrido ao menos o intervalo de tempo tpLH/tpHL desde o último flanco de comutação
do relógio, pode saber-se o estado de todos eles de uma vez só – ao mesmo tempo!
Ao lado, apresenta-se o símbolo IEC de um Registo com a estrutura de R0 ou R1. Não detém qualquer título. A
‘cave’ do símbolo especifica que contém 4 flip-flops, com uma mesma especificação (pelo que ela é inscrita apenas
no flip-flop de cima): as entradas e saídas, ambas activas a High, são acessíveis externamente; “1D” afirma que são
flip-flops D, o prefixo ‘1’ clarificando que reagem aos impulsos recebidos na entrada de clock ‘C1’ (no seu flanco
descendente); esta é comum aos 4 flip-flops. Disponibiliza também uma entrada de reset assíncrono, qualificada
com ‘R’, que é activa a High: quando se lhe força um nível High, o registo é reposicionado a ‘0000’.
Sistemas Digitais (Part III)
Page 58 of 111
Sistemas Digitais (Part III)
Registos
Page 59 of 111
/ 19bº Projecto (Registos com Load/Enable)
Modifique-se agora o 19aº Projecto, do seguinte modo: em vez de se indicarem as temperaturas nas duas
últimas horas, pretende-se que seja apresentada, num LED de 7-segmentos, a temperatura máxima já alguma vez
atingida (desde o último reset). Para simplificar, continua a admitir-se que basta um dígito para a representar…
Ao lado, esquematiza-se a arquitectura do sistema: como anteriormente, o valor de temperatura apresentado
pelo termómetro, seja T, é aplicado a um registo – cujas saídas são aplicadas a um codificador de 7-segmentos;
mas, porquanto o objectivo é visualizar a temperatura máxima já atingida, ele só será escrito nesse registo se
exceder o valor, seja TMax, que ele então memoriza… Para o efeito, recorre-se a um Comparador aritmético de 4bit: aplicando T e TMax nas suas entradas ‘P’ e ‘Q’, a saída ‘P>Q’ advém activa se e só se T > TMax; se isso
suceder, o registo deverá passar a conter o novo valor de temperatura, T; caso contrário, deverá manter-se
inalterado. A questão é: como alterar o registo que se desenhou já, por forma a satisfazer esse requerimento?
Visto de uma maneira mais global, o que se pretende é um registo que, aquando da ocorrência do clock, e
consoante uma variável externa, assim:
– se mantenha inalterado, se ela estiver inactiva;
– carregue em paralelo o valor nas suas entradas de dados, se ela estiver activa.
Ora, este tipo de comportamento soa a algo conhecido: o que se pretende é um registo com uma entrada enable!
De posse de tal registo, o logigrama para o Projecto entre mãos volver-se-á na aplicação a tal entrada Enable da
saída ‘P>Q’ do Comparador… pelo que resta discernir: como será a estrutura interna de tal registo com Enable?
Considerando que o que faz “mexer” o registo são os impulsos na sua entrada clock, uma resposta imediata
será: interpor um AND entre a entrada Enable e essa entrada clock: somente quando ela advir activa é que os
impulsos de relógio alcançam os flip-flops do registo…
Mas esta resposta não é pacífica: ela conduz a atrasar no tempo a mudança das saídas do registo – o que, no
contexto de uma solução síncrona, é de todo desaconselhável: imaginando sistemas algo mais complexos, em que
os flip-flops em que se concretizam os registos coexistem com outros flip-flops, há que garantir que, aquando de
um clock, todos eles reajam em simultâneo! O desafio é, portanto: como proceder ao enabe/disable do registo sem
interferir nas linhas que transportam os impulsos de relógio?
A única resposta possível é, obviamente, agir sobre a entrada ‘D’ dos flip-flops – na prática através de um
multiplexer com uma entrada de selecção, a que se aplica a entrada Enable, vidé ao lado:
– na entrada ‘1’, seleccionada quando ela está activa, força-se o novo valor de informação a escrever no registo;
– na entrada ‘0’, seleccionada quando ela está inactiva, aplica-se o próprio valor memorizado no Registo.
Prevendo a necessidade de inicializar o Registo, convirá, é claro, dotá-lo de uma entrada Clear, que, quando
activada, inicializa todos os flip-flops do Registo a ‘0’...
Ao lado, apresenta-se o símbolo IEC de um Registo com a estrutura ao lado. Não detém qualquer título. A
‘cave’ do símbolo apresenta 4 flip-flops, com uma mesma especificação: as entradas e saídas, ambas activas a
High, são acessíveis externamente; ‘1D’ afirma que são flip-flops D, o prefixo ‘1’ clarificando que reagem aos
impulsos recebidos na entrada de clock ‘C1’ (no seu flanco descendente); esta é comum aos 4 flip-flops.
Disponibiliza também uma entrada de reset assíncrono, qualificada com ‘R’, que é activa a High: quando se lhe
força um nível High, o registo é reposicionado a ‘0000’. Disponibiliza enfim uma entrada, ‘M2’, para providenciar
a escolha entre dois modos de funcionamento:
– quando ‘M2’ está activa – modo de funcionamento dito de “Load/Carregamento em Paralelo” –, é escrito no
registo o valor que se encontrar nas entradas dos flip-flops (vidé qualificador ‘1,2D’);
– caso contrário – modo de funcionamento dito de “Hold/Manutenção” –, o registo mantém-se tal como era.
(Abra-se um parêntesis: em si, o logigrama final viola a geografia habitual – de dispor à esquerda os flip-flops:
à esquerda estão multiplexers… Em rigor, eles fazem parte da lógica do estado seguinte… mas a sua implantação à
esquerda quiçá torne visualmente mais explícita a sua razão de existir: concretizar o enable/disable do registo)
Sistemas Digitais (Part III)
Page 60 of 111
Sistemas Digitais (Part III)
Registos
Page 61 of 111
/ 19cº Projecto (Registo de Deslocamento / Shift Register)
Nos registos até agora considerados, os flip-flops evoluem independentemente uns dos outros: não há ligações
entre eles. Já vai sendo hora de considerar registos em que os flip-flops estão interligados entre si… E não será
despropositado fazê-lo a partir de um Projecto concreto...
Considere-se um automóvel cujas luzes traseiras, através de que o condutor manifesta a sua vontade em mudar
de direcção, são de facto constituídas por dois blocos de 4 lâmpadas com o funcionamento esquematizado ao lado:
– para mudar para a direita, acende-se primeiro a lâmpada mais à esquerda, depois a que lhe está adjacente à
direita (e só ela), e assim sucessivamente, até se acender a lâmpada mais à direita;
– para mudar para a esquerda, acende-se primeiro a lâmpada mais à direita, depois a que lhe está adjacente à
esquerda (e só ela), e assim sucessivamente, até se acender a lâmpada mais à esquerda.
O desenho do circuito ficaria simplificado se se dispusera dum registo preparado para deslizar o seu conteúdo
para a direita ou para a esquerda: bastaria inicializá-lo a ‘1000’ ou ‘0001’ (consoante a mudança de direcção em
vista), que depois, aquele ‘1’ iria deslizando ao longo do registo, ao ritmo dos impulsos de relógio…
A um registo com tal capacidade dá-se o nome de Registo de Deslocamento (Shift Register) – e é claro que os
flip-flops já não são independentes: o estado seguinte de qualquer deles depende do estado actual dos que lhe são
adjacentes… Mas, perguntar-se-á: e quanto aos flip-flops das ‘pontas’ do registo? A opção mais interessante será:
– quando o conteúdo do registo está deslizando para a direita, o estado seguinte do flip-flop mais à esquerda
passará a ser uma informação externa, seja ‘ID’;
– quando o conteúdo do registo está deslizando para a esquerda, o estado seguinte do flip-flop mais à direita
passará a ser uma informação externa, seja ‘IE’.
Isto significa um modo mais de escrever no registo: já não paralela, mas em série (Serial-In), pelas ‘pontas’.
O logigrama de um registo assim – dito de Registo Multimodo ou Universal – afigura-se deveras pacífico:
partindo do logigrama do registo ultimamente considerado, bastará que o multiplexer à entrada de cada flip-flop
passe a oferecer duas entradas de selecção, ‘M0’ e ‘M1’, vidé ao lado – para viabilizar o escolher entre quatro
modos de funcionamento (Hold e Load, e também Right Shift e Left Shift), como adiante se explica.
Apresenta-se também o símbolo IEC correspondente ao logigrama. O título é ‘SRG’. Explicita 4 flip-flops,
cujas entradas e saídas, activas a High, são acessíveis externamente; trata-se de flip-flops D, que reagem aos
impulsos recebidos na entrada de clock ‘C4’ (no seu flanco descendente). Oferece uma entrada de reset
assíncrono, ‘R’, activa a High. Oferece duas entradas, ‘M0’ e ‘M1’, para seleccionar o modo de funcionamento:
– quando {M1, M0} são ‘00’/0 (‘M1’ e ‘M0’ estão, ambas, inactivas) – modo de funcionamento dito de “Hold” –
, o registo permanece inalterado;
– quando {M1, M0} são ‘11’/3 (‘M0’ e ‘M1’ estão, ambos, activos) – modo de funcionamento dito de “Load” –,
é escrito no registo, em paralelo, o valor que se encontrar nas entradas dos flip-flops qualificadas com ‘1,4D’;
– quando {M1, M0} são ‘01’/1 (só ‘M0’ está activo) – modo de funcionamento dito de “Right Shift” –, o registo
desloca à direita (vidé qualificador ‘1→’) – sendo que no flip-flop mais à esquerda é escrito o valor de ‘ID’ ;
– quando {M1, M0} são ‘10’/2 (só ‘M1’ está activo) – modo de funcionamento dito de “Left Shift” –, o registo
desloca à esquerda (vidé qualificador ‘2←’) – sendo que no flip-flop mais à direita é escrito o valor de ‘IE’ .
Agora, são diferentes as especificações concernindo os flip-flops – pelo que, em vez de se especificar só o do
topo, há que especificar cada um em separado, e tendo em conta os valores de ‘M0’ e ‘M1’:
– quanto ao flip-flop ‘Q0’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q0’, ou em ‘ID’, ou em
‘Q1’ ou em ‘I0’ (vidé ‘1,4D’ e ‘3,4D’, qualificadores das entradas onde se aplica ‘ID’ e ‘I0’ , respectivamente);
– quanto ao flip-flop ‘Q1’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q1’, ou em ‘Q0’, ou em
‘Q2’ ou em ‘I1’ (vidé ‘3,4D’, qualificador da entrada onde se aplica ‘I1’);
– quanto ao flip-flop ‘Q2’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q2’, ou em ‘Q1’, ou em
‘Q3’ ou em ‘I2’ (vidé ‘3,4D’, qualificador da entrada onde se aplica ‘I2’);
– quanto ao flip-flop ‘Q3’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q3’, ou em ‘Q2’, ou em
‘IE’ ou em ‘I3’ (vidé ‘2,4D’ e ‘3,4D’, qualificadores das entradas onde se aplica ‘IE’ e ‘I3’ , respectivamente).
(Conquanto o deslocamento seja dito à-direita/à-esquerda, no logigrama – e no correspondente símbolo IEC –,
ele é, de facto, e respectivamente, para-baixo/para-cima; ao lado, apresentam-se os diagramas temporais das
saídas do registo quando, partindo da mesma situação (‘1011’), se força o deslocamento à direita/para-baixo,
entrando ‘1’ à esquerda, e o deslocamento à esquerda/para-cima, entrando ‘0’ à direita).
Sistemas Digitais (Part III)
Page 62 of 111
Sistemas Digitais (Part III)
Registos
Page 63 of 111
/ 19dº Projecto (Usando um multiplexer por destino)
O Projecto, com que esta sessão se iniciou, envolve a transferência de informação (valores de temperatura)
entre dois registos; decorrendo ela em paralelo, subentende-se que a saída de cada um dos flip-flops de ‘R0’ se liga
à entrada do correspondente flip-flop de ‘R1’… Muitos contextos há, porém, onde a transferência de informação
envolve bem mais registos – e uma solução assim já não serve. Um Projecto simples poderá testemunhá-lo…
Considere-se um cinema com 4 salas; os títulos dos filmes encontram-se memorizados em outros tantos
conjuntos de registos. Todavia, o visor disponível apenas permite publicar dois deles de cada vez. De 15 em 15
segundos, o visor é refrescado… Pretende-se a estrutura de interligação dos registos que memorizam os títulos aos
registos que alimentam o visor.
Ao lado, esquematiza-se o objectivo em vista: encontram-se à esquerda registos – contendo, para cada sala, a
sua identificação e o Título do filme nela em exibição –, e à direita encontram-se registos que ‘alimentam’ o visor
onde aqueles se publicam… Pretende-se que o conteúdo de um qualquer dos registos à esquerda (ditos
fonte/source) advenha transferido/transmitido (copiado) para um qualquer dos registos à direita (ditos
destino/sink). Globalmente, isso significa 8 (=4*2) transferências possíveis… e é claro que está proibido ligar
directamente as saídas dos flip-flops fonte às entradas dos flip-flops destino: sob pena de um pivete a queimado (e
se se não usar 3-state), não se podem soldar duas saídas de chips ao mesmo fio...
Para simplificar, considerar-se-ão só os registos relativos à identificação (numérica) das salas (crendo que tal
bastará para o leitor defrontar a interligação dos restantes registos)… Sejam então {W3, W2, W1, W0} os registos
com essa identificação, e {E1, E0} aqueles para onde ela é transferida – e restrinja-se a atenção a um flip-flop de
destino, seja o flip-flop ‘Q0’ do registo ‘E0’; o desafio é providenciar para que ele possa vir a tomar o valor na
saída do flip-flop ‘Q0’ de um dos registos {W3, W2, W1, W0}… Isso volve-se em implantar um multiplexer, ‘M00’,
cuja saída é aplicada na entrada do flip-flop ‘Q0’ do registo ‘E0’, com duas entradas de selecção, {E01, E00}, e
quatro entradas de dados – a que se aplicam precisamente as saídas dos flip-flops ‘Q0’ dos registos fonte…
Por um raciocínio análogo, dever-se-á implantar um multiplexer, ‘M01’, cuja saída é aplicada na entrada do flipflop ‘Q1’ do registo ‘E0’, com as mesmas entradas de selecção, {E01, E00}, e em cujas entradas de dados se aplicam
as saídas dos flip-flops ‘Q1’ dos registos fonte… Idem para os restantes flip-flops destino, ‘Q3’ e ‘Q2’: aplica-se, na
entrada de cada um, um multiplexer, respectivamente ‘M03’ e ‘M02’ – e não valerá a pena dizer mais nada…
Com isso, {E01, E00} seleccionam o registo fonte cujo conteúdo é transferido para (os flip-flops de) ‘E0’: se, por
exemplo, forem ‘01’, é transferido o conteúdo do registo ‘W1’…
Doravante, e por mor de simplicidade,
– usar-se-á a expressão “o registo é transferido” em vez de “o conteúdo do registo é transferido”;
– condensar-se-ão as expressões ‘registo fonte’ e ‘registo destino’ em, respectivamente, fonte e destino.
O que se afirma acima vale também para o registo ‘E1’: os seus flip-flops volvem-se na implantação de outros
tantos multiplexers, {M13, M12, M11, M10}, com entradas de selecção {E11, E10}: estas seleccionam o registo fonte
que é transferido para ‘E1’: se, por exemplo, forem ‘11’, é transferido o registo ‘W3’…
Globalmente, pois, o circuito está capacitado para efectuar duas transferências em simultâneo; por exemplo,
para transferir ‘W1’ para ‘E0’ e, ao mesmo tempo, ‘W3’ para ‘E1’, bastará forçar as entradas de selecção a serem
{E01=0, E00=1} e {E11=1, E10=1} – que, no próximo clock, se consumarão tais transferências.
(Nota breve, por mor de completude: as transferências acima decorrem em paralelo; mas uma outra solução
seria viável – baseada em transferências em série: garantindo necessariamente que os registos (fonte e destino)
eram, todos eles, registos de deslocamento, proceder-se-ia à transferência de um bit após outro; a propósito, por
exemplo, da transferência de ‘W1’ para ‘E0’, o bit mais à direita de ‘W1’ – que é ‘Q3’ – seria transferido para o bit
mais à esquerda de ‘E0’ – que é ‘Q0’… Isto excede o horizonte deste itinerário, pelo que não será discutido)
Não há dúvida que o logigrama cumpre os requisitos do enunciado – e será pacífico generalizá-lo a um maior
número de registos fonte e/ou de registos destino. Mas, a um olhar atento não escapará que as entradas de ‘M00’
são as mesmas que estão aplicadas a ‘M10’; idem para entradas de ‘M01’ e ‘M11’; para as de ‘M02’ e ‘M12’ e para as
de ‘M03’ e ‘M13’. Daí, uma suspeita: haverá outra solução não tão gastadora de multiplexers? É o que se vai ver …
Sistemas Digitais (Part III)
Page 64 of 111
Sistemas Digitais (Part III)
Registos
Page 65 of 111
/ Bus
Para um sistema envolvendo a transferência entre 2M registos fonte e 2N registos destino, deduz-se:
– cada multiplexer tem M entradas de selecção e 2M entradas de dados;
– com a filosofia de associar um multiplexer a cada entrada dos 2N registos destino, monta a 2N o número total
de multiplexers que se ligam a qualquer dos flip-flops fonte; porquanto as suas entradas são as mesmas para todos
eles, esses números merecem que se investigue a possibilidade de uma solução mais económica.
Tendo como pano de fundo o 19dº Projecto, o ponto de partida será, naturalmente, colapsar os multiplexers
{M13, M12, M11, M10} e {M03, M02, M01, M00} num conjunto {M3, M2, M1, M0} – preservando as interligações que
detêm com os registos fonte {W3, W2, W1, W0}, vidé ao lado.
Posto que as saídas dos multiplexers {M13, M12, M11, M10} e {M03, M02, M01, M00} se ligam às entradas dos
destinos {E1, E0}, será natural que as saídas dos multiplexers {M3, M2, M1, M0} advenham ligadas às entradas de
todos os destinos.
As entradas de selecção dos multiplexers {M3, M2, M1, M0} já não se denominam de {E11, E10} e {E01, E00},
mas de {S1, S0} – mas detêm o mesmo papel: o de seleccionar o registo fonte a ser transferido…
Considere-se, então, que se deseja transferir o registo ‘W1’ para ‘E0’ e o registo ‘W3’ para ‘E1’.
Pretendendo-se transferir o registo ‘W1’, então as entradas de selecção dos multiplexers deverão tomar os
valores {S1=0, S0=1}. Mas, estando as suas saídas ligadas a ambos os destinos, {E1, E0}, o resultado (após o flanco
descendente do clock) será este: ambos os registos irão ficar com uma cópia de ‘W1’; ora, não é isso que se deseja:
tem-se em vista a transferência de ‘W1’ para, apenas, ‘E0’. Donde a pergunta: como garantir que somente ‘E0’ irá
receber o conteúdo de ‘W1’? A resposta volve-se em dois cuidados:
– dotar os registos destino duma entrada, ‘M2’, para providenciar a escolha entre dois modos de funcionamento:
– quando ‘M2’ está activa – modo de funcionamento dito de “Load” –, é escrito no registo o valor que se
encontrar nas entradas dos flip-flops (vidé qualificador ‘1,2D’);
– caso contrário – modo de funcionamento dito de “Hold” –, o registo não sofre qualquer alteração.
– controlar essa entrada ‘M2’, implantando um descodificador, no caso com uma única entrada de selecção,
‘D’: conforme ela for ‘0’ ou ‘1’, assim o destino seleccionado será ‘E0’ ou ‘E1’.
Então, para lograr a transferência de ‘W1’ para ‘E0’, bastará forçar {S1=0, S0=1} e D=0: com este valor de ‘D’,
a saída do descodificador que advém activa é aquela numerada ‘0’ – e portanto somente no registo ‘E0’ é que
ficará activado o modo de funcionamento “Load”: somente ele é que receberá o conteúdo de ‘W1’; por um
raciocínio análogo, para lograr a transferência de ‘W3’ para ‘E1’, bastará forçar {S1=1, S0=1} e D=1.
De realçar no logigrama ao lado aquilo a que se chama de barramento (bus): um conjunto de linhas ‘paralelas’
transportando sinais do mesmo tipo, que no caso são os bits que compõem o conteúdo da fonte seleccionada –
para os tornar acessíveis aos vários destinos.
Será pacífico generalizar a solução a que se chegou, concretizada no logigrama ao lado, a um maior número de
registos fonte e/ou de registos destino… Todavia, é importante realçar a diferença que existe entre ela e a
precedente, com um-multiplexer-por-destino: antes, conseguia-se proceder a duas transferências em simultâneo,
mas agora só é possível executar uma transferência de cada vez; aplicado ao Projecto entre mãos: refresca-se
primeiro o registo de destino ‘E0’, e somente depois se refresca o registo ‘E1’.
Essa limitação é a contrapartida da economia feita em termos dos multiplexers… Haverá Projectos em que ela é
inaceitável – pelo que se deverá optar pela solução “um-multiplexer-por-destino”; mas haverá outros em que o não
é, isto é: é aceitável executar uma transferência de cada vez – pelo que a melhor solução será, com grande
probabilidade, fazê-lo mediante um “bus”.
Ainda assim, a um olhar atento não escapará que ela envolve multiplexers com 2M entradas de dados. Daí, uma
suspeita: haverá outra solução não tão gastadora de multiplexers? É o que se vai ver.
Sistemas Digitais (Part III)
Page 66 of 111
Sistemas Digitais (Part III)
Registos
Page 67 of 111
/ Bus e 3-State
No sentido de simplificar ainda mais o logigrama a que se chegou, convirá recordar as “Saídas 3-state / Alta
Impedância” abordadas a propósito de multiplexers:
Uma saída 3-state é uma saída que, além dos níveis eléctricos {Low, High} representando os valores lógicos ‘0’
e ‘1’, apresenta um terceiro estado, de alta impedância, equivalente a um circuito aberto: por aquela saída não
flui “nenhuma” corrente eléctrica, é como se ela, internamente, não estivesse ligada a nada!
Naturalmente, é mister controlar essa saída, isto é: forçá-la a funcionar em 3-state ou como saída “normal” de
bits; isso é feito mediante uma entrada comummente designada de output-enable: sse ela estiver inactiva, a saída é
considerada no estado de alta impedância.
Isto recordado, e tendo como ponto de partida o logigrama com bus a que se chegou, poderão eliminar-se os
multiplexers desde que se tomem as duas seguintes medidas:
– prover os flip-flops dos registos fonte com saídas 3-state (repare-se no símbolo que qualifica as suas saídas:
um triângulo “de cabeça para baixo”); e dotá-los de uma entrada, ‘EN’, comummente designada de output-enable:
sse ela estiver inactiva, essas saídas são consideradas no estado de alta impedância…
– controlar essa entrada ‘EN’, implantando um descodificador, no caso com duas entradas de selecção, {S1,
S0}: conforme os seus valores, assim a fonte seleccionada será uma entre {W3, W2, W1, W0}.
Globalmente, pois, o logigrama fica com dois descodificadores:
– um, mais à esquerda, ‘S’, que selecciona a fonte/source, entre {W3, W2, W1, W0};
– um outro, mais à direita, ‘D’, que selecciona o destino, entre {E1, E0}.
De novo, para lograr a transferência de ‘W1’ para ‘E0’, bastará forçar {S1=0, S0=1} e D=0: com aqueles valores
de {S1, S0}, a saída do descodificador ‘S’ que advém activa é aquela numerada ‘1’ – e portanto somente no registo
‘W1’ é que ficará activada a entrada EN/output-enable: somente ele é que apresentará na saída o seu conteúdo.
Quantos aos demais registos, as suas entradas EN ficarão inactivas – e portanto as suas saídas ficarão em altaimpedância.
As consequências vêm a ser as seguintes: no bus, apenas se vislumbram os bits que provêm do registo ‘W1’ –
que é o que se pretende: transferir para ‘E0’ o conteúdo de ‘W1’. Mas, perguntar-se-á: será lícito ignorar as saídas
dos outros registos fonte? A resposta é: sim, é lícito – pois que estão em alta-impedância: nesse estado, não
interferem com coisa nenhuma, é como se não estivessem lá, nem sequer existissem!
De realçar no logigrama ao lado que as linhas do bus são marcadas com setas para cima e para baixo – para
denotar que a informação provinda de um registo se propaga em ambos os sentidos – com isso ficando acessível a
todos os destinos (cujas entradas lhe estejam ligadas)
Será pacífico generalizar a solução a que se chegou a um maior número de registos fonte e/ou destino: ligam-se
ao bus as saídas de todas as fontes e as entradas de todos os destinos – e recorre-se a dois descodificadores, ‘S’ e
‘D’, para seleccionar os parceiros da transferência…
Sistemas Digitais (Part III)
Page 68 of 111
Sistemas Digitais (Part III)
Registos
Page 69 of 111
/ Bus-bidireccional
Até agora, os logigramas envolveram dois tipos de registos: registos fonte e registos destino.
Há casos, entretanto, onde convém que o mesmo registo seja fonte-e-destino! Apreendidas as metodologias
abordadas até agora para transferir um registo fonte para um registo destino, será trivial generalizá-las a esses
casos assim. Entretanto, para ilustrar um desses casos, será oportuno um novo Projecto…
Para construir um jogo de xadrez electrónico, um projectista decidiu recorrer a um conjunto de 8×8 registos
para memorizar a posição corrente das peças. Cada registo codifica em 4-bits a peça (rei, rainha, bispo, cavalo,
torre, peão, e respectiva côr: branca-ou-preta) que ocupa uma casa do tabuleiro… Pretende-se a estrutura de
interligação dos registos.
Poder-se-á contestar a opção do Projectista, que se poderá imaginar algum outro modo de fazer as coisas… mas
ela basta para o objectivo em mente: ilustrar um caso em que cada registo ‘funciona’ como fonte e como destino…
Neste Projecto, existem 64 registos, cada um podendo funcionar como fonte e destino; por exemplo, a dama
pode movimentar-se de uma qualquer casa/registo para ‘qualquer’ outra casa/registo… Isso significa a necessidade
de 6 entradas para seleccionar a fonte (o registo onde está actualmente a dama), e outras tantas para seleccionar o
destino (o registo para onde a dama se vai movimentar).
Isso remete para dois descodificadores 6:64 – cada um dos quais se pode resolver sob a forma de uma árvore de
descodificadores 3:8; esta estratégia facilita aliás o interpretar essa árvore como plasmando dois níveis de
selecção: selecciona-se a linha da casa/registo alvo, e, no seio dela, selecciona-se a coluna dessa casa/registo…
Ao lado, encontra-se um logigrama conforme essa estratégia:
– a parte central é um bus (cuja parte ‘média’ está ‘subentendida’);
Subentende-se que as linhas do bus são bidireccionais: a informação provinda da fonte seleccionada propagase em ambos os sentidos – com isso ficando acessível a todos os destinos;
– a esse bus, e pois que todos os registos podem ser fonte, encontram-se ligadas as saídas de todos os flip-flops;
de notar que essas saídas são 3-state e que os registos têm uma entrada EN/output-enable;
– a esse bus, e pois que todos os registos podem ser destino, encontram-se também ligadas as entradas dos seus
flip-flops; de notar que os registos têm uma entrada, ‘M2’, que necessita estar activa para que o registo carregue em
paralelo o valor que se encontrar nessas entradas;
(Por mor de não carregar desnecessariamente o logigrama, ‘subentenderam-se’ as linhas que alimentam as
entradas clock dos registos – que, como se intui, se ligam directamente ao mesmo gerador de impulsos de relógio)
– para seleccionar o registo fonte, implantou-se uma árvore de descodificadores, de dois níveis:
– no nível de topo: ‘S’, que selecciona a linha em que ele se encontra, entre {0, 1, 2, …, 7};
– no nível inferior:
– ‘S0’, que, da linha ‘0’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7};
– ‘S1’, que, da linha ‘1’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7}…
– para seleccionar o destino, implantou-se uma outra árvore de descodificadores, de dois níveis:
– no nível de topo: ‘D’, que selecciona a linha em que ele se encontra, entre {0, 1, 2, …, 7};
– no nível inferior:
– ‘D0’, que, da linha ‘0’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7};
– ‘D1’, que, da linha ‘1’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7}…
Então, para levar por diante o movimento de uma peça de um registo para um outro registo, bastará aplicar as
‘coordenadas’ da fonte nas (6) entradas da árvore que selecciona a fonte, e aplicar as ‘coordenadas’ do destino nas
(6) entradas da árvore que selecciona o destino… Com isso, ficarão activas a entrada EN/output-enable da fonte e
a entrada ‘M2’ do destino: no clock seguinte, este passará a conter o que estava na fonte (deixando-se ao leitor
discernir como fazer para que o registo fonte advenha ‘em branco’…).
Porventura contestará o leitor que não há de novo… e de facto quiçá a única novidade seja a seguinte: por mor
de diminuir o esforço do Projectista, já o mercado disponibiliza registos em que as entradas e saídas dos seus flipflops se encontram internamente soldadas, vidé ao lado. Oferecem saídas 3-state, e entradas clock, EN/outputenable e ‘M2’, e um conjunto de pinos de entrada-e-saída (IO: Input-Output), dito de Bus-bidireccional.
Sistemas Digitais (Part III)
Page 70 of 111
Sistemas Digitais (Part III)
Síntese não-clássica: 1-hot / 1 FlipFlop por-Estado/
Page 71 of 111
20aº Projecto
Reveja-se o itinerário de circuitos sequenciais: num primeiro passo, fez-se o elenco dos seus tijolos básicos
específicos; depois, discutiu-se a metodologia geral concernindo a sua síntese; as últimas sessões foram dedicadas
a dois blocos sequenciais general purpose (contadores e registos). Esta sessão dedica-se precisamente ao seu uso
para a síntese de circuitos sequenciais… Numa primeira fase, abordar-se-á o uso de registos para essa síntese – e,
tal como as demais sessões, ir-se-á partir de um Projecto concreto…
Considere uma sala de acesso restrito, em cuja entrada se encontra um teclado com 4 teclas {0, 1, 2, 3}. É
preciso clicar uma “chave” para se poder entrar… Um circuito activa a abertura da porta se e só se as últimas
teclas premidas tiverem sido ‘2213’.
O ponto crítico é o desenho do seu Diagrama de Estados – que neste caso é bem trivial, vidé ao lado:
Antes de mais, e porquanto as teclas são quatro, será pacífico codificá-las num par de bits, {T1, T0}…
Optando pelo modelo de Mealy,
1. No momento em que se faz o power-on, o circuito ingressa no estado ‘Rdy/Ready’;
2. À medida que as teclas vão sendo premidas acompanhando o padrão ‘2213’ – isto é, o circuito vai recebendo
sucessivamente os di-bits ‘10’, ‘10’ e ‘01’ -, o circuito ingressa sucessivamente nos estados ‘S2’, ‘S22’ e ‘S221’;
neste estado, e se e só se o circuito receber ‘11’, a saída ‘Z’ volve-se ‘1’ – e ele regressa ao estado inicial, ‘Rdy’.
Deixa-se ao leitor conferir como procede o circuito se o premir das teclas não acompanhar a “chave”…
De imediato, converte-se o Diagrama de Estados na Tabela de Estados/Saída. Conforme ao método clássico de
síntese, e porquanto são em número de 4 os estados da Tabela, serão necessários e suficientes 2 flip-flops… O
método que se abordará agora, dito de ‘1 Hot’ ou ‘1 flip-flop por estado’, opta em contrapartida por usar um
registo com tantos flip-flops D quantos os estados em causa (no caso 4) – e com uma característica peculiar: só um
dos flip-flops está a ‘1’, os demais encontram-se a ‘0’.
Deixando para mais tarde a justificação de tal estratégia, o passo seguinte é fazer corresponder um estado a
cada combinação dos flip-flops. Concretamente, para a combinação em que só Q0=1, faz-se corresponder o estado
‘Rdy’; para aquela em que só Q1=1, faz-se corresponder ‘S2’; e assim por diante, vidé codificação ao lado…
Para o que se segue, convirá renomear os estados: cada estado fica com um nome que é o do flip-flop que
advém ‘1’ quando o circuito se encontra nesse estado. Isto é, o estado ‘Rdy’ passará a denominar-se ‘Q0’; ‘S2’
passará a denominar-se ‘Q1’; e assim por diante – o resultado vindo a ser a Tabela de Estados/Saída ao lado.
Doravante, ‘Qi’ terá então dois significados: é o nome/saída de um flip-flop e é o nome de um estado.
Isso viabiliza o escrever de imediato as expressões algébricas da saída ‘Z’ e das entradas dos flip-flops:
– ‘Z’ é ‘1’ quando o estado do circuito é ‘Q3’ e os di-bits recebidos são ‘11’; mas dizer que o circuito está no
estado ‘Q3’ equivale a dizer que o flip-flop ‘Q3’ (e só ele) está a ‘1’; ou seja: Z=1 quando Q3=1 e T1=T0=1; isto
soa, é claro, a um termo de produto, Z=Q3T1T0;
– o estado seguinte do circuito será ‘Q3’ só quando o estado actual for ‘Q2’ e os di-bits recebidos forem ‘01’;
mas isso equivale a dizer que o flip-flop ‘Q3’ ficará a ‘1’ só quando o flip-flop ‘Q2’ estiver a ‘1’ e se receber ‘01’;
ou seja: Q3(t+1)=1 só quando Q2=1 e T1=0 e T0=1; e por conseguinte, ‘D3’ deverá ser ‘1’ só quando Q2=1 e T1=0 e
T0=1; daqui se deduz a expressão algébrica de ‘D3’, que será outro termo de produto…
– o estado seguinte do circuito será ‘Q2’ só quando os di-bits recebidos forem ‘10’ e o estado actual for ‘Q1’
ou‘Q2’; mas isso equivale a dizer que o flip-flop ‘Q2’ ficará a ‘1’ só quando se receber ‘10’ e estiver a ‘1’ um dos
flip-flops ‘Q1’ ou ‘Q2’; ou seja: Q2(t+1)=1 só quando T1=1 e T0=0 e Q2=1 ou Q2=1; e por conseguinte, ‘D2’ deverá
ser ‘1’ só quando T1=1 e T0=0 e Q2=1 ou Q2=1; daqui se deduz a expressão algébrica de ‘D2’…
– deixa-se ao leitor a dedução das expressões algébricas de ‘D1’ e ‘D0’…
Este método de síntese, não-clássico, é sugestivo em Projectos de pequena ou média dimensão; conquanto
signifique um maior número de flip-flops, a lógica combinatória poderá advir mais simples – e, no caso particular
de se usar a tecnologia de fabrico CMOS, há uma economia de potência, pois que, a haver mudança de estados,
somente dois flip-flops mudarão de facto de estado…
Naturalmente, exige que, no power-on, o circuito seja mesmo posto no estado inicial, que no caso é ‘0001’…
Será entretanto conveniente dedicar algum tempo mais a este método…
Sistemas Digitais (Part III)
Page 72 of 111
Sistemas Digitais (Part III)
Síntese não-clássica: 1-hot / 1 FF Por-Estado/
Page 73 of 111
20bº Projecto (Gerador de Paridade Hamming)
A lei do menor esforço recomenda reavaliar os passos seguidos na síntese ‘1 Hot’ ou ‘1 flip-flop por estado’,
quiçá se chegue a uma metodologia mais simples… E deixando ao leitor aplicar o que adiante se diz ao Projecto
anterior, ir-se-á partir de um Projecto concreto novo…
O contexto desse Projecto é o da transmissão (ou armazenamento) de bits de informação. Pois que os suportes
para o efeito não são ideais (não estão isentos de falhas), é provável que alguns deles se corrompam: transmite-se
um ‘1’, e no final vem a receber-se um ‘0’ (ou vice-versa)… Em algumas aplicações, justificar-se-á acrescentarlhes uma informação especial para controlo de erro – para que, aquando da recepção dos bits, se descubra quais
deles estão mesmo errados (que, sabendo-o, a sua correcção se bastará, obviamente, na inversão desses bits
errados). Um dos métodos usados suporta-se naquilo que se designa codificação Hamming, ficando o leitor curioso
remetido para pesquisar na Internet (por exemplo) a sua justificação…
A propósito da codificação Hamming convém dispor dum circuito sequencial síncrono que, por cada trio de bits
que recebe, produz ‘1’ se e só se o número de ‘1’s no trio for ímpar (depois, o circuito regressa ao estado inicial).
O ponto crítico é o desenho do seu Diagrama de Estados – que neste caso é bem trivial, vidé ao lado:
Optando pelo modelo de Moore,
1. No momento em que se faz o power-on, o circuito ingressa no estado ‘Rdy’;
Doravante, há que ir registando quantos bits se receberam já, e se foram em número par ou ímpar:
2. Se o primeiro bit recebido for ‘1’, o circuito ingressa num estado ‘I1’ que significa que se recebeu já um bit e
que o número de ‘1’s recebidos até então foi ímpar; se se voltar a receber outro ‘1’, o circuito ingressa num estado
‘P2’ que significa que se receberam já dois bits e que o número de ‘1’s já recebidos foi par; até então (isto é: nos
estados ‘Rdy’, ‘I1’ e ‘P2’), as saídas foram sempre ‘0’ – pois ainda se não receberam três bits; mas, se se voltar a
receber outro ‘1’, o circuito ingressará no estado ‘I3’, que significa que se receberam já três bits e que o número de
‘1’s recebidos até então foi ímpar – pelo que, nele, a saída será ‘1’;
Deixa-se ao leitor conferir como procede o circuito se receber outras sequências de três bits…
Trata-se agora de aplicar o método de síntese ‘1 Hot’ ou ‘1 flip-flop por estado’, com algumas alterações que
serão certamente pacíficas e bem-vindas:
– antes de mais, e porquanto o Diagrama de Estados exibe 7 estados, o logigrama irá volver-se num registo com
outros tantos flip-flops – e com a sabida característica: só um deles estará a ‘1’, os demais encontram-se a ‘0’;
– o passo seguinte seria normalmente preencher a Tabela de Estados/Saída – mas, antevendo a renomeação dos
estados, é preferível fazê-lo já, inscrevendo os nomes {Q0, Q1, …, Q6} no próprio Diagrama, vidé ao lado;
– o passo seguinte seria preencher a Tabela de Estados/Saída com os novos nomes dos estados – mas de facto,
nem sequer isso é absolutamente necessário, basta consultar visualmente o próprio Diagrama (renomeado):
– constata-se que só numa situação é que a saída ‘Z’ toma o valor ‘1’: precisamente no estado ‘Q6’ – isto é,
no único estado em que o flip-flop ‘Q6’ (e só ele) estará a ‘1’! Será então pacífica a expressão algébrica de ‘Z’ …
– constata-se que só em duas situações é que se ingressa no estado ‘Q0’: quando o estado actual do circuito
é ‘Q3’ ou ‘Q6’: se o circuito estiver em algum destes estados, e independentemente do valor do bit que nele é
recebido (note-se o símbolo de indiferença, ‘X’, que rotula as setas que se dirigem desses estados para ‘Q0’) – o
estado seguinte será ‘Q0’; por outras palavras: para que, após o clock, seja ‘Q0’ o flip-flop a ‘1’, deverá
actualmente estar a ‘1’ algum dos flip-flops ‘Q3’ ou ‘Q6’; deverá então ser pacífica a expressão algébrica de ‘D0’ …
– constata-se que só numa situação é que se ingressa no estado ‘Q1’: quando o estado actual do circuito é
‘Q0’ e o bit recebido é ‘0’; por outras palavras: para que, após o clock, seja ‘Q1’ o flip-flop a ‘1’, deverá
actualmente estar a ‘1’ o flip-flop ‘Q0’ e o bit ‘B’ recebido ser ‘1’; deverá ser pacífica a expressão de ‘D1’ …
– deixa-se ao leitor discernir as expressões de {D2, D3, …, D6}, pela repetição do raciocínio acima: para
cada um dos outros estados, verificar como é que se ingressa nele – o que se volve em captar as setas que para ele
apontam; verificar, para cada uma delas, qual o seu estado de partida e qual o bit recebido que a motiva – e
converter tudo isso num enunciado SOP, e logo depois numa expressão algébrica…
Não se poderá esquecer de, no power-on, forçar o circuito a ingressar no estado inicial, ‘0000001’… De facto,
é imperioso que ao longo do tempo se verifique que um e um só dos flip-flops esteja a ‘1’ – e aqui reside uma
vulnerabilidade do método: radiação cósmica sobre os flip-flops pode fazer transitar o registo 1-hot para um registo
0–hot ou 2-hots…
Sistemas Digitais (Part III)
Page 74 of 111
Sistemas Digitais (Part III)
Síntese não-clássica: com Contadores/
Page 75 of 111
20cº Projecto
O Diagrama do 20aº Projecto exibe 4 estados; o método clássico conduziria a 2 flip-flops – mas o método ‘1
Hot’ conduz a 4 flip-flops D… Semelhantemente, o Diagrama do 20bº Projecto exibe 7 estados; o método clássico
conduziria a 3 flip-flops – mas o método ‘1 Hot’ conduz a 7 flip-flops D… Há uma notória diferença entre as
quantidades de flip-flops exigidas por um e outro método – e, sendo no método ‘1 Hot’ o número de flip-flops igual
ao número de estados, adivinha-se a angústia do projectista: o Diagrama que ele desenhou será o mais simples que
responde ao Projecto que tem entre mãos? Será possível simplificá-lo, descartando estados “a mais”? Prometendo
uma resposta a esta interrogação para mais adiante ainda nesta sessão, ir-se-á antes abordar o uso de contadores
para a síntese de circuitos sequenciais – naturalmente a partir de um Projecto concreto…
Pretende-se um circuito que activa um laser sobre um paciente durante 40 μseg; é activado por um botão Start.
Dispõe-se de um relógio que gera impulsos com o período de 10 μseg.
O ponto crítico é o desenho do seu Diagrama de Estados – que neste caso é bem trivial, vidé ao lado:
Pressuposto que se insere, na saída do relógio, um AND activado por Start, e optando pelo modelo de Moore,
1. No momento em que se faz o power-on, o circuito ingressa no estado ‘C0’ – e a saída fica sendo Z=0;
2. Quando se prime o botão Start, os impulsos de relógio são habilitados a atingir a entrada clock do circuito:
– o primeiro faz ingressar o circuito no estado ‘C1’ – e a saída fica sendo Z=1;
– o segundo, terceiro e quarto impulsos, que ocorrem a intervalos de 10 μseg, fazem transitar o circuito
sucessivamente para os estados ‘C2’, ‘C3’, ‘C4’ – continuando a saída a ser Z=1;
– quando ocorre o impulso de relógio seguinte, já a saída ‘Z’ esteve activa um total de 40 μseg, pelo que o
circuito ingressa no estado ‘C5’ – a saída regressando a Z=0, e ai permanecendo doravante até ao power-off…
Não serão de admirar os nomes ‘Ci’ atribuídos aos estados: em termos práticos, contam os impulsos clock já
recebidos (‘C5’ tem um significado ligeiramente diferente: explicita que já se receberam pelo menos 5 impulsos).
Deixa-se ao leitor a aplicação do método clássico para a síntese de tal Diagrama de Estados: converte-se o
Diagrama na Tabela de Estados/Saída, etc., etc..
Em seu lugar, ir-se-á abordar agora um outro método, dito de ‘por contador’, porquanto se baseia no uso de um
contador com um módulo que cubra o número de estados presentes no Diagrama: de facto, se se olhar atentamente
para o Diagrama, ele evoca um contador, a diferença sendo que, no estado ‘C5’, o circuito não retorna ao estado
‘C0: permanece em ‘C5’ (subentendendo-se que a inicialização do circuito se faz por entradas assíncronas Clear).
Ora, desde o 18cº Projecto (versando um dado electrónico), que deverá ser trivial a modificação dum contador:
pressupondo que ele disponibiliza dois modos de funcionamento,
– um deles, seja ‘M1’, ficaria activo enquanto fosse hora de o contador incrementar {0, 1, 2, 3, 4, 5};
– e o outro, seja ‘M4’, para carregar em paralelo o valor ‘5’ – que deveria advir activo quando o contador
atingisse o valor ‘5’, e apenas então.
Ainda que da asserção acima se possa mentalmente desenhar de imediato o logigrama do circuito, e antevendo
Projectos não tão simples, será preferível entretanto plasmá-la em Mapas de Karnaugh que deverão ser pacíficos:
– à esquerda, dispõem-se, em binário reflectido, colunas representando as saídas do contador, {Q2, Q1, Q0};
– subentendendo que se usa o CBN na codificação dos estados (as saídas do contador volvem-se nos códigos
binários dos valores {0, 1, …5}), rotulam-se (com {C0, …, C5}) as combinações admissíveis dessas saídas;
– de seguida, elabora-se os Mapas de Karnaugh de “três” funções, a saber:
– a saída, ‘Z’, do circuito: fica a ‘1’ nos estados {C1, C2, C3, e C4};
– uma função, ‘L’, que sinalize (na prática: fique activa) quando e apenas quando se deve ‘quebrar’ a
contagem – isto é: provocar o Load dalgum valor particular; no caso, deverá ficar a ‘1’ no estado ‘C5’, e só nele;
– três funções, {D2, D1, D0}, que explicitem o valor a carregar em paralelo quando ‘L’ advir activa: no caso,
deverão volver-se no código binário do estado ‘C5’, que é ‘101’; para todas as combinações em que L=0 – isto é,
não se procede ao carregamento em paralelo -, são, é claro, irrelevantes (‘X’) os valores de {D2, D1, D0};
– preenchem-se com o símbolo de indiferença, ‘X’, os valores das funções para as combinações {110, 111}
que nunca deverão ocorrer…
Aplicando então o método de Karnaugh, obtêm-se as expressões de ‘Z’ e ‘L’, e {D2, D1, D0} – e procede-se ao
desenho do logigrama, vidé ao lado. A propósito deste, um cuidado há a ter: pois que ‘M4’ é activo a Low, a saída
do AND que produz ‘L’ deverá ser activa a Low…
Sistemas Digitais (Part III)
Page 76 of 111
Sistemas Digitais (Part III)
Síntese não-clássica: com Contadores
Page 77 of 111
/ 20dº Projecto (Detector de Mudança de Nível)
No desenho do circuito para o projecto precedente, optou-se pelo modelo de Moore – mas o método de síntese
‘por contador’ é outrossim aplicável se se optar pelo modelo de Mealy. Quiçá um novo Projecto o possa ilustrar…
Pretende-se um circuito sequencial síncrono que analise grupos de três bits: a saída é ‘1’ se e somente se
tiverem um número par de mudanças ‘1→0’ ou ‘0→1’ (por exemplo, ‘001’ tem uma mudança, e ‘101’ tem duas).
O ponto crítico é o desenho do seu Diagrama de Estados – que neste caso é bem trivial, vidé ao lado:
1. No momento em que se faz o power-on, o circuito ingressa no estado ‘Rdy’;
2. Independentemente do valor do primeiro bit ‘X’ a ser recebido, a saída é ‘0’. Entretanto, e consoante ele for
‘0’ ou ‘1’, assim se ingressa no estado ‘S0’ ou ‘S1’;
3. Independentemente do valor do segundo bit, a saída continuará a ser ‘0’. Entretanto, e consoante ele for ‘0’
ou ‘1’ (e consoante o estado, ‘S0’ ou ‘S1’, em que ele é recebido), assim se ingressa no estado ‘S00’ ou ‘S01’, ‘S10’ ou
‘S11’… No fundo, está-se a desenhar uma árvore binária (cada nó/estado tem dois ramos, rotulados ‘0’ e ‘1’) em
que, exceptuando o estado inicial, cada nó é nomeado pelo conjunto de bits recebidos até se ingressar nele…
4. Independentemente do valor do terceiro bit a ser recebido, é claro que o circuito irá retornar ao estado inicial;
só resta discernir qual a saída… A esse respeito: se ele estiver no estado ‘S00’ e receber um ‘0’ – o que significa no
fim de contas que o grupo recebido foi ‘000’ – então a saída será ‘1’ (houve ‘zero’ mudanças, e ‘0’ é par); mas se
receber um ‘1’, ela será’0’… Deixa-se ao leitor conferir da exactidão das demais saídas exibidas no Diagrama…
O Diagrama logrado exibe 7 estados – e, se o desafio fora o de analisar grupos de 4 bits, intui-se que a árvore
‘explodiria’ para 15 estados, donde a angústia já atrás assinalada: o Diagrama desenhado será o mais simples que
responde ao Projecto que tem entre mãos? Será possível simplificá-lo, descartando estados “a mais”?
Não cabendo neste itinerário uma resposta exaustiva a essa interrogação, ainda assim sobra espaço para uma
suspeita: porventura ao traçar-se a árvore se inventaram estados novos quando isso de facto não era em absoluto
necessário, que poderiam ter-se aproveitado estados já inventados… Dois estados assim, em que um é clone do
outro, pois exibe o mesmo comportamento, dizem-se equivalentes; então uma praxis a seguir doravante aquando
do desenho do Diagrama de Estados, será procurar nele estados clones/equivalentes – e condensá-los em um único!
Para concretizar, analise-se o Diagrama que se obteve ao lado: é notório que os estados ‘S00’ e ‘S01’ são clones:
se o circuito estiver em qualquer um desses estados, ele, aquando do clock seguinte, transita para o estado ‘Rdy’ –
e, além disso: se receber o bit ‘0’, a saída é ‘1’; e se receber o bit ‘1’, a saída é ‘0’.
Algo similar ocorre para os estados ‘S10’ e ‘S11’: também eles são clones; de facto, se o circuito estiver em
qualquer desses estados, e qualquer que seja o bit recebido, a saída será a mesma e o estado seguinte é o mesmo.
E se são clones, quer dizer que há estados a mais: cada par deve ser condensado em um único estado; no caso,
descarta-se o estado ‘S01’ – e a seta que para ele se dirige, provinda de ‘S0’, é reorientada para ‘S00’; de modo
semelhante, descarta-se o estado ‘S10’ – e a seta que para ele se dirige, provinda de ‘S1’, é reorientada para ‘S11’.
No total, portanto, são suficientes 5 estados para especificar o circuito pretendido.
É hora de aplicar o método de síntese ‘por contador’ – começando por renomear os estados em {C0, …, C4};
procura-se uma trajectória fechada que, partindo do estado inicial, ‘Rdy’, visite todos os estados, após o que se
renomeiam consecutivamente começando em ‘C0’; ela deve ser tanto quanto possível contínua (isto é: tentando
evitar “descontinuidades” – o que implica dar primazia, em cada estado, a prosseguir por uma das setas que dele
saem), como seja Rdy→S0→S00→S1→S11→Rdy.
Preenchem-se depois os Mapas de Karnaugh de ‘Z’, ‘L’ e {D2, D1, D0} em função de {Q2, Q1, Q0} e do bit ‘X’:
– a saída do circuito fica a ‘1’ apenas em duas circunstâncias: quando o circuito se encontra no estado ‘C2’ e se
recebe ‘0’, ou quando o circuito se encontra no estado ‘C4’ e se recebe ‘1’;
– ‘L’ advém activa quando e apenas quando se deve ‘quebrar’ a contagem; isso sucede quando o circuito se
encontra no estado ‘C0’ e se recebe ‘1’ (em vez de incrementar para ‘C1’, deverá “saltar” para ‘C3’) ou quando o
circuito se encontra no estado ‘C4’ (em vez de incrementar para ‘C5’, deverá “saltar” para ‘C0’); em consonância,
no primeiro caso deve carregar-se o valor ‘011’ , e no segundo deverá carregar-se ‘000’;
– preenchem-se com o símbolo de indiferença, ‘X’, os valores das funções para as combinações {101, 110, 111}
que nunca deverão ocorrer… e os valores de {D2, D1, D0} para os casos em que L=0 (não há Load)…
Resta obter as expressões de ‘Z’ e ‘L’, e {D2, D1, D0} – e proceder ao desenho do logigrama…
Sistemas Digitais (Part III)
Page 78 of 111
Sistemas Digitais (Part III)
Síntese não-clássica: com Contadores
Page 79 of 111
/ 20eº Projecto (Conversor de BCD para D+3)
A terminar esta sessão, não será uma inútil perda de tempo volver de novo a atenção para a importância de
detectar estados clones, e de os condensar…
Pretende-se um circuito sequencial síncrono que recebe dígitos codificados em BCD e produz as
correspondentes palavras do código D+3. O primeiro bit a ser recebido é o de menor peso.
O ponto crítico é o desenho do seu Diagrama de Estados – que neste caso é bem trivial, vidé ao lado:
1. No momento em que se faz o power-on, o circuito ingressa no estado ‘Rdy’;
2. Confrontando as colunas de menor peso dos códigos BCD e D+3, constata-se que elas são o inverso uma da
outra – pelo que a saída correspondente ao primeiro bit a ser recebido vem a ser o inverso desse bit; e conforme ele
for ‘0’ ou ‘1’, assim se transita para o estado ‘S0’ ou ‘S1’;
3. Admita-se agora que, estando o circuito no estado ‘S0’, ele recebe um novo bit; restringindo a atenção apenas
às palavras do código BCD onde o bit de menor peso é ‘0’ (pois se está no estado ‘S0’), constata-se que a saída
correspondente ao segundo bit a ser recebido é igual a esse bit; e conforme ele for ‘0’ ou ‘1’, assim se transita para
‘S00’ ou ‘S10’ (As etiquetas dos estados denotam então os conjuntos de bits recebidos, com o menor peso à direita);
deixa-se ao leitor conferir a evolução do circuito quando ele se encontra em ‘S1’ e recebe o segundo bit;
4. Admita-se agora que, estando o circuito no estado ‘S00’, ele recebe um outro bit; restringindo a atenção
apenas às palavras do código BCD onde os bits de menor peso são ‘00’, constata-se que a saída correspondente ao
terceiro bit a ser recebido é o inverso desse bit; e conforme ele for ‘0’ ou ‘1’, assim se transita para o estado ‘S000’
ou ‘S100’; deixa-se ao leitor conferir a evolução do circuito nos estados ‘S10’, ‘S01’ e ‘S11’;
5. Admita-se enfim que, estando o circuito em ‘S000’, ele recebe o último bit; restringindo a atenção só às
palavras do código BCD onde os bits de menor peso são ‘000’, nota-se que a saída correspondente ao quarto bit a
ser recebido é o inverso desse bit; e, independentemente do seu valor, o circuito retorna ao estado inicial, ‘Rdy’;
deixa-se ao leitor conferir a evolução do circuito nos estados ‘S100’, ‘S010’ , ‘S110’, ‘S001’, ‘S101’, ‘S011’ e ‘S111’…
De novo, o logigrama volve-se numa árvore binária (cada nó/estado tem dois ramos, rotulados ‘0’ e ‘1’) em
que, exceptuando o estado inicial, cada nó é nomeado pelo conjunto de bits recebidos até se ingressar nele…
Isso pode ser um convite à aplicação desta estratégia a todos os Projectos de circuitos sequenciais… mas não é
lá muito recomendável: a nítida explosão de estados a que se chega é uma ameaça à tranquilidade do projectista: o
Diagrama que ele desenhou será o mais simples que responde ao Projecto que tem entre mãos? Será possível
simplificá-lo, descartando estados “a mais”? (Abra-se um parêntesis: reconhecendo que o código D+3 se obtém a
partir do código BCD somando ‘0011’, o logigrama a que se chegaria expandir-se-ia por bem menos estados).
Ora, quanto a essas interrogações, já se referiu uma técnica para simplificar o Diagrama de Estados: procurar
nele estados clones/equivalentes – e condensá-los em um único! Ora, não custa discernir:
– o estado seguinte para todos os estados etiquetados por 3 bits é o mesmo estado, ‘Rdy’; ademais,
– para os estados ‘S000’, ‘S100’, ‘S010’, ‘S001’ e ‘S011’ , a saída correspondente ao último bit a ser recebido é
sempre a mesma: igual ao bit recebido; então, exibindo o mesmo estado seguinte, e as mesmas saídas para os
mesmos bits recebidos, eles são clones uns dos outros: devem ser condensados, em um único, seja ‘S000’;
– para os estados ‘S110’, ‘S101’ e ‘S111’ , a saída correspondente ao último bit a ser recebido é sempre a
mesma: ‘1’; então, eles são clones uns dos outros: devem ser condensados, em um único, seja ‘S111’;
– feita essa condensação, é hora de considerar os estados etiquetados por 2 bits;
– constata-se que, relativamente aos estados ‘S10’, ‘S01’ e ‘S11’: se o bit recebido for ‘0’, o estado seguinte é o
mesmo, ‘S000’ e a saída é também a mesma, ‘1’; e se o bit recebido for ‘1’, o estado seguinte é o mesmo, ‘S111’ e a
saída é também a mesma, ‘0’; então, são clones uns dos outros: devem ser condensados, em um único, seja ‘S11’;
Resumindo: partindo de um Diagrama de Estados com 15 estados, chegou-se a um Diagrama de Estados com
apenas 7 estados: um descarte de 8 estados – o que é obra!
Se fora de aplicar o método dito de ‘1 Hot’ ou ‘1 flip-flop por estado’, ter-se-iam então poupado 8 flip-flops, o
que não é despiciente… mas a promessa acima é a de aplicar o método de síntese ‘por contador’… Quanto a isso,
a primeira etapa é renomear os estados em {C0, …, C6}; convém procurar uma trajectória que, partindo do estado
inicial, visite todos os estados, e renomeia-se consecutivamente começando em ‘C0’; há que minimizar
“descontinuidades” – o que implica dar primazia, em cada estado, a prosseguir por uma das setas que dele saem.
Sistemas Digitais (Part III)
Page 80 of 111
Sistemas Digitais (Part III)
Síntese não-clássica: com Contadores
Page 81 of 111
/ Síntese com Contador
A advertência “Se sobrar tempo na aula…” denota que nada essencialmente novo se pode esperar das linhas
adiante: o desafio é construir o circuito que concretiza o logigrama ao lado seguindo o método de síntese ‘por
contador’ – e ele já por duas vezes foi ilustrado…
Repetindo os passos já percorridos atrás, preenchem-se os Mapas de Karnaugh – ou melhor ainda, que a lei do
menor esforço recomenda o uso de um descodificador, as Tabelas de Verdade (a duas dimensões) – de ‘Z’, ‘L’ e
{D2, D1, D0} em função de {Q2, Q1, Q0} e do bit ‘X’:
– a saída do circuito fica a ‘1’ nas seguintes circunstâncias: quando se recebe ‘0’ nos estados ‘C0’, ‘C1’, ‘C5’ ou
‘C6’, ou quando se recebe ‘1’ nos estados ‘C2’, ‘C3’ ou ‘C4’;
– ‘L’ advém activa quando e apenas quando se deve ‘quebrar’ a contagem; isso sucede quando o circuito…
– se encontra no estado ‘C0’ e se recebe ‘1’ (deverá “saltar” para ‘C4’);
– se encontra no estado ‘C1’ e se recebe ‘1’ (deverá “saltar” para ‘C5’);
– se encontra no estado ‘C3’ (deverá “saltar” para ‘C0’);
– se encontra no estado ‘C5’ e se recebe ‘0’ (deverá “saltar” para ‘C3’);
– se encontra no estado ‘C6’ e se recebe ‘0’ (deverá “saltar” para ‘C0’).
– em consonância, deverão carregar-se respectivamente os valores ‘100’ , ‘101’ , ‘000’, ‘011’ e ‘000’;
– preenchem-se com o símbolo de indiferença, ‘X’, os valores das funções para as combinações que nunca
deverão ocorrer… e os valores de {D2, D1, D0} para os casos em que L=0 (não há Load)…
Ressalve-se que é outra a praxis seguida nas Tabelas ao lado: porquanto na construção de um circuito com base
em descodificadores o relevante é saber quando a sua saída é ‘1’, são deixadas em branco as células em que a
função toma o valor ‘0’ ou o seu valor é indiferente (‘X’).
Resta desenhar o logigrama com um descodificador cujas entradas de selecção são {Q2, Q1, Q0 e ‘X’} e um
conjunto de ORs que produza ‘Z’ e ‘L’, e {D2, D1, D0} – o que não é nada transcendente:
– pois que Z=1 nas células {0, 2, 5, 7, 9, 10, 12}, ‘Z’ será a saída de um OR a cujas entradas se aplicam as
saídas do descodificador numeradas precisamente por {0, 2, 5, 7, 9, 10, 12};
– pois que L=1 nas células {1, 3, 6, 7, 10, 12}, ‘L’ será a saída de um OR a cujas entradas se aplicam as saídas
do descodificador numeradas por {1, 3, 6, 7, 10, 12}; entretanto, e pois que o modo de funcionamento Load se
selecciona activando ‘M4’, e este é activo a Low, a saída do OR deverá ser activa a Low;
– pois que D2=1 nas células {2, 3}, ‘D2’ será a saída de um OR a cujas entradas se aplicam as saídas do
descodificador numeradas precisamente por {2, 3};
– pois que D1=1 na células ‘10’, ‘D1’ será a saída do descodificador numerada ‘10’;
– pois que D0=1 nas células {3, 10}, ‘D0’ será a saída de um OR a cujas entradas se aplicam as saídas do
descodificador numeradas por {3, 10};
– quanto à entrada ‘D0’, ela será fixada em ‘0’: a contagem nunca chega a exceder ‘0110’…
– a inicialização do contador, ao estado ‘Rdy’/’C0’, logra-se activando a entrada ‘CT=0’;
Sistemas Digitais (Part III)
Page 82 of 111
Sistemas Digitais (Part III)
RAMs
Page 83 of 111
/ 21aº Projecto (Banco de Registos / Register File)
Esta sessão versa RAMs. Descontada a sessão precedente, ela é uma continuação natural da abordagem dos
registos. Como todas as outras sessões, ir-se-á desenrolar a partir de um Projecto concreto, vidé enunciado ao lado.
Recordando que um objectivo referido na sessão de Apresentação é habilitar a compreender o funcionamento
de um computador – e, sendo esta a penúltima sessão deste itinerário –, este Projecto é, de certo modo, inevitável...
Ao lado encontra-se “uma possível” interligação – em que as aspas denotam que outras soluções são possíveis.
Ela é vocacionada para a denominada arquitectura MIPS (Microprocessor without Interlocked Pipeline Stages)
● O coração do logigrama é um banco de 32 registos (Register File);
• Cada um deles memoriza palavras de 32-bit; consiste em 4 registos de 8 flip-flop D, com entradas e saídas
activas a High, que reagem ao flanco ascendente dos impulsos na entrada ‘1C2’ – que é comum a todos eles.
● Em ordem a providenciar operações aritméticas (nomeadamente, adição ou subtracção) e lógicas (OR, AND
e NOT) entre um ou dois dos registos, existe ainda uma assim designada Unidade Aritmética e Lógica, ALU;
• Prevendo o caso geral de a operação envolver dois operandos, a ALU recebe dois valores, sob a forma de
palavras de 32-bit, que lhe chegam dos registos através de dois Buses de dados de leitura de 32-bit;
• O resultado da operação é um valor, também sob a forma de uma palavra de 32-bit, que é lançado para um
Buses de dados de escrita de 32-bit, a caminho do registo onde ele ficará memorizado.
● Em ordem a seleccionar a operação a realizar pela ALU, e os registos contendo os operandos e aquele onde
será guardado o resultado, existe ainda uma assim designada Unidade de Controlo.
● Em ordem à escrita nalgum registo do resultado que a ALU lançou para o Bus de dados de escrita,
• As entradas de dados dos flip-flops D dos registos estão ligadas às correspondentes linhas desse Bus;
• Cada registo é dotado de uma entrada enable, ‘G1’, que afecta todos os seus flip-flops – que deve ser
activada para que de facto seja escrito no registo o valor presente naquele Bus;
• Para identificar, entre os 32 registos, aquele onde será inscrito esse valor, existe um Bus de endereços de 5
bits (repare-se: 25=32), WAddr; o seu conteúdo é determinado pela Unidade de Controlo;
• As entradas enable dos 32 registos encontram-se interligadas às saídas de um descodificador desse Bus:
sendo este Bus aplicado às entradas de selecção do descodificador, ficará activa uma única das suas saídas – e em
consequência ficará activa apenas uma das entradas enable, precisamente a do registo identificado por WAddr.
Pressuponha-se então que a ALU produziu um resultado/palavra de 32-bit – e que a verteu no Bus de dados de
escrita; e, também que WAddr contém a identificação do registo onde ela deverá ficar inscrito; todos os registos a
“sentirão” na sua entrada, mas só naquele identificado em WAddr advirá activa a entrada enable – com o que, no
próximo flanco de comutação do clock, essa palavra advirá inscrita nesse registo e só nele: a escrita é síncrona.
● Em ordem à leitura dos dois operandos, sejam ‘A’ e ‘B’,
• Para identificar, entre os 32 registos, aqueles onde se encontram os dois operandos, existem dois Buses de
endereços de 5 bits, RAddr-A e RAddr-B; o seu conteúdo é determinado pela Unidade de Controlo;
• Cada um desses Buses é aplicado às entradas de selecção de dois conjuntos de 32 multiplexers; por
exemplo, às 5 entradas de selecção do multiplexer ‘A0’ é aplicado RAddr-A, e nas suas 32 entradas de dados
aplicam-se o bit menos significativo de todos os 32 registos – com o que a sua saída irá apresentar o bit menos
significativo do registo seleccionado por RAddr-A; e assim sucessivamente para os demais multiplexers…
Pressuponha-se então que RAddr-A e RAddr-B contêm a identificação dos registos com os operandos; afora os
tempos de propagação, os operandos ficarão de imediato disponibilizados à ALU: a leitura é assíncrona.
O logigrama omite, claramente por mor de simplicidade, e entre outros blocos funcionais: o que respeita ao
input (o teclado e o correspondente codificador, e a transferência do valor digitado para um registo) e o que
respeita ao output (a transferência de um registo para um display de 7-segmentos através do correspondente
descodificador); e também não se esmiuçou o interior da ALU e da Unidade de Controlo; bem como se não
exploraram outras alternativas (como seria condensar os três buses de dados num único, e condensar os três buses
de endereços num único): no fundo, desafios que serão triviais para quem tenha acompanhado este itinerário…
O importante agora é recapitular o percurso em torno da memória: tendo começado por latches e flip-flops, a
continuação foi registos e agora o register file… O que se segue? A resposta, a abordar já de seguida, é: RAMs…
Sistemas Digitais (Part III)
Page 84 of 111
Sistemas Digitais (Part III)
RAMs
Page 85 of 111
/ A Célula Básica da Memória RAM
Haverá sistemas digitais onde convirá memorizar largos volumes de bits – como sejam os relativos a
documentos de texto, tabelas, peças musicais, figuras e fotografias, filmes, etc…. A esse respeito, a solução “banco
de registos de flip-flops”, se bem que proporcionando rapidez na leitura e na escrita, é por demais dispendiosa –
pelo que já de há muito se tem investido na disponibilização no mercado de circuitos com vastas capacidade de
memória, porém a preços bem menores que aqueles em que a sua concretização em flip-flops se traduziria…
Globalmente, há duas famílias de memórias para grandes volumes de informação binária:
• De um lado, as assim designadas memórias de acesso sequencial (como sejam discos e fita magnética);
• Por outro lado, memórias de acesso directo, concretamente RAMs e ROMs (RAM: Random Access Memory;
ROM: Read Only Memory).
(Eis o que as distingue: nas primeiras, de acesso sequencial, o tempo de acesso, para leitura/escrita, depende da
localização no dispositivo da informação – enquanto nas segundas, de acesso directo, tal não acontece)
No âmbito desta disciplina, serão abordadas apenas as memórias de acesso directo. Isso será feito de um modo
faseado, percorrendo uma após outra as seguintes questões:
– como será a célula básica de memória – para memorizar/consultar informação constando só de 1-bit?
– como combinar várias dessas células, para memorizar/consultar informação constando de N palavras de 1-bit?
– como expandir tal organização, para memorizar/consultar informação constando de N palavras de k-bit?
A célula básica de memória encontra-se esquematizada ao lado; apresenta:
● Três entradas, ditas de Write/Read, Chip-select e Data-In;
• A entrada Write/Read designa a operação a realizar: se estiver activa, tratar-se-á da consulta/leitura do
conteúdo da célula; caso contrário, tratar-se-á do armazenamento/escrita de um “novo” bit na célula;
• Tal operação será executada somente se a entrada Chip-select estiver activa;
• Se se tratar da operação de escrita, ter-se-á que aplicar em Data-In o bit a armazenar na célula.
● Uma saída 3-state, Data-Out.
Bem vistas as coisas, a célula disponibiliza então três Modos de funcionamento:
– quando a entrada Chip-select, que é activa a Low, se encontra inactiva, a célula encontra-se inacessível, tanto
para escrita como para leitura: nem se lhe pode escrever nada, nem se pode conhecer o seu conteúdo;
– caso contrário (isto é: quando a entrada Chip-select se encontra activa), existem dois modos de Operação:
• Modo Write: Write/Read encontra-se Low – com o que a célula tomará o valor em Data-In;
• Modo Read: Write/Read encontra-se High – com o que a célula apresentará o seu conteúdo em Data-Out.
Para que a operação tenha sucesso, não custa descortinar qual deverá ser a sequência dos eventos:
● A propósito da escrita, o qualificador ‘C2’ significa que, para que a célula fique memorizando o bit aplicado
em Data-In, é necessário que estejam activos tanto o modo Write como Chip-select. Na prática, dever-se-á aplicar
em Data-In o valor a inscrever na célula e forçar Low em Chip-select – e enfim activar o modo Write (na prática,
forçando Low na entrada Write/Read); procedendo assim, a célula ficará armazenando o bit aplicado em Data-In.
● A propósito da leitura, o qualificador ‘G1’ significa que, para que se obtenha em Data-Out o conteúdo da
célula, é necessário que estejam activos tanto o modo Read como Chip-select. Na prática, dever-se-á forçar Low
em Chip-select – e activar o modo Read (na prática, forçando High na entrada Write/Read); procedendo assim, a
célula apresentará o seu conteúdo à saída, em Data-Out.
Ressalve-se entretanto que a especificação acima é independente da tecnologia de fabrico: o esquema ao lado é
puramente funcional, de maneira nenhuma significa que uma célula de memória seja mesmo feita de latches D:
Em termos práticos, o fabrico de RAMs é de facto feito ao nível dos transistores, que não de latches. A esse
respeito, coexistem duas famílias de RAMs:
SRAMs (Static RAMs): cada célula envolve 6 transistores;
DRAMs (Dynamic RAMs): cada célula envolve entre 1 a 3 transistores e um condensador, que obriga ao
refrescamento periódico da célula; elas providenciam uma maior densidade/capacidade de armazenamento e um
menor consumo de potência (e por conseguinte uma maior economia), porém uma menor rapidez no acesso.
Mercê das suas vantagens, as DRAMs são aplicadas na memória principal dos computadores, para programas e
dados, já as suas desvantagens leva a preteri-las em favor das SRAMs em bancos de registos e caches.
Sistemas Digitais (Part III)
Page 86 of 111
Sistemas Digitais (Part III)
RAMs
Page 87 of 111
/ RAMs 4x1, 4x4, 16x4
Apreendido o funcionamento de uma célula básica de memória, é hora de combinar várias dessas células, para
memorizar/consultar informação mais extensa.
 Seja o caso de se pretender não apenas um registo de 1-bit, mas, por exemplo, quatro registos de 1-bit…
Deverá ser pacífico o esquema ao lado, à esquerda:
• Antes de mais, dispõem-se 4 células de memória, sejam {R3, R2, R1, R0}, em que, como é da praxe, elas se
situam verticalmente “umas por baixo das outras”, com os índices crescendo de cima para baixo…
• Aplica-se nas entradas Data-In de todas as células o mesmo bit de informação a escrever nalgum registo;
• Aplica-se nas entradas Write/Read de todas as células o mesmo sinal de selecção da operação a realizar…
• Porquanto as saídas das células são 3-state, procede-se à ligação de todas elas ao mesmo terminal de saída…
• Com isso, e pois que o objectivo é concretizar quatro registos de 1-bit, resta seleccionar/endereçar a célula
específica envolvida na operação: de cada vez que se memoriza/consulta, está-se de facto
memorizando/consultando um único bit em uma única célula!
Isso significa que as entradas Chip-select das células não podem estar “em curto-circuito”: em cada momento,
só uma delas pode estar activa. Isso resolve-se introduzindo um descodificador com duas entradas de endereço,
{A1, A0}, a cuja entrada enable se aplica o sinal Chip-select cuja activação é imprescindível para que a operação se
consuma: enquanto Chip-select estiver inactivo (High), todas as saídas do descodificador estarão inactivas, e em
consequência as células não estarão acessíveis; quando advir activo, uma única saída do descodificador ficará
activa, e portanto uma única célula ficará seleccionada para aí se realizar a operação em causa.
 Seja agora o caso de se pretender quatro registos – não apenas de 1-bit, mas, por exemplo, de 4-bit:
Convirá tomar como ponto de partida o logigrama anterior, relativo a quatro registos de 1-bit, e modificá-lo:
• Em lugar de cada célula {R3, R2, R1, R0}, dispõem-se 4 células numeradas {3, 2, 1, 0}, horizontalmente,
“umas ao lado das outras”, com os índices decrescendo da esquerda para a direita…
• As linhas Data-In e Data-out advêm substituídas por dois buses, Data-In e Data-out, com 4 linhas cada. A
entrada Data-In e a saída Data-Out de cada célula são ligadas às correspondentes linhas desses buses…
• Mantém-se, é claro, o descodificador 2:4 em cuja entrada enable se aplica o sinal Chip-select – a diferença
sendo que de cada saída “sai” uma word-line, que é aplicada às pertinentes células de memória.
 Seja enfim o caso de se pretender dezasseis registos de 4-bit:
Convirá tomar como ponto de partida o logigrama anterior, e modificá-lo:
• Antes de mais, há, é claro, que dispor 64 células de memória. Poder-se-ia fazer como acima – optar por uma
distribuição vertical para os registos –, mas uma alternativa é a assim nomeada distribuição bidimensional:
– os registos são mapeados numa distribuição de 4-colunas×4-linhas, com o que:
– metade do endereço, {A1, A0}, selecciona a coluna a que pertence o registo;
– a outra metade do endereço, {A3, A2}, selecciona a linha a que pertence o registo.
Na prática, e em vez de usar um descodificador 4:16 (implicando 16 ANDs de 4-entradas), usa-se a assim
denominada descodificação coincidente: recorre-se a um par de descodificadores 2:4 (em cujas entradas enable se
aplica o mesmo sinal Chip-select) – que tem a vantagem de se bastar em apenas 2×4 ANDs de 2-entradas.
Argumentar-se-á que se terá de adicionar, na intersecção de cada linha e coluna, vidé logigrama ao lado, um total
de 16 ANDs de 2-entradas (com entradas e saídas activas a Low) – mas fabricantes há que os dispensam em favor
de células de memória comportando, cada uma, 2 entradas chip-select.
Ao lado, apresenta-se o símbolo IEC de uma RAM assim. O Qualificador Geral é ‘RAM 16×4’. Disponibiliza 4
entradas de endereço, {A3, A2, A2, A0} – permitindo seleccionar entre 16 registos numerados {0, …, 15}. A ‘cave’
do símbolo determina que contém registos de 4 células, com uma mesma especificação: as entradas e saídas são
ambas activas a High – sendo que “A,2D” e ‘1A' afirmam que:
– as células se comportam funcionalmente como latches D;
– em cada momento, advém acessível externamente o registo então endereçado por A{A3, A2, A2, A0};
– o prefixo ‘2’ clarifica que a escrita é viável quando está activa a entrada de controlo ‘1C2’ – o que acontece
quando se encontram activas as entradas chip-select e ‘W’;
– o prefixo ‘1’ clarifica que a leitura é possível quando estão activas as entradas chip-select e ‘R’.
As entradas chip-select e ‘W’ são activas a Low, e a entrada ‘R’ é activa a High.
Sistemas Digitais (Part III)
Page 88 of 111
Sistemas Digitais (Part III)
RAMs
Page 89 of 111
/ Expansão de RAMs
Pressuposto que o mercado disponibiliza integrados concretizando 16 registos de 4-bits, a lei do menor esforço
manda que a obtenção de RAMs mais extensas já se não suporte em células básicas de 1-bit, mas em tais módulos.
Como exemplos de tal praxis, esquematizam-se ao lado uma RAM em que o comprimento de cada registo de
informação excede 4-bit, e, depois, uma outra onde também o número de registos vai bem além de 16…
 Seja o caso de se pretender uma RAM 16×32, quer dizer: uma RAM com 16 registos de palavras de 32 bits.
● Pois que cada um dos módulos de RAM a usar oferece 16 registos de 4-bits, uma simples operação de
divisão, 32:4, esclarece que serão necessários, no total, 8 desses módulos: em ordem a perfazer uma palavra de 32
bits, cada módulo vem a contribuir com 4 bits de informação, vidé ao lado:
• um à direita para memorizar os 4-bits menos significativos da palavra, {Q3, Q2, Q1, Q0};
• um outro para memorizar os 4-bits da palavra de peso imediatamente superior, {Q7, Q6, Q5, Q4};
• e por aí fora, ficando os 4-bits mais significativos, {Q31, Q30, Q29, Q28}, no módulo à esquerda.
● Visando uma RAM comportando 16 registos, exige-se um bus de endereços de 4 linhas, {A3, A2, A1, A0} –
que alimentam as entradas de endereço de todos os 8 módulos;
Quando então o bus de endereços veicula, por exemplo, o endereço ‘1101’, é seleccionado, ao mesmo tempo e
em cada um dos 8 módulos, o registo numerado ‘13’; a contribuição de cada módulo para a palavra de 32-bits é
precisamente a palavra de 4-bits em que esse registo se volve; então, activando Chip-select,
• se se activar Write, é escrito nesses registos o que estiver sendo aplicado nas entradas {D31, D30, …, D1, D0};
• se se activar Read, é apresentada nas saídas {Q31, Q30, …, Q1, Q0} a informação contida nesses registos.
 Seja agora o caso de se pretender uma RAM 128×32: uma RAM com 128 registos de palavras de 32 bits.
Manda a lei do menor esforço usar agora, como módulo de construção, a RAM 16×32 obtida acima:
• Pois que esse módulo oferece 16 registos de 32-bits, uma simples operação de divisão, 128:16, esclarece que
serão necessários, no total, 8 desses módulos: em ordem a perfazer 128 registos, cada módulo vem a contribuir
com 16 registos, vidé ao lado:
• um em cima, para memorizar os registos numerados {0-15};
• um logo abaixo, para memorizar os registos numerados {16-31};
• e por aí fora, ficando os registos numerados {112-127} no módulo mais abaixo.
● Visando uma RAM comportando 128 registos, exige-se um bus de endereços de 7 linhas, {A6, A5, …, A1, A0}
– que, para efeito de seleccionarem um daqueles registos, se subdividem em dois conjuntos:
– {A3, A2, A1, A0}, que alimentam as entradas de endereço de todos os 8 módulos;
– {A6, A5, A4}, que se aplicam a um descodificador 3:8, a cuja entrada enable se aplica a linha Chip-select; só
uma saída advirá activa – cabendo-lhe a ela activar a entrada Chip-select do módulo seleccionado.
Quando então o bus de endereços veicula, por exemplo, o endereço ‘0101101’, é seleccionado o módulo ‘2’ – e,
nele, o registo ‘13’: globalmente, é seleccionado o registo numerado 16×2+13=45.
● Conquanto não figurados no logigrama ao lado, para o não complicar inutilmente, subentendem-se dois buses
de dados, ambos de 32 linhas:
– um bus de dados de escrita, que é aplicado às entradas {D31, D30, …, D1, D0} de todos os 8 módulos;
– um bus de dados de leitura, a que se ligam as saídas 3-state {Q31, Q30, …, Q1, Q0 de todos os 8 módulos.
(Para bom entendedor, e restringindo a atenção ao bit menos significativo: as entradas ‘D0’ ficam interligadas à
mesma linha ‘D0’ do bus de escrita, e as saídas ‘Q0’ ficam interligadas à mesma linha ‘Q0’ do bus de leitura)
(Deixa-se ao leitor estruturar uma RAM com descodificação coincidente (2-linhas×4-colunas) de RAM 16×32)
Ao lado, esquematizaram-se os ciclos de leitura e escrita numa RAM:
• Em ambos os casos, a primeira etapa é precisar no bus de endereços o registo alvo; se se tratar de uma
operação de escrita, aplica-se no bus de escrita a palavra de 32-bits a inscrever em tal registo;
• A etapa seguinte é activar a linha chip-select – e logo, depois, o Modo de operação: Write ou Read. Então,
– se se tratar de uma operação de escrita, e passado um tempo de acesso para escrita, WAct, o registo
endereçado passará a conter o valor apresentado no bus de dados de escrita, Data-In;
– se se tratar de uma operação de leitura, e passado um tempo de acesso para leitura, RAct, será
apresentado no bus de dados de leitura, Data-Out, o conteúdo do registo endereçado.
Sistemas Digitais (Part III)
Page 90 of 111
Sistemas Digitais (Part III)
RAMs
Page 91 of 111
/ 21bº Projecto (Uso de RAM para Circuitos Combinatórios)
Recorde-se o objectivo maior a que esta sessão se propôs: proporcionar um meio para memorizar largos
volumes de informação. Neste momento, já não haverá dúvidas em como, usando os módulos de RAM com a
capacidade que o mercado oferece, constituir RAMs de muito maior capacidade: aquele objectivo está realizado.
Entretanto, e tal como após a introdução a contadores e registos se abordou o seu emprego na síntese (não
clássica) de circuitos, é inevitável a questão: e que tal usar RAMs para concretizar sistemas digitais, combinatórios
ou sequenciais? Sabê-lo como, eis o que se vai abordar – e quiçá não seja despropositado fazê-lo em torno de um
circuito que ficou na sombra: de facto, o 18cº Projecto, relativo a um dado electrónico, e pois que o seu alvo era o
desenho de um contador cíclico de ‘1’ a ‘6’, deixou ao leitor o desenho do codificador de 7-LEDs – um circuito
que, recebendo um dígito em binário, assinalasse os LEDs a acender. É hora de o revisitar…
Decidida a identificação {a, b, c, d, e, f, g} dos LEDs, as Tabelas de Verdade das saídas do circuito são triviais,
vidé ao lado – em que, por mor de simplificação, se assinalam só os ‘1’s, que não os ‘0’s e as indiferenças (‘X’).
 Resolução com descodificador:
Posto que a contagem decorre entre ‘1’ e ‘6’ – cuja codificação em binário requere 3-bits –, há que dispor de um
descodificador 3:8, a cujas entradas de selecção se ligam as saídas {X2, X1, X0} do contador. As saídas do circuito,
num total de quatro, serão produzidas por outros tantos ORs – em cujas entradas são aplicadas as pertinentes
saídas do descodificador; para dar um exemplo: porquanto a coluna ‘d’ nas Tabelas de Verdade tem ‘1’s nas linhas
{1, 3, 5}, a saída ‘d’ virá a ser o OR das saídas do descodificador que estão numeradas {1, 3, 5}.
 Resolução com multiplexer:
Desta feita, dispõem-se quatro multiplexers 8:1, a cujas entradas de selecção se ligam as saídas {X2, X1, X0} do
contador. As quatro saídas do circuito serão as saídas desses multiplexers – bastando para tal que se forcem nas
suas entradas de dados as correspondentes colunas das Tabelas de Verdade; por exemplo, e porquanto a coluna ‘d’
tem ‘1’s nas linhas {1, 3, 5}, somente nas entradas de dados {1, 3, 5} do multiplexer que produz ‘d’ se forçará ‘1’,
as restantes ficam a ‘0’.
 Contemplando as duas soluções acima, o seu calcanhar de Aquiles reside na quantidade de integrados e fios
– e bom que seria usar uma solução com menos hardware… Para o efeito, reveja-se a solução com multiplexer: ela
baseia-se, é claro, no funcionamento de um multiplexer 8:1: ele é um dispositivo que apresenta à saída o valor que
se encontra na entrada seleccionada pelas suas entradas de selecção. Ora, este enunciado evoca o funcionamento
de uma RAM 8×1: quando se encontra no modo de leitura, ela é um dispositivo que apresenta à saída o valor que
se encontra na célula seleccionada pelas suas entradas de endereço. Isso sugere substituir cada multiplexer 8:1
por uma RAM 8×1, em que se inscreveram os valores aplicados nas entradas de dados daquele. – ou, melhor ainda,
e em vez de usar quatro RAM 8×1, compacta-las a todas em uma RAM 8×4!
Ao lado, concretiza-se esta sugestão, todavia envolvendo a RAM 16×4 que o mercado oferece:
• Às entradas de endereço {A2, A2, A0}, ligam-se as saídas {X2, X1, X0} do contador, ficando A3=0;
• Activa-se a entrada Chip-select, forçando nela o nível Low;
• Nos registos, inscreve-se os conteúdos das próprias colunas {a, b, c, d} das Tabelas de Verdade; conquanto
isso se não reflicta no logigrama, intui-se como se fará na prática: aplicam-se nas entradas de endereço, um após
outro, os valores {1, …, 6} – ao mesmo tempo que se forçam nas entradas de dados os correspondentes valores nas
colunas das Tabelas (e activa-se momentaneamente o modo de escrita). O subsequente conteúdo da RAM passará
a ser o que ao lado se indica (em que se optou preencher com ‘0’s os registos não utilizados e se omitem os últimos
registos {8, …, 15}); em particular, o bit mais à esquerda dos registos {1, …, 6} passará a conter a coluna ‘a’…
• Activa-se o modo Read, forçando o nível High na entrada qualificada ‘1 EN’.
Suponha-se que, a dado momento, o contador marca ‘5’ – o que acarreta que as entradas de endereço vêm a ser
‘0101’; então, advém seleccionado o registo ‘5’, cujo conteúdo é ‘1101’; estando activado o modo Read, as saídas
{a, b, d} ficam sendo ‘1’ enquanto a saída ‘c’ advém ‘0’ – e isso é o que as Tabelas determinam que deva ser!
É clara a vantagem no uso de RAMs: não há mais fios, e basta um integrado só… A desvantagem é que, a
suceder alguma interrupção na alimentação/Power-off, o conteúdo da RAM volatiliza-se: é preciso voltar a
carregá-la com os valores das colunas {a, b, c, d}… Ou então haverá que optar pelas assim designadas ROMs –
que será um assunto da próxima sessão…
Sistemas Digitais (Part III)
Page 92 of 111
Sistemas Digitais (Part III)
RAMs
Page 93 of 111
/ 21cº Projecto (Uso de RAM para Circuitos Sequenciais)
Se as RAMs serão interessantes para circuitos combinatórios, sê-lo-ão também para circuitos sequenciais: estes
precisam, além de flip-flops para guardar o estado actual, de malhas combinatórias para gerar as saídas do circuito
e, eventualmente, os valores que excitam as entradas dos flip-flops… Um Projecto novo poderá ilustrá-lo…
Pretende-se um circuito sequencial síncrono com uma entrada e duas saídas, {Z1, Z0}. O circuito analisa o bit
que acaba de receber: se ele for igual ao anterior, a saída é ‘00’; se o não for, analisa o conjunto de bits que
recebeu até então; a saída (exceptuando a primeira, que é irrelevante) será:
– ‘01’ se acabou de receber um número ímpar de ‘0’s (desde o último ‘1’);
– ‘10’ se acabou de receber um número ímpar de ‘1’s (desde o último ‘0’);
– ‘11’, caso contrário.
Ao lado, encontra-se também o Diagrama de Estados seguindo o modelo de Mealy:
1. Considere-se o momento em que se faz o power-on… Será pacífico iniciar o circuito a um estado ‘S00’;
2. Seja ‘0’ ou ‘1’ o primeiro bit a ser recebido, a saída será irrelevante. Relativamente ao estado que o circuito
deverá adquirir após o próximo clock: se esse primeiro bit for ‘0’, o circuito irá transitar para um estado, ‘S10’, que
significa que já recebeu um número ímpar de ‘0’s; mas se for ‘1’, o circuito irá ingressar em ‘S01’, que significa
que já recebeu um número ímpar de ‘1’s;
3. Considere-se, agora, que o circuito se encontra no estado ‘S01’.
– se receber um ‘0’, a saída será ‘10’, e o circuito transitará para ‘S10’ ;
– se, porém, receber um ‘1’, a saída será ‘00’ – e o circuito transitará para ‘S11’, que significa que já recebeu um
número par de ‘1’s;
4. Deixa-se ao leitor o completar o Diagrama de Estados...
Completado o Diagrama de Estados – que remete para ao menos dois flip-flops, sejam {Q1, Q0}, e decidida a
codificação de estados que se indica, serão pacíficas as Tabelas de Transições e Saídas, {Q1, Q0} e {Z1, Z0}.
Resta agora desenhar um logigrama que concretize tal circuito; para o efeito,
• Usar-se-á, para memorizar o estado actual, um vulgar registo com 4 flip-flops D – dos quais se “aproveitarão”
tão-somente os dois primeiros/de-cima, {Q1, Q0};
• Usar-se-á para concretizar as malhas combinatórias, uma vulgar RAM 16×4 (pois que existe uma entrada
externa, ‘X’, e duas entradas internas, {Q1, Q0}, que em conjunto se volvem em 8 combinações possíveis, e há que
produzir 4 saídas, bastaria uma RAM de 8×4 – se ela estivera disponível no mercado).
• Optando por aplicar ‘X’ à entrada de endereço menos significativa, e {Q1, Q0} às duas que se lhe seguem, o
passo seguinte é ligar {Q1, Q0, X} às entradas de endereço {A2, A1, A0} da RAM, ficando A3=0;
• Essa RAM deverá produzir as saídas {Z1, Z0}, e bem assim os valores que excitam as entradas {D1,D0} do
registo. Ora, dada a qualificação ‘1D’ dos flip-flops do registo, a subsequente Tabela de Excitação do circuito
acaba por ser uma duplicação da Tabela de Estados, {Q1(t+1)=D1(t), Q0(t+1) )=D0(t)}.
Optando por memorizar {Z1, Z0} nas células menos significativas dos registos da RAM, e {D1, D0} nas mais
significativas, há que inscrever nos registos da RAM o conteúdo das Tabelas de Verdade: nomeadamente, inscrevese a coluna D1=Q1 na posição mais significativa, e na menos significativa inscreve-se a coluna Z0;
• O passo seguinte é ligar as saídas mais significativas da RAM às duas primeiras entradas do registo, {D1, D0};
• Enfim, activa-se a entrada Chip-select (forçando Low em ‘G1’), e activa-se o modo Read da RAM (forçando o
nível Low na entrada qualificada ‘1 EN’).
Suponha-se que, a dado momento, o registo apresenta ‘11’ nas saídas {Q1, Q0}, e que a entrada externa do
circuito, ‘X’, é ‘0’ – o que acarreta que as entradas de endereço da RAM vêm a ser ‘0110’; então, advém
seleccionado o registo ‘6’, cujo conteúdo é ‘1011’; estando activado o modo Read, as saídas {Z1, Z0} ficam de
imediato sendo ‘11’ enquanto as saídas {D1, D0} advêm ‘10’: no próximo clock, o circuito irá ingressar no estado
‘10’ (em termos práticos: o registo passará a memorizar ‘10’ ) – e isso é o que as Tabelas determinam que deva ser!
(Nota: nada obriga a que a configuração na RAM seja aquela ao lado – mas não custa descortinar-lhe as razões:
– nas entradas de endereço, as entradas externas são as de maior peso, e as internas são as de menor peso;
– conforme ao layout apresentado na forma canónica de Mealy, as saídas {Z1, Z0} do circuito estão por cima e
os valores {D1, D0} que excitam as entradas dos flip-flops estão por baixo)
Sistemas Digitais (Part III)
*
Page 94 of 111
Sistemas Digitais (Part III)
RAMs
Page 95 of 111
/ Análise de Circuitos com RAM (ou ROM)
Quando um projectista se engaja no desenho de um circuito, e antes de o materializar de facto, e para evitar
posteriores dissabores, há que “fazer a prova dos nove”: será que o circuito concebido segue mesmo o diagrama de
estados desenhado inicialmente? E este passo de maneira nenhuma se deve omitir!
Admita-se então que um Projectista chegou ao logigrama que se apresenta ao lado. A questão imediata a que
deve responder é: qual o correspondente Diagrama de Estados?
 A primeira etapa é compreender o que está aplicado às entradas e saídas da RAM; a esse respeito,
• As linhas que interligam as entradas externas {X1, X0} e internas {Q1, Q0} às entradas de endereço da
RAM significam que em {A3, A2, A1, A0} estão aplicados os valores {Q1, Q0, X1, X0};
• A linha de saída de ‘Z’ significa que os valores que ‘Z’ pode tomar estão memorizados nas células menos
significativas dos registos da RAM; e reparando nas ligações entre as saídas da RAM e as entradas do registo, é
lícito deduzir que nas duas células imediatamente adjacentes se encontram {D1, D0};
 A segunda etapa é compreender o modelo seguido no desenho do circuito; a esse respeito, bastará constatar
que a saída ‘Z’ depende apenas dos estados do circuito: quando {Q1, Q0} são ‘00’, o que corresponde às quatro
primeiras linhas, a saída é ‘1’; quando são ‘01’, o que corresponde às quatro linhas seguintes, a saída é ‘0’; e assim
sucessivamente… Seguiu-se, pois, o modelo de Moore…
 Estão então reunidas as condições para desenhar o Diagrama de Estados…
• Em primeiro lugar, é mercê reparar que nas entradas de endereço os pares de valores nas colunas {Q1, Q0}
podem assumir todas as 4 combinações possíveis – o que leva a concluir da existência de quatro estados,
codificados por ‘00’, ‘01’, ‘10’ e ‘11’; no Diagrama de Estados, corresponderão graficamente a outros tantos
círculos – que será pacífico nomear respectivamente de ‘S00’, ‘S01’, ‘S10’ e ‘S11’;
• Nas quatro linhas do topo, os valores de {Q1, Q0} são ‘00’, isto é: elas especificam o comportamento do
circuito quando ele se encontra no estado ‘S00’; para todas essas linhas a saída é Z=1, o que leva a incluir no seio
do círculo ‘S00’ a saída ‘1’; a primeira linha especifica que, quando {X1, X0} são ‘00’, o estado seguinte é o próprio
estado ‘S00’ – o que se volve graficamente numa seta de ‘S00’ para ‘S00’, etiquetada por ‘00’; a segunda linha
especifica que, quando {X1, X0} são ‘01’, o estado seguinte será S01’ – o que se volve graficamente numa seta de
‘S00’ para ‘S01’, etiquetada por ‘01’; a terceira linha especifica que, quando {X1, X0} são ‘10’, o estado seguinte
será ‘S10’– o que se volve graficamente numa seta de ‘S00’ para ‘S10’, etiquetada por ‘10’; a quarta linha especifica
que, quando {X1, X0} são ‘11’, o estado seguinte será ‘S11’ – o que se volve graficamente numa seta de ‘S00’ para
‘S11’, etiquetada por ‘11’;
• Nas quatro linhas seguintes, os valores de {Q1, Q0} são ‘01’, isto é: elas especificam o comportamento do
circuito quando ele se encontra no estado ‘S01’; para todas essas linhas a saída é Z=0, o que leva a incluir no seio
do círculo ‘S01’ a saída ‘0’; a quinta linha especifica que, quando {X1, X0} são ‘00’, o estado seguinte é o próprio
estado ‘S01’ – o que se volve graficamente numa seta de ‘S01’ para ‘S01’, etiquetada por ‘00’; a sexta linha
especifica que, quando {X1, X0} são ‘01’, o estado seguinte será S10’ – o que se volve graficamente numa seta de
‘S01’ para ‘S10’, etiquetada por ‘01’; a sétima linha especifica que, quando {X1, X0} são ‘10’, o estado seguinte será
‘S11’– o que se volve graficamente numa seta de ‘S01’ para ‘S11’, etiquetada por ‘10’; a oitava linha especifica que,
quando {X1, X0} são ‘11’, o estado seguinte será ‘S00’ – o que se volve graficamente numa seta de ‘S01’ para ‘S00’,
etiquetada por ‘11’;
• Não será difícil ao leitor completar o Diagrama de Estados do circuito…
Termine-se com um parêntesis: na próxima sessão, serão abordadas as assim designadas ROMs. Permita-se
entretanto que se assevere desde já que o seu funcionamento é deveras similar ao das RAMs: funcionalmente, a
diferença reside no facto de as ROMs serem dispositivos de memória apenas de leitura (“não se lhes pode escrever
nada”), enquanto as RAMs são dispositivos de escrita e leitura: equiparando uma ROM a uma RAM
permanentemente em modo de leitura, poder-se-á inferir que os processos de síntese e análise de circuitos com
ROMs são quasi indistintos dos processos de síntese e análise de circuitos com RAMs.
É isso que legitima intitular este slide/página com “Análise de Circuitos com RAM (ou ROM)”
Sistemas Digitais (Part III)
Page 96 of 111
Sistemas Digitais (Part III)
PLD
Page 97 of 111
/ 22aº Projecto
Esta sessão, que é a última deste itinerário, versa PLDs (Programmable Logic Devices). Será a cereja em cima
do bolo: aquele pormenor que faltava para o leitor se abalançar a voos mais altos… Como as outras sessões, ir-se-á
desenrolar a partir de um Projecto concreto:
Pretende-se um circuito combinatório que determine o quadrado de números {0 a 7}.
Em ordem a codificar números entre 0 e 7, as entradas do circuito deverão ser três, sejam {X2, X1, X0}; e
porquanto os seus quadrados são números entre 0 e 49, as saídas deverão ser seis, sejam {Z5, Z4, Z3, Z2, Z1, Z0}.
Ao lado, encontram-se as respectivas Tabelas de Verdade. A partir delas, será pacífico desenhar um logigrama que
as concretiza – usando alguma das estratégias já abordadas, nomeadamente: RAM e descodificador+ORs:
 Estratégia RAM, suportada numa RAM 16×8:
• Às entradas de endereço {A2, A2, A0}, ligam-se as entradas do circuito, {X2, X1, X0}, ficando A3=0;
• Activa-se a entrada Chip-select, forçando nela o nível Low;
• Nos registos da RAM, inscreve-se os conteúdos das próprias colunas {Z5, Z4, Z3, Z2, Z1, Z0} das Tabelas;
• Activa-se o modo Read, forçando o nível High na entrada qualificada ‘1 EN’.
 Estratégia descodificador+ORs, suportada num descodificador 3:8:
• Às entradas de selecção {2, 1, 0}, ligam-se as entradas do circuito, {X2, X1, X0};
• Introduzem-se 6 ORs; cada um deles diz respeito a uma das saídas {Z5, Z4, Z3, Z2, Z1, Z0} – sendo que às
suas entradas se aplicam as saídas do descodificador que geram os mintermos que são pertinentes a essa saída;
 Estratégia dita ROM: Permita-se uma reorganização do último logigrama obtido – a saber: ao invés de um
OR de 4-entradas para produzir Z0=m1+m3+m5+m7, recorre-se a quatro ORs de 2-entradas, vidé ao lado:
• O primeiro recebe ‘0’ e ‘m1’;
• A sua saída é aplicada a um segundo OR, que recebe também ‘m3’;
• A saída deste último OR é aplicada a um terceiro OR, que recebe também ‘m5’;
• Enfim, a saída do terceiro OR é aplicada a um quarto OR, que recebe também ‘m7’.
Bem entendido, aplica-se a mesma filosofia às restantes saídas, {Z5, Z4, Z3, Z2, Z1}, do circuito.
Designe-se de ‘ROM’ o logigrama assim obtido – porém alertando que adiante se realçará que, considerando
os atrasos de propagação a que ele conduz, as ROMs que o mercado de facto oferece não são exactamente assim.
É hora de comparar o logigrama ‘ROM’ com aquele que suporta fisicamente a solução ‘RAM’:
• Em ambas os logigramas há um descodificador: o símbolo gráfico do módulo RAM “esconde-o”, mas
certamente que ele comporta internamente um descodificador 16×8…
• Designe-se de word-line cada uma das saídas desses dois descodificadores; constata-se que:
– em cada word-line da RAM estarão “dependuradas” células de memória – com ‘1’s ou ‘0’s;
– em cada word-line do logigrama ROM estão “dependurados” ORs ou nada;
• Se as entradas {X2, X1, X0} forem, por exemplo, ‘011’,
– na RAM, fica seleccionado um registo contendo ‘001001’: as saídas {Z3, Z0}, e apenas elas, advêm ‘1’;
– no logigrama ROM, fica activa a saída-do-descodificador/word-line ‘3’, e só ela – pelo que os ORs que
lhes estão ligados, e só eles, irão produzir ‘1’: as saídas {Z3, Z0}, e apenas elas, advêm ‘1’.
Qual será então a percepção da ROM – para alguém que desconheça o seu interior (isto é: que olhe para ela
como um módulo/caixa-preta de que conhece as entradas e as saídas, e de como estas dependem daquelas)? Posto
que, para qualquer combinação das entradas {X2, X1, X0}, as saídas nas duas soluções RAM e ROM vêm a ser
idênticas, ser-lhe-á inevitável julgar a ROM como um dispositivo de memória (das Tabelas das saídas do circuito)!
Mas é hora de confrontar as estratégias RAM e ROM quanto a vantagens e desvantagens…
● Os registos da RAM estão qualificados ‘A,2D’, significando que é possível escrever na RAM;
● Já o mesmo se não pode dizer da ROM – posto que, nesta, há só um descodificador e ORs, só se pode ler o
que ela “memoriza” – o que aliás justifica o nome, ROM (Read Only Memory), atribuído a semelhante estrutura;
● E se a possibilidade de escrever numa RAM é certamente uma vantagem, a desvantagem é que, a suceder
algum Power-off, o seu conteúdo se irá volatilizar… Isso não sucede porém numa ROM: a haver power-off, as
conexões físicas entre descodificadores e ORs garantem que, quando a alimentação de energia for reposta, o seu
“conteúdo de memória” ficou preservado, ainda lá está! Daí, a importância em conceder-lhe mais algum tempo…
Sistemas Digitais (Part III)
Page 98 of 111
Sistemas Digitais (Part III)
PLD
Page 99 of 111
/ ROM (Read Only Memory)
A notável propriedade de uma ROM – de o seu “conteúdo de memória” se não “evaporar” quando falha a
alimentação de energia – torna-a indicada para um largo leque de aplicações. A este respeito, convirá certamente
uma notação que habilite à correcta interpretação do funcionamento de uma dada ROM – e de facto existem duas
alternativas para o fazer:
 Descrição funcional de uma ROM mediante uma Tabela – de uma forma análoga àquela usada para
descrever o conteúdo de uma RAM:
• À esquerda, dispõem-se as colunas que representam as entradas da ROM, sejam {X2, X1, X0} – e que vêm a
interligar-se às entradas de selecção/endereço do descodificador da ROM; são preenchidas com todas as
combinações que elas podem assumir, pela ordem costumeira, vidé ao lado;
• À direita, dispõem-se as colunas representando as saídas da ROM, sejam {Z5, Z4, Z3, Z2, Z1, Z0}; para cada
combinação das entradas, explicitam os valores {0, 1} que as saídas deverão então assumir.
 Descrição funcional de uma ROM mediante uma Notação gráfica – generalizável a outras PLDs:
• À esquerda, dispõe-se um descodificador, em cujas entradas de selecção/endereço se aplicam as entradas da
ROM, sejam {X2, X1, X0};
• À direita, dispõe-se uma rede/matriz, onde:
– as horizontais representam as word-lines associadas às várias saídas do descodificador;
– as verticais estão associadas as saídas da ROM, sejam {Z5, Z4, Z3, Z2, Z1, Z0};
• Cada símbolo gráfico denotando um OR no logigrama da ROM advém substituído por uma cruz diagonal na
intersecção entre a linha e coluna em que ele ocorre; por exemplo, a coluna ‘Z0’, que no logigrama apresenta ORs
nas linhas {1, 3, 5, 7}, surge agora com cruzes nas linhas {1, 3, 5, 7}, e apenas nessas.
Ao lado, essa notação gráfica é concretizada para o Problema entre mãos – mas ela é facilmente generalizável a
ROMs mais complexas: em vez de apenas três entradas e seis saídas, poderá deter um número genérico de K
entradas e N saídas; com isso, o total de horizontais será 2K, e o número total de conexões/cruzes será N×2K –
habilitando a produzir qualquer conjunto de N funções de K entradas!
Isto aceite, há entretanto que realçar: na Notação gráfica da ROM, as cruzes diagonais não representam
necessariamente ORs e solda! Cada cruz diagonal deve ser, isso sim, entendida como o símbolo de um elemento
electrónico cuja função é pôr a ‘1’ a vertical que lhe fica por baixo – quando a word-line em que se localiza é
seleccionada/activada. Isso acaba por ser um convite aos fornecedores de ROMs – no sentido de investigarem e
disponibilizarem ROMs com a funcionalidade desejada, porém mais económicas e/ou flexíveis…
 Como variantes de ROMs, é mercê apontar:
● MROM (Mask ROM): é uma ROM que é configurável/programável na fábrica, conforme à especificação
reportada pelo Projectista – mas uma vez feita não se pode alterar.
● PROM (Programmable ROM): a ROM é disponibilizada no mercado com cruzes em todas intersecções
horitontais×verticais; comportam fusíveis que podem ser derretidos pelo Projectista (para tal usando um
programador de PROMs), deixando os outros intactos; só se pode configurar uma vez;
● EPROM (Erasable PROM): idem, mas os fusíveis podem ser re-estabelecidos, pela sua exposição a radiação
ultra-violeta; para o efeito, os chips vêm equipados com uma janelinha para a radiação passar; depois disso, podem
voltar a ser re-programadas (usando um programador de PROMs), até um certo número máximo de vezes;
● EEPROM ou E2PROM (Electrically EPROM): a ROM pode ser apagada e reconfigurada, uma palavra de
cada vez, electricamente, sem ser necessário retirá-la do circuito onde foi implantada;
● FlashPROM (Flash EEPROM): idem, mas pode reprogramar-se tudo ou somente uma parte/bloco do chip.
Ao lado, apresenta-se o símbolo IEC de uma ROM 3×6. O Qualificador Geral é ‘ROM 3×6’. Disponibiliza 3
entradas de endereço, {A2, A2, A0} – permitindo seleccionar entre 8 word-lines numeradas {0, …, 7}, e 6 saídas 3state; umas e outras são activas a High.
As entradas chip-select e output-enable – que é preciso activar para que as saídas apresentem o conteúdo da
word-line seleccionada – são activas a Low.
Sistemas Digitais (Part III)
Page 100 of 111
Sistemas Digitais (Part III)
PLD
Page 101 of 111
/ 22bº Projecto (Uso de ROM para Circuitos Combinatórios)
Se as ROMs serão interessantes para circuitos combinatórios, sê-lo-ão também para circuitos sequenciais: estes
precisam, além de flip-flops para guardar o estado actual, de malhas combinatórias para gerar as saídas do circuito
e, eventualmente, os valores que excitam as entradas dos flip-flops… Um Projecto novo poderá ilustrá-lo…
Pretende-se um circuito sequencial síncrono quer recebe valores {0 a 3} codificados em binário reflectido, e
gera os correspondentes códigos em binário natural. A recepção começa pelo bit mais significativo.
 Ao lado, encontra-se o Diagrama de Estados seguindo o modelo de Mealy:
1. Considere-se o momento em que se faz o power-on… Será pacífico iniciar o circuito a um estado ‘Rdy’;
2. A modos de refresh de memória, apresentam-se ao lado as palavras dos códigos CBR e CBN para os valores
{0 a 3}. Confrontando as colunas da esquerda de ambos os códigos, deduz-se que, seja ‘0’ ou ‘1’ o primeiro bit a
ser recebido, a saída será exactamente igual a esse bit;
Relativamente ao estado que o circuito deverá adquirir após o próximo clock: se esse primeiro bit for ‘0’, o
circuito irá transitar para um estado, ‘S0’, que significa que o bit de maior peso é ‘0’; mas se for ‘1’, o circuito irá
ingressar em ‘S1’, que significa que o bit de maior peso é ‘1’;
3. Comparando agora as colunas mais à direita dos dois códigos,
– se o circuito se encontrar no estado ‘S0’, as duas primeiras linhas estabelecem que, qualquer que seja o
segundo bit a ser recebido, a saída será exactamente igual a esse bit;
– se o circuito se encontrar no estado ‘S1’, as duas últimas linhas estabelecem que, qualquer que seja o segundo
bit a ser recebido, a saída será exactamente o complemento desse bit;
4. Em qualquer caso, o circuito retornará a ‘Rdy’
 Completado o Diagrama – cuja síntese pelo método clássico remete para dois flip-flops, sejam {Q1, Q0}, e
decidida a codificação de estados que se indica, serão pacíficas as Tabelas de Transições e Saída, {Q1, Q0} e ‘Z’.
 Resta agora desenhar um logigrama que concretize tal circuito; para o efeito,
• Usar-se-á, para memorizar o estado actual, um vulgar registo com 4 flip-flops D – dos quais se “aproveitarão”
tão-somente os dois primeiros/de-cima, {Q1, Q0};
• Usar-se-á para concretizar as malhas combinatórias, e admitindo que o mercado a disponibiliza, uma ROM
3×3 (há que contemplar uma entrada externa, ‘X’, e duas entradas internas, {Q1, Q0}, que em conjunto se volvem
em 8 combinações possíveis; e há que produzir 3 saídas).
• Optando por aplicar ‘X’ à entrada de endereço de menor peso, e {Q1, Q0} às duas de maior peso, o passo
seguinte é ligar {Q1, Q0, X} às entradas de endereço {A2, A1, A0} da ROM;
• Essa ROM deverá produzir a saída ‘Z’, e bem assim os valores que excitam as entradas {D1, D0} do registo.
Ora, dada a qualificação ‘1D’ dos flip-flops do registo, a subsequente Tabela de Excitação do circuito acaba por ser
uma duplicação da Tabela de Estados, {Q1(t+1)=D1(t), Q0(t+1) )=D0(t)}.
• Optando por dedicar a saída menos significativa a ‘Z’, e as duas mais significativas a {D1, D0},
– Na Tabela da ROM, a coluna ‘Z’ será aquela mais à direita, e as colunas {D1, D0} serão as duas à esquerda;
– Na notação gráfica da ROM, serão desenhadas cruzes diagonais reflectindo pari passu essa Tabela:
– Constata-se que o conteúdo da linha endereçada por ‘0000’ é {D1=0, D0=1, Z=0}, isto é, contém um
único ‘1’, precisamente na coluna D0; então a word-line associada à saída numerada ‘0’ terá uma única cruz
diagonal – precisamente na coluna D0;
– Já o conteúdo da linha endereçada por ‘1001’ é {D1=1, D0=0, Z=1}, isto é, contém dois ‘1’s, no caso nas
colunas ‘D1‘ e ‘Z’; então a word-line associada à saída numerada ‘1’ terá duas cruzes – nas colunas ‘D1‘ e ‘Z’;
– E assim sucessivamente…
• O passo seguinte é ligar as saídas mais significativas da ROM às duas primeiras entradas do registo, {D1, D0};
(Deixa-se ao leitor o desenho de um circuito sequencial síncrono que faça o inverso deste acima, isto é: recebe
valores {0 a 3} codificados em binário natural, e gera os correspondentes códigos em binário reflectido…)
Um breve olhar ao logigrama obtido será suficiente para gerar algum comichão:
– de um lado, não se ligou peva às indiferenças (‘X’s) – no sentido de lograr um logigrama mais simples;
– por outro lado, e conquanto o descodificador comporte um total de 8 ANDs, somente se aproveitaram de facto
4 word-lines: que desperdício de ANDs! É hora de tentar ultrapassar estes senões…
Sistemas Digitais (Part III)
Page 102 of 111
Sistemas Digitais (Part III)
PLD
Page 103 of 111
/ 22cº Projecto (Uso de PALs para Circuitos Combinatórios)
A filosofia que subjaz a uma ROM é nítida: Uma ROM estrutura-se em dois planos:
• Um de ANDs, fixo – no sentido de que, pressuposto que as variáveis de entrada são 3 (por exemplo), qualquer
que seja o conjunto de funções dessas variáveis a concretizar, a ROM detém um descodificador com 8 ANDs;
• Um de ORs, variável – no sentido de que, no cruzamento de cada word-line com cada vertical, se insere, ou
não, uma cruz diagonal, isso dependendo da funcionalidade pretendida para o output dessa vertical.
E natural será investigar um procedimento contrário: estruturar uma malha combinatória justapondo um plano
fixo de ORs a um plano variável de ANDs? Quiçá um Projecto novo possa ser o palco destoutra filosofia…
Pretende-se um circuito combinatório que recebe 3-bits do código binário reflectido, e gera os correspondentes
3-bits do código binário natural.
A modos de refresh de memória, apresentam-se ao lado as palavras de 3-bits dos códigos CBR e CBN. Delas se
poderão compor os Mapas de Karnaugh das saídas do circuito, {Z2, Z1, Z0}, em função das entradas, {X2, X1, X0}
e, de imediato, deduzir as correspondentes expressões algébricas simplificadas, vidé ao lado.
Analisando o resultado obtido: pretende-se um circuito combinatório com 3 entradas e 3 saídas, sendo que:
– a expressão algébrica mais longa (que é a de ‘Z0’) necessita apenas de 4 termos de produto;
– o termo de produto mais longo (no conjunto de todas as expressões algébricas) usa 3 literais.
Isso convida a percorrer os catálogos de chips, à procura de uma assim designada PAL (Programmable Array
Logic), com precisamente 3 entradas e 3 saídas, assim estruturada:
– cada saída é funcionalmente equivalente a um “OR de 4 entradas” – e esta configuração/plano é fixa;
– cada uma dessas entradas é funcionalmente equivalente a um “AND de até 3 entradas” – numa configuração
que é variável (depende do Projecto em causa):
– em cada “entrada” dos ANDs, poder-se-á aplicar uma entrada do circuito, ou o seu complemento;
– para o efeito, a PAL usa inversores para lograr o complemento de cada uma das entradas do circuito.
Considerem-se então as expressões algébricas logradas para {Z2, Z1, Z0}:
• Como de costume, dedica-se a saída mais à direita a ‘Z0’, e a entrada mais à direita a ‘X0’;
• A expressão algébrica de ‘Z0’ acaba por se volver na sua 1ª Forma Canónica: uma soma de 4 mintermos (cada
um sendo o produto das variáveis de entrada, na forma normal ou complementar); graficamente, isso traduz-se em
que os ANDs acoplados à vertical ‘Z0’ (os 4 ANDs do topo) irão concretizar esses mintermos, um a um:
– o primeiro AND, representando X X X , terá como entradas X , X e X ; graficamente, isso
2 1 0
2
1
0
denota-se traçando cruzes nas intersecções da horizontal que desemboca nesse AND com as verticais associadas
precisamente a X , X e X ;
2
1
0
– por um raciocínio análogo, e a propósito do segundo AND, representando X X X , dever-se-ão traçar
2 1 0
cruzes nas intersecções da horizontal que desemboca nesse AND com as verticais associadas a X , X 1 e X ;
2
0
– e assim sucessivamente…
• Alguns ANDs não representarão necessariamente mintermos (como é o caso daqueles acoplados às verticais
{Z2, Z1}) – pelo que as linhas horizontais que neles desembocam não exibirão três cruzes diagonais; aliás, poderão
até não exibir nenhuma, significando que esse AND é como que inexistente…
Generalizando a estrutura PAL, a K entradas e N saídas, cada uma gerada por um OR de M ANDs, deduz-se:
ela poderá produzir quaisquer conjuntos de N funções de K entradas, desde que cada uma das respectivas SOPs
não exija mais do que M termos de produto. O número total de conexões a configurar é de (2 × K) × M × N.
À data de escrita deste parágrafo, havia PALs para “todos os gostos e paladares”: face a um Projecto concreto, e
logradas as expressões algébricas das saídas do circuito, cabe ao Projectista discernir a que lhe dá mais jeito…
Ou porventura pesquisar outro tipo de PLD: de uma pate, se um mesmo termo de produto fizer parte das
expressões algébricas de duas saídas, é necessário duplicá-lo, e de outra parte não escapará ao leitor que, do total
de 12 ANDs que a PAL ao lado disponibiliza, somente se aproveitaram sete: que desperdício de ANDs…
Sistemas Digitais (Part III)
Page 104 of 111
Sistemas Digitais (Part III)
PLD
Page 105 of 111
/ 22dº Projecto (Uso de PLAs para Circuitos Combinatórios)
Recapitulando: numa ROM, o plano de ANDs é fixo, mas o de ORs é variável; já numa PAL, o plano de ORs é
fixo, mas o de ANDs é variável… Intui-se o passo seguinte: investigar uma estrutura em que nenhum dos planos,
de ANDs e ORs, seja fixo… É o que se vai ver a seguir, e, como é da praxe, em torno de um Projecto concreto…
Num centro de incineração de resíduos hospitalares, a chama deve manter-se a uma temperatura elevada, para
garantir que vírus e restante fauna fiquem mesmo esturricadinhos. Por prevenção, usam-se três sensores {S3, S2,
S1} – baseados em princípios distintos: temperatura, óptica e química. Qualquer sensor deverá dar um sinal se
detectar temperatura insuficiente. A chama deve ser apagada se e só se dois dos sensores derem esse sinal. Deve
gerar-se um alerta se a saída de um sensor for diferente da dos demais.
 Aceitando a codificação ao lado, é trivial a construção da Tabela de Verdade das saídas {C, A1, A0} do
circuito:
● À esquerda, dispõem-se as colunas correspondentes às entradas do circuito, e que vêm a ser {S3, S2, S1};
● A saída que comanda o acender da chama, ‘C’, será ‘0’ (isto é: estará apagada) para as combinações em que
ao menos dois dos sensores estiverem sinalizando ‘0’ (isto é, estiverem reportando temperatura insuficiente);
● Para as combinações, ‘000’ ou ‘111’ (quer dizer: todos os sensores reportam o mesmo sinal), não deve ser
gerado qualquer alerta: as saídas {A1, A0} estarão então ambas a ‘0’;
● Para as demais combinações, as saídas {A1, A0} deverão reportar o índice do sensor cuja saída é diferente da
dos demais (e que por isso mesmo convirá investigar, para se perceber o porquê dessa anomalia); por exemplo,
• Para a combinação ‘100’, em que ‘S3’ está sinalizando temperatura suficiente, mas os outros sensores
reportam o contrário, {A1, A0} deverá reportar o índice de ‘S3’, isto é: ‘11’…
• Para a combinação ‘101’, em que ‘S2’ está sinalizando temperatura insuficiente, mas os outros sensores
reportam o contrário, {A1, A0} deverá reportar o índice de ‘S2’, isto é: ‘10’…
 A etapa seguinte é construir os mapas de Karnaugh correspondentes às saídas {C, A1, A0}; destes, e embora
seja cedo para o justificar, é mercê construir também os que correspondem aos complementos dessas saídas!
 Será agora trivial escrever as correspondentes (seis) expressões algébricas (SOPs) simplificadas…
 Percorrendo atentamente essas expressões – que são, todas elas, somas de termos de produto – constata-se
que alguns deles ocorrem mais que uma vez… Por exemplo, o termo ‘S3S1’ ocorre nas expressões de ‘C’ e A 0 – e
será natural a questão: desses termos, qual será o menor conjunto capaz de cobrir/concretizar ‘C’ (ou C ), ‘A1’ (ou
A 1 ) e ‘A0’ (ou A 0 )? Para o discernir com método, começa-se por escrever uma tabela, onde:
• À esquerda, escrevem-se todos os termos de produto que surgem em tais expressões;
• À direita, escrevem-se seis colunas, correspondentes às funções que os mapas especificam;
• Para cada linha, apõe-se uma marca, em cada uma das colunas associadas às saídas em cujas expressões
algébricas ocorre o termo de produto associado a essa linha; por exemplo, o termo ‘S3S1’ ocorre nas expressões de
‘C’ e A 0 – pelo que se inscreve uma marca nos cruzamentos da linha ‘S3S1’ com as colunas ‘C’ e A 0 …
 Considere-se então, como exemplo, a cobertura de C , A 1 e A 0 … Percorrendo as respectivas colunas, de
cima para baixo, à procura de marcas, conclui-se: elas detêm marcas apenas na primeira, segunda e três últimas
linhas – ou, por outras palavras, são suficientes cinco termos para cobrir aquelas três funções… Convém registar
essa conclusão numa tabela, onde:
• Nas três linhas do topo, inscrevem-se as (oito) combinações de ‘C’ (ou C ), ‘A1’ (ou A 1 ) e ‘A0’ (ou A 0 );
• Na linha de baixo, inscreve-se o número de termos de produto suficientes para cobrir cada uma dessas
combinações das saídas.
A continuação intui-se: acabar de preencher a tabela, considerando a cobertura de todas as demais combinações
das seis funções em jogo…
 Findo o preenchimento da tabela, a conclusão é pacífica: são suficientes cinco termos de produto…
Sistemas Digitais (Part III)
Page 106 of 111
Sistemas Digitais (Part III)
PLD
Page 107 of 111
/ 22dº Projecto (Uso de PLAs para Circuitos Combinatórios)
Recapitulando: são suficientes cinco termos de produto para concretizar três funções, a saber: ‘C’ (ou C ), ‘A1’
(ou A 1 ) e ‘A0’ (ou A 0 ); de facto, até há duas alternativas: ambos os trios { C , A 1 e A 0 } e {C, A 1 e A 0 } se
bastam em apenas cinco termos… Sendo indiferente escolher uma ou outra, admita-se que se escolhe a segunda…
 Analisando o resultado obtido: pretende-se um circuito combinatório com 3 entradas e 3 saídas, sendo que:
● O dispositivo a usar necessita disponibilizar 5 termos de produto;
Isso convida a percorrer os catálogos dos fornecedores de chips, à procura de uma assim designada PLA
(Programmable Logic Array), com precisamente 3 entradas e 3 saídas, assim estruturada:
● Comporta 3 saídas intermédias, cada qual funcionalmente equivalente a um “OR de até 5 entradas” – numa
configuração que é variável (depende do Projecto em causa);
● Cada uma dessas entradas é funcionalmente equivalente a um “AND de até 3 entradas” – numa configuração
que é variável (depende do Projecto em causa):
● Em cada “entrada” dos ANDs, poder-se-á aplicar uma das entradas do circuito, ou o seu complemento;
● Para o efeito, a PLA usa inversores para lograr o complemento de cada uma das entradas do circuito;
● Enfim, as saídas do circuito obtêm-se directamente a partir das saídas intermédias, ou complementando-as –
para o efeito se recorrendo a uma malha de XORs que é configurável.
 Pressuposta a disponibilidade no mercado de tal PLA, a concretização do circuito entre mãos é trivial:
• Primeiramente, geram-se os 5 termos requeridos pela alternativa escolhida – na prática¸ traçando cruzes nas
intersecções das linhas horizontais que desembocam nos AND com as pertinentes verticais que representam os
literais (ou seus complementos); por exemplo, o termo ‘S3S1’ volve-se em, na horizontal que desemboca no AND
do topo, traçar duas cruzes – nas verticais que representam ‘S3’ e ‘S3’; e assim sucessivamente…
• De seguida, geram-se as saídas intermédias que constituem a alternativa escolhida – que são {C, A 1 e A 0 };
por exemplo, ‘C’ volve-se em, na vertical que desemboca no OR da esquerda, traçar três cruzes – nas linhas que
representam os termos que constituem a função ‘C’; e assim sucessivamente…
• Enfim, geram-se as saídas do circuito, {C, A1, A0}, a partir das saídas intermédias {C, A 1 e A 0 }; na prática,
– ‘A0’ obtém-se mediante o XOR de A 0 com ‘1’ – o que se logra ligando A 0 a uma entrada do XOR que
produz ‘A0’ e conectando a outra entrada do XOR à linha ‘1’; idem para ‘A1’…
– ‘C’ obtém-se mediante o XOR de ‘C’ com ‘0’ – o que se logra ligando ‘C’ a uma entrada do XOR que
produz ‘C’ e conectando a outra entrada do XOR à linha ‘0’.
Generalizando a estrutura PLA, a K entradas e N saídas, cada uma destas gerada por um OR de até M ANDs,
deduz-se: ela poderá produzir quaisquer conjuntos de N funções de K entradas, desde que se não requeiram mais
do que M termos de produto. O número total de conexões possíveis a configurar é de 2 × (2 × K) × M × N.
À data de escrita deste parágrafo, havia PLAs para “todos os gostos e paladares”: face a um Projecto concreto,
e logradas as expressões algébricas das saídas do circuito, cabe ao Projectista discernir a que lhe dá mais jeito…
Uma observação, quiçá desnecessária, pois que é intuitiva: na notação gráfica (de PALs e PLAs), cada cruz
diagonal remete para um elemento electrónico com a seguinte funcionalidade:
– num plano de ORs: se a linha horizontal em que se encontra uma cruz diagonal estiver a ‘1’, então a saída do
OR que lhe fica por baixo ficará a ‘1’;
– num plano de ANDs: se a linha vertical em que se encontra uma cruz diagonal estiver a ‘0’, então a saída do
AND que lhe fica à direita ficará a ‘0’;
– na malha de XORs: consoante for ‘0’ ou ‘1’ a linha horizontal em que se encontra uma cruz diagonal, assim a
saída do XOR que lhe fica por baixo será idêntica à outra entrada do XOR, ou o seu complemento.
E uma última nota: não terá escapado ao leitor que nesta sessão se lançou às urtigas a convenção de situar
entradas à esquerda e saídas à direita… E até nem seria difícil: para o lograr, bastaria rodar o logigrama de
270º… O motivo advém da similitude da representação de uma ROM por uma Tabela com a sua notação gráfica –
se as saídas ficarem em baixo… E depois continuou-se com esta opção, relegando as entradas para o topo…
Sistemas Digitais (Part III)
Page 108 of 111
Sistemas Digitais (Part III)
PLD
Page 109 of 111
/ 22eº Projecto (Uso de PLAs para Circuitos Sequenciais)
Se as PLAs serão interessantes para circuitos combinatórios, sê-lo-ão também para circuitos sequenciais: estes
precisam, além de flip-flops para guardar o estado actual, de malhas combinatórias para gerar as saídas do circuito
e, eventualmente, os valores que excitam as entradas dos flip-flops… Um Projecto novo poderá ilustrá-lo…
Considere que a iluminação de uma árvore de Natal é controlada por um contador. Ao ritmo dos impulsos de
relógio, vão acendendo (e apagando) dois conjuntos de lâmpadas, {L e R}, vidé sequência ao lado…
Ao lado, esquematiza-se o objectivo pretendido… O acender e apagar das lâmpadas segue um ciclo de oito
estados consecutivos: primeiramente, acende apenas o conjunto de lâmpadas ‘R’; após o clock seguinte, continua
aceso apenas esse conjunto ‘R’; mas após o clock seguinte, é o conjunto ‘L’ que acende…
 Deste comportamento, é trivial a construção da Tabela de Verdade das saídas {L, R} do circuito: por mor da
lei do menor esforço – isto é: em vez de se seguir o método clássico de síntese de circuitos sequenciais -, convirá
pressupor que se dispõe de um contador de módulo ‘8’: as suas saídas {Q2 Q1 Q2} vêm a determinar quais os
conjuntos de lâmpadas {L e/ou R, ou nenhum} que se acendem em cada momento, vidé ao lado…
 A etapa seguinte é construir os mapas de Karnaugh correspondentes às saídas {L, R}; destes, será pacífico
construir também os que correspondem aos complementos dessas saídas.
 Será agora trivial escrever as correspondentes (quatro) expressões algébricas (SOPs) simplificadas…
 Constatando que alguns dos termos de produto ocorrem mais que uma vez, escreve-se uma tabela, onde:
• À esquerda, escrevem-se todos os termos de produto que surgem em tais expressões;
• À direita, escrevem-se quatro colunas, correspondentes às funções que os mapas especificam;
• Para cada linha, apõe-se uma marca, em cada uma das colunas associadas às saídas em cujas expressões
algébricas ocorre o termo de produto associado a essa linha…
 Compõe-se em seguida uma tabela, onde:
• Nas duas linhas do topo, inscrevem-se as (quatro) combinações de ‘L’ (ou L ), e ‘R’ (ou R );
• Na linha de baixo, inscreve-se o número de termos de produto suficientes para cobrir cada uma dessas
combinações das saídas.
 Concluindo: são suficientes quatro termos de produto para concretizar duas funções, a saber: ‘L’ (ou L ), e
‘R’ (ou R );
 Se o mercado disponibilizar uma PLA com 3 entradas, 2 saídas e 4 ANDs, o que se segue é trivial:
• Primeiramente, geram-se os 4 termos requeridos – na prática¸ traçando cruzes diagonais nas intersecções das
linhas horizontais que desembocam nos AND com as pertinentes verticais que representam os literais (ou seus
complementos)…
• De seguida, geram-se as 2 saídas intermédias que constituem a solução – concretamente, { L , R}…
• Enfim, geram-se as 2 saídas do circuito, {L, R}, a partir das saídas intermédias { L , R}.
(Obviamente, nada impede que o leitor por si próprio desenhe uma outra solução – nomeadamente, substituindo
o contador por três flip-flops independentes uns dos outros – isto é: em que a excitação das suas entradas fica a
cargo também da PLA…)
Uma última nota: o mercado disponibiliza já PLDs (PLAs e PALs) equipados com flip-flops, e que concretizam
“multi-nível” (saídas há que são internamente injectadas no próprio PLD); na medida em que o objectivo deste
itinerário é compreender os fundamentos subjacentes à programação/configuração de tais dispositivos, não se
apresenta como indispensável despender tempo com tais pormenores.
Sistemas Digitais (Part III)
Page 110 of 111
Sistemas Digitais (Part III)
PLD
Page 111 of 111
/ PLDs: Recapitulação
Ao lado, sumarizam-se os vários PLDs abordados, e assinalam-se as variantes mais avançadas – e sobre que não
é possível deixar mais que algumas breves notas…
 PROMs, PALs e PLAs (abreviadamene: PLDs) foram, nesta sessão, usadas para circuitos com, todos eles,
várias saídas – e onde portanto a “palavra de ordem” é a da partilha, com vista a minimizar o custo global…
Todos eles remetem para a concretização de funções explicitadas sob a forma de SOPs: somas de termos de
produto. É claro que, diante de um Projecto concreto, se desconhece à partida os literais (ou seus complementos) a
envolver em cada AND, tal como se desconhece os termos a envolver em cada OR… O distintivo de tais PLDs é
viabilizarem ao Projectista a sua configuração/programação, isto é: especificar quais os literais a incluir de facto
num AND e/ou quais os termos de produto a incluir de facto num OR…
● Numa PROM, o plano de ANDs é fixo: estão de antemão definidos os literais a incluir em cada AND (na
prática, e dadas ‘K’ entradas, esse plano concretiza 2K ANDs); em contrapartida, é variável o plano de ORs: é
oferecida ao Projectista uma matriz de conexões possíveis – cabendo-lhe a ele caracterizar, com cruzes diagonais,
os termos de produto a incluir em cada OR…
● Numa PAL, o plano de ORs é fixo: está de antemão fixado um número ‘M’ de termos de produto a incluir
em cada OR; em contrapartida, é variável o plano de ANDs: é oferecida ao Projectista uma matriz de conexões
possíveis – cabendo-lhe a ele caracterizar, com cruzes diagonais, os literais a incluir em cada AND…
● Numa PLA, ambos os planos, de ANDs e ORs, são variáveis: está fixado o número total de termos de
produto a incluir no conjunto de todos os ORs; é oferecida ao Projectista duas matrizes de conexões possíveis –
cabendo-lhe a ele caracterizar, com cruzes diagonais, os literais a incluir em cada AND, e os termos de produto a
incluir em cada OR…
Estes dispositivos são disponibilizados no mercado sem uma função lógica definida: cabe ao Projectista
configurá-los – ou, num outra maneira de dizer, programá-los. Atenção, porém, que esta programação é distinta
daquela que recorre a Fortran, Mathematica, Pascal, C, etc.: nestas últimas, trata-se de usar um hardware já dado,
enquanto que em PLDs a programação visa “fixar” o hardware: “ligue esta entrada do circuito àquela AND”, ou
“ligue a saída deste OR àquela saída do circuito”…
Para lá da sua funcionalidade, os PLDs distinguem-se no respectivo preço, velocidade de reacção às mudanças
nas entradas do circuito, rapidez no desenvolvimento de soluções para Projectos…
Mais versáteis e portanto mais complexas, oferecem-se hoje no mercado duas alternativas:
– CPLDs (Complex PLDs), que são interligação de PLDs;
– FPGAs (Field Programmable Gate Arrays), que são interligação de SRAMs e flip-flops D: programa-se as
SRAMs (para realizarem funções lógicas) e a interligação entre elas.
Mas isso fica para um outro dia: não se pode esgotar tudo hoje, senão amanhã não haverá como ocupar o tempo
de uma maneira aprazível…
Download