vitor m. p. vargas / ist sistemas digitais (part ii) page...
TRANSCRIPT
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 3 of 119
Lógica de Polaridade / 8º Projecto
Esta sessão versa a materialização concreta, real, de logigramas – isto é, nos chips de facto disponibilizados
pelos que os fabricam. Como nas outras sessões, ir-se-á desenrolar a partir dum Projecto concreto…
Imagine-se um restaurante com dois pisos. Para transportar objectos entre eles, usa-se um monta-cargas – que
efectua um movimento de vai-e-vem entre duas plataformas de carga, uma em cada piso. Acede-se a elas através
de portinholas: uma, ‘B’, no piso de baixo e outra, ‘T’, no piso de topo. É efectuado o disable (inactivação) do
motor do monta-cargas se:
• tendo-se premido um interruptor ‘Go’, se abrir uma das duas portinholas {B, T};
• ou, sem esse interruptor estar premido, a carga na plataforma exceder um limite prefixado.
Se e só se nenhuma destas situações se verificar, uma lâmpada Verde acende…
Pressuposta a codificação (associada às entradas e saídas) ao lado, o leitor poderá construir os correspondentes
mapas de Karnaugh, e deduzir as expressões simplificadas das saídas – ou, bem mais rapidamente, exercitar a sua
massa cinzenta para as escrever de imediato, vidé ao lado…
(Entretanto, não se pode silenciar: essa praxis não deve ser aceite às cegas! Pelo contrário, é o leitor instado a
usar o método de Karnaugh para lograr as SOPs ou POSs simplificadas – para responder a questões inevitáveis:
porque são elas distintas das expressões ao lado? E sendo-o, e mas importante ainda: quais as vantagens, e
desvantagens, em as usar? Quais os requisitos que o enunciado deveria ter para as preferir?)
Das expressões obtidas, é trivial desenhar um logigrama do circuito que controla o disable do motor e o
acender da lâmpada. Encontra-se ao lado uma possibilidade – em que, como ocorrerá quase sempre doravante, os
símbolos para representar ORs, ANDs e NOTs seguem as convenções da IEC: são rectângulos qualificados.
A questão que agora surge é a seguinte: Como passar do logigrama ao circuito eléctrico real?
A quem tenha já metido as mãos na massa, achará que a questão vem algo atrasada: afinal, já no laboratório
terá tido o ensejo de concretizar, na base de montagem, com os chips disponíveis, algum logigrama…
Mas é hora de considerar essa questão mais de perto. É que, quando se “olha” para o logigrama, o que se vê é o
esquema de um circuito Digital – isto é, em cujas entradas e saídas (e em pontos intermédios), o que “há” são bits:
‘0’s e ‘1’s. Ora, ao se consultarem os Catálogos dos fabricantes, não se enxergam lá ‘0’s e ‘1’s: o que eles
mencionam são níveis eléctricos, a saber: L/Low e H/High.
Como exemplo, ao lado encontra-se uma Tabela, extraída do Catálogo da Texas Instruments, relativa ao circuito
Integrado SN7404 (Hex Inverters). Ela afirma que cada um dos seis inversores (NOTs) que ele disponibiliza
funciona da seguinte maneira:
• quando na sua entrada ‘X’ se forçar o nível eléctrico L, a saída ‘Z’ apresentará o nível eléctrico H;
• quando na sua entrada ‘X’ se forçar o nível eléctrico H, a saída ‘Z’ apresentará o nível eléctrico L.
Abra-se um parêntesis para recordar o significado de L e H: seja o caso de a tecnologia de fabrico dos chips ser
TTL (Transistor-Transistor Logic) ou CMOS (Complementary Metal Oxide-Silicon). Tais chips reconhecem dois
níveis eléctricos (nomeadamente 0 Volt e 5 Volt em TTL). Na prática, tolera-se algum desvio em relação àqueles
valores nominais – com o que se prefere usar os termos Low e High (ou só as iniciais, L e H):
• Low é um nível eléctrico que pode exceder o nível mais baixo não mais que a pertinente tolerância aceitável;
• High é um nível eléctrico que difere do nível mais alto não mais que a pertinente tolerância aceitável.
Particularizando para chips TTL: nas saídas, Low é um valor de tensão entre 0 e 0,4 Volt e High é um valor
entre 2,4 e 5 Volt; nas entradas, Low é um valor de tensão entre 0 e 0,8 Volt e High é um valor entre 2 e 5 Volt. O
que significa, para o caso do Integrado SN7404,
• se na entrada se forçar um valor de tensão inferior a 0,8 V, o valor na saída será superior a 2,4 V;
• se na entrada se forçar um valor de tensão superior a 2 V, o valor na saída será inferior a 0,4 V.
Faz então todo o sentido dedicar tempo à questão acima: Como passar do diagrama lógico ao circuito eléctrico
real? Ou: Como usar os integrados no mercado, para materializar os logigramas a que se chegou?
É isso que se aborda a seguir – e isso com a maior liberdade possível. Na passagem dos logigramas a circuitos
eléctricos, há que usar os circuitos integrados como der mais jeito!
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 5 of 119
Lógica de Polaridade / Lógicas Estáticas: Positiva e Negativa
Seja o caso de a tecnologia de fabrico das chips ser TTL (Transistor-Transistor Logic) ou CMOS
(Complementary Metal Oxide-Silicon). Tais chips reconhecem dois níveis eléctricos, a saber: 0 Volt e 5 Volt (em
TTL) e 0 Volt e 6 Volt (na série SN74HC em CMOS quando se usa uma fonte de alimentação de 6 V).
Porquanto, em ambas as tecnologias, um dos níveis é 0 Volt, natural será a seguinte opção: fazer corresponder
ao nível 0 Volt o ‘0’ lógico. Porquanto 0 é o nível mais baixo (Low), isso volve-se em fazer corresponder a L/Low
o bit ‘0’, e, em consequência, fazer corresponder a H/High o bit ‘1’. Esta convenção designa-se de Lógica Positiva
Considere-se agora o caso de uma outra tecnologia de fabrico de chips, ECL (Emitter Coupled Logic). Tais
chips reconhecem também dois níveis eléctricos: -5,2 Volt e 0 Volt.
Assuma-se a mesmíssima opção acima – de fazer corresponder ao nível 0 Volt o ‘0’ lógico. Porquanto 0 é agora
o nível mais alto (High), ela vem a volver-se em fazer corresponder a H/High o bit ‘0’, e, consequentemente, fazer
corresponder a L/Low o bit ‘1’. Esta convenção designa-se de Lógica Negativa.
Há que clarificar: os considerandos acima manifestam, quando muito, que quiçá seja natural usar a Lógica
Positiva em TTL e CMOS, e relegar a Lógica Negativa para ECL; mas de facto nada obriga ninguém a ater-se a
uma dada Lógica: a regra é escolher a que der mais jeito…
Decidida, então, qual a Lógica a usar – Positiva ou Negativa –, é hora de responder à questão em aberto:
“Como passar do diagrama lógico no papel ao circuito eléctrico real?”
● o primeiro passo é construir as Tabelas de Verdade lógicas das gates presentes no logigrama: ANDs e ORs…
● o segundo passo é aplicar a essas Tabelas de Verdade lógicas a correspondência específica da Lógica eleita –
vindo a obter o que doravante se designará de Tabelas de Verdade físicas – no caso, de ANDs e ORs…
(Em Lógica Positiva, substituem-se os ‘0’s por ‘L’s e os ‘1’s por ‘H’s; intui-se como se fará em Lógica
Negativa, vidé ao lado)
● o terceiro passo é procurar, nos Catálogos dos fabricantes, os circuitos Integrados que se conformam a essas
Tabelas de Verdade físicas:
• No caso da Lógica Positiva, os Integrados cujo funcionamento é o descrito pelas Tabelas de Verdade
físicas do AND e OR são, respectivamente, o SN7408 e o SN7432. Basta, então, concretizar os ANDs e ORs do
logigrama com tais Integrados;
• No caso da Lógica Negativa, os Integrados cujo funcionamento é o descrito pelas Tabelas de Verdade
físicas do AND e OR são, respectivamente, o SN7432 e o SN7408. Basta, então, concretizar os ANDs e ORs do
logigrama com tais Integrados;
• Em qualquer caso, o par de NOTs fica concretizado mediante um SN7404.
Ao lado, encontra-se o circuito eléctrico real correspondente ao logigrama entre mãos, em ambas as versões –
Positiva e Negativa. Constata-se que elas recorrem aos mesmíssimos integrados – mas que eles são usados para
concretizar funcionamentos lógicos distintos! O SN7408 (e o mesmo vale para o SN7432) pode ser usado como
AND ou como OR: cabe ao desenhador de um circuito decidi-lo (ao escolher a Lógica que preside ao circuito).
Nas asserções acima, ficaram “na sombra” as entradas e saídas do circuito. É hora de as considerar:
• No circuito desenhado em Lógica Positiva, está-se pressupondo que deve ser feito o disable do motor se e só
se a saída “disable” estiver a receber ‘1’, isto é: sse lhe estiver a ser aplicado o nível eléctrico High (idem para a
saída ‘V’); e a entrada ‘B’ deve forçar High sse for o caso de ter de sinalizar ‘1’ – o que deverá ocorrer sse a
portinhola de baixo estiver aberta (idem para as demais entradas {T, G e C});
• No circuito desenhado em Lógica Negativa, está-se pressupondo que a saída “disable” deve achar que está
recebendo ‘1’ sse lhe estiver a ser aplicado o nível eléctrico Low (idem para a saída ‘V’); e a entrada ‘B’ deve
forçar Low sse for o caso de ter de sinalizar ‘1’ (idem para as demais entradas {T, G e C}).
Ora, isto é limitativo: considerando as entradas, pode ser mais barato fabricar um sensor de portinhola que, ao
ficar aberta, produza um nível Low; e um sensor de carga que, para assinalar que ela é excessiva, produza um nível
High! O mesmo se pode dizer para as saídas: pode ser mais barato fabricar um actuador que, para proceder ao
disable do motor, exija um nível Low; e um actuador que, para acender a lâmpada verde, exija um nível High!
Há, pois, que investigar por uma Lógica dinâmica!
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 7 of 119
Lógica de Polaridade / Condições Fronteira: Sufixos _L e _H
É comum, em ambiente de produção industrial, designar por “Sensores” e “Actuadores” o que se encontra
ligado respectivamente às “entradas” e “saídas” de um circuito de Decisão – pelo que, e considerada a índole
deste 8º Projecto, se espera a benevolência do leitor para o subsequente uso de tais substantivos…
As questões práticas a decidir, e porquanto um circuito de Decisão só reconhece bits {0, 1}, são as seguintes:
– subentendido que a saída de um sensor se encontra ligada a uma das entradas dum circuito de Decisão, qual o
nível eléctrico, entre {Low, High}, que o sensor deve apresentar à saída para sinalizar o ‘1’ lógico?
– subentendido que uma das saídas dum circuito de Decisão se encontra ligada à entrada de um actuador, e que
ela está tomando o valor ‘1’ lógico, qual o nível eléctrico, entre {Low, High}, a apresentar à entrada do actuador?
No jargão do ambiente de produção industrial, é comum substituir ‘a 1’ por Activo (e ‘a 0’ por Inactivo). Com
esta ressalva, e admitindo que a opção por um ou outro nível tem consequências (nomeadamente no custo),
● há duas espécies de sensores, consoante o nível eléctrico que produzem para sinalizar que estão Activos:
• Sensores activos a ‘High’: para sinalizarem ‘1’, forçam na sua saída o nível eléctrico High;
• e Sensores activos a ‘Low’: para sinalizarem ‘1’, forçam na sua saída o nível eléctrico Low;
● e há duas espécies de actuadores, consoante o nível eléctrico que exigem para advirem Activos:
• Actuadores activos a ‘High’: assumem que à sua entrada se está sinalizando ‘1’ quando aí o nível é High;
• Actuadores activos a ‘Low’: assumem que à sua entrada se está sinalizando ‘1’ quando aí o nível é Low.
Visando a passagem ao circuito eléctrico, deve explicitar-se no logigrama, para cada entrada (e cada saída), a
espécie de sensor (ou actuador) que lhe está interligada. A convenção aqui seguida é: justapor, ao nome da entrada
(ou saída), um sufixo – que será _L ou _H consoante ela for, respectivamente, activa a Low ou activa a High.
Para exemplificar, admita-se, no 8º Projecto, que:
– os Sensores das Portinholas {B, T} e o Interruptor ‘Go’ são activos a Low, e o Sensor de Carga excessiva ‘C’
é activo a High;
– o disable ‘D’ é activo a Low, e a Lâmpada Verde ‘V’ é activa a High.
No logigrama, estes comportamentos explicitam-se:
– designando as entradas por B_L, T_L, G_L e C_H;
– e designando as saídas por D_L e V_H (vidé ao lado).
Estabelecer que o disable é activo a Low significa que a saída ‘D’ traduz ‘1’ no nível Low – e, por
consequência, ‘D’ traduz ‘0’ no nível eléctrico High.
Admita-se, então, que em algum momento o nível eléctrico em ‘D’ é High – ou seja, aí o valor lógico é ‘0’. O
seu inverso, D , volve-se em ‘1’, isto é, e conforme ao jargão referido (em que ‘1’ é substituído por Activo), D
advém activo. Recapitulando: quando o nível eléctrico em D é High, D advém activo; pela convenção em vigor,
deduz-se que a mesmíssima saída pode ser designada de _HD (trata-se de uma óbvia lapalissada: se o disable é
activo a Low, é claro que o enable é activo a High).
Considerações análogas valem para as demais entradas e saídas: B , T , G e D são activas a High; e C e V
são activas a Low – significando que as entradas podem, em alternativa, designar-se por _HB , _HT , _HG e
_LC ; e as saídas por _HD e _LV (vidé ao lado).
Para cada entrada ou saída, há, por conseguinte, dois nomes alternativos: por exemplo, D_L e _HD . Fica
relegado para momento mais oportuno responder à inevitável dúvida: “Como escolher entre os dois?”
Com o que fica dito, terá ficado claro como especificar as condições fronteira (isto é: o exterior a que se liga
um circuito de Decisão): precisamente através dos sufixos _L e _H. Falta descortinar: o que está disponível no
mercado para materializar esse circuito de Decisão; é o que agora se irá abordar…
(Não pode deixar de se acentuar: a convenção acima não é, mormente na bibliografia de Sistemas Digitais, uma
praxis universal! A maioria dos logigramas com que o leitor irá deparar não prima pela adição dos sufixos _L e _H
aos nomes das entradas e saídas: como que subentendendo que todos os sensores e actuadores são activos a High)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 9 of 119
Lógica de Polaridade / Adivinha lá: Que chip é este?
Terá já o leitor constatado, mormente se meteu já as mãos na massa no laboratório, que os Integrados são
identificados por uma inscrição na sua face superior, como seja ‘SN7404’…
Suponha, porém, que um dia lhe vem parar às mãos um Integrado, com duas entradas e uma saída (além, é
claro, dos pinos correspondentes à alimentação: VCC e GND) – mas cuja identificação ‘SN…’ foi apagada…
Natural será a curiosidade: que Integrado será este, que fará ele?
Para lhe responder, convém, é claro, proceder com método – e intui-se qual será o primeiro passo: construir a
respectiva Tabela de Verdade física. Para tal, aplicam-se sucessivamente, naquelas entradas (sejam {X, Y}), todas
as possíveis combinações dos níveis eléctricos {Low, High}, e regista-se o correspondente nível eléctrico na saída
(seja ‘Z’)…
Admita-se, então, que isso já foi feito – tendo-se registado num gráfico/diagrama temporal as quatro
combinações de {Low, High} que {X, Y} podem assumir, e, para cada uma delas, o subsequente nível de ‘Z’. Daí,
será pacífico deduzir a Tabela de Verdade física, vidé ao lado…
Com isso, ficaram reunidas as condições para o segundo passo: discernir qual o Integrado em causa…
A este respeito, vários olhares são possíveis:
O Olhar Positivo: por este olhar, Positivo, entende-se o de alguém que opta pelo uso da Lógica Positiva: a
partir da Tabela de Verdade física, elabora uma Tabela de Verdade lógica – pela substituição de cada ‘L’ por ‘0’, e
de cada ‘H’ por ‘1’, vidé ao lado.
Dela, e pois que ‘Z’ se volve em ‘0’ apenas para a combinação {X=1, Y=1}, ser-lhe-á pacífico afirmar que o
Integrado aparenta ser um NAND, vidé ao lado.
O Olhar Negativo: por este olhar, Negativo, entende-se o de alguém que opta pelo uso da Lógica Negativa: a
partir da Tabela de Verdade física, elabora uma Tabela de Verdade lógica – pela substituição de cada ‘L’ por ‘1’, e
de cada ‘H’ por ‘0’, vidé ao lado.
Dela, e pois que ‘Z’ se volve em ‘1’ apenas para a combinação {X=0, Y=0}, ser-lhe-á pacífico estabelecer que o
Integrado aparenta ser um NOR, vidé ao lado.
Quem tem razão?
Adiante-se que o Integrado com a Tabela de Verdade física lograda é designado pela Texas Instruments por
SN7400 / Quadruple 2-Input Positive NAND gates (aquele fabricante de chips prefere o Olhar Positivo). Mas
poder-se-ia ter antes optado pela designação SN7400 / Quadruple 2-Input Negative NOR gates… Ou seja:
qualquer das deduções, NAND ou NOR, é válida – desde que antecipadamente se clarifique qual a Lógica
(Positiva ou Negativa) que lhe subjaz.
Mas existe ainda uma 3ª via, que, ao invés do par de Olhares acima (que se suportam numa Lógica Estática),
é um Olhar Dinâmico. É o que se irá abordar de imediato.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 11 of 119
Lógica de Polaridade / Indicador de Polaridade (O símbolo )
A terceira via, o Olhar dinâmico que agora se vai abordar, suporta-se em dois pilares:
O primeiro advém de não achar abusivo considerar uma gate como que constituída por vários actuadores
ligados a um sensor: aqueles convertem os níveis eléctricos nas suas entradas em ‘0’s e ‘1’s, sobre que o núcleo da
gate toma uma decisão (que será ‘0’ ou ‘1’), após o que a passa ao sensor, que por seu vez a converte num nível
eléctrico na saída… Então, será pacífico generalizar para uma gate o jargão usado para sensores e actuadores…
Em particular: uma entrada duma gate diz-se activa a High, quando, ao ser-lhe aplicado o nível High, a gate o
entende internamente como ‘1’; e a saída duma gate diz-se Activa a High, quando, para sinalizar um ‘1’ interno, a
gate força nessa saída o nível eléctrico High.
O segundo pilar é que se desconhece o que sejam NANDs e NORs, reconhecem-se apenas ANDs e ORs…
Ao lado, revê-se o comportamento peculiar de ANDs e ORs: aplicando às entradas todas as combinações de
‘0’s e ‘1’s, constata-se que, em ambas as gates, o valor na saída é sempre o mesmo, excepto para uma combinação
particular – combinação essa em que ambos os valores nas entradas são iguais ao valor à saída então produzido.
Em ordem a discernir como “funciona” o Olhar dinâmico, considere-se de novo a Tabela de Verdade física a
que se chegou, ao determinar o comportamento eléctrico do Integrado cuja identificação ‘SN…’ foi apagada…
Sumariamente: nessa Tabela, a saída é em geral High – advindo Low sse as entradas forem ambas High. Desta
constatação, podem inferir-se duas asserções:
● Se se admitir que as entradas da gate são activas a High, afirmar que “a saída da gate é Low sse ambas as
entradas forem High” equivale a afirmar: sse ambas as entradas sinalizarem ‘1’, a saída é Low.
Desse comportamento, e tendo em conta a Tabela de Verdade do AND, é lícito inferir: a gate “soa” a um AND –
mas um AND especial: quando deve sinalizar ‘1’, força na saída o nível eléctrico Low. Mantendo o jargão
costumeiro, de uma saída assim diz-se que ela é activa a Low.
● Se se admitir que a saída da gate é activa a High, afirmar que “a saída da gate é Low sse ambas as entradas
forem High” equivale a afirmar: a saída é ‘0’ sse em ambas as entradas o nível eléctrico for High.
Desse comportamento, e tendo em conta a Tabela de Verdade do OR, é lícito inferir: a gate “soa” a um OR –
mas um OR especial: para se sinalizar ‘0’ a uma entrada, há que forçar nela o nível eléctrico High. Mantendo o
jargão costumeiro, a uma entrada assim diz-se que ela é activa a Low.
Ou seja: tal como há duas espécies de sensores e actuadores (activos a ‘High’ ou activos a ‘Low’), assim há
que passar a considerar várias espécies de entradas e saídas (das gates):
● Entrada activa a ‘High’: a gate assume internamente que a entrada sinaliza ‘1’ quando nela o nível é High;
● Entrada activa a ‘Low’: a gate assume internamente que a entrada sinaliza ‘1’ quando nela o nível é Low;
● Saída activa a ‘High’: para sinalizar um ‘1’ interno na saída, a gate força nela o nível eléctrico High;
● Saída activa a ‘Low’: para sinalizar um ‘1’ interno na saída, a gate força nela o nível eléctrico Low.
Visando a passagem ao circuito eléctrico, deve explicitar-se no logigrama, em cada entrada e saída de gates, a
sua espécie. Isso faz-se com um símbolo especial, dito de indicador de polaridade, a saber: . Na prática: se
uma entrada ou saída estiver qualificada com , diz-se Activa a Low; se o não estiver, diz-se Activa a High.
Com esta convenção, há dois símbolos possíveis para o Integrado, vidé ao lado. Confronte-se o primeiro com o
do NAND (logrado na Lógica Estática): são iguais! O indicador de polaridade pode então ser percebido como um
inversor lógico! Com esta ressalva, aqueles dois símbolos traduzem as expressões YXZ e YXZ que,
conforme às leis de De Morgan, são equivalentes: Aqueles dois símbolos são equivalentes! Pelo que é natural a
questão: Como escolher entre os dois? Fica relegado para momento mais oportuno a resposta a esta questão…
Realce-se que, num logigrama nestoutra Lógica, as entradas e saídas são qualificadas (ou não) com aquele
indicador de polaridade, independentemente umas das outras. Como exemplo, vidé ao lado dois chips (um AND e
um OR, ambos de 3 entradas), em que algumas das entradas e saídas são activas a Low e as outras são activas a
High… E, por aplicação das leis de De Morgan, será pacífico ao leitor obter os símbolos IEC equivalentes…
Neste contexto, é comum usar a expressão “Nível de Actividade” de uma entrada ou saída (ou de um sensor ou
actuador) para designar o nível eléctrico a que ela advém activa: se é activa a High, diz-se que o seu Nível de
Actividade é High – e, La Palisse contraporia, se é activa a Low, diz-se que o seu Nível de Actividade é Low.
Ao invés de logigramas em Lógicas Estáticas – em que as entradas e saídas têm todas o mesmo “Nível de
Actividade” – isso já não sucede nesta nova Lógica – por tal facto se denominando Mista ou de Polaridade.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 13 of 119
Lógica de Polaridade / Logigramas em Lógica mista / de Polaridade
Estão agora reunidas as condições para desenhar um logigrama – em Lógica mista/de Polaridade, de forma a
subsequentemente o materializar num circuito eléctrico real.
Para qualquer Projecto – e, por conseguinte, para o 8º Projecto –, esse desenho progride ao longo de três fases.
A primeira fase é desenhar o diagrama lógico, atendendo unicamente à funcionalidade pretendida.
Recorde-se que, no tocante ao 8º Projecto, isso foi feito logo ao abrir da sessão: pelo simples exercício da
massa cinzenta, chegou-se às expressões para ‘D’ e ‘V’, e ao correspondente diagrama lógico, vidé ao lado.
Note-se que, nesta fase de desenho do logigrama, não se têm em conta os Níveis de Actividade – nem dos
sensores e actuadores, nem das entradas e saída das gates…
A segunda fase é especificar no logigrama as Condições fronteira – na prática justapondo os sufixos _L ou
_H a todos os nomes de entradas e saídas externas.
Quanto ao 8º Projecto, isso também já se fez: admitindo que os Sensores das Portinholas, o Interruptor Go e o
disable são activos a Low, e que o Sensor de Carga excessiva e a Lâmpada Verde são activos a High, as entradas e
saídas externas do logigrama foram renomeadas como ao lado se mostra: B_L, T_L, G_L e D_L; e C_H e V_H.
A terceira fase é ajustar os Indicadores de Polaridade das entradas e saídas dos chips.
Por mor de compreensão do que por isso se entende, retome-se o logigrama em fase de desenho:
● Atente-se na linha entre ‘T’ e uma entrada do OR ‘W’. Quer-se que, sse o sensor ‘T’ assumir o valor ‘1’ (isto
é: estiver activo), aquela entrada se volva internamente num ‘1’ (isto é: fique activa). Mas – vidé o sufixo em T_L
–, ‘T’ activo traduz-se em forçar Low na linha. Portanto: essa entrada deve advir activa sse o nível eléctrico nela
for Low; por outras palavras: a entrada deve ser activa a Low – o que se denota qualificando-a com ;
● Um raciocínio e uma conclusão similares valem para a linha entre ‘B’ e a outra entrada desse mesmo OR; e
outrossim para as linhas entre ‘G’ e o AND ‘N’, e entre ‘G’ e o inversor ‘SW’;
● Atente-se agora na linha entre ‘C’ e uma entrada do AND ‘S’. Quer-se que, sse o sensor ‘C’ estiver activo,
essa entrada fique activa. Mas – vidé o sufixo em C_H –, ‘C’ activo traduz-se em forçar High na linha. Portanto:
essa entrada deve advir activa sse o nível eléctrico nela for High; por outras palavras: a entrada deve ser activa a
High – o que se denota não a qualificando com o símbolo ;
Em todos estes casos, constata-se: se o Nível de Actividade dum sensor for High, então o de alguma entrada a
que ele se liga deverá ser High; mas se for Low, então o Nível de Actividade dessa entrada deverá ser Low.
● Atente-se na linha entre ‘D’ e a saída do OR ‘E’. É pacífico persistir no mesmo raciocínio: concluir que, pois
que o Nível de Actividade de ‘D’ é Low, o dessa saída deverá ser Low – o que sugere qualificá-la com .
Se a saída não estivera ligada a nada mais, isso seria correcto. Mas ela também se liga ao inversor ‘SE’, pelo
que se prefere outra táctica: em vez de a qualificar com , intercalar na linha, “próximo” de ‘D’, um assim
designado inversor de polaridade. Note-se: o actuador ‘D’ deve advir activo sse a saída do OR ‘E’ ficar activa.
Mas – vidé o sufixo em D_L –, para ‘D’ advir activo, o nível eléctrico deve aí ser Low. Todavia, não qualificando
a saída do OR com significa que ela é activa a High; há, pois, que interpor algo – o tal inversor de polaridade
– caracterizado pelo seguinte funcionamento: força na saída o nível Low sse receber à entrada o nível High;
(Abra-se um parêntesis: Não surpreenderá que o símbolo do inversor de polaridade seja exactamente igual ao
do inversor lógico: fazem o mesmo… Outrossim, pode ser interpretado como um buffer – uma gate em que o valor
lógico interno à entrada é reproduzido na saída interna – com entrada activa a High, mas com saída activa a Low)
● Atente-se enfim na linha entre ‘V’ e a saída do inversor ‘SE’. Quer-se que o actuador ‘V’ fique activo sse a
saída interna do OR ‘E’ for ‘0’. Mas isso, tal como está, já o logigrama o garante: sse tal ocorrer, o OR força Low
à saída – que o inversor ‘SE’ reconhece como ‘0’; consequentemente, ele irá forçar na sua saída o nível
correspondente a ‘1’; ele será High (o nível “inverso” do da entrada) – por conseguinte activando o actuador ‘V’.
Em síntese: nada se altera numa linha com nome sufixado com _H; já numa linha com nome sufixado com _L,
acrescenta-se o indicador de polaridade ( ) ou intercala-se um inversor (ou conversor) de polaridade ( ).
A terminar, duas recomendações relevantes:
• É tentador substituir por um NAND – e tendo em conta as leis de De Morgan – o OR ‘W’ com ambas as
entradas activas a Low … Mas não é recomendável fazê-lo: pelo enunciado, algo acontecerá se se abrir uma ou
outra das portinholas {B, T} – e esse ‘ou’ é bem melhor representado por um OR que por um NAND…
• E, é claro, deve descartar-se o inversor ‘SW’: com entrada activa a Low, reproduz na saída o nível à entrada...
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 15 of 119
Lógica de Polaridade / Esquema Eléctrico em Lógica Positiva
Desenhado um logigrama em Lógica mista, é hora de o materializar… Mas, antes, ir-se-á abordar como lhe
nomear as suas linhas internas – de modo a clarificar as funções que aí se realizam e os seus Níveis de Actividade
● Veja-se a saída do OR ‘W’. Deve advir activa quando ‘B’ ou ‘T’ estiverem activos. No jargão vigente, isso
conduz ao nome _HTB ; ora, e conforme às leis de De Morgan, ele equivale a _LTB . Donde, a questão:
Entre esses nomes, qual escolher? A resposta é: preferir aquele cujo Nível de Actividade é o da entrada onde a
linha “acaba”. No caso, a linha “acaba” numa entrada activa a High – pelo que o nome deverá ser _HTB ;
● Atente-se agora na saída do inversor ‘SW’. Deve advir activa quando ‘G’ estiver inactivo. Isso conduz aos
nomes _HG e G_L. Qual escolher? A resposta mantém-se: preferir aquele cujo Nível de Actividade é o da
entrada onde a linha “acaba”. Ora, ela “acaba” numa entrada activa a High – pelo que o nome deverá ser _HG .
● Considerandos e conclusões similares valem para as restantes linhas internas – vidé logigrama ao lado…
(Abra-se um parêntesis: nalgum logigrama, pode a saída de uma gate “bifurcar-se” – isto é, estar ligada a duas
(ou mais) entradas, uma activa a High e a outra activa a Low. Intui-se como proceder então: escolher, para cada
“ramal” emergindo de tal bifurcação, o nome cujo Nível de Actividade é o da entrada a que ele se liga)
Antes, propriamente, de se abordar a materialização do logigrama, há que simplificá-lo. No caso, dever-se-á:
• descartar o inversor ‘SW’ – pois, com efeito, o nível eléctrico na sua saída reproduz pari passu o nível
eléctrico à entrada: o inversor não está lá a fazer coisa alguma…
• substituir os dois inversores à direita por um indicador de polaridade à saída do OR ‘E’: por si só, ele
cumpre o objectivo daqueles (‘D’ ou ‘V’ devem advir activos sse a saída advir, respectivamente, activa ou inactiva)
A dificuldade da materialização do logigrama está em que ela tem que se cingir aos chips disponíveis no
mercado. Ora, os fabricantes de chips só disponibilizam ORs e ANDs com entradas que têm, todas, o mesmo Nível
de Actividade. Pelo que, previamente, há que transformar o logigrama de modo a satisfazer essa limitação…
No caso, só existe uma gate onde isso ainda não é assim, a saber: o AND ‘N’; nele, uma entrada é activa a Low
e a outra é activa a High. Para ficarem ambas com o mesmo Nível de Actividade, há duas estratégias, vidé ao lado:
• ou providenciar que ambas fiquem activas a High – o que se logra substituindo o indicador de polaridade na
entrada activa a Low por um inversor de polaridade inserido na linha que nela “acaba”…
• ou providenciar que ambas fiquem activas a Low – o que se logra qualificando com indicadores de polaridade
os dois extremos da linha que “acaba” na entrada activa a High (como que eles se compensam mutuamente).
(Impõe-se um parêntesis: podem ocorrer casos em que, para alterar o Nível de Actividade de uma entrada activa
a High, não se pode seguir tal estratégia – nomeadamente quando o outro extremo da linha que aí “acaba” é activo
a Low. Intuem-se alternativas (onde em qualquer uma há que qualificar essa entrada com um indicador de
polaridade): descartar o indicador de polaridade do outro extremo da linha, ou inserir nela um inversor de
polaridade. Não custa imaginar alternativas para alterar o Nível de Actividade duma entrada activa a Low…)
Garantido, para todas as gates, que as entradas de cada uma têm o mesmo Nível de Actividade, resta procurar no
mercado os integrados com a Tabela de Verdade física com que as gates ficaram. Às duas opções acima
correspondem outras tantas concretizações em termos de Integrados da série SN74:
- concretizar o OR ‘W’ e o AND ‘S’ com um SN7408; e o AND ‘N’ e o OR ‘E’ com um SN7402;
- inserir um par de indicadores de polaridade (mutuamente compensantes) em cada uma das linhas que
interligam os ANDs {N, S} ao OR ‘E’ - e concretizar tudo, incluindo os inversores, com um par de SN7400s.
Conclusão inevitável: há que exercitar muuuuuuuito a massa cinzenta, sob pena de o Projecto descambar em
mais Integrados do que os estritamente necessários…
Na prática, e aquando da escrita deste texto, a generalidade dos projectistas prefere a Lógica Positiva – e
natural será a interrogação: conhecido o logigrama em Lógica mista, como redesenhá-lo em Lógica positiva?
É claro o que as distingue: em Lógica Positiva, são inexistentes indicadores de polaridade e sufixos _L e _H;
dessa constatação, é óbvia a estratégia a seguir, vidé ao lado:
- se alguma entrada de alguma gate estiver qualificada com um indicador de polaridade, há que substituí-lo por
um inversor de polaridade inserido na linha que nela “acaba”;
- para cada nome sufixado com _L, há que substituí-lo pelo seu equivalente sufixado com _H;
- no fim, descartam-se todos os sufixos _H.
Do logigrama assim obtido, será pacífico deduzir a correspondente – aliás já sabida – expressão booleana…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 17 of 119
Codificação da Informação / 9aº Projecto
Esta sessão versa a Codificação de Informação. Para situar este assunto, o ponto de partida natural será o que
não terá escapado ao leitor: os sensores até agora tidos em conta só reconhecem informações binárias. Revisitando
o 8º Projecto: uma Portinhola está aberta – ou não –, a carga é excessiva – ou não –, e o interruptor Go está
premido – ou não; todas estas informações são binárias: “ou Sim, ou Sopas”… Ora, no mundo real, o mais comum
são informações que assumem mais que dois valores apenas: quando o leitor marca um endereço num telefone, ele
precisa de discernir o dígito premido, entre 10 possíveis; quando escreve um e-mail no teclado dum computador,
ele precisa de discernir a tecla premida, entre mais de 50 possíveis; quando regista um evento com uma câmara de
vídeo digital, ela precisa de discernir entre uma gama ilimitada de sons e cores… Urge, pois, abordar circuitos que
sinalizem informações m-árias… Um tipo particular de circuitos assim é o que o jargão digital designa de
codificadores. Como as outras sessões, ir-se-á desenrolar a partir de um Projecto concreto, vidé enunciado ao lado.
A informação não é binária: não são só duas as alternativas a codificar; daí, uma questão: como codificá-la?
● Suponha-se que a granularidade da observação era reduzida: os contactos seriam só dois; bastaria um bit só:
seja ‘0’ para codificar que o vento soprava para “entre o Norte e o Sudeste” e ‘1’ para codificar o contrário…
● Aumente-se um pouco a granularidade, pelo artifício de substituir cada contacto por um par de contactos (de
menor tamanho); além do bit já referido, seria agora preciso um outro mais: seja ‘0’ para codificar que o vento
soprava para, grosso modo, mais perto do Norte (ou Sul) e ‘1’ para codificar o contrário…
● Aumente-se ainda mais a granularidade, pelo mesmo artifício de substituir cada contacto por outro par de
contactos; além dos dois bits já referidos, seria necessário um outro mais: seja ‘0’ para codificar que o vento
soprava para, grosso modo, mais perto do Norte ou Este (ou Sul ou Oeste) e ‘1’ para codificar o contrário…
A conclusão vem a ser a seguinte: para codificar, sem ambiguidade, cada um dos 8 valores passíveis de ser
assumidos pela direcção do vento, são necessários (pelo menos) 3 bits, com os nomes, seja, {D2 D1 D0}.
Ao lado, representa-se a assim denominada Árvore de Cobertura da Informação a comunicar:
• em baixo, listam-se os 8 valores – e que vêm a ser as folhas da Árvore: {NW, W, SW, S, SE, E, NE, N};
• no topo, encontra-se a raíz da Árvore; dela, bifurcam-se 2 ramos, cada um findando num nó; um, etiquetado
por D2=0, cobre a metade direita das folhas; e o outro, etiquetado por D2=1, cobre a metade esquerda;
• de cada nó, bifurcam-se 2 ramos, cada um findando num outro nó; um, etiquetado por D1=0, cobre a metade
direita das folhas cobertas pelo nó que lhe fica por cima; o outro, etiquetado por D1=1, cobre a outra metade;
• de cada um desses outros nós, bifurcam-se 2 ramos, cada um findando numa folha; um, etiquetado por D0=0,
cobre a folha da direita; o outro, etiquetado por D0=1, cobre a outra folha.
Com o que a cada folha fica associada uma palavra de 3-bits única: {111, 110, 101, 100, 011, 010, 001, 000}.
Em sentido inverso, de baixo-para-cima: cada um dos nós mais abaixo – ditos do nível ‘0’ – cobre 2 folhas;
cada um dos nós que lhes ficam logo acima – ditos do nível ‘1’ – cobre 4 folhas; e o nó mais acima – que acaba por
ser a raíz da Árvore e é dito do nível ‘2’ – cobre 8 folhas.
Mas, se mais nós houvera por cima, eles cobririam sucessivamente 16, 32, ou, mais genericamente, 2n folhas,
em que n seria o número de níveis de nós – e, também, o comprimento das palavras, isto é: o número de bits ‘0’s e
‘1’s preciso para codificar cada folha (e isso subentendendo que as palavras têm todas o mesmo comprimento).
Supondo que a informação pode tomar m valores distintos, e associando cada um a uma folha, conclui-se: para
os codificar, requerem-se m palavras de n bits, em que n é o menor inteiro tal que 2n não é inferior a m. Pelo que:
● A codificação consistirá numa correspondência biunívoca entre cada valor e uma palavra de n-bits; ao lado,
apresentam-se duas alternativas (entre muitas outras): o CBN (código binário natural) – que é aliás o inscrito nos
contactos do cata-vento e nas folhas da Árvore –, e o CBR (código binário reflectido). No que se segue, e a não ser
que se explicite em contrário, a designação “código binário” denotará invariavelmente código binário natural;
● O codificador terá m entradas e n saídas. Como é ele “lá por dentro”, eis o que se irá abordar já de seguida…
Antes, porém, atente-se no conceito subjacente ao termo codificador: derivado da arquitectura do cata-vento –
com 8 inputs! –, chegou-se a um circuito cujo output deverá identificar qual deles está activo de momento. Mas é
concebível uma outra estratégia: dotar o cata-vento de um contacto só (com o início, seja ‘In’´, onde começa o
contacto ‘N’, e findando onde termina o contacto ‘NW’) - e constituir um circuito eléctrico especial: ligar-se-ia um
dos terminais da fonte de alimentação a ‘In’, e ligar-se-ia o outro ao eixo do cata-vento; então, quanto mais o
ponteiro do cata-vento rodasse (no sentido dos ponteiros de relógio), maior seria a resistência eléctrica do circuito
– e “tudo se resumiria” a determinar a amplitude da corrente eléctrica, e a desenhar um sensor generalizado com
um input só (na prática, um assim denominado conversor analógico-digital), para a codificar em ‘0’s e ‘1’s…
Lamentavelmente, não se inclui no âmbito da disciplina abordar tais sensores generalizados…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 19 of 119
Codificação da Informação / Codificador Binário
Como será um codificador? Antecipando a vinda à baila de outros codificadores, convém uma solução genérica
– em particular identificando as entradas não pelas siglas {N, NE, …, NW}, mas com números, seja {0, 1, …, 7}
(ou, para maior simplicidade na exposição adiante, {X0, X1, …, X7}); tendo construído o tal codificador genérico,
bastará depois ligar o contacto ‘N’ à entrada ‘X0’ (por exemplo), o contacto ‘NE’ à entrada ‘X1’, etc..
Com o mesmo fito de perseguir uma solução genérica, também não há que ficar restritos a 8 entradas e 3
saídas: o alvo será um codificador com n saídas e m=2n entradas.
Ora, mesmo para as 8 entradas que o 9aº Projecto requere, o Mapa de Karnaugh expande-se por 28=256 células,
o que é descoroçoante mesmo para o mais devoto de mister Karnaugh: há que dar uso à massa cinzenta…
O método que se irá usar (aqui e noutros contextos) será desenhar um codificador com uma saída, e depois
outro com duas saídas – e, reflectindo sobre os Circuitos logrados, generalizar para codificadores com mais saídas
Caso do codificador 2:1 – i.e., com 1 saída (Z) e 2 entradas (identificadas com números, {X1, X0})
Vidé ao lado a respectiva Tabela de Verdade: à esquerda estão as quatro combinações das entradas {X1, X0}, e à
direita encontra-se a correspondente saída ‘Z’… Tendo em mente o funcionamento do cata-vento,
– grosso modo, a “seta” está sempre a tocar nalgum contacto – pelo que nunca se observa {X1=0, X0=0}; além
disso, nunca toca em dois contactos ao mesmo tempo – pelo que nunca se verifica {X1=1, X0=1}. Regista-se isso
com o símbolo de indiferença, ‘X’, nas correspondentes linhas de ‘Z’;
– quanto aos casos em que a seta toca num contacto só, identificar as entradas por números habilita a uma regra
simpática para estabelecer a saída: a saída será o código binário do número que identifica a entrada (subentende-
se que os ‘0’s e ‘1’s lógicos são interpretados como símbolos do sistema de numeração de base 2). Portanto:
quando o contacto tocado for ‘X0’ (ou seja: quando ‘X0’ advir activo), ‘Z’ volve-se no código binário do número
‘0’ – que é ‘0’; e quando o contacto tocado for ‘X1’, ‘Z’ toma o valor ‘1’ (isto é, o código binário do número ‘1’).
Resta aplicar o método de Karnaugh, para chegar à expressão da saída em termos das entradas…
Caso do codificador 4:2 – i.e., com 2 saídas (Z1, Z0) e 4 entradas, {X3, X2, X1, X0}
Vidé ao lado o respectivo mapa de Karnaugh (é perda de tempo começar por preencher a Tabela de Verdade):
– como expectável, há células que correspondem a combinações das entradas que nunca se observam: estarem
todas inactivas ou estarem duas ou mais activas; são todas preenchidas com o símbolo de indiferença, ‘X’;
– as restantes células correspondem aos casos onde uma só das entradas está activa, a saber e respectivamente:
‘1000’, ‘0100’, ‘0010’ e ‘0001’ – ou seja, as numeradas {8, 4, 2, 1}; {Z1, Z0} apresentarão o código binário do
número que identifica a entrada que então estiver activa, a saber e respectivamente: ‘11’, ‘10’, ‘01’ e ‘00’.
(Dito de uma forma mais pausada: o caso ‘0100’ corresponde a {X3=0, X2=1, X1=0, X0=0}, ou seja, só ‘X2’ está
activa; isso remete para a célula ‘4’ de ambos os mapas, de ‘Z1’ e ‘Z0’. Mas ‘X2’ estar activa significa que as saídas
{Z1 Z0} irão apresentar o código binário de ‘2’ – que é ‘10’ –, ou seja {Z1=1, Z0=0})
Resta aplicar o método de Karnaugh, para chegar às expressões das saídas em termos das entradas.
Essas expressões são sumamente sugestivas: Z1=1 sse ‘X2’ ou ‘X3’ forem ‘1’, e Z0=1 sse ‘X1’ ou ‘X3’ forem ‘1’.
Generalizando: uma saída, seja ‘Zi’, de um codificador binário genérico será um OR de algumas das entradas;
uma entrada, seja ‘Xj’, será incluída nesse OR sse o código binário de ‘j’ contiver um ‘1’ na posição ‘i’.
Caso do codificador 8:3 – i.e., com 3 saídas (Z2, Z1, Z0) e 8 entradas…
A generalização feita habilita à escrita directa das expressões de {Z2, Z1, Z0}! Veja-se o caso do codificador
8:3 – particularizado para o 9aº Projecto: ‘N’ é ligado à entrada ‘0’, ‘E’ é ligado à entrada ‘2’, etc., vidé ao lado.
‘Z2’ será um OR… Quanto às entradas que ele envolve, serão aquelas cujo código binário (de 3-bits), comporta
um ‘1’ na posição ‘2’ – e que vêm a ser {S, SW, W e NW}, vidé ao lado. Idem para ‘Z1’ e ‘Z0’.
Nota: dispondo de tal codificador binário, ele pode ser usado mesmo se a codificação dos contactos for outra!
Conviesse usar o CBR (por exemplo), bastaria ligar à entrada ‘2’ o contacto ‘SE’, que não o contacto ‘E’, etc.…
Não terá escapado ao leitor que suportar o cata-vento sobre o codificador binário acima tem dois senões: de um
lado, ele estará continuamente a sinalizar alguma direcção do vento, mesmo quando não soprar vento nenhum;
ademais, é quase inevitável que, ao rodar de ‘N’ para ‘NE’, a “seta” venha a tocar em dois contactos ao mesmo
tempo – e todavia o desenho do codificador binário partiu do princípio de que tal nunca acontece!
É hora de lidar com estas condicionantes: é o que se vai fazer de imediato…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 21 of 119
Codificação da Informação / 9bº Projecto (Codificador de Prioridade)
Considere um concurso televisivo em que, frente ao júri, se apresentam, de cada vez, quatro concorrentes. Ele
formula-lhes uma pergunta, após o que lhes concede algum tempo para pensarem nela… Se algum concorrente
achar que sabe a resposta certa à pergunta, prime um botão que lhe é dedicado (e tem diante de si).
O júri dispõe de um circuito que assinala se alguém clicou no “seu” botão – e, em caso afirmativo, reporta
quem é ele (sob a forma de um código binário). Se, eventualmente, dois ou mais dos concorrentes tiverem clicado
os respectivos botões, o circuito reportará o que se posicionar mais à esquerda.
Um circuito com este funcionamento designa-se de Codificador de Prioridade. Comparativamente ao
Codificador Binário (isto é, ao circuito desenhado a propósito do cata-vento), são claras as diferenças:
• agora, pode suceder que mais do que uma das entradas esteja activa (o que, na aplicação em causa,
corresponderia a terem sido premidos os botões de dois ou mais dos concorrentes);
• e até pode suceder que nenhuma das entradas esteja activa!
Designem-se de {C3, C2, C1, C0} os estados (não-premido ou premido) dos botões dos Concorrentes; e de ‘C’ a
sinalização (não ou sim) de que pelo menos um deles está premido, e de {Z1, Z0} o código binário que identifica o
concorrente a reportar ao júri (quando C=1).
Aceitando a Codificação ao lado, é trivial a construção da Tabela de Verdade do circuito:
● à esquerda, dispõem-se as colunas correspondentes às entradas do circuito, e que vêm a ser {C3, C2, C1, C0}
● obviamente, a saída ‘C’ será ‘0’ apenas para a combinação em que nenhuma das entradas está activa; quando
tal suceder, as saídas {Z1, Z0} serão irrelevantes – pelo que, na correspondente linha, {Z1, Z0} serão preenchidas
com o símbolo de indiferença, ‘X’;
● para as demais combinações, ‘C’ será ‘1’; e {Z1, Z0} será o código binário do número {3, 2, 1 ou 0} que
identifica o concorrente activo mais à esquerda; percorrendo as combinações de baixo para cima,
• para as (8) combinações prefixadas por ‘1’, ‘C3’ é o botão premido mais à esquerda: {Z1, Z0} será então o
código binário de ‘3’, isto é: ‘11’
• para as (4) combinações prefixadas por ‘01’, ‘C2’ é o botão premido mais à esquerda: {Z1, Z0} será o
código de ‘2’, isto é: ‘10’;
• para as (2) combinações prefixadas por ‘001’, ‘C1’ é o botão premido mais à esquerda: {Z1, Z0} será o
código de ‘1’, isto é: ‘01’;
• para a combinação ‘0001’, só há um botão premido, ‘C0’: {Z1, Z0} será o código de ‘0’, isto é: ‘00’.
Por inspecção visual, constata-se:
– que C=1 sse alguma das entradas for ‘1’ – o que remete para o OR de todas elas;
– que Z1=1 sse ‘C3’ ou ‘C2’ forem ‘1’ – o que remete para o OR dessas duas entradas;
– que Z0=1 sse ‘C3’ for ‘1’, ou ‘C1’ for ‘1’ mas ‘C32 não o for – o que remete para a expressão ao lado.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 23 of 119
Codificação da Informação / Intermezzo: informar com ‘0’s e ‘1’s?
Os Projectos acima compeliram à Codificação de Informação diversa: contactos dum cata-vento, botões
atribuídos aos concorrentes num concurso (e, anteriormente: botões associados aos membros dum júri, etc.).
Antevendo a miríade de Projectos em que convirá aplicar a metodologia de Sistemas Digitais, é hora de revelar:
é possível codificar (exacta ou aproximadamente) qualquer tipo de informação recorrendo só a símbolos ‘0’s e ‘1’s
A este respeito, são comuns duas espécies de codificação:
Códigos cujas palavras têm comprimento uniforme n.
Codificar um valor da informação é associá-lo a uma palavra – isto é, um conjunto ordenado de n bits. Se
houver que considerar m valores distintos, requer-se um total de m palavras; precisamente, designa-se de código a
associação de cada palavra a um valor. Para os cobrir a todos, 2n não deverá ser inferior a m; inversamente: se
houver que codificar m valores, o comprimento mínimo do código será de n=log2m (arredondado por excesso).
Eis alguns exemplos:
● Um ecrã de um sistema electrónico (TV, computador, máquina fotográfica, display de um telemóvel, etc.)
usa comummente o sistema de cores dito de RGB (Red-Green-Blue); nele, a cor de um pixel é conseguida pela
adição local das cores primárias (Vermelho, Verde, Azul) – em que cada uma delas pode assumir uma certa gama
de níveis de intensidade. Para o caso, vulgar, de se recorrer a 256 níveis, e posto que log2256=8, deduz-se que cada
nível é codificado em 8-bits; e pois que, por cada pixel, há que codificar os níveis de 3 cores, conclui-se que as
palavras do código têm, cada uma, 3*8=24 bits; ou seja: no ecrã, cada pixel poderá tomar até 224
cores distintas…
● Os sistemas digitais de comunicação de sons (dos telefones, da rádio e TV, etc.) também recorrem a
códigos. Adiante, faz-se uma breve introdução ao sistema mais primitivo, dito de PCM (Pulse Code Modulation)
uniforme, ficando desde já o leitor advertido que de então para cá a investigação e a tecnologia progrediram…
O som resulta da variação da pressão atmosférica – provocada pelas cordas vocais e restante tracto vocal de
alguém falando ou cantando, e/ou pelos instrumentos duma orquestra, etc…. Essa variação é contínua (isto é, sem
mudanças “a pique”), podendo assumir todos os valores entre um mínimo Vmin e um máximo VMax, vidé gráfico ao
lado. Para a digitalizar (isto é: para a converter numa sucessão de bits), seguem-se várias etapas:
• em primeiro lugar, efectua-se a assim designada amostragem: a um ritmo que tem a ver com as características
(leia-se: frequência máxima) do sinal sonoro em causa, captam-se amostras dele (isto é: determinam-se os valores
que ele toma em instantes discretos do tempo). No caso PCM, em cada segundo há que obter 8000 amostras…
• após o que cada uma das amostras é quantizada. Conceptualmente, divida-se o intervalo entre Vmin e VMax em
m quanta (vidé gráfico ao lado, com m=8 quanta); o valor médio de cada um é dito de Nível de Quantização. A
amostra é arredondada para o Nível de Quantização mais próximo. Adivinha-se o último passo: codificar esse
Nível; havendo que diferenciar entre m Níveis de Quantização, são necessários, para cada amostra, log2m bits (o
que, para o caso m=8, conduz a 3-bit/amostra). Resta dizer que o PCM comercial original usa 8-bit/amostra – o
que, para um ritmo de amostragem de 8000 amostras/segundo, resulta um débito de 64000 bit/seg.
Notas:
– obviamente, esta técnica não é isenta de erros, ditos de quantização – advindos do arredondamento das
amostras… Para os reduzir, aumenta-se o número de quanta; mas isso aumenta o número de bit/amostra – pelo que
a praxis usual é discernir o número de quanta suficiente para um erro de quantização de certo modo imperceptível;
– não constituirá surpresa para o leitor que a técnica acima, de codificar sinais contínuos, seja usada em
muitos outros contextos – nomeadamente, na digitalização de imagens e vídeo, de electrocardiogramas e
electroencefalogramas, etc.
● Adiante, abordar-se-ão outros exemplos onde as palavras do código têm, todas, o mesmo comprimento.
Códigos cujas palavras não têm, necessariamente, o mesmo comprimento.
No código Morse, cada palavra (não de bits mas de pontos e traços) tem um comprimento que é, grosso modo,
inversamente proporcional à frequência de ocorrência do caracter que representa. Isso permite, em geral, encurtar
drasticamente o espaço gasto na codificação da informação em causa.
No mundo digital, esse princípio (e outros) vem a ser usado para compactar a codificação da informação –
nomeadamente, em ficheiros .zip. Mas, por sair notoriamente do âmbito da disciplina a que este documento diz
respeito, fica apenas este alerta… Eventuais curiosos poderão encontrar na Internet informação mais detalhada…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 25 of 119
Codificação da Informação / Codificação de Decimais
Os números são um ingrediente da comunicação; daí, uma questão: como codificar os dígitos {0, 1, 2, …, 9}?
Se se optar por códigos com palavras de comprimento uniforme n, ele deverá ser de, ao menos, log210 = 4.
Mesmo com tal limitação, oferecem-se várias alternativas:
Uma primeira é o denominado código BCD (Binary Coded Decimal) – em cuja versão compactada/packed,
cada dígito é codificado no nibble (isto é: 4 bits) que representa esse dígito na base 2, vidé ao lado.
Nesse código, o número 987(10), por exemplo, é representado por 1001 1000 0111(BCD): cada dígito do número é
codificado separadamente em BCD…
Atente-se que a representação na base 2 daquele número é outra, concretamente vem a ser 11 1101 1011(2).
Comparando as duas codificações, esta última é mais curta: a representação-BCD exige 12 bits, enquanto a
representação na base 2 se basta em 10 bits. Porém, para alguém que tenha que as ler, a primeira é a preferível,
porquanto é mais fácil de perceber a olho nu…
Nota: existe uma versão não-compactada para o código BCD: nela, cada dígito é codificado num byte (isto é: 8
bits), cujos 4 bits de maior peso são preenchidos com ‘0’s, vidé exemplo ao lado.
Uma outra alternativa é o designado código D+3 – em que cada dígito decimal é codificado no nibble que
representa na base 2 a soma desse dígito com 3, vidé ao lado.
Uma peculiaridade desse código é que palavras igualmente ‘afastadas’ de uma linha imaginária a meio do
código são complementares uma da outra. Por exemplo, ‘0’ é codificado em ‘0011’; complementando bit-a-bit esta
palavra, obtém-se ‘1100’ – que é o código de ‘9’; etc..
Uma outra alternativa mais é o designado código ponderado 8 4 -2 -1 – em que cada dígito é codificado num
nibble tal que a soma dos seus bits ponderados por aqueles pesos resulta nesse dígito. Por exemplo, ‘1011’ é o
código de 1×8+0×4+1×(-2)+1×(-1)=8-2-1=5…
Outros códigos decimais ponderados se podem conceber. Eis os pesos de alguns: 5 3 2 -1, 7 4 2 -1; deixa-se ao
leitor a escrita, aliás trivial, dos respectivos códigos…
Exceptuando o código BCD, os restantes acima são hipotéticos ou pré-históricos – no sentido de que hoje
raramente são usados (se é que ainda o são); há todavia que assinalar um código relevante em algumas situações: o
código dito de Gray, ou código binário reflectido, vidé ao lado.
A sua construção é análoga à das colunas associadas às entradas no Mapa de Karnaugh:
– na coluna mais à direita, escrevem-se um ‘0’ e um ‘1’; e, logo após, reescreve-se esse par, mas invertido: um
‘1’ e um ‘0’. Por outras palavras: escreve-se o ciclo ‘01’, justapõe-se um espelho, e logo depois a imagem
reflectida desse ciclo, ‘10’. Justapõe-se um novo espelho e a imagem reflectida do que já se escreveu, etc.;
– na coluna que lhe fica à esquerda, escrevem-se dois ‘0’s e, logo depois, dois ‘1’s. Justapõe-se um espelho, e
logo depois a imagem reflectida do que está por cima. Justapõe-se um novo espelho, etc.;
– e assim sucessivamente, até não ficar nenhuma coluna por preencher…
Com o que as palavras de código ficam dispostas de maneira que duas consecutivas diferem em apenas um bit!
Como exemplo, vejam-se os códigos de ‘3’ e ‘4’ – que são ‘0010’ e ‘0110’: só diferem no segundo bit à esquerda…
À guisa de justificação desta filosofia de codificação, reveja-se o codificador binário desenhado a propósito do
cata-vento; feita a correspondência {N, NE, E, SE, S, SW, W, NW} → {0, 1, 2, 3, 4, 5, 6, 7}, à entrada ‘3’ liga-se
o contacto ‘SE’ e à entrada ‘4’ liga-se o contacto ‘S’…
Considere-se a rotação do vento de ‘SE’ para ‘S’ – que deverá alterar a saída, de ‘011’ para ‘100’. Sucede que
{Z2 Z1 Z0} são as saídas de ORs das entradas – e nada garante que eles tenham o mesmo tempo de propagação.
Pelo que pode acontecer que a saída do codificador transite por palavras intermédias, como seja:
011 → 010 → 110 → 100 (isto é: o OR que produz ‘Z0‘ é o mais rápido, e o que produz ‘Z1‘ é o mais lento…
Ao receber tal sucessão de bits, o Centro concluirá que o vento terá rodado de ‘SE’ para ‘E’, depois para ‘W’ e
enfim para ‘S’ – o que não é bem o que sucedeu: o codificador está pírulas! Para evitar tal dedução, uma solução é
usar o código de Gray: fazer a correspondência {N, NE, E, SE, S, SW, W, NW} → {0, 1, 3, 2, 6, 7, 5, 4}; de cada
vez que a seta rodar para o contacto vizinho, só uma das saídas mudará, não haverá lugar a estados transitórios…
Face a um Projecto concreto, cabe ao projectista averiguar da conveniência em usar tal filosofia…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 27 of 119
Codificação da Informação / Codificação de Texto
Desta exploração dos códigos, não poderia estar ausente a questão: como codificar os caracteres que perfazem
um texto?
A este respeito, não são de somenos os valores a ter em conta: as 26 letras minúsculas e outras tantas
maiúsculas do alfabeto inglês, os 10 dígitos decimais, sinais de pontuação (‘,’, ‘;’, ‘:’, ‘!’, ‘?’, etc.), sinais
aritméticos (‘+’, ‘-‘, etc.) e muitos outros. Perceber-se-á então a escolha de palavras de comprimento 7 – que
habilita a codificar 27=128 valores distintos –, para corporizar o assim designado código ASCII (American
Standard Code for Information Interchange). Ele é universalmente usado em computadores, em HTML (a
linguagem da Internet), etc.; quando, em particular, o leitor usa o NotePad, ou, em Word, executa Save As Text
Only, o ficheiro assim gerado é tão-somente uma sucessão de palavras de código ASCII…
Ao lado, apresenta-se a tabela ASCII, isto é: a correspondência entre cada palavra {b7 b6 b5 b4 b3 b2 b1 b0} e o
caracter que ela representa.
– As duas primeiras linhas cobrem caracteres de controlo; muitos deles são hoje raramente usados para o fim
em vista quando se especificou o código; nomeadamente, ‘2’ e ‘3’ codificam ‘STX’ e ‘ETX’ – cujo objectivo é
delimitar o início (StartOfText) e o fim (EndOfText) de um texto a comunicar entre, por exemplo, um computador
e um terminal remoto; hoje, isso faz-se de outro modo…
– A quarta linha cobre essencialmente, mas não apenas, dígitos decimais; cada um destes é representado pelo
respectivo código binário precedido de ‘011’;
– As quatro últimas linhas cobrem essencialmente, mas não apenas, letras: maiúsculas e minúsculas; entre uma
maiúscula e a correspondente minúscula, o único bit que se altera nas respectivas palavras de código é ‘b5’;
– A terceira linha, e outras palavras de código das outras linhas, cobrem sinas de pontuação, operações
aritméticas, etc.; por exemplo, a célula 20(16) representa um espaço em branco…
Como exemplo de aplicação de tal código, apresenta-se ao lado a codificação em ASCII da palavra ‘Lisboa’; a
prática comum é, entretanto, e em vez de tal sucessão de bits, preceder cada palavra de código de um ‘0’ – com o
que ela passa a ocupar a totalidade de um byte –, e substituir cada nibble pelo símbolo hexadecimal que lhe
corresponde, vidé ao lado.
Desde a sua versão original, em 1963, o ASCII sofreu várias revisões.
O ASCII original foi concebido para a língua inglesa; para ultrapassar tal limitação, uma estratégia consistiu em
aumentar o comprimento das palavras de código, de 7 para 8 bits; isso permitiu acrescentar à tabela mais 128
palavras… Uma versão assim, bastante usada, é a designada de ISO-8859-1 (Latin 1), que já cobre os caracteres
acentuados (como seja ‘à’ e ‘õ’) das línguas latinas da Europa.
Mais recentemente, foi especificado um outro código, dito de UNICODE, este já com um comprimento de
palavra de 16 bit – para cobrir também caracteres de outros alfabetos (grego, árabe, etc.), símbolos matemáticos e
caracteres ideográficos como são os usados em chinês.
Nota final, importante: é prática comum abreviar a designação palavra de código para, mais simplesmente,
código. Com o que não se admirará o leitor de deparar com asserções como sejam:
– no código BCD, o código de ‘6’ é ‘0110’;
– no código ASCII, o código de ‘L’ é 46(16).
Nos dois casos,
– o primeiro uso de ‘código’ remete para a lista de associações entre os valores de informação a codificar e
as diversas palavras de código;
– o segundo uso de ‘código’ remete para a palavra de código a que está associado um valor particular….
No que se segue, far-se-á abundante uso de tal praxis, devendo o contexto em que se usa o termo ‘código’ ser
suficiente para não haver confusão para o leitor relativamente ao significado com que esse termo está a ser usado.
Também por mor de abreviação, será empregue a designação código binário de ‘3’ (por exemplo), para denotar
palavra que, no código binário, representa ‘3’.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 29 of 119
Descodificação / 10aº Projecto
Esta sessão versa maioritariamente a Descodificação de Informação – ou mais precisamente, os circuitos que a
concretizam: Descodificadores (decoders, no jargão anglo-saxónico). Porém, pela relevância que ocupa, neles e
noutros dispositivos que irão sendo abordados a partir de agora, convirá dedicar algum tempo à operação dita de
enable/disable. Como nas outras sessões, irá desenrolar-se a partir de um Projecto concreto...
Considere um cofre tal que, para o abrir, é necessário: posicionar correctamente três interruptores Up/Down e,
depois, clicar num botão Enable. A chave, ou código de abertura do cofre, a introduzir (nos interruptores) para o
abrir é Up-Down-Down.
Subentende-se que, se as posições dos interruptores não estiverem conformes àquela chave, um alarme irá tocar
– mas tal dependerá do estado do botão Enable:
– Se o botão Enable estiver disabled (intui-se que quem deseja abrir o cofre ainda não acabou de posicionar os
interruptores, pelo que ainda não clicou no Enable), a porta do cofre mantem-se fechada e o alarme não toca;
– Caso contrário (se o botão Enable estiver enabled),
– se as posições dos interruptores corresponderem à chave, a porta do cofre abre-se e o alarme não toca;
– senão, a porta do cofre mantem-se fechada e o alarme toca.
Ao lado, encontra-se a Codificação das entradas (o botão Enable e os três Interruptores {I2, I1, I0}) e saídas (o
Alarme e a abertura da Porta), e a Tabela de Verdade do Circuito que as controla – conquanto, verdade seja dita,
ela não seja de todo precisa para escrever as expressões das saídas {A, P} em função das entradas {E, I2, I1, I0}…
A partir delas, pode de imediato desenhar-se um logigrama, vidé ao lado.
Não custa ver que esse logigrama não foi desenvolvido segundo as habituais topologias – nem de uma SOP (OR
de ANDs) nem de uma POS (AND de ORs): é que ele foi desenhado para salientar várias peculiaridades:
Em primeiro lugar, há uma parte do circuito cuja saída fica activa se e somente se as posições dos
interruptores estiverem conformes à chave do cofre (Up-Down-Down); é notório que essa saída é, ignorando a
entrada Enable, um Mintermo das entradas {I2, I1, I0}!
Nota: o nome Mintermo foi introduzido para denotar cada componente da 1ª Forma Canónica duma função. Por
mor de brevidade, usar-se-á a designação “MinTermo das entradas {I2, I1, I0}” para significar uma função dessas
entradas que é constituída por apenas um Mintermo.
Generalizando: dado um conjunto de entradas genéricas, o detector de uma combinação particular delas – isto
é, um circuito cuja saída fica activa apenas para essa combinação das entradas – é um Mintermo dessas entradas!
Abra-se um parêntesis para lembrar: a sua expressão é um produto das entradas, em que cada entrada aparece
uma só vez, na forma normal ou complementar, consoante respectivamente essa entrada for ‘1’ ou ‘0’ (na
combinação em causa). Aplicado ao caso do cofre, onde o código da sua chave é ‘100’ isso volve-se em 0
I1
I2
I .
Uma outra peculiaridade é que as saídas {A, P} são (quando a entrada Enable se encontra activa)
complementares uma da outra.
Isso não deve ser encarado com displicência por um projectista: no contexto de algum Projecto que um dia
venha a ter entre mãos, ele poderá vir a decidir usar integrados que disponibilizem saídas assim… e mal seria ele
recorrer a um NOT para lograr a negação de uma saída que o próprio integrado já facilita! Por conseguinte: há que
ter muita atenção à função de todos os pinos dos integrados por que se opta para materializar um Projecto!
Enfim, as saídas {A, P} do circuito são as saídas de dois ANDs – que têm uma entrada comum, dita de
Enable; com o que, se ela estiver inactiva, aquelas saídas ficarão consequentemente inactivas!
Esta é uma característica de bastantes circuitos integrados no mercado: comportam uma entrada enable – que,
se inactiva, força a(s) saída(s) a ficar(em) inactiva(s)! Há mesmo integrados que exibem diversas entradas enable:
cada uma está associada a uma ou mais saídas – de tal modo que, se inactiva, as força a ficarem inactivas! Dito de
uma maneira informal (não exacta): as saídas controladas por uma entrada Enable só “funcionarão” como se quer
(isto é, conforme às expressões booleanas a que se chegou) se e somente se essa entrada Enable estiver activa.
De novo justificando “pela sua relevância”, convém gastar algum tempo mais com a operação Enable/Disable.
É o que se vai fazer de imediato….
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 31 of 119
Descodificação / Intermezzo: Enabling/Disabling
O mercado disponibiliza integrados com uma entrada especial enable – que, se inactiva, força as saídas que lhe
estão associadas a ficarem a ‘0’! Este comportamento pode ser generalizado – no sentido de que, se aquela entrada
estiver inactiva, as saídas permanecerão num estado por omissão (default), que pode ser ‘0’ ou ‘1’.
Considere-se então um circuito tal que uma saída ‘Z’ (controlada por uma entrada enable) será, se essa entrada
Enable estiver activa, um valor genérico, seja ‘X’.
● Caso em que a saída controlada pela entrada enable é, por omissão, ‘0’:
A Tabela de Verdade para este caso encontra-se ao lado: quando a entrada Enable estiver inactiva, a saída ‘Z’
será ‘0’; caso contrário, deverá ser o tal valor genérico ‘X’.
Manifestamente, a saída será um AND, entre ‘X’ e ‘E’ – que, sem surpresa, é o circuito que produz as saídas
{A, P} no logigrama do 10aº Projecto…
Adiante, será comum a expressão “o AND fica activado” para denotar um AND com uma entrada enable que se
encontra activa (com o que a sua saída será o produto das restantes entradas).
● Caso em que a saída controlada pela entrada enable é, por omissão, ‘1’:
A Tabela de Verdade para este caso encontra-se ao lado: quando a entrada Enable estiver inactiva, a saída ‘Z’
será ‘1’; caso contrário, deverá ser o tal valor genérico ‘X’.
Manifestamente, a saída virá a ser um OR, entre ‘X’ e o complemento de ‘E’, vidé ao lado…
Uma questão decisiva para um Projectista é, obviamente, a correcta interpretação dos esquemas dos catálogos
dos fabricantes – em ordem a saber com precisão o comportamento de cada pino dos diversos integrados. A esse
respeito, existe a IEEE Standard 91-1984, Graphic Symbols for Logic Functions – um documento que normaliza o
desenho dos circuitos integrados. Ao longo das sessões de que esta faz parte, preferiu-se, e em vez de apresentar a
Standard de uma vez só, ir repescando nela as notações que determina para cada assunto que se venha a abordar.
Para a operação Enable, a Standard apresenta dois qualificadores IEC diferentes, a saber: ‘EN’ e ‘G’.
● ‘EN’ assinala uma entrada Enable que afecta todo o integrado; em particular, afecta todas as saídas:
quando inactiva, todas as saídas do integrado advêm inactivas;
● ‘G’ assinala uma entrada Enable que afecta apenas algumas saídas (ou entradas) do integrado; para se
discernir quais são, essas saídas são numeradas – e ‘G’ especifica, com números, quais as saídas que afecta.
Ao lado, apresentam-se vários símbolos IEC (isto é, conformes à Standard); em todos eles, pretende-se que, se
uma entrada ‘E’ do circuito advir Low, seja feita o disable da saída. Da esquerda para a direita,
1. No primeiro integrado, há uma saída, ‘Z’, e uma entrada Enable; para especificar que esta afecta só aquela
saída, esta é qualificada com ‘3’, e a entrada enable é qualificada com ‘G3’. Pois que esta é activa a High, deduz-
se: para que ‘Z’ fique Low quando ‘E’ advir Low, bastará interligar ‘E’ directamente à entrada enable do integrado
(Em vez de qualificar a saída ‘Z’ com ‘3’, seria também válido qualificá-la com um número que ainda não
estivesse a ser usado como prefixo/sufixo, seja ‘2’ – desde que a entrada enable fosse requalificada para ‘G2’)
2. No segundo integrado, há uma saída, ‘Z’, e uma entrada Enable; para especificar que esta afecta todas as
saídas, ela é qualificada ‘EN’… Sendo ela activa a High, deduz-se: para que ‘Z’ fique Low quando ‘E’ advir Low,
bastará interligar ‘E’ directamente à entrada enable …
3. No terceiro integrado, há uma saída, ‘Z’, e uma entrada Enable; para especificar que esta afecta todas as
saídas, ela é qualificada ‘EN’… Sendo ela activa a Low, deduz-se: para que ‘Z’ fique Low quando ‘E’ advir Low,
é preciso interpor um inversor entre ‘E’ e a entrada enable…
4. No quarto integrado, há uma saída, ‘Z’, e “uma” entrada Enable; para especificar que esta afecta todas as
saídas, ela é qualificada ‘EN’… No caso, ela é, internamente, o AND de três entradas, duas quais activas a Low;
deduz-se: para que ‘Z’ fique Low quando ‘E’ advir Low, uma solução será:
– interligar ‘E’ directamente à terceira entrada daquele AND (a que é activa a High),
– e forçar o nível Low em ambas as entradas activas a Low…
Há que referir um erro de principiante, que é interligar ‘E’ ao AND, mas deixando “no ar” as entradas activas a
Low – imaginando que, se as deixar “no ar”, elas ficarão activas… É que isso não se pode pressupor! Uma entrada
enable não pode ficar “no ar”, tem mesmo que se lhe forçar um nível Low ou High (o que for pertinente em cada
momento); caso contrário, arrisca-se a que, com grande probabilidade, o circuito não funcione como se quer!
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 33 of 119
Descodificação / 10bº Projecto
Enfim, é hora de abordar Descodificadores. Quiçá seja melhor fazê-lo a partir de outro Projecto concreto...
Considere o leitor um guindaste que está sendo usado para carregar cascalho… Para efeitos de controlo do
guindaste, ele disponibiliza um conjunto de 15 válvulas hidráulicas:
– 4 para elevar ou baixar a “lança”, em qualquer caso sendo possíveis 2 velocidades;
– 4 para rodar a “lança”, para a esquerda ou para a direita, em qualquer caso sendo possíveis 2 velocidades;
– 4 para enrolar ou desenrolar o cabo, em qualquer caso sendo possíveis 2 velocidades;
– 2 para abrir o balde, sendo possíveis 2 velocidades;
– 1 para fechar o balde.
Pretende-se um dispositivo de controlo remoto, ligado ao guindaste por um cabo multi-condutor; ele deverá ter
15 botões associados um-a-um às 15 válvulas supracitadas e um botão “stop” (significando nada a fazer); mas,
para ser leve e fácil de transportar, o cabo deverá comportar o menor número de condutores…
Pretendem-se os circuitos codificador e descodificador…
Nota importante: pressupõe-se que a cada momento só pode ser accionada uma válvula hidráulica – e, em
consequência, a cada instante estará premido um e um só botão, nem que seja o botão stop…
Havendo que ter em conta o botão stop, o total de sinais que o dispositivo de controlo deverá estar capacitado
para comunicar é de 16; isso conduz a ter que usar, entre ambos, um mínimo de log216=4 condutores.
Designem-se eles de:
– {O1 O0} – para codificar a operação a realizar, entre as quatro possíveis: “mover a lança”, “rodar”, “enrolar o
cabo” e “accionar o balde”;
– ‘A’ – para codificar o atributo a acompanhar a especificação da operação a realizar, respectivamente: “para-
cima ou para-baixo”, “à-direita ou à-esquerda”, “enrolar ou desenrolar” e “abrir ou fechar;
– ‘V’ – para codificar a velocidade a que operação se deve realizar: “depressa” ou “devagar”…
Montando a quatro as saídas {O1 O0 A V} do codificador da operação a solicitar ao guindaste, é claro que o
total de combinações que o conjunto delas pode assumir será de 24=16. Qual o significado a atribuir a cada
combinação? Ele fica esclarecido se se aceitar a codificação para cada uma das saídas ao lado:
Atente-se, como exemplo, na combinação ‘1010’, ou seja {O1=1, O0=0, A=1, V=0}; ela corresponde a “rodar”
(pois O1=1 e O0=0) “à direita” (pois A=1) “devagar” (pois V=0); vice-versa, a operação “baixar a lança depressa”
deverá ser codificada em ‘1101’, ou seja {O1=1, O0=1, A=0, V=1}; de facto, “mover a lança” é codificado em
O1=1 e O0=1, “para baixo” é codificado em A=0 e “depressa” é codificado em V=1…
Saliente-se que a tabela ao lado não é nenhuma Tabela de Verdade! Aliás, 16 entradas levariam a 216
linhas…
Ela é uma lista das combinações de 4 bits – e, porquanto elas são as possíveis saídas de um codificador, natural
será designá-las de “códigos das operações a realizar”. Em particular, o código de “baixar a lança depressa” é
‘1101’. Acontece que esta é a representação de ‘13’ no código binário – pelo que é sugestivo:
• identificar com números (0, …, 15) tanto as entradas do codificador como as saídas do descodificador;
• designar a operação “baixar a lança depressa” de operação nº 13 – e associá-la quer ao botão nº 13 e ipso
facto à entrada nº 13 do codificador, quer à saída nº 13 do descodificador…
Ao lado, esquematiza-se o sistema de comunicação entre o dispositivo de controlo remoto e o guindaste:
• O dispositivo de controlo comporta um codificador – em que, como é sabido, uma só das entradas está activa
– e cuja saída é o código binário da operação a realizar (sendo ‘0000’ no caso “stop”);
• O guindaste envolve um descodificador – que recebe o código binário da operação a realizar (ou ‘0000’) e
que activa uma só das suas saídas.
O sistema acaba por funcionar como se a entrada ‘0’ do codificador estivesse directamente ligada à saída ‘0’ do
descodificador, a entrada ‘1’ do codificador à saída ‘1’ do descodificador, e assim por diante… Só que com
ligações directas haveria que usar 16 “condutores”, que não apenas os quatro em que se basta o esquema ao lado.
Deixa-se ao leitor o desenho do codificador, aliás trivial: cada saída, seja ‘Zi’, será um OR de algumas
entradas; uma entrada, seja ‘Xj’, será incluída nesse OR sse o código binário de ‘j’ contiver ‘1’ na posição ‘i’…
Pelo que resta a questão: como será um descodificador “lá por dentro”? É o que se irá abordar de imediato.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 35 of 119
Descodificação / Descodificadores Binários
Como será um descodificador? Convém, é claro, uma solução genérica – em particular identificando as
entradas não mediante {O1 O0 A V}, mas com números, seja {3, …, 0} (ou, equivalentemente, {A3, …, A0}); e
outrossim identificando as saídas com números, seja {15, …, 0} (ou {Z15, …, Z0}); ademais, também não há que
ficar restritos a 4 entradas e 16 saídas: o alvo será um descodificador com n saídas e m=2n entradas.
Ora, mesmo para as 4 entradas que o 10bº Projecto requere, isso remete para 16 Mapas de Karnaugh cada um
com 16 células, o que é um fortíssimo atentado à paciência de qualquer ser humano…
Adivinha-se o método que se irá usar: desenhar um descodificador com uma entrada, e depois outro com duas
entradas – e, reflectindo sobre os Circuitos logrados, generalizar para descodificadores com mais entradas.
Para determinar as saídas, far-se-á o seguinte: uma combinação das entradas será interpretada como um código
binário – e só ficará activa a saída identificada com o número que lhe corresponde. As entradas podem ser então
pensadas como entradas de selecção/Address – no sentido de que seleccionam a única saída a ficar activa.
Caso do descodificador 1:2 – i.e., com 1 entrada de selecção (‘A’) e 2 saídas (numeradas, {Z1, Z0})
Vidé ao lado a respectiva Tabela de Verdade: à esquerda estão as duas combinações da entrada ‘A’, e à direita
encontram-se as correspondentes saídas {Z1, Z0}… De facto, e pela regra acima: quando ‘A’ for ‘0’, que é o
código binário de ‘0’, ficará activa a saída ‘Z0’, permanecendo ‘Z1’ inactiva; e quando ‘A’ for ‘1’, que é o código
binário de ‘1’, ficará activa a saída ‘Z1’, permanecendo ‘Z0’ inactiva. As expressões das saídas são óbvias…
Caso do descodificador 2:4 – i.e., com 2 entradas de selecção {A1, A0} e 4 saídas, {Z3, Z2, Z1, Z0}
Vidé ao lado as Tabelas de Verdade: quando {A1=0, A0=0} ou seja, quando se forçar à entrada a combinação
‘00’, que é o código binário de ‘0’, ficará activa a saída ‘Z0’, permanecendo inactivas as demais; e se a
combinação à entrada for ‘01’, que é o código de ‘1’, ficará activa a saída ‘Z1’, e somente ela; e assim por diante...
As expressões das saídas são óbvias… e velhas conhecidas: são mintermos (Z0=m0, Z1=m1)! Aliás, para o
concluir, bastaria ver que cada uma advém ‘1’ só para uma combinação das entradas – que é o que define um
mintermo… Generalizando: uma saída dum descodificador binário será o mintermo que corresponde a essa saída!
(O mesmo se teria aduzido se se reparara que, na terminologia do 10aº Projecto, cada saída “funciona” como o
detector duma combinação particular das entradas) O passo final será o desenho de um logigrama. Vidé ao lado
duas alternativas: uma gerada directamente a partir das expressões dos mintermos (dois planos, um de inversores e
outro de ANDs), e uma outra em que o plano de inversores é substituído por um plano de descodificadores 1:2.
Caso do descodificador 3:8 – i.e., com 3 entradas de selecção (A2, A1, A0) e 8 saídas…
A generalização feita habilita à escrita directa das expressões de {Z7, Z1, …, Z0}! Z7 será o mintermo m7 (que é
A2 A1 A0), Z6 será o mintermo m6, etc.. O leitor será capaz de por si só escrever as expressões das outras saídas…
Já se referiu a Standard 91-1984 para a interpretação de esquemas. Ao lado, exemplifica-se a sua aplicação a
descodificadores. Todos têm um qualificador geral (General Qualifying Symbol), nomeadamente X/Y ou 2/4; são
admissíveis outros para identificar descodificadores, vidé ao lado. As entradas de selecção são identificadas pelos
pesos em palavras do código binário, decrescendo de baixo para cima, como sejam {8 4 2 1}; e as saídas são
identificadas por números (inteiros não negativos), crescendo de cima para baixo. Da esquerda para a direita,
1. O primeiro integrado é um descodificador 2:4, em que tanto as entradas como as saídas são activas a High;
2. O segundo é também um descodificador 2:4 (com entradas e saídas activas a High), mas com uma entrada
enable (activa a High): ela necessita ser activada para que a saída seleccionada advenha activa!
3. O terceiro – de que é exemplo o ‘SN74138’ – é um descodificador 3:8 (com entradas activas a High e saídas
activas a Low), também com enable (que é, internamente, o AND de três entradas, duas das quais activas a Low);
4. O quarto – de que é exemplo o ‘SN74154’ – é um descodificador 4:16 (com entradas activas a High e saídas
activas a Low), também com enable (que é, internamente, o AND de duas entradas, ambas activas a Low);
5. O quinto – de que é exemplo o ‘SN74139’ – é um par de descodificadores 2:4 independentes (com entradas
activas a High e saídas activas a Low), cada qual com uma entrada enable (activa a Low);
6. O sexto – de que é um exemplo o ‘SN74155’ – é um par de descodificadores 2:4 que partilham as entradas
de selecção (com entradas activas a High e saídas activas a Low), cada qual com entrada enable (que é,
internamente, o AND de duas entradas, uma activa a Low e a outra activa a High).
Nota final: Quando um integrado disponibiliza duas ou mesmo três entradas enable, fá-lo para tornar a vida
mais fácil ao Projectista! Se as não usar com inteligência, poderá eventualmente vir a recorrer a hardware a mais…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 37 of 119
Descodificação / Árvores de Descodificadores
O descodificador binário é um elemento comum em sistemas digitais. Pense-se, por exemplo, na edição de um
documento num computador: quando se lhe acrescenta um caracter mais, aquele tem que discernir onde memorizá-
lo – entre os, eventualmente, milhões de células da sua memória; isso apela a um descodificador com milhões de
saídas… Dir-se-á: “pois que se construa um descodificador com outros tantos mintermos, um por saída!”. Mas essa
sugestão tem um calcanhar de Aquiles: mesmo para uma memória de somente um milhão (220
) de células, cada
mintermo volver-se-ia num AND com 20 entradas – o que, ao momento da escrita destas linhas, é excessivo: urge
investigar como, com integrados que o mercado disponibiliza, construir um descodificador com muitas saídas!
Reveja-se o 10bº Projecto – que apela ao desenho de um descodificador de 4 entradas e 16 saídas, isto é, ao
desenho de um circuito que selecciona a saída a activar, entre dezasseis, para uma dada combinação de entradas.
Recorde-se a lista dos códigos das operações admissíveis; ela foi configurada de modo a que:
• O bit de maior peso, ‘O1’, selecciona se a operação diz respeito à lança (O1=1) ou não;
• No caso afirmativo, o bit seguinte, ‘O0’, selecciona se se trata de mover a lança (O0=1) ou não;
• No caso afirmativo, o bit seguinte, ‘A’, selecciona se se trata de subir a lança (A=1) ou não;
• No caso afirmativo, o bit de menor peso, ‘V’, selecciona se a operação deve ser feita depressa (A=1) ou não.
A descodificação da operação ‘1101’ – e o mesmo vale para as outras – pode então entender-se como uma série
de selecções consecutivas, o mesmo é dizer uma cascata de descodificadores: o primeiro com uma entrada de
selecção que é o bit de maior peso, …, o último com uma entrada de selecção que é o bit de menor peso…
Por mor de simplificação, ao lado esquematiza-se esta arquitectura para um descodificador de 2 entradas, sejam
{A1, A0} (e portanto com 4 saídas), com base em descodificadores 1:2 (com entradas e saídas activas a High);
compreendendo-a, o leitor poderá, com descodificadores 2:4 (por exemplo), desenhar um descodificador 4:16…
● A primeira etapa é (e porquanto o objectivo é desenhar um descodificador de 4 saídas com descodificadores
com 2 saídas) dispor dois descodificadores 1:2, um por baixo do outro; designem-se eles de {N, S} – e numerem-
se-lhes as saídas, de cima para baixo: {0, 1, 2, 3}; elas ficam sendo as saídas do descodificador 2:4 em vista.
Porquanto o objectivo é desenhar um descodificador, há que garantir que a cada momento fique activa só uma
daquelas quatro saídas. Consegue-se isso com descodificadores 1:2 com enable – e activando só o que detém a
saída que ficará activa: ou se activa o descodificador ‘N’ e se desactiva o descodificador ‘S’, ou se faz o contrário.
● Isso explica a segunda etapa: preceder o par de descodificadores {N, S} de um descodificador 1:2, seja ‘W’ –
e ligar as suas saídas às entradas enable de {N, S}; activando ‘W’, garante-se que ficará activa uma e uma só das
saídas {0, 1} – e em consequência ficará activado um e um só dos descodificadores {N, S}.
● A terceira etapa adivinha-se: ligar as entradas {A1, A0} às entradas de selecção dos descodificadores: ‘A1’
fica ligado à entrada de ‘W’ e ‘A0’ fica ligado às entradas de ‘N’ e ‘S’.
Para apreciar como funciona a arquitectura “em árvore” a que se chegou, considere-se que nas suas entradas
{A1, A0} se força a combinação ‘10’ – e acompanhe-se o que vai ocorrendo da esquerda para a direita…
– pois que A1=1, em ‘W’ ficará activa a saída numerada ‘1’;
– com isso, ficará desactivado (disabled) o descodificador ‘N’, e ficará activado (enabled) o descodificador ‘S’;
– pois que A0=0, em ambos os descodificadores {N, S} ficarão seleccionadas as saídas numeradas ‘0’; mas,
porquanto ‘N’ está desactivado, a saída ‘0’ de ‘N’ permanecerá inactiva: advirá activa apenas a saída ‘0’ de ‘S’;
– pressupondo que as saídas estão numeradas {0, 1, 2, 3} de cima para baixo, tal significa que ficará activa a
saída ‘2’, cujo código binário é ‘10’ – e que é precisamente a combinação que se forçou nas entradas {A1, A0}…
Notas:
– a raíz da árvore, ‘W’, encontra-se à esquerda – e é nela que se interliga a entrada de maior peso, ‘A1’;
– as folhas da árvore, {N, S}, encontram-se à direita – e é a elas que se liga a entrada de menor peso, ‘A0’;
– e se o descodificador fosse de uma dimensão que justificasse interpor outros descodificadores mais, entre a
raíz e as folhas, teria que se lhes ligar entradas de peso sucessivamente decrescente (da esquerda para a direita).
Estas convenções não são ao acaso: decida o leitor o contrário (isto é: ligar ‘A0’ a ‘W’ e ligar ‘A1 a {N, S}) – e
descobrirá que, se se forçar à entrada a combinação ‘10’, a saída que irá ficar activa já não será a numerada ‘2’…
Enfim, assumiu-se que as entradas e saídas dos descodificadores 1:2 disponíveis são activas a High. Mas isso
não está de antemão garantido: convém que o leitor investigue o que fazer se algumas forem activas a Low….
E, também, investigar como construir outros descodificadores, como sejam 3:8 ou 4:16, com base em outros
descodificadores, como sejam 2:4 – ou uma sábia combinação de descodificadores de dimensões distintas…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 39 of 119
Descodificação / 10cº Projecto
A árvore que concretizou o descodificador 2:4 ilustra a aplicação do que se poderá designar de partilha de
blocos funcionais.
Para apreender melhor esta técnica, considere-se a saída numerada ‘1’ – que vem a ser a saída ‘1’ do
descodificador ‘N’. Ela ficará activa sse as duas condições seguintes se verificarem:
- a entrada de selecção de ‘N’ for ‘1’;
- estiver activado (enabled) o descodificador ‘N’.
A primeira condição equivale a dizer: o bit de menor peso à entrada, ‘A0‘, for ‘1’;
A segunda condição equivale a estar activa a entrada enable de ‘N’ – o mesmo é dizer estar activa a saída ‘0’ de
‘W’; mas tal sucede sse a sua entrada de selecção for ‘0’ – ou seja: sse o bit de maior peso à entrada, ‘A1‘, for ‘0’.
Concluindo: a saída ‘1’ ficará activa sse A1=0 e A0=1 – o que corresponde ao mintermo m1, 0A
1A .
Similarmente, a saída ‘0’ ficará activa sse A1=0 e A0=0 – o que corresponde ao mintermo m0, 0A
1A .
Qualquer dos dois mintermos envolve o termo 1A . O que é notável é que, em vez de usar um inversor para
gerar ‘m0’ e um outro para gerar ‘m1’, a árvore, para os materializar a ambos, recorre a um só bloco, ‘W’!
Revisitando essa árvore: a saída ‘0’ de ‘W’ é partilhada pelos mintermos ‘m0’ e ‘m1’, e a saída ‘1’ de ‘W’ é
partilhada pelos mintermos ‘m2’ e ‘m3’…
Pode o leitor reapreciar esta partilha, se aceitar o desafio de desenhar um descodificador 4:16:
- sob a forma de uma árvore de descodificadores 2:4,
- ou sob a forma de uma árvore mista, de descodificadores 1:2 e 3:8;
- ou mesmo sob a forma de uma árvore de descodificadores 1:2, 2:4 e 1:2 – isto é: um descodificador 1:2
ligado a dois descodificadores 2:4, cada um dos quais ligado a quatro descodificadores 1:2…
E, após observar essa técnica da partilha nesses circuitos, natural será concordar que tenderá a ser interessante
sobretudo para circuitos com várias saídas. Quiçá um novo Projecto o possa testemunhar melhor…
Quando é mister apresentar, a um observador humano, algum número, não é lá muito delicado fazê-lo sob a
forma de um código binário... Uma praxis comum é fazê-lo visualmente, como sequência de dígitos – cada um
através do assim designado display de 7-segmentos; convirá então dispor de um circuito tal que, recebendo um
dígito codificado em BCD, {D3, D2, D1, D0}, as saídas assinalem os segmentos {a, b, c, d, e, f, g} a acender
O circuito, denominado descodificador de 7-segmentos, tem necessariamente 7 saídas. Para elaborar as Tabelas
de Verdade, basta compreender como deverá ele funcionar quando à entrada se forçar alguma combinação:
- se ela for ‘0000’, que é o código BCD de ‘0’, devem acender-se os segmentos {a, b, c, d, e e f};
- se ela for ‘0001’, devem acender-se apenas os segmentos {b e c};
- e assim por diante, vidé ao lado…
Ou seja:
- o segmento ‘a’ deve acender-se sse nas entradas se forçarem os códigos BCD de {0, 2, 3, 5, 7, 8, 9} – de que
se depreende que a Tabela de ‘a’ terá ‘1’s apenas nas linhas {0, 2, 3, 5, 7, 8, 9};
- o segmento ‘b’ deve acender-se sse nas entradas se forçarem os códigos BCD de {0, 1, 2, 3, 4, 7, 8, 9} – de
que se depreende que a Tabela de ‘b’ terá ‘1’s apenas nas linhas {0, 1, 2, 3, 4, 7, 8, 9};
- e assim por diante, vidé ao lado…
A última etapa adivinha-se: a partir das Tabelas, preencher mapas de Karnaugh – e deduzir as expressões
algébricas simplificadas das saídas {a, b, c, d, e, f, g}; ao lado, indicam-se as expressões para cada uma delas
(sugerindo-se, é claro, ao leitor deduzi-las por si mesmo, e conferir da sua validez, não vá o diabo tecê-las…).
Nelas, consta um total de 17 termos de produto; mas 0
D2
D e 0
D1
D repetem-se 3 vezes, e 0
D1
D , 0
D1
D ,
1D
2D e
1D
2D repetem-se 2 vezes – significando que há 6 blocos funcionais que podem ser partilhados; no fim
de contas, são suficientes 9 termos de produto (além dos inversores e ORs, bem entendido), para gerar as 7 saídas.
Mas seja permitido um desabafo: preencher sete Mapas e aplicar sete vezes o método de Karnaugh para as
saídas do descodificador de 7-segmentos é mesmo enfadonho: haverá por aí um método melhor? É o que se vai ver
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 41 of 119
Descodificação / 10dº Projecto
Não custa encontrar um método mais cómodo para gerar as saídas do descodificador de 7-segmentos, se se tiver
em conta:
• que qualquer função booleana se pode exprimir na 1ª Forma Canónica – que é uma soma de mintermos…
• que o mercado disponibiliza integrados – precisamente os descodificadores – cujas saídas são mintermos…
Para clarificar tal método, quiçá o melhor venha a ser aplicá-lo a uma saída, seja ‘a’: pois que a sua Tabela de
Verdade tem ‘1’s apenas nas linhas {0, 2, 3, 5, 7, 8, 9}, deduz-se que a sua 1ª Forma Canónica será
m0+m2+m3+m5+m7+m8+m9; do que se pode concluir: se se dispuser de um circuito que produza os mintermos
presentes nesta soma, bastará acrescentar um OR cujas entradas sejam esses mintermos.
Ora, pelo que já se viu, mintermos “são o que um descodificador mais sabe fazer”; e, requerendo-se mintermos
até ‘m9’, inclusive, um descodificador 4:16 será suficiente – já que ele produz os mintermos {m0, …, m15}.
Para materializar a saída ‘a’, bastará então um descodificador 4:16, a cujas entradas de selecção se aplicam o
código binário do número a visualizar, {D3, D2, D1, D0} – e aplicar às entradas de um OR as saídas desse
descodificador que estão numeradas {0, 2, 3, 5, 7, 8, 9}, e apenas elas, vidé ao lado.
Este procedimento pode, é claro, aplicar-se às restantes saídas do descodificador de 7-segmentos entre mãos – e
com uma vantagem assinalável: já não é preciso usar mais nenhum descodificador – já que aquele que ‘a’ requer
pode ser partilhado pelas demais saídas, vidé ao lado.
Comparando com o circuito anteriormente obtido à maneira clássica (preenchendo mapas de Karnaugh, e
deduzindo as expressões simplificadas), é patente o muito menor suor gasto com esta técnica “descodificador 4:16
mais sete ORs”)!
E o melhor ainda está para vir: pois que qualquer função booleana se pode exprimir na 1ª Forma Canónica, é
pacífica a generalização desse mesmo procedimento a qualquer função: para materializar uma qualquer saída de
um circuito digital, basta aplicar as suas entradas a um descodificador e ligar a um OR as saídas do
descodificador que geram os mintermos que são pertinentes a essa saída!
E, nisto, nada de Mapas de Karnaugh, apenas uma Tabela de Verdade correctamente preenchida.
“Tudo” se pode então fazer com descodificadores e ORs…
Assinale-se, porém, que, na prática real, há que ter em conta a eventualidade de as saídas de descodificadores
disponibilizados no mercado serem activas a Low; se for esse o caso, há, é óbvio, que usar ORs com entradas
activas a Low – o que, em lógica positiva, corresponde a NANDs!
A arquitectura ao lado ilustra duas praxis deveras interessantes em sistemas digitais (e não só):
● Modularidade: traduzir o Projecto numa sábia articulação de vários módulos, cada um deles com uma
funcionalidade bem definida e figurando no logigrama final como uma “caixa preta”: vidé o descodificador 4:16 –
onde se não vislumbra o seu interior, que no caso são os 16 ANDs (ou, em alternativa, a pertinente árvore de
descodificadores) em que ele se resolve;
● Partilha: usar os outputs de alguns destes módulos como input para alguns outros módulos: vidé as saídas do
descodificador, que vêm a ser utilizadas como entradas para os 7 ORs que decidem o acender/apagar dos 7-
segmentos.
Estas técnicas foram introduzidas na construção da árvore de descodificadores – e serão repetidamente usadas
até ao final deste itinerário: nomeadamente, e para citar apenas alguns casos, em árvore de multiplexers, em
circuitos aritméticos, na composição de contadores de módulo não trivial, e em RAMs…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 43 of 119
Descodificação / 10eº Projecto
É hora de abordar Transcodificadores, isto é: circuitos que aceitam informação em um código e cujas saídas
apresentam essa informação em um outro código. Quiçá o melhor seja partir de um Projecto concreto...
Considere-se uma fonte de informação que está gerando dígitos codificados no código de Gray (ou binário
reflectido); pretende-se que eles sejam apresentados visualmente, através de um display de 7-segmentos; admita-se
que, para o efeito, se dispõe já de um descodificador de 7-segmentos (o alvo dos Projectos precedentes).
Ao lado, esquematiza-se a arquitectura global do circuito:
• À direita, encontra-se o display de 7-segmentos;
• Imediatamente à sua esquerda, encontra-se um descodificador de 7-segmentos: para cada dígito codificado em
BCD que receba, as saídas sinalizam os segmentos a acender;
• À esquerda dele, encontra-se um Transcodificador: recebe nas entradas {G3 G2 G1 G0} dígitos codificados no
código de Gray, e apresenta-os nas saídas {D3, D2, D1, D0}, porém codificados em BCD.
A questão é: como será esse Transcodificador?
A modos de lembrete, apresenta-se à esquerda a codificação em binário reflectido dos dígitos decimais e à
direita a correspondente codificação em BCD.
Ao lado, apresentam-se duas estratégias de desenho do Transcodificador:
A primeira é a estratégia clássica (as expressões simplificadas são deduzidas dos mapas de Karnaugh):
Considere-se, por exemplo, o dígito ‘5’: ele é codificado ‘0111’ em binário reflectido, e ‘0101’ em BCD. O que
se pretende é que, quando às entradas do Transcodificador se apresentarem os valores {G3=0, G2=1, G1=1, G0=1},
as saídas tomem os valores {D3=0, D2=1, D1=0, D0=1}; ora, ‘0111’ remete para as células numeradas ‘7’ dos
Mapas de Karnaugh das saídas {D3, D2, D1, D0} – pelo que o que há a fazer é inscrever ‘0101’ nessas células…
Repetindo este raciocínio para os restantes dígitos, no final resta deduzir as expressões algébricas simplificadas
das saídas, vidé ao lado.
A segunda estratégia baseia-se no sábio emprego dos circuitos que ultimamente se abordaram: codificadores
e descodificadores.
A primeira etapa reflecte o enunciado a que se chegou acima: para materializar uma qualquer saída de um
circuito digital, basta aplicar as suas entradas a um descodificador, etc.. No caso presente, em que as entradas são
{G3 G2 G1 G0} são quatro, isso traduz-se em aplicar-lhes um descodificador binário 4:16, vidé ao lado.
Adivinha-se o resto: para cada uma das saídas {D3, D2, D1, D0}, ligar a um OR as saídas do descodificador que
geram os mintermos que são pertinentes a essa saída! Mas há uma maneira bem mais cómoda:
O descodificador binário tem o seguinte funcionamento: para cada combinação à entrada, activa uma e uma só
saída… O que convinha agora é o inverso: um circuito em que uma e uma só das entradas está activa, e que gera
nas suas saídas o código dessa entrada – mas esse funcionamento, constatou-se na sessão precedente, é o de um
codificador. No caso, em que o código alvo é o BCD, convirá usar um codificador binário 16:4, vidé ao lado.
Resta interligar o descodificador ao codificador… Para apreender como fazê-lo, reveja-se o caso do dígito ‘5’:
• admita-se que a fonte de informação acaba de gerar o dígito ‘5’; então, irá surgir à entrada do descodificador o
código binário reflectido de ‘5’ – que é ‘0111’; mas, este sendo o código binário de ‘7’, depreende-se que a saída
do descodificador binário que irá ficar activa é a numerada ‘7’;
• entretanto, e pois que o dígito gerado pela fonte de informação é ‘5’; deverá ser ‘0101’ (o código BCD de ‘5’)
o que deverá apresentar-se nas saídas do codificador; mas, sendo ‘0101’ o código binário de ‘5’, depreende-se que
a entrada do codificador binário que deverá ficar activa é a numerada ‘5’.
Pretendendo-se activar a entrada ‘5’ do codificador – e pois que então a (única) saída do descodificador que
está activa é a numerada ‘7’ , o que se deverá fazer é ligar essa saída ‘7’ à entrada ‘5’, vidé ao lado.
Repetindo este raciocínio para os restantes dígitos, conclui-se a interligação do descodificador ao codificador.
(Repare-se que, no esquema, se denotaram com setas algumas das interligações. Elas assinalam casos em que o
fluxo de bits se faz de baixo para cima - em vez de se fazer de cima para baixo, como é a praxe normal)
A terminar: um codificador basta-se em ORs - pelo que o esquema “descodificador + codificador” acaba por
ser tão-somente um caso particular do enunciado supracitado: “para materializar uma saída …, basta aplicar … a
um descodificador … e ligar a um OR as saídas do descodificador…“
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 45 of 119
Multiplexagem / 11aº Projecto
Esta sessão versa a Multiplexagem, e a operação inversa, a Desmultiplexagem. Como todas as outras sessões, ir-
se-á desenrolar a partir de um Projecto concreto...
Considere um fornecedor que está armazenando oito produtos em outros tantos silos. Cada um deles dispõe de
um sensor que comunica ao Centro de Controlo se o nível do produto está ou não acima do limiar mínimo de
reposição. No conjunto, por conseguinte, o Centro recebe 8 inputs. Para discernir o que se passa num silo, o
operador dispõe de um circuito com botões de selecção...
Ao lado, esquematiza-se o circuito – como “caixa preta”:
• Ele disponibiliza oito entradas de dados para receber as informações binárias (“acima do limiar, ou não”) que
provêm dos sensores dos silos; estão numeradas, de cima para baixo: {0, 1, 2, 3, …, 7};
• A saída, ‘Z’, destina-se a apresentar ao operador a informação recebida numa dessas entradas;
• Para o operador seleccionar em qual dos oito silos/entradas está interessado, são-lhe oferecidas log28=3
entradas de selecção; estão rotuladas com índices decrescentes de baixo para cima: {A2, A1, A0} – em que o
literal ‘A’ remete para uma outra designação para essas entradas, que é comum no jargão anglo-saxónico: Address.
{A2, A1, A0} devem veicular o código binário do número que identifica a entrada de dados cujo valor (recebido
do sensor) deve ser transferido para a saída. Concretizando: se, por exemplo, se forçar {A2=0, A2=1, A2=1}, então
(e pois que ‘011’ é o código binário de ‘3’), ‘Z’ deve tomar o valor lógico que então se estiver apresentando na
entrada de dados numerada ‘3’.
Um circuito assim denomina-se de Multiplexer. Tem uma só saída, e entradas de dois tipos:
• entradas de dados para receber informações binárias (‘0’s e ‘1’s);
• entradas de selecção/endereço para seleccionar/endereçar uma entre essas entradas de dados.
A saída reproduz o valor lógico que estiver na entrada seleccionada (sendo comum, e aceitável, a expressão “o
valor na entrada de dados seleccionada é transferido/transmitido para a saída – desde que se subentenda que isso
não remove o valor daquela entrada: “ele continua lá...”).
Resta averiguar: como será um multiplexer lá por dentro? Convém, é claro, uma solução genérica – em
particular, não há que ficar restritos a 3+8 entradas: o alvo será um multiplexer com n entradas de selecção e m=2n
entradas de dados.
A saída segue a seguinte regra: uma combinação das n entradas de selecção será interpretada como um código
binário – e será transferido para a saída o valor lógico que se encontrar na entrada de dados identificada com o
número que esse código representa.
Ora, mesmo para as 3+8=11 entradas que o Projecto entre mãos requere, isso conduz a um Mapa de Karnaugh
com 211
=2048 células, o que é mais do que qualquer um está disposto a suportar…
Adivinha-se o método que se irá usar: desenhar um multiplexer com uma entrada de selecção, e depois outro
com duas entradas – e, reflectindo sobre os Circuitos logrados, generalizar para multiplexers de maiores
dimensões...
O que se vai seguir é precisamente a aplicação desse método…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 47 of 119
Multiplexagem / Multiplexers
Como será um multiplexer, lá por dentro?
Caso do multiplexer 2:1 – i.e., com 1 entrada de selecção (‘A’) e 2 entradas de dados ({D1, D0})
Vidé ao lado o respectivo mapa de Karnaugh (é perda de tempo começar por preencher a Tabela de Verdade):
– à esquerda, dispõe-se uma coluna, representando a entrada de selecção, ‘A’; no topo, dispõem-se duas linhas,
representando as duas entradas de dados {D1, D0} (ficando por baixo a de menor índice, ‘D0’);
– o preenchimento das células é trivial: quando A=0, deve transferir-se para a saída, ‘Z’, o valor que se
encontrar na entrada ‘D0’ – com o que a primeira linha do Mapa acaba por ser uma cópia da linha ‘D0’; por
razões análogas, a segunda linha do Mapa vem a ser uma cópia da linha ‘D1’;
– a partir do mapa, é pacífica a expressão simplificada de ‘Z’, e o correspondente logigrama, vidé ao lado duas
alternativas: uma gerada directamente a partir dessa expressão (um inversor, um plano de ANDs e um OR), e uma
outra em que o inversor é substituído por um descodificador 1:2.
Recordando o intermezzo sobre Enabling/Disabling, em cada AND, a entrada provinda do descodificador pode
ser entendida como entrada enable: “o AND ficará activado” sse essa entrada advir activa. E, porquanto só uma
saída do descodificador poderá estar activa, fica garantido que em cada instante só um dos ANDs estará activado;
a sua saída será o valor que se apresentar na entrada ‘Di’ – e será ele o valor que a saída ‘Z’ do OR irá apresentar.
Caso do multiplexer 4:1 – i.e., com 2 entradas de selecção {A1, A0} e 4 entradas de dados {D3, D2, D1, D0}
Um mapa de Karnaugh para tantas variáveis de entrada (6) é suficientemente extenso para um parêntesis…
Reveja-se como se construiu o mapa de Karnaugh para o multiplexer 2:1: a linha ‘i’ do Mapa é uma cópia da
linha ‘Di’. Isso convida a elaborar uma assim designada Tabela de Verdade condensada/reduzida: à esquerda,
dispõe-se uma coluna, representando a entrada de selecção, ‘A’; mas já se não vislumbram as linhas representando
as entradas de dados {D1, D0}: em vez delas, preenche-se de imediato a coluna representando a saída ‘Z’ – em que,
linha a linha, e em vez de ‘0’s e ‘1’s, se inscreve a designação da entrada de dados que deve surgir em ‘Z’.
É natural a questão: dada uma Tabela condensada, como será a expressão algébrica da saída? A que se
encontrou para o multiplexer 2:1 sugere que ela será a soma das expressões nas linhas da coluna que representa a
saída, ponderadas pelos correspondentes mintermos. Esta asserção habilita a escrever num ápice a Tabela
condensada para o multiplexer 4:1, vidé ao lado – e de imediato a expressão simplificada da saída, ‘Z’, e, enfim, o
respectivo logigrama (no caso, sob a forma de um descodificador 2:4 seguido de um plano de ANDs, e de um OR).
Intui-se o seu “funcionamento”: dada uma combinação das entradas, {A1, A0}, ela é interpretada como o código
binário dum número, seja ‘i’, – e fica activa uma só saída do descodificador: aquela numerada com ‘i’; a saída
será o valor na entrada interligada a esse AND – e que é aquela cujo índice é esse número, ou seja, ‘Di’.
Caso do multiplexer 8:1 – i.e., com 3 entradas de selecção e 8 entradas de dados:
O leitor deverá ser capaz de por si só escrever a expressão da saída e o respectivo logigrama…
Já se referiu a Standard 91-1984 para a interpretação de esquemas. Ao lado exemplifica-se a sua aplicação a
multiplexers. Todos têm um qualificador geral, MUX. As entradas de selecção são activas a High, e identificam,
com ‘G’, as entradas que afectam; as entradas de dados são activas a High, e as entradas enable são activas a Low
1. SN74157 materializa quatro multiplexers 2:1, partilhando uma entrada enable e uma entrada de selecção;
‘G1’ especifica que ela afecta as entradas de dados numeradas com ‘1’ (isto é: todas) – o que acarreta o seguinte
funcionamento: para as saídas dos multiplexers são transferidos os valores que se encontrarem nas entradas de
dados numeradas ‘1’ ou ‘1 ’, consoante a entrada de selecção estiver, respectivamente, activa ou inactiva.
2. SN74153 materializa dois multiplexers 4:1, cada qual com uma entrada enable. As entradas de dados são
numeradas: {0, 1, 2, 3}, de cima para baixo. Eles partilham duas entradas de selecção; ‘ 0/3G ’ especifica que
elas afectam as entradas de dados numeradas {0, 1, 2, 3}. Uma combinação dessas entradas de selecção é
interpretada como um código binário – em que as posições de maior e menor peso correspondem às entradas
numeradas, respectivamente, ‘1’ e ‘0’. Em cada multiplexer, será transferido para a saída o valor lógico que se
encontrar na entrada de dados identificada com o número que esse código representa.
Nos dois símbolos, especificou-se só o multiplexer no topo: subentende-se que os restantes são especificados de
um modo igual… Ademais, são encabeçados por uma forma gráfica específica (que inclui o qualificador MUX e as
entradas de selecção, ‘G’), para denotar que se trata de um bloco de controlo comum aos vários multiplexers.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 49 of 119
Multiplexagem / Árvores de Multiplexers
O multiplexer é um elemento comum em sistemas digitais. Pense-se, por exemplo, na visualização de um
texto num computador: para apresentar o próximo caracter, tem que o capturar entre os, eventualmente, milhões de
células da sua memória; isso sugere um multiplexer com milhões de entradas… Dir-se-á: “pois que se construa um
multiplexer assim!”. Mas essa sugestão tem um calcanhar de Aquiles: mesmo para uma memória de somente um
milhão (220
) de células, o OR necessitaria 20 entradas – o que, ao momento da escrita destas linhas, é excessivo:
urge investigar como, com integrados que o mercado disponibiliza, construir um multiplexer com muitas entradas!
A estratégia adiante é análoga à seguida para um descodificador de muitas entradas: entender a multiplexagem
n:1 como multiplexagens consecutivas, o mesmo é dizer uma cascata de multiplexers: os primeiros cujas entradas
de selecção são os bits de menor peso, …, os últimos cujas entradas de selecção são os bits de maior peso…
Por mor de simplificação, ao lado esquematiza-se esta arquitectura para o 11aº Projecto, que remete para um
multiplexer de 3 entradas de selecção {A2, A1, A0} e 8 entradas de dados {D7, D6, …, D1, D0}, com base em
multiplexers 2:1 e 4:1 (com entradas e saídas activas a High); compreendendo-a, o leitor poderá desenhar
multiplexers de maiores dimensões ou com base em outros multiplexers…
A primeira etapa é (e pois o objectivo é desenhar um multiplexer de 8 entradas de dados) dispor dois
multiplexers 4:1, um por baixo do outro; designem-se eles de {N, S} – e numerem-se-lhes as entradas de dados, de
cima para baixo: {0, 1, 2, 3}; elas ficam sendo as entradas de dados do multiplexer 8:1 em vista.
Porquanto o alvo é desenhar um multiplexer, há que garantir que a cada momento se escolhe uma só das oito
entradas de dados. Logra-se isso com um circuito que permita seleccionar entre duas saídas: a de ‘N’ e a de ‘S’.
Isso explica a segunda etapa: justapor ao par de multiplexers {N, S} um multiplexer 2:1, seja ‘E’ – e ligar as
saídas daqueles às entradas de dados desse multiplexer; a entrada de selecção de ‘E’ garante que para a sua saída
será transferida uma só das suas entradas de dados {0, 1} – o mesmo é dizer a saída de ‘N’ ou a saída de ‘S’, ou
seja, uma só de todas as entradas de dados dos multiplexers {N, S}.
A terceira etapa adivinha-se: ligar as entradas {A2, A1, A0} às entradas de selecção dos multiplexers: ‘A2’
fica ligado à entrada de selecção de ‘E’ e {A1, A0} ficam ligados às entradas de ambos os multiplexers ‘N’ e ‘S’.
Para apreciar como funciona a arquitectura “em árvore” a que se chegou, considere-se que nas suas entradas
{A2, A1, A0} se força a combinação ‘110’ – e acompanhe-se o que vai ocorrendo da esquerda para a direita…
• pressuponha-se que as entradas de dados estão numeradas {0, 1, 2, …, 6, 7} de cima para baixo;
• pois que A1=1 e A1=0, será transferido para as saídas de {N, S} os valores aplicados às suas entradas
numeradas ‘2’ – e que são ‘D2’ e ‘D6’, respectivamente;
• pois que A2=1, será transferido para a saída ‘Z’ de ‘E’ o valor na sua entrada numerada ‘1’ – e que vem a ser o
valor à saída de ‘S’, que é ‘D6’;
• isto é; a saída do multiplexer 8:1 é o valor na entrada de dados numerada ‘6’, cujo código binário é ‘110’ – e
que é precisamente a combinação de bits que se forçou nas entradas {A2, A1, A0}…
Notas:
• a raíz da árvore, ‘E’, encontra-se à direita – e é nela que se interliga a entrada de maior peso, ‘A2’;
• as folhas, {N, S}, encontram-se à esquerda – e é a elas que se ligam as entradas de menor peso, {A1, A0};
• e se o multiplexer fosse de uma dimensão que justificasse interpor outros multiplexers mais, entre a raíz e as
folhas, teria que se lhes ligar entradas de peso sucessivamente crescente (da esquerda para a direita).
Estas convenções não são ao acaso: decida o leitor outra coisa (por exemplo: ligar ‘A1’ a ‘E’ e ligar {A0, A2} a
{N, S}) – e irá constatar que, se ‘ forçar à entrada a combinação ‘110’, a entrada de dados que será transferida para
a saída já não será a numerada ‘6’…
(Abra-se um parêntesis: em vez do multiplexer 2:1, poder-se-ia ter usado, bem entendido, um OR de dois ANDs
providos, cada um, de uma entrada Enable…)
Ao lado, apresenta-se o símbolo IEC (isto é, conforme à Standard 91-1984) do integrado SN74151, um
multiplexer 8:1; de notar o facto de apresentar a saída sob ambas as formas: normal e complementar.
Deixa-se ao leitor investigar como construir outros multiplexers, como seja o multiplexer 16:1, com base em
multiplexers 4:1 – ou numa sábia combinação de multiplexers de dimensões distintas…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 51 of 119
Multiplexagem / 11bº Projecto
Sabendo como construir um multiplexer com qualquer número de entradas de selecção, é hora de meditar sobre
a asserção em que se baseou o desenho do multiplexer 4:1: que a saída dum multiplexer será a soma das
expressões nas sucessivas linhas da coluna que representa a saída, ponderadas pelos correspondentes mintermos…
Este enunciado evoca a 1ª Forma Canónica: esta é uma soma dos mintermos correspondentes às linhas em que
a saída assume o valor ‘1’… Pelo que é inevitável investigar: poderá um multiplexer facilitar o desenho do
logigrama duma função? Eis o que se vai abordar – e, como é da praxe, em torno de um Projecto concreto:
Considere-se uma viatura com um alarme – que recebe informações de quatro sensores; eles são activados
quando o Motorista se senta, fecha a Porta, põe o Cinto e insere a chave (Key)…
As condições para o alarme tocar são as seguintes:
• a chave está inserida, mas a porta está aberta;
• a porta está fechada, o motorista está sentado e a chave está inserida, mas ele ainda não pôs o cinto.
Aceite a codificação ao lado para a activação do alarme e para as informações provenientes dos sensores, é
pacífica a construção da Tabela de Verdade de ‘A’ em função de {P, K, M, C}, vidé ao lado…
Ao lado, apresentam-se duas estratégias de desenho do Circuito:
A primeira é a estratégia clássica (as expressões simplificadas são deduzidas dos Mapas de Karnaugh):
Para o leitor, chegar ao resultado deve ser “trigo limpo farinha amparo”: um OR de dois termos de produto…
A segunda estratégia baseia-se no sábio emprego de um multiplexer.
O ponto de partida é a expressão da saída na 1ª Forma Canónica: como a soma dos mintermos correspondentes
às linhas em que a saída assume o valor ‘1’ – no caso, os mintermos ‘m4’, ‘m5’, ‘m6’, ‘m7’ e ‘m14’. Isso
reconhecido, ‘A’ pode reescrever-se sob a forma:
m0×0+m1×0+m2×0+m3×0+m4×1+m5×1+m6×1+m7×1+m8×0+m9×0+m10×0+m11×0+m12×0+m13×0+m14×1+m15×0
Mas esta expressão é uma soma de bits ponderados por mintermos – e esses bits são precisamente os que
preenchem as sucessivas linhas da coluna que representa a saída: ‘0000111100000010’; o que, recordando a
asserção supracitada, habilita a concluir: para concretizar o circuito, basta um multiplexer 16:1:
• em cujas entradas de selecção se forçam as entradas {P, K, M, C}
• e a cujas entradas de dados se aplica aquele padrão de bits – que é a coluna ‘A’ na sua Tabela de Verdade.
Eis um outro modo de o deduzir:
• admita-se que a combinação das entradas {PKMC} é ‘0110’. Ora, ‘0110’ é o código binário de ‘6’, o que
significa: quando ocorrer aquela combinação de entradas, o valor a transferir para a saída do multiplexer será o
que se encontrar na entrada numerada ‘6’. Mas, esclarecendo a Tabela de Verdade que, para aquela combinação
das entradas, a saída deve ser ‘1’, isso só fica garantido se se aplicar ‘1’ nessa entrada ‘6’;
• admita-se, porém, que a combinação das entradas é ‘1100’. Ora, ‘1100’ é o código binário de ‘12’, o que
significa: nesse caso, o valor a transferir para a saída do multiplexer será o que se encontrar na entrada numerada
‘12’. Mas, esclarecendo a Tabela de Verdade que, para essa combinação das entradas, a saída deve ser ‘0’, isso só
fica garantido se se aplicar ‘0’ nessa entrada ‘12’;
• generalizando: para concretizar o circuito, bastará aplicar os sucessivos bits da coluna ‘A’ da sua Tabela de
Verdade às entradas de dados de um multiplexer 16:1.
Recapitulando o percurso trilhado até agora, oferecem-se três estratégias para o desenho de um circuito:
• a dita clássica, em que se constrói um mapa de Karnaugh e daí se deduz a expressão simplificada da saída;
• o uso de um descodificador das entradas e de um OR – a que se aplicam as saídas do descodificador que
correspondem às combinações das entradas para as quais, na Tabela de Verdade da saída, a respectiva coluna é ‘1’;
• o uso de um multiplexer, em cujas entradas se aplicam os bits da coluna da saída na sua Tabela de Verdade.
Cabe ao projectista, face a cada Projecto, decidir qual a estratégia a usar. Intui-se que, se o circuito apresentar
várias saídas, a que se suporta num descodificador tenderá a ser a mais interessante; caso contrário, aparentam ser
mais interessantes as outras duas estratégias acima – ou uma sábia combinação delas: é o que se vai abordar…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 53 of 119
Multiplexagem / E se não houver os Multiplexers que queremos?
A Tabela de Verdade do 10bº Projecto desdobra-se por 16 linhas, vidé ao lado – o que, já se viu, remete para um
multiplexer 16:1. Admita-se então que se pretende materializar de facto o circuito – mas que não se consegue
encontrar no mercado um multiplexer assim… “O mais que consegue arranjar” são multiplexers 8:1 ou 4:1…
Dirá o leitor: já atrás se investigou “como, com integrados que o mercado disponibiliza, construir um
multiplexer com muitas entradas?”, pelo que bastará aplicar o método encontrado: criar uma árvore de
multiplexers. No caso, isso volver-se-ia em implantar dois multiplexers 8:1 e um OR de dois ANDs, e um NOT…
Mas existe uma alternativa, com menos chips. Ela passa por condensar/reduzir a Tabela de Verdade:
● Primeiramente, selecciona-se um subconjunto das variáveis de entrada {P, K, M, C}; o mais cómodo será
optar pelas de maior peso, {P, K, M}, isto é: descartar a de menor peso, ‘C’;
● Em segundo lugar, escreve-se a Tabela de Verdade da saída – num formato a duas dimensões: dispõem-se à
esquerda três colunas, correspondendo às variáveis de entrada seleccionadas, e uma linha no topo, correspondente
à outra variável (convém deixar um espaço razoável entre a coluna que irá conter os valores da função ‘A’, e
aquelas associadas a ‘C’, vidé ao lado). Segue-se o preenchimento de tal Tabela:
A coluna ‘A’ da Tabela de Verdade inicial é transposta para esta Tabela a duas dimensões: o primeiro par de
valores, ‘00’, é copiado para a primeira linha abaixo dos valores {‘0’ e ‘1’} que ‘C’ pode tomar; o segundo par de
valores, ‘00’, é copiado para a segunda linha; e assim sucessivamente… Resumindo, os valores da coluna ‘A’ da
Tabela inicial são copiados para as colunas associadas a ‘C’, da esquerda para a direita e de cima para baixo…
● Por último, preenche-se a coluna da saída ‘A’:
• Repare-se na primeira linha da Tabela a duas dimensões: ela “diz” que, quando {P, K, M} forem ‘000’, a
saída ‘A’ tomará o valor ‘0’ – independentemente do valor de ‘C’! Isto sugere escrever ‘0’ na primeira linha de ‘A’;
e, pela mesmíssima razão, se fará o mesmo para as linhas em que {P, K, M} são ‘001’, ‘100’, ‘101’ e ‘110’;
• quanto às linhas em que {P, K, M} são ‘010’ e ‘011’, elas “dizem” que, então, a saída ‘A’ tomará o valor
‘1’ – independentemente do valor de ‘C’! Isto sugere escrever ‘1’ nas correspondentes linhas de ‘A’;
• Resta a última linha, em que {P, K, M} é ‘111’, ela “diz” que, então, a saída ‘A’ tomará um valor que é
exactamente o inverso de ‘C’! Isto sugere escrever C na correspondente linha de ‘A’.
A coluna ‘A’ assim obtida condensa o comportamento da saída do circuito – isto é, especifica-o através de,
apenas, 8 linhas. E habilita de imediato a desenhar o seu logigrama – através de um multiplexer 8:1 em cujas
entradas se aplicam os sucessivos valores na coluna ‘A’ – com a única ressalva de que, quando ele for ‘ C ’, à
entrada é aplicada a saída de um inversor da entrada ‘C’, vidé ao lado.
Por mor da simplicidade, é mister um parêntesis: para desenhar o logigrama a que se chegou, claro que não é
necessário condensar a Tabela de Verdade. Basta meditar sobre os sucessivos pares de linhas da Tabela inicial…
Por exemplo, o último par corresponde aos casos em que {P, K, M, C} se volvem em ‘1110’ e ‘1111’ – que
diferem só na posição de menor peso: as posições de maior peso são iguais a ‘111’; ora, este é o código binário de
‘7’, isto é: esse par de linhas “tem a ver” com a entrada numerada ‘7’ do multiplexer. Para se discernir o que se lhe
deve ligar, repare-se nos valores que a coluna ‘A’ contem nesse par de linhas: ‘1’ (precisamente quando a variável
de menor peso é ‘0’) e ‘0’ (quando a variável de menor peso é ‘1’). Ou seja: apresenta o inverso de ‘C’ – pelo que
se deve forçar ‘ C ’ na entrada ‘7’ do multiplexer… Isto é: para desenhar o logigrama, basta pensar bem…
Em ordem a chegar a uma importante conclusão, reavalie-se o percurso acima: concretizou-se um circuito de 4
variáveis com, somente, um multiplexer 8:1 e um inversor. Recordando que, com uma variável, ‘X’, se podem
conceber apenas 4 funções booleanas distintas (a saber: g0=0, g1=X, g2= X e g3=1), é pacífica a generalização:
pode materializar-se qualquer circuito de ‘n’ entradas com um multiplexer n-1:1 e, quando muito, um NOT!
E, teimar-se-á, se, após lograr o logigrama acima, se constatasse que, afinal, o mercado só faculta multiplexers
4:1? A resposta intui-se: condensar a Tabela condensada. Tendo seleccionado as variáveis de entrada de maior
peso, os valores de ‘A’ na Tabela condensada acima seriam transpostos para as duas colunas associadas a ‘M’ –
após o que se procederia ao preenchimento da coluna ‘A’, e, enfim, ao desenho de um logigrama. Nele, e ademais
do multiplexers 4:1, está presente um AND e um inversor – que poderão ser substituídos por um multiplexer 2:1…
(Actualize-se o que se acentuou já: é claro que para chegar a este logigrama bastaria raciocinar sobre os
sucessivos quartetos de linhas da Tabela inicial…)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 55 of 119
Multiplexagem / 11cº Projecto
É hora de abordar a Desmultiplexagem. Quiçá seja preferível fazê-lo a partir de um Projecto concreto...
Considere uma Adega em que as uvas são prensadas e distribuídas a treze Cubas de fermentação através de um
cano único – seguindo-se a seguinte filosofia: em cada momento, só uma delas é que estará enchendo. Cada cuba
comporta uma válvula de entrada que pode assumir três posições: fechada, “a meio gás” e totalmente aberta. O
abrir e fechar das válvulas é comandado a partir do Centro de Controlo da Adega.
O Circuito que comunica sinais às válvulas será pacífico:
• tendo que se sinalizar 13 válvulas, são precisas, no mínimo, log2134 entradas de selecção, {A3, A2, A1, A0},
para endereçar cada uma delas;
• porquanto cada uma das válvulas pode assumir três posições, são precisas, no mínimo, log232 entradas de
dados, {V1, V0}.
Subentendendo-se que nas entradas de selecção se deve aplicar o código binário da válvula seleccionada, e
aceitando-se a codificação ao lado para as posições duma válvula, resta desenhar o circuito… Mas, atenção: ele
terá 6 entradas, o que significa um mapa de Karnaugh com não poucas células: é melhor usar a massa cinzenta…
Uma primeira observação, óbvia, é a de que se pode compreender o circuito como o paralelo de dois assim
designados Demultiplexers: o do topo recebe/envia ‘V0’, e o de baixo recebe/envia ‘V1’ (o que está conforme à
convenção habitual: de apresentar as entradas com pesos sucessivamente crescentes de cima para baixo).
Um Demultiplexer funciona de modo inverso ao de um Multiplexer:
• enquanto um Multiplexer tem várias entradas de dados e uma saída, um Demultiplexer tem uma só entrada
de dados, mas várias saídas;
• entretanto, ambos disponibilizam entradas de selecção/endereço: no multiplexer, para seleccionar/endereçar
uma entre várias entradas, e no caso do Demultiplexer para seleccionar uma entre várias saídas…
No Demultiplexer, a saída seleccionada reproduz o valor lógico que estiver na entrada (sendo comum, e
aceitável, a expressão “o Demultiplexer transfere/transmite o valor na entrada de dados para a saída seleccionada
– desde que se subentenda que isso não remove o valor daquela entrada: “ele continua lá...”).
Resta averiguar: como será um demultiplexer lá por dentro? Convém, é claro, uma solução genérica – em
particular, não há que ficar restritos a 3 entradas de selecção: o alvo será um multiplexer com n entradas de
selecção e m=2n saídas.
Uma combinação das n entradas de selecção será interpretada como o código binário do número identificador
de uma das saídas – e será transferido para ela o valor lógico que se encontrar na entrada de dados.
Perseverando na praxis já seguida em outros cenários, adivinha-se o método que se irá usar: desenhar um
demultiplexer com uma entrada de selecção, e depois outro com duas entradas – e, reflectindo sobre os Circuitos
logrados, generalizar para demultiplexers de maiores dimensões...
O que se vai seguir é precisamente a aplicação desse método…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 57 of 119
Multiplexagem / Demultiplexer
Como será um demultiplexer, lá por dentro?
Caso do demultiplexer 1:2 – i.e., com 1 entrada de selecção (‘A’) e 2 saídas (Z1, Z0)
Vidé ao lado a respectiva Tabela de Verdade condensada:
– à esquerda, dispõe-se uma coluna, representando a entrada de selecção, ‘A’;
– ao lado, dispõem-se as colunas representando as saídas {Z1, Z0} (ficando à direita a de menor índice, ‘Z0’);
– o preenchimento destas colunas é trivial: quando A=0, o valor que se encontrar na entrada ‘D’ deve ser
transferido para a saída ‘Z0’ (isto é, ‘Z0’ deve tomar o valor ‘D’), permanecendo inactiva a saída ‘Z1’; e quando
A=1, o valor na entrada ‘D’ deve ser transferido para a saída ‘Z1’, permanecendo inactiva a saída ‘Z0’.
– a partir da Tabela, são óbvias as expressões simplificadas de {Z1, Z0}, e um logigrama, vidé ao lado.
Compare-se esse logigrama com o de um descodificador 1:2; revendo o intermezzo sobre Enabling/Disabling, a
entrada, em cada AND, que procede de ‘D’ pode ser entendida como entrada enable: “o AND ficará activado” sse
essa entrada advir activa. Isso significa o seguinte:
- se D=0, ambos os ANDs ficarão inactivados – e isso independentemente de ‘A’; por outras palavras: seja qual
for a saída seleccionada, ela tomará o valor ‘0’ – que afinal é o que se pretende: que ela reproduza o valor de ‘D’;
- se D=1, ambos os ANDs ficarão activados; mas somente a saída seleccionada tomará aquele valor ‘1’.
Concluindo: um Demultiplexer resolve-se num descodificador com entrada enable, vidé ao lado:
• o logigrama do circuito, agora concretizado por um descodificador 1:2 em cuja entrada enable se ligou ‘D’;
• o logigrama de um Demultiplexer 1:4, concretizado por um descodificador 2:4 em cujo enable se ligou ‘D’.
Já se referiu a Standard 91-1984 para a interpretação de esquemas. Apresenta-se ao lado um exemplo da sua
aplicação a demultiplexers:
SN74139, cujo qualificador geral é DMUX, materializa dois demultiplexers 1:4, cada qual com uma entrada
enable (activa a Low) e duas entradas de selecção (activas a High). As saídas, activas a Low, são numeradas. Com
‘ 0/3G ’, especifica-se que as entradas de selecção afectam as saídas numeradas {0, 1, 2, 3}, isto é: todas.
Em cada demultiplexer, uma combinação das entradas de selecção é interpretada como um código binário – em
que as posições de maior e menor peso correspondem às entradas numeradas, respectivamente, ‘2’ e ‘1’. O valor
na sua entrada enable será transferido para a saída identificada com o número que aquele código representa.
Repare-se que se rotulou apenas o demultiplexer que se encontra no topo: subentende-se que aquele que se
encontra por debaixo é rotulado de uma maneira exactamente igual…
(No mundo dos computadores, o Demultiplexer acaba por ser uma raridade. Em contrapartida, ele é assaz usado
nos sistemas de telecomunicações; para o “demonstrar”, segue-se uma descrição; ela é feita de uma maneira muito
simplificada – em particular, deixa de lado os sistemas de comutação –, mas que o autor espera que seja suficiente
para realçar a larga importância de Multiplexers e Demultiplexers nas comunicações:
Considere o leitor cidades entre que se preveja, ao menos em algumas horas do dia, um número substancial de
conversações telefónicas, como sejam Lisboa e Porto. Admita-se que cada uma decorre sob a forma (PCM) de um
fluxo de bits em cada sentido, ao ritmo standard de 64 kbps. Por mor de economia, convirá, e em vez de dedicar a
cada uma dois pares de fios - o que se iria traduzir num total de vários milhares de fios -, compeli-las a partilhar
dois pares de fios: um para o sentido Lisboa → Porto, e um outro para o sentido inverso (Mais provavelmente, o
meio de transmissão real será coaxial, rádio ou fibra, mas isso não retira validade ao que adiante se diz).
Para lograr a partilha referida, usa-se um par Multiplexer/Demultiplexer em cada sentido:
- cada cidade dispõe dum centro de transmissão, onde estão ancorados os fios telefónicos provenientes dos
telefones dos “faladores” envolvidos nas conversações em curso; os fluxos de bits que por eles chegam,
codificando as suas vozes, são aplicados às entradas de dados dum Multiplexer, cujas entradas de selecção vão
rodando ciclicamente – sendo os bits à saída transmitidos para a outra cidade, sobre um par de fios multiplexados;
- a outra localidade dispõe de um centro de recepção, onde desemboca esse par de fios multiplexados; os bits
nele recebidos são aplicados à entrada de dados de um Demultiplexer cujas entradas de selecção vão também
rodando ciclicamente; os fluxos de bits nas suas saídas, codificando as vozes dos faladores, são distribuídos para
os pertinentes fios telefónicos destinados aos telefones dos “ouvintes” envolvidos naquelas conversações)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 59 of 119
Multiplexagem / Saídas 3-state / Alta Impedância
Se o Demultiplexer é uma raridade no mundo dos computadores, já o Multiplexer aparenta vir a ter uma grande
importância – para tal bastando recordar o exemplo já dado, o dum computador ter que capturar um valor entre os,
eventualmente, milhões de células da sua memória. Ora, precisamente, e já compreendida a estrutura interna de um
Multiplexer, isso apela a um OR com milhões de entradas (ou a muitos e muitos ORs). Convém uma alternativa…
Para simplificar, que será pacífica a generalização da solução encontrada, considere-se o multiplexer 4:1, vidé
ao lado. Nele, encontra-se um descodificador 2:4, quatro ANDs e um OR – que, bem vistas as coisas, é necessário
porquanto, e sob pena de cheiro a queimado, não se devem ligar as saídas dos ANDs a um mesmo ponto!
Mas a necessidade aguça o engenho – e já desde 1971 o mercado oferece chips com saídas, ditas de 3-state ou
de alta-impedância, que viabilizam o interligar as saídas de múltiplos chips a um mesmo ponto!
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 compreendido, é hora de apresentar casos de chips providos de uma saída 3-state, vidé ao lado:
- um primeiro exemplo é um AND com saída 3-state: quando a entrada EN está inactiva (a ‘0’), a saída fica em
alta impedância (High-Z); mas se ela advir activa, a saída fica sendo o AND das entradas…
- um segundo exemplo é um buffer com saída 3-state: quando a entrada EN está inactiva, a saída fica em alta
impedância; mas se ela advir activa, a saída reproduz o que estiver na sua entrada…
Repare-se que, em ambos os casos, a saída com o comportamento 3-state está, conforme à Standard 91-1984,
qualificada com um símbolo que é um pequeno triângulo isósceles “de cabeça para baixo”.
É hora de regressar ao multiplexer 4:1, e averiguar como esta filosofia 3-state o pode simplificar:
● numa primeira versão, substituem-se os ANDs por buffers 3-state, e - descartando o OR! - ligam-se as saídas
desses buffers a um único ponto: a saída ‘Z’ do multiplexer;
Para apreciar o funcionamento dessa estrutura, admita-se, como exemplo, que em algum momento as entradas
de selecção {A1 A0} são '10‘… Isso leva a que a única saída do descodificador 2:4 que advirá activa é aquela
numerada ‘2’, ficando inactivas as restantes. Ora, estando essas saídas ligadas às entradas enable ‘EN’ dos buffers
3-state, é lícito aduzir que, entre as saídas dos buffers, todas ficarão em alta-impedância - excepto uma, aquela
etiquetada ‘10’! E, tratando-se de um buffer, essa saída irá reproduzir o valor na sua entrada, ‘D2’. Ou seja, ‘Z’ irá
assumir o valor de ‘D2’ – que é o que se pretende: transmitir para ‘Z’ o valor na entrada seleccionada, ‘D2’.
Mas, perguntar-se-á: será lícito ignorar as saídas dos outros buffers? 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!
● numa segunda versão, e partindo da versão acima, conservam-se os buffers 3-state, mas o descodificador 2:4
é substituído por dois inversores e um par de buffers 3-state;
Para apreciar o funcionamento destoutra estrutura, admita-se, de novo, que as entradas de selecção são '10‘, isto
é: {A1=1 e A0=0}. Porquanto A0=0, as saídas do primeiro plano de buffers ficarão em alta-impedância, excepto
aquelas etiquetadas ‘00’ e ‘10’ – que reproduzirão os valores que então se encontrarem em, respectivamente, ‘D0’ e
‘D2’. E pois que A1=1, no segundo plano de buffers ficará em alta-impedância a saída numerada ‘0’, que não a
numerada ‘1’ – que irá reproduz o valor que então se encontrar na sua entrada, e que é ‘D2’.
De novo, foi lícito esquecer as saídas dos outros buffers – pois que estão em alta-impedância…
Em sessões adiante, ir-se-ão passar em revista outras aplicações do 3-state: convém mesmo entendê-lo bem.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 61 of 119
Circuitos Aritméticos / 12º Projecto
Esta sessão versa Operações Aritméticas – ou mais precisamente, os circuitos que as concretizam: Circuitos
Aritméticos. Como nas outras sessões, irá desenrolar-se a partir de um Projecto concreto...
Considere um termómetro que está assinalando valores de temperatura em graus Celsius (entre 0º e 500º).
Pretende-se um circuito que receba esses valores e os converta em graus Kelvin (para um leitor alzheimico:
aproximadamente, 0º Celsius corresponde a 273º Kelvin).
Recordando o percurso até agora feito, este não é um problema novo: no fim de contas, trata-se de receber
informações num dado código e de as traduzir em um outro código – e isso remete para um Transcodificador; parte
da sua Tabela de Verdade encontra-se ao lado, deixando-se o termo do seu preenchimento para o leitor – mormente
para uma noite em que as insónias sejam mais perseverantes…
É que, de facto, situando-se os valores recebidos entre 0º e 500º, isso volve-se em log25009 entradas; e,
traduzindo-se 500º Celsius em 500+273=773º Kelvin, são necessárias log277210 saídas. Resumindo: qualquer
das estratégias já abordadas (clássica, por descodificador+OR ou por multiplexer) obriga a preencher 10 Tabelas
de Verdade com, cada uma, 29=512 linhas – e isso é uma razão para olhar o Projecto por um outro ângulo…
A conversão para graus Kelvin obedece a uma regra simples: adicionar aritmeticamente 273 a cada valor de
temperatura em graus Celsius. Ou seja: pois que o código binário dum número com 3 dígitos decimais se expande
por até 9 dígitos binários (ou, mais brevemente, bits), o 12º Projecto ficaria resolvido se se dispusesse de um
circuito habilitado a adicionar dois números com 9 bits…
A adição de dois números com 9 bits volve-se num resultado com, até, 10 bits. Ou seja: ela remete para a
necessidade de um somador aritmético com 2×9=18 entradas e 10 saídas… É demasiado, há que usar a cabeça…
Convém revisitar o algoritmo da adição (decimal) aprendido na “primária”: coloca-se um número por baixo de
um outro, alinhados à direita; depois, adiciona-se o par de dígitos de menor peso, que é o primeiro à direita,
originando um resultado e um transporte (Carry, no jargão anglo-saxónico); este é adicionado ao segundo par de
dígitos, originando novo resultado e novo transporte; e assim por diante…
Isso sugere uma solução iterativa para o problema entre mãos, vidé ao lado: interligar em série/cascata o
número necessário de módulos de um tipo elementar – que o mercado disponibiliza sob o nome de “4-bit Adder”:
● Esse módulo comporta 2×4+1=9 entradas e 4+1=5 saídas:
• As entradas são dois inteiros em binário natural de 4-bit e um transporte…
• As saídas são um resultado (um inteiro em binário natural de 4-bit) e um transporte;
● Com 4-bit, podem codificar-se em binário natural os inteiros {0, …, 15}:
• Diferentemente da adição decimal supracitada, cada módulo adiciona então inteiros até ‘15’, inclusive;
• O menor e maior valores em que se pode volver a adição de dois inteiros até ‘15’ (e tendo em conta o
transporte originado no módulo anterior) são 0 e 15+15+1=31 – cujos códigos binários são ‘0 0000’ e ‘1 1111’: o
resultado é um inteiro também entre ‘0’ e ‘15’, e o transporte gerado por esse módulo só pode ser ‘0’ ou ‘1’;
● Repare-se que, no esquema apresentado, e conforme à recomendação de fazer progredir o fluxo de bits da
esquerda para a direita, o módulo que lida com os bits de menor peso se encontra à esquerda; e,
consequentemente, o módulo que lida com os bits de maior peso se encontra à direita.
● Designando de ‘P’ e ‘Q’ os dois números a adicionar, e de ‘S’ o resultado da sua adição, então:
• no primeiro módulo à esquerda, as entradas são os bits de menor peso de ‘P’ – {P3, P2, P1, P0} –, os bits de
menor peso de ‘Q’ – {Q3, Q2, Q1, Q0} –, e um transporte que é, naturalmente, ‘0’; as saídas são os bits de menor
peso de ‘S’ – {S3, S2, S1, S0} – e um Transporte;
• no segundo módulo, as entradas são os bits seguintes de ‘P’ e ‘Q’ – {P7, P6, P5, P4} e {Q7, Q6, Q5, Q4} –, e
um transporte que é aquele que o módulo precedente produziu;
• e assim por diante…
• de salientar que o último módulo produz os bits de maior peso de ‘S’: {S12, S11, S10, S9, S8} – em que ‘S12’ é
o Transporte que ele mesmo produz.
Esta estrutura aceite, falta saber: como será um 4-bit Adder lá por dentro? É o que se vai averiguar, após um
breve intermezzo sobre como levar a cabo operações aritméticas nos Sistemas de Numeração de bases 2, 8 e 16…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 63 of 119
Circuitos Aritméticos / Intermezzo: de volta aos bancos da escola…
Como adicionar dois números na base 10?
Um exemplo, vidé ao lado, poderá clarificá-lo:
– em primeiro lugar, os dois números são dispostos um por cima do outro, alinhados à direita;
– depois, e da direita para a esquerda, vão-se somando os sucessivos pares de algarismos, um de cada vez,
tendo em conta eventuais transportes… Em particular,
– 1+8=9, o que significa que o dígito mais à direita do resultado é 9 (e “não vai nada”);
– 4+7=11, que excede o maior dígito da base 10, que é 9; então, subtraindo mentalmente a base àquele
valor (11-10=1), deduz-se mentalmente 11=1+1×10, ou seja: o resultado é 1, e “vai 1” (que é mentalmente disposto
por cima do par seguinte)…
– 1+3+6=10, que excede o maior dígito da base 10; então, subtraindo mentalmente a base àquele valor
(10-10=0), deduz-se mentalmente 10=0+1×10, ou seja: o resultado é 0, e “vai 1” (que é mentalmente disposto por
cima do par seguinte)…
– e assim sucessivamente, até ter percorrido todos os pares de dígitos dos números…
E como adicionar dois números na base 2?
O exemplo ao lado mostra que o algoritmo seguido será deveras similar, a diferença sendo a base…
– 1+0=1, o que significa que o bit mais à direita do resultado é 1 (e “não vai nada”);
– 1+1=2(10), que excede o maior bit da base 2, que é 1; então, subtraindo mentalmente a base àquele valor
(2-2=0), deduz-se mentalmente 2=0+1×2, ou seja: o resultado é 0, e “vai 1” (que é mentalmente disposto por cima
do par seguinte)…
– 1+0+0=1, o que significa que o resultado é 1 (e “não vai nada”);
– e assim sucessivamente, até ter percorrido todos os pares de bits dos números…
E como adicionar números nas bases 8 ou 16?
Ao lado, apresentam-se exemplos a propósito: o algoritmo seguido é o mesmo, a diferença sendo a base…
E como subtrair ou multiplicar números nas bases 2, 8 ou 16?
Ao lado, apresentam-se exemplos destas operações aritméticas, deixando-se ao leitor efectuá-las por si mesmo e
conferir da validez dos resultados encontrados…
O exemplo da adição aritmética na base 2 sugere uma estratégia para desenhar um 4-bit Adder:
● A primeira etapa diz respeito à adição do primeiro par de bits dos números dados, à direita: convirá desenhar
um circuito que, acolhendo tais bits, seja capaz de produzir o resultado e o transporte pertinentes… A um circuito
assim dá-se o nome de semi-somador (Half-Adder);
● A etapa seguinte diz respeito à adição de qualquer outro par de bits dos números dados com o transporte
provindo do par que o precede: convirá desenhar um circuito que, acolhendo aqueles dois bits e também o bit de
transporte, seja capaz de produzir o resultado e o transporte pertinentes… A um circuito assim dá-se o nome de
somador completo (Full-Adder), ou simplesmente somador;
● A última etapa consiste na concatenação de quatro somadores completos…
(É claro que, se algum dos números dados tiver mais que quatro bits, será necessário, para os adicionar,
concatenar dois ou mais 4-bit Adders…)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 65 of 119
Circuitos Aritméticos / Semi-somador / 1/2 Adder
Tendo em vista o desenho de um 4-bit Adder, a primeira etapa consiste no seguinte: o desenho de um circuito
que receba os dois bits menos significativos, sejam {Q, P}, e produza o resultado da sua soma aritmética, ‘S’, e o
transporte, ‘C’ (denotando Carry) a somar aos bits seguintes.
A Tabela de Verdade encontra-se ao lado:
• como é habitual, à esquerda dispõem-se duas colunas, com todas as combinações que o par de bits {Q, P}
pode assumir;
• logo à sua direita, e tendo interpretado esse par de bits como símbolos da base 2, encontra-se o resultado da
sua soma aritmética;
• enfim, dispõem-se duas colunas, {C, S}, que contêm o código binário desse resultado, e por conseguinte
representando os correspondentes valores que deverão assumir o resultado da soma e o transporte…
Da Tabela de Verdade, deduzem-se as expressões booleanas de {C, S}, que acabam por ser respectivamente o
AND e o XOR das entradas {Q, P} do Circuito – remetendo para o logigrama com gates elementares ao lado…
Alternativamente, e porquanto as saídas do circuito são duas, pode recorrer-se à estratégia de desenho
envolvendo um descodificador 2:4 e um OR: C=m3 e S=m1+m2, vidé ao lado…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 67 of 119
Circuitos Aritméticos / Somador completo / Full Adder
Continuando a ter em mente um 4-bit Adder, a segunda etapa consiste no seguinte: o desenho de um circuito
que receba dois bits genéricos (à esquerda dos menos significativos), sejam {Q, P}, e o transporte que vem detrás,
‘Cin’ – e produza o resultado da sua soma aritmética, ‘S’, e o transporte, ‘Cout’, a somar aos bits seguintes.
A Tabela de Verdade encontra-se ao lado:
• Como é habitual, à esquerda dispõem-se três colunas, com todas as combinações que o trio de bits {Cin, Q, P}
pode assumir;
• Logo à sua direita, e tendo interpretado esse trio de bits como símbolos da base 2, encontra-se o resultado da
sua soma aritmética;
• Enfim, dispõem-se duas colunas, {Cout, S}, que contêm o código binário desse resultado, e por conseguinte
representando os correspondentes valores que deverão assumir o resultado da soma e o transporte para a frente…
Da Tabela de Verdade, deduzem-se as expressões booleanas de {Cout, S}, que se traduzem no logigrama com
gates discretas ao lado…
Alternativamente, e porquanto as saídas do circuito são duas, pode recorrer-se à estratégia de desenho
envolvendo um descodificador 2:4 e dois ORs: das Tabelas de Verdade, deduzem-se as expressões
Cout=m3+m5+m6+m7 e S= m1+m2+m4+m7, vidé ao lado…
Poder-se-á também, é óbvio, recorrer à estratégia de desenho envolvendo dois multiplexers 1:4 e um NOT (o
que invoca a condensação mental da Tabela): Cout = (0, Cin, Cin, 1) e S=(Cin, inC , inC , Cin), vidé ao lado…
(Abra-se um parêntesis no sentido de justificar tal logigrama: para, por exemplo, a combinação em que {Q, P}
se volvem em ‘10’, que é o código binário de ‘2’,
– ‘Cout’ pode assumir dois valores, a saber: ‘0’ quando Cin=0 e ‘1’ quando Cin=1; resumidamente, ‘Cout’ vem a
ser precisamente igual a ‘Cin’: na entrada ‘2’ de ‘Cout’ deve aplicar-se ‘Cin’;
– ‘S’ pode assumir dois valores, a saber: ‘1’ quando Cin=0 e ‘0’ quando Cin=1; resumidamente, ‘S’ vem a ser o
inverso de ‘Cin’: na entrada ‘2’ de ‘S’ deve aplicar-se inC )
O último logigrama recorre a semi-somadores: sustenta-se no facto de um semi-somador oferecer duas
saídas, {C, S}, que são respectivamente o AND e o XOR das suas entradas {Q, P}.
– Ora, a expressão booleana de ‘S’ é um XOR das três entradas, {Cin, Q, P}, e isso pode lograr-se com a
cascata de dois semi-somadores: um primeiro que produza o XOR de duas delas, {Q, P}, e um segundo que
devolva o XOR da saída do primeiro com a terceira entrada, ‘Cin’;
– E a expressão booleana de ‘Cout’ é um OR de dois ANDs; um entre {Q, P} – que pode obter-se na saída ‘C’
do primeiro semi-somador; e um outro entre ‘Cin’ e o XOR de {Q, P} – que pode obter-se na saída ‘S’ do primeiro
semi-somador.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 69 of 119
Circuitos Aritméticos / Somador 4-bit Iterativo (Ripple Carry Header)
Estão reunidas as condições para desenhar um 4-bit Adder, isto é: um circuito que receba dois códigos binários
expandindo-se por 4-bit – e cuja saída seja o código binário da sua soma aritmética…
De facto, e pressupondo construído um somador completo (ou, mais abreviadamente, somador), com entradas
{Cin, Q, P} e saídas {Cout, S}, será suficiente proceder à sua interligação em série:
- o primeiro à esquerda recebe os bits de menor peso; para significar que então ainda não há nenhum transporte
a ter-se em conta, força-se ‘0’ na entrada ‘Cin’;
- o somador seguinte recebe os bits seguintes; todavia, agora há que ter em conta o transporte resultante da
adição dos bits menos significativos; para o efeito, à entrada ‘Cin’ deste segundo somador deve interligar-se o
transporte gerado pelo primeiro somador, isto é: ‘Cout’;
- intui-se como proceder com os restantes somadores: cada um deles recebe “o” par de bits seguintes; a sua
entrada ‘Cin’ recebe o transporte ‘Cout’ gerado pelo somador precedente.
- as saídas, sucessivamente {S0, …, S3} – e ainda a saída no último somador que apresenta o transporte que ele
gera, constituirão o resultado da soma aritmética dos dígitos em causa.
Repare-se que o esquema ao lado está conforme à recomendação de fazer progredir o fluxo de bits da esquerda
para a direita: o somador que lida com os bits de menor peso encontra-se à esquerda, e, consequentemente, o
somador que lida com os bits de maior peso encontra-se à direita.
Um Adder assim, em que o segundo somador recebe numa sua entrada o valor numa saída do somador
precedente (e o mesmo vale para o terceiro e quarto somadores), é dito de iterativo. Considere-se, então, alguma
alteração das entradas {Q3, Q2, Q1, Q0} e/ou {P3, P2, P1, P0}; para que as saídas do segundo somador advenham
estáveis, será preciso – em geral – esperar que o primeiro “complete o seu trabalho”: somente após algum tempo é
que se conhecerá a saída ‘Cout’ do primeiro somador, e ipso facto a entrada ‘Cin’ do segundo; e (se ela diferir do
que lá estava antes) só então estarão reunidas as condições para (após um certo tempo de propagação) as saídas do
segundo somador advirem estáveis. Considerações análogas valem para o terceiro e quarto somadores…
Destas asserções, emerge uma pergunta óbvia: a quanto montará o tempo de propagação total? É claro que ele
dependerá dos números a adicionar, mas pode averiguar-se qual o limiar máximo que ele poderá tomar: será o caso
de todos os somadores virem a experimentar variações na sua entrada ‘Cin’. Ao lado, apresenta-se essa situação: a
soma de ‘1111’ com ‘1111’, que conduz a que o transporte de todos os somadores seja ‘1’… O tempo de
propagação total será o quádruplo do tempo de propagação de cada um dos somadores individuais…
Esta constatação motivou a investigação por outras estruturas de interligação dos somadores – uma delas sendo
a assim denominada “Carry Look-ahead Header”, acerca da qual a Web contém informações suficientes…
Ao lado, apresenta-se o símbolo IEC do integrado SN74283, um 4-bit Adder. O respectivo Qualificador Geral
é ‘’. Disponibiliza 9 entradas: quatro para o código binário de ‘Q’, e outras tantas para o código binário de ‘P’,
e, enfim, uma entrada, ‘CI’, para o transporte provindo do somador anterior. As saídas são cinco: quatro para o
código binário do resultado da soma, ‘S’, e uma, ‘CO’, para assinalar o transporte para o somador seguinte. Tanto
as entradas como as saídas são, como é da praxe, numeradas {0 1 2 3}, de cima para baixo.
(Abra-se um parêntesis, para justificar o “carimbo” iterativo aposto à solução ao lado; nele, está implícito um
outro tipo de solução, o assim denominado recursivo.
Como se constata, um 4-bit Adder iterativo volve-se numa série de somadores iguaizinhos em que, e com
excepção do primeiro, qualquer um recebe na sua entrada ‘Cin’ o valor na saída ‘Cout’ do somador precedente.
Já um 4-bit Adder recursivo basta-se em um único somador completo, em cujas entradas {Qi, Pi} se aplicam,
um par após outro, os bits das palavras de 4-bit a adicionar – e em cuja entrada ‘Cin’ se vai aplicando o valor que a
sua própria saída ‘Cout’ assumiu “um pouco antes”! Este modo de funcionamento, todavia, obriga a averiguar:
- como memorizar o valor na saída ‘Cout’ para a aplicar “um pouco depois” na entrada ‘Cin’;
- como sincronizar a aplicação de um par de bits nas entradas {Qi, Pi} com a aplicação na entrada ‘Cin’ daquele
valor memorizado.
Neste ponto do percurso, estas duas questões ainda são algo prematuras: há que esperar pelo tempo oportuno)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 71 of 119
Circuitos Aritméticos / Aritmética BCD
Eventualmente, os números a somar estarão codificados – não no código binário natural – mas em BCD. E é
inevitável a questão: pressuposto que o mercado disponibiliza 4-bit Adders, como usá-los para lograr a adição de
números assim codificados?
Para responder a tal questão, convirá começar por aplicar, às entradas ‘P’ e ‘Q’ de um 4-bit Adder, alguns pares
de dígitos codificados em BCD – e reflectir sobre os subsequentes resultados. Ao lado, encontram-se alguns casos
exemplares…
– o exemplo mais à esquerda diz respeito à soma aritmética de ‘8’ e ‘1’ – e, de facto, constata-se que a soma das
representações em BCD desses números é a codificação em BCD da sua soma, ‘9’; de notar que neste caso o
transporte para a frente é nulo…
– o exemplo seguinte diz respeito à soma de ‘8’ e ‘4’; porém, a soma das suas representações em BCD devolve
‘1100’ que não é a codificação em BCD da sua soma: esta, que é ‘12’, estende-se por dois bytes, é ‘0001 0010’…
– o último exemplo diz respeito à soma de ‘8’ e ‘9’; porém, a soma das representações em BCD devolve
‘10001’ que não é a codificação em BCD da sua soma: esta, que é ‘17’, estende-se por dois bytes, ‘0001 0111’…
Constata-se então que, quando se usa um 4-bit Adder para somar números codificados em BCD, há que tomar
providências especiais:
– se esse Adder originar um Resultado excedendo ‘9’;
– ou se o Adder originar um Transporte (no último par de bits) igual a ‘1’.
Que se há-de fazer em tais casos? Repare-se, para o efeito,
– que a soma binária de ‘8’ e ‘4’ devolve ‘1100’, que é o código binário natural de ‘12’, mas a representação em
BCD de ‘12’ é ‘0001 0010’ – que é o código binário natural de ‘18’ (Note-se: 18=12+6);
– que a soma binária de ‘8’ e ‘9’ devolve ‘10001’, que é o código binário natural de ‘17’, mas a representação
em BCD de ‘17’ é ‘0001 0111’ – que é o código binário natural de ‘23’ (Note-se: 23=17+6).
É clara a conclusão – que se pode extrapolar a outros números {Q, P}: aplicando-os a um 4-bit Adder, bastará,
em tais casos, adicionar ‘6’ ao resultado ‘S’ para lograr a codificação em BCD da soma dos números em causa.
De notar, ainda, que, nesses casos, o byte da esquerda da representação em BCD é ‘0001’.
A partir destas asserções, é pacífico o desenho do logigrama para um Somador em BCD:
– será naturalmente preciso um primeiro 4-bit Adder, ‘W’, que adicione os números {Q, P} dados;
– será preciso um circuito cuja saída, ‘Z’, seja ‘1’ sse esse Adder originar um Resultado ‘SW’ superior a ‘9’; ao
lado, encontra-se o correspondente mapa de Karnaugh, e a expressão simplificada que dele se deduz;
– será também preciso produzir uma saída, ‘E’, que seja ‘1’ sse houver que tomar providências Especiais, ou
seja: se ‘Z’ for ‘1’, ou se esse Adder ‘W’ originar um Transporte igual a ‘1’;
– a etapa final será um circuito que, conforme o valor de ‘E’, ‘0’ ou ‘1’, assim tome respectivamente o valor de
‘SW’ ou esse valor ‘SW’ adicionado de ‘6’; na prática, ele poderá ser concretizado por um outro 4-bit Adder, ‘E’, –
que deixe passar transparentemente o Resultado ‘SW’ (que é o mesmo que somar-lhe ‘0’), ou lhe some ‘6’; para o
efeito, isso logra-se:
– forçando ‘0’ na entrada ‘Cin’ do Adder ‘E’,
– aplicando ‘SW’ na entrada ‘P’ do Adder ‘E’,
– e, na sua entrada ‘Q’ (e porquanto o código de ‘6’ é ‘0110’), aplicando ‘0000’ ou ‘0110’, vidé ao lado.
– o Transporte para a frente do Somador em BCD será, naturalmente, capturado na saída ‘E’.
Quanto à produção do Transporte para a frente, recordem-se duas constatações acima:
- quando há que aplicar providências especiais – ou seja, quando E=1 –, esse Transporte deve ser ‘1’;
- caso contrário – isto é, E=0 –, ele deve ser ‘0’.
Ou seja: o Transporte ‘Cout’ acompanha ‘E’ pari passu, deve ligar-se ‘E’ directamente a ‘Cout’.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 73 of 119
Circuitos Aritméticos / Comparadores
A concluir esta breve abordagem de circuitos aritméticos, é hora de considerar os assim denominados
Comparadores, isto é: circuitos que recebem dois números binários {Q, P} e cujas saídas {L, E, G} indicam se
são iguais – e, caso o não sejam, qual deles é o maior.
Ao lado, esquematiza-se a comparação entre dois números binários, no caso feita da direita para a esquerda:
– o primeiro par de bits é {1, 1} – de que se pode concluir que, até então (inclusive), os números são iguais;
sinaliza-se isso activando a saída ‘E’;
– o segundo par de bits é {1, 1} – de que se pode concluir – e tendo em conta que até então os números eram
iguais – que, até então, os números são iguais; sinaliza-se isso continuando a activar a saída ‘E’;
– o terceiro par de bits é {0, 0} – de que se pode concluir – e tendo em conta que até então os números eram
iguais – que, até então, os números são iguais; sinaliza-se isso continuando a activar a saída ‘E’;
– o quarto par de bits é {1, 1} – de que se pode concluir – e tendo em conta que até então os números eram
iguais – que, até então, os números são iguais; sinaliza-se isso continuando a activar a saída ‘E’;
– o quinto par de bits é {Q=0, P=1} – de que se pode concluir que, até então, ‘P’ é superior a ‘Q’; sinaliza-se
isso activando a saída ‘G’ (de Greater than);
– o sexto par de bits é {Q=1, P=0} – de que se pode concluir que, até então, ‘P’ é inferior a ‘Q’; sinaliza-se isso
activando a saída ‘L’ (de Less than);
– o sétimo par de bits é {1, 1} – de que se pode concluir – e tendo em conta que até então ‘Q’ excedia ‘P’ – que,
até então, ‘Q’ excede ‘P’; sinaliza-se isso continuando a activar a saída ‘L’.
Há que reparar:
- que, em cada momento, uma só das saídas {L, E, G} está activa;
- que, para os pares de bits dos números {Q, P} à esquerda do primeiro à direita,
- se os bits a comparar são iguais, as saídas {L, E, G} são exactamente iguais às logradas no anterior par;
- caso contrário, o resultado só depende desses bits, são irrelevantes as saídas {L, E, G} do anterior par.
Estas asserções sugerem uma estratégia para o desenho de um Comparador:
– a primeira etapa diz respeito à comparação do primeiro par de bits dos números dados, à direita: convirá
desenhar um circuito que, acolhendo tais bits, seja capaz de produzir as saídas {L, E, G};
– a etapa seguinte diz respeito à comparação de algum outro par de bits – atendendo às informações {L, E, G}
provindas do par anterior…
– a última etapa consiste na serialização de circuitos assim, de forma a lograr um Comparador de 4-bit, e, para
o caso de os números dados terem um comprimento excedendo 4-bit, na sua subsequente concatenação…
Ao lado, apresentam-se as Tabelas de Verdade das saídas {L, E, G} de um comparador do primeiro par de bits,
{Q, P}; previsivelmente: sse Q=P, ‘E’ advém activa; senão, ‘L’ advém activa sse Q=1, e ‘G’ advém activa sse P=1.
Deles, deduzem-se expressões para as saídas – seguindo-se o desenho dum logigrama com gates discretas. É o
leitor convidado ao desenho de logigramas por recurso às estratégias Descodificador+ORs ou Multiplexers.
Imediatamente abaixo, apresenta-se parte das Tabelas de Verdade das saídas {L, E, G}out de um comparador dos
outros pares de bits, {Q, P}, tendo em conta as informações {L, E, G}in provenientes do par anterior. Em rigor, e
porquanto agora montam a cinco as variáveis de entrada, os mapas deveriam, cada um, espraiar-se por 32 células –
o que significa que ao lado apenas aparece parte deles: é o leitor convidado a, por si próprio, acabar de preenchê-
los, e deduzir as correspondentes expressões algébricas, conferindo da validez daquelas apresentadas…
Delas, é pacífico o logigrama do correspondente circuito; como expectável, se os bits {Q, P} forem iguais,
advém activa a saída ‘E’ do circuito CMP-2, o que significa que ficarão activados todos os ANDs figurados – pelo
que a saída {L, E, G}out irá reproduzir pari passu a entrada {L, E, G}in; senão, ficará activa uma das outras saídas
– conduzindo à activação de uma das saídas {L, G}out: aquela que for pertinente.
A etapa final, de concatenar quatro destes Circuitos, para lograr um Comparador de 4-bit, é deixada ao leitor…
Ao lado, apresenta-se o símbolo IEC do integrado SN7485, um Comparador de 4-bit. O Qualificador Geral é
‘COMP’. Disponibiliza 11 entradas: quatro para o código binário de ‘Q’, e outras tantas para o código binário de
‘P’, e, enfim, três entradas, {L, E, G}in, para as informações provindas do comparador anterior. As saídas são três,
{L, E, G}out. Tanto as entradas como as saídas de {Q, P} são, como é da praxe, numeradas {0 1 2 3}, de cima para
baixo.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 75 of 119
Números com Sinal / 13º Projecto
Esta sessão versa Números com Sinal. Como nas outras sessões, irá partir de um Projecto concreto...
Considere um edifício com 7 pisos, dos quais três estão no subsolo. Pretende-se um circuito que codifique os
botões de chamada de um elevador nos vários andares do edifício.
Dir-se-á que, decidida a codificação dos botões, o desenho do codificador será ‘canja’: cada saída ‘Zi’ será um
OR de algumas entradas; uma entrada ‘Xj’ será nele incluída sse o código binário de ‘j’ contiver ‘1’ na posição
‘i’… Sendo assim, não constituirá surpresa que o acento tónico adiante seja decidir qual a melhor codificação…
Como codificar os botões? Posto que eles montam a sete, são precisos ao menos log273 bits para codificar
cada um deles. Ora, códigos de palavras com 3 bits há muitos… pelo que é altura de averiguar: por qual optar?
Designando os andares, de baixo para cima, por {3ª s/c, 2ª s/c, 1ª s/c, r/c, 1º, 2º e 3º}, uma sugestão viável seria
atribuir-lhes as sucessivas palavras do código binário natural: {000, 001, 010, …, 110}, vidé ao lado...
Esta codificação não é, porém, lá muito elegante: em particular, se no subsolo houvera um outro número de
pisos, o ‘r/c’ teria de ser codificado de maneira diferente… Mais elegante seria uma solução, vidé ao lado, em que,
independentemente do número de pisos no subsolo, o ‘r/c’ seria dito de piso ‘0’ – e ele, e cada um dos pisos acima,
{1, 2, 3}, seria codificado pelo ‘respectivo’ código binário natural.
Esta estratégia, de numerar os pisos, acarreta uma pergunta: numerando os pisos no subsolo por, de cima para
baixo, {-1, -2, -3}, como codificá-los – ou, mais genericamente, como codificar números negativos?
Eis uma primeira constatação: se se reservarem, para o ‘0’ e inteiros positivos, palavras de código começando á
esquerda por ‘0’ (e apenas essas), sobram apenas palavras começadas por ‘1’ – ou seja: qualquer que seja a
codificação por que se venha a optar, o bit mais à esquerda irá distinguir se ele é positivo ou negativo!
Isso implica o seguinte: seja dado um número com módulo e sinal; se, para codificar em binário esse módulo,
forem precisos ao menos ‘n’ bits, então é expectável que o total de bits necessário para codificar o número seja de,
pelo menos, n+1. Isto aceite, o resto, isto é, a atribuição a números negativos de palavras de código começadas por
‘1’, será como der mais jeito… Ao lado, apresentam-se as três representações mais comuns:
Na representação “em Módulo e Sinal”, o primeiro bit é ‘1’ – e os seguintes são o código binário do módulo
do número em causa. Esta filosofia tem dois senões:
a) ‘0’ pode codificar-se de dois modos distintos: ‘000’ (representando ‘+0’), e ‘100’ (representando ‘–0’);
b) e a aritmética é complicada: basta ter em conta que, quando se somam dois números com módulo e sinal,
a operação de facto a levar por diante tanto pode ser uma adição ou uma subtracção (consoante respectivamente
eles tiverem o mesmo sinal, ou não);
Na representação “em Complemento para 1”, parte-se da representação do número (positivo) com o mesmo
módulo do número em causa – e invertem-se todos os bits. Um senão: tal como “em Módulo e Sinal”, ‘0’ pode
codificar-se de dois modos distintos: ‘000’ (representando ‘+0’), e ‘111’ (representando ‘–0’);
Na representação “em Complemento para 2”, parte-se da representação do número (positivo) com o mesmo
módulo do número em causa – e subtrai-se para ‘0’, descartando o ‘último’ transporte (o originado no último bit).
De notar que, agora, ‘0’ é representado de uma maneira só, ‘000’ – e isso habilita a, com o mesmo número de
bits, codificar mais números (negativos): não só {-3, -2, -1}, mas também ‘-4’…
Uma pergunta oportuna será: o código a que se chegou é ponderado? Em caso afirmativo, quais os pesos das
posições ocupadas pelos bits da palavra?
Se ele for ponderado, são pacíficas as seguintes asserções: pois que ‘+1’ se representa por ‘001’, o bit à direita
terá peso ‘20=1’; pois que ‘+2’ se representa por ‘010’, o bit seguinte terá peso ‘2
1=2’; e pois que ‘4’ se
representa por ‘100’, o bit à esquerda deverá ter peso ‘22=4’. Será que as outras palavras respeitam tais pesos?
A resposta é: sim! Repare-se: ‘111’ → 4+2+1 = 1(10), ‘110’ →4+2 = 2(10) e ‘101’ →4+1 = 3(10). Isto é,
esta representação volve-se num código ponderado de pesos {4, 2, 1} – que, tal como ocorre com o código
binário natural, são as potências de 2, a diferença sendo que o peso da posição mais significativa é negativo!
Dada a hegemonia que esta última representação, “em Complemento para 2”, veio de facto a adquirir no mundo
dos Sistemas Digitais, convém, é claro, dedicar-lhe algum tempo mais…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 77 of 119
Números com Sinal / Complemento para 2
Como representar números “em Módulo e Sinal”, “em Complemento para 1” “em Complemento para 2”?
Quiçá a melhor maneira de o apreender seja fazê-lo em torno dum exemplo concreto: como representar -22(10)?
A primeira etapa é determinar a representação binária do módulo, no caso: 22(10).
Um método rápido consistirá em, por divisões sucessivas (por 8), deduzir a representação de 22(10) na base 8 –
e, logo a seguir, por expansão em 3-bits dos octais obtidos, lograr a representação na base 2, vidé ao lado.
A segunda etapa é determinar a representação do número, no caso: -22(10).
Um passo prévio é preceder por um ‘0’ a representação binária obtida; pois que esse ‘0’ denota um valor
positivo, o que se está fazendo é determinar a representação de +22(10) – que, sublinhe-se, é a mesma para as três
representações supracitadas: “em Módulo e Sinal”, “em Complemento para 1” e “em Complemento para 2”.
Então, se se tratara de obter a representação de +22(10), nada mais haveria a fazer! Mas o número é negativo, o
que se quer é a representação de -22(10) – pelo que há vários passos a percorrer ainda (mas vidé questão no fim)
a) Se se tratara de encontrar a representação “em Módulo e Sinal”, bastaria inverter o primeiro bit;
b) Se se tratara de encontrar a representação “em Complemento para 1”, ter-se-ia que inverter todos os bits;
c) Mas, tratando-se de encontrar a representação “em Complemento para 2”, são possíveis quatro estratégias:
● Uma primeira consiste em subtrair, a ‘0’, a representação binária de +22(10), descartando o ‘último’
transporte. Visto de outro modo – e é dele que provém a designação “em Complemento para 2” – e sendo k=6 o
comprimento da representação binária de +22(10), o que se está a fazer é subtrair a 2k essa representação;
● Uma segunda é óbvia a partir de um relance visual ao funcionamento da estratégia anterior: consiste em
varrer todos os bits da representação binária de +22(10) – da direita para a esquerda –, copiando-os a todos até
chegar ao primeiro ‘1’, inclusive – e, a partir daí, inverter os restantes bits;
● Uma terceira parte da identidade 2k 2
k-1+1 (2
k-1)+1; ora, 2
k-1(2) volve-se numa sequência de k ‘1’s, ou
seja: a primeira estratégia, de subtrair a 2k (2
k-1)+1 a representação binária de +22(10), equivale a inverter todos
os bits (ou seja: obter a representação em Complemento para ‘1’) e somar aritmeticamente ‘1’ ao resultado obtido;
● A quarta consiste representar o número dado, no caso -22(10), num código binário ponderado – com pesos
iguais aos do código binário natural, a diferença sendo que o de maior peso absoluto é agora negativo.
No caso, e sendo k=6 o comprimento da representação binária de +22(10), os pesos serão: {-32, 16, 8, 4, 2, 1}.
Ora, -22=-32+10; e pois que 10(10) se representa, na base 2 (e usando k-1=5 bits), por 01010(2), a representação
em Complemento para 2 de -22(10) vem a ser 101010(c2).
(Na prática, a estratégia ‘B’, porque visual, será a mais indicada para o leitor determinar a representação “em
Complemento para 2” de um número, e a estratégia ‘D’ a mais indicada para fazer o contrário… Já quanto à
estratégia ‘C’ – que envolve inverter e somar – será aquela a usar por um sistema digital)
A palavra de código obtida alonga-se por 6 bits; ora, é comum os sistemas digitais usarem um comprimento
standard para memorizar números, como seja 8, 16, 32, 64… Pelo que é inevitável perguntar: como, “em
Complemento para 2”, se representam +22(10) e +22(10) em, por exemplo, um byte?
A resposta será pacífica: usando os métodos acima – porém com o cuidado de, porquanto o bit da esquerda é
‘reservado’ para o sinal, usar 8-1=7 bits para codificar o módulo.
– Com esta precaução, +22(10) advém representado por uma palavra onde, a preceder o código de 22(10), estão
três ‘0’s: o primeiro denotando um número positivo, e os outros para ‘encher’ o que falta para completar um byte;
– Daí, preferivelmente usando a estratégia ‘B’, deduz-se a representação de -22(10) “em Complemento para 2”…
Comparem-se as representações +22(c2) (e –22(c2)) com 6 e 8 bits. É notório que as que têm 6 bits se podem obter
daquelas com 8 bits por eliminação dos ‘0’s (ou ‘1’s) supérfluos à esquerda: podem ser compactados num ‘0’ (ou
‘1’); vice-versa, em Complemento para 2, a repetição do primeiro bit não muda o valor numérico representado!
Uma última questão interessante é esta: como representar, em um byte, o valor numérico -128=-27? A resposta,
dir-se-á, será: usando os métodos acima… Atente-se então nos resultados da sua aplicação:
1. Na base 2, o módulo do número dado (no caso: 128 (10)=27) representa-se por 10000000(2);
2. Pelo que a representação binária do número positivo +128 (10)) vem a ser 010000000(c2);
3. O leitor terá franzido o sobrolho perante tal resultado, pois tem 9 bits, isto é: excede o tamanho de um byte…
Mas veja-se a continuação: aplicando a estratégia ‘B’, -128 (10) vem a representar-se por 110000000(c2); mas,
constatou-se já, podem eliminar-se ‘1’s supérfluos, o que conduz a 10000000(c2) – que cabe à justa num byte!
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 79 of 119
Números com Sinal / Operações em c2
Entendida a forma de representar números com sinal em Complemento para 2, e com vista a avaliar o porquê do
seu sucesso no mundo do Digital, resta averiguar: como se processam as operações, em particular a adição e a
subtracção, em Complemento para 2?
Quiçá o melhor seja partir de números concretos, como sejam -22(10) e 7(10)… Em Complemento para 2,
-22(10) representa-se por 101010(c2) – mas, já se salientou, pode também representar-se por 11101010(c2);
e 7(10) representa-se por 0111(c2) – mas também pode representar-se por 0000111(c2)…
Em ordem a adicioná-los ou subtraí-los, é mister representá-los com o mesmo número de bits: “unidades por
baixo de unidades”, “bit de sinal por baixo de bit de sinal”… Ora, a não ser que se requeira explicitamente de
outro modo, a lei do menor esforço manda que se escolha o menor tamanho capaz de cobrir ambas as
representações; ele vem a ser, é claro, 6 bits: 101010(c2) e 000111(c2).
Como se leva por diante a adição? A resposta é surpreendente: considerando-os como números escritos na base
2, e somando-os! Vidé ao lado: eles são alinhados à direita, e adicionados, sem cuidar de saber que o bit à
esquerda é o de sinal: ele é tratado exactamente como os que estão à sua direita! Em ordem a aferir da validez do
algoritmo, atente-se no resultado, ‘110001’: usando a estratégia ‘D’ supracitada, ele representa -15(10) – que é
justamente o resultado da soma de -22(10) com 7(10): a conta está certa!
Como se leva por diante a subtracção? A resposta é: transformando-a numa adição, após prévia negação do
segundo termo. Ora, dado um número positivo, no caso 7(10), a estratégia ‘C’ supracitada afirma que a
representação em Complemento para 2 de -7(10) se pode lograr pela inversão de todos os bits da representação em
Complemento para 2 de 7(10) e posterior soma de ‘1’. Vidé ao lado: adiciona-se, à representação de -22(10), a
inversão da representação de 7(10) mais 1. Em ordem a aferir da validez do algoritmo, atente-se no resultado,
‘1100011’: usando a estratégia ‘D’ supracitada, ele representa -29(10) – que é justamente o resultado da subtracção
de 7(10) a -22(10): a conta está certa!
Deixa-se ao leitor aplicar os algoritmos a outros exemplos, como sejam somar 22(10) e -7(10), ou subtrair -22(10) a
7(10) e aferir da sua validez…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 81 of 119
Números com Sinal / Somador / Subtractor em c2
O algoritmo apresentado para obter a subtracção em Complemento para 2 sugere como desenhar um circuito
somador/subtractor, isto é: um circuito que, dado um número, seja ‘P’, lhe some ou subtraia um outro número,
seja ‘Q’ – conforme respectivamente uma variável de controlo, ‘Op’, seja, respectivamente, ‘0’ ou ‘1’.
● Sejam ‘P(c2)’ e ‘Q(c2)’ as representações em Complemento para 2 dos números ‘P’ e ‘Q’;
● Quando Op=0, pretende-se o resultado da soma P+Q – o que sugere um somador binário, em cujas entradas
se apliquem ‘P(c2)’ e ‘Q(c2)’…
● Quando Op=1, pretende-se o resultado da subtracção P-Q – o que, conforme ao algoritmo de subtracção em
Complemento para 2, sugere um somador binário em cujas entradas se aplique ‘P(c2)’ e a representação em
Complemento para 2 de ‘-Q’; ora, constatou-se já que esta última se pode lograr pela inversão de todos os bits da
representação em Complemento para 2 de ‘Q’ (que é ‘Q(c2)’), e posterior soma de ‘1’.
O Circuito ao lado concretiza este funcionamento:
– designem-se de ‘P’ e ‘Q’ as entradas do somador;
– porquanto, qualquer que seja ‘Op’, se trata de somar ‘P’ a um outro termo, será pacífico aplicar directamente
o primeiro termo da soma ou subtracção, ‘P(c2)’ na entrada ‘P’ do somador;
– discernir o que deve aplicar-se na entrada ‘Q’ do somador volve-se em responder ao seguinte: que deve
somar-se a ‘P(c2)’? A resposta é: ‘Q(c2)’ ou o seu inverso bit-a-bit – consoante respectivamente Op=0 ou Op=1.
Isso sugere o uso de Multiplexers, um por cada uma das entradas de ‘Q’ – e cujas entradas de dados sejam
precisamente o pertinente bit de ‘Q(c2)’ e o seu inverso, e cuja entrada de controlo seja ‘Op’, vidé ao lado;
Então, quando Op=0, a saída de cada Multiplexer será o que estiver aplicado na sua entrada de dados numerada
‘0’, e que é o pertinente bit de ‘Q(c2)’; e quando Op=1, ela será o que estiver aplicado na sua entrada de dados
numerada ‘1’, e que é o inverso do pertinente bit de ‘Q(c2)’;
– resta decidir o que se deve aplicar na entrada ‘Cin’ do somador. A esse respeito, reveja-se: se Op=0, a saída do
somador deverá ser P+Q – o que, posto que então as suas entradas são ‘P(c2)’ e ‘Q(c2)’, compele a aplicar ‘0’ a
‘Cin’; mas, se Op=1, a saída do somador deverá ser P–Q – o que, posto que então as suas entradas são ‘P(c2)’ e o
inverso de ‘Q(c2)’, compele a aplicar ‘1’ a ‘Cin’; Isto é: ‘Cin’ acompanha pari passu o valor de ‘Op’, o que se
concretiza interligando directamente a entrada de controlo ‘Op’ a ‘Cin’.
Uma última nota, relativa ao logigrama apresentado. A saída de cada Multiplexer vem a ser QiOpQiOp , o
que sugere a substituição de cada par Multiplexer+NOT por um XOR…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 83 of 119
Números com Sinal / Overflow e Underflow em c2
Já se acentuou que é comum os sistemas digitais usarem um comprimento standard para memorizar números,
como seja 8, 16, 32, 64… Pelo que é inevitável perguntar: e se a soma (ou subtracção) conduzirem a resultados
cuja representação em Complemento para 2 não cabe no tamanho de facto usado num dado Sistema?
Para simplificar, admita-se que o tamanho usado num dado Sistema Digital é de ‘4’ bits; isso determina que o
maior valor (positivo) e o menor valor (negativo) que nele podem ser representados sejam, respectivamente, ‘0111’
(isto é: +7(10)) e ‘1000’ (isto é: -8(10)). Por outras palavras: o Sistema em causa só consegue representar (em
Complemento para 2) números que estejam na gama [-8(10) a +7(10)]. Ora, pode suceder que, somando dois valores
desta gama, haja overflow (isto é: o resultado exceda +7(10)) ou underflow (isto é: o resultado seja inferior a -8(10)).
E é incontornável a pergunta: como discernir se o resultado do somador está correcto ou incorrecto?
Para exemplificar a regra a seguir para o efeito, vão considerar-se quatro casos:
Num primeiro caso, trata-se de somar +4(10) com +6(10) – que a tabuada da “primária” refere conduzir ao
resultado +10(10), que é superior ao valor máximo admissível, que é +7(10);
Note-se que, somando aritmeticamente as representações em complemento para 2 de +4(10) e +6(10), se vem a
obter 1010(c2) – que, pois que o bit da esquerda é ‘1’, é um resultado negativo! Ora, somando valores positivos,
dever-se-ia obter um resultado positivo… do que se deduz: o resultado está incorrecto, ocorreu Overflow!
Num segundo caso, trata-se de somar -4(10) com -6(10) – que deverá conduzir ao resultado -10(10), que é inferior
ao valor mínimo admissível, que é -8(10);
Note-se que, somando aritmeticamente as representações em complemento para 2 de -4(10) e -6(10), se vem a
obter 0110(c2) (o primeiro bit à esquerda da soma, ‘1’, é descartado, pois não cabe no tamanho usado no Sistema
em causa); ora, pois que o bit da esquerda de 0110(c2) é ‘0’, deduz-se que se obteve um resultado positivo! Ora,
somando valores negativos, dever-se-ia obter um resultado negativo… do que se deduz: o resultado está
incorrecto, ocorreu Underflow!
A questão é: como é que um Sistema Digital “descobre” que o resultado da operação está ou não correcto? A
regra, aqui enunciada sem demonstração, é a seguinte: atente-se aos dois últimos transportes gerados na soma; o
resultado estará correcto se e só se eles forem iguais: se forem diferentes, o resultado estará incorrecto.
Nos exemplos em apreço,
● Ao somar +4(10) com +6(10), o transporte gerado ao somar ‘1’ com ‘1’ vem a ser ‘1’, mas na coluna seguinte, e
que é a última, ele vem a ser ‘0’; isto é: são diferentes – pelo que se deve concluir que o resultado está incorrecto.
● Ao somar -4(10) com -6(10), o transporte gerado ao somar ‘1’ com ‘0’ vem a ser ‘0’, mas na coluna seguinte, e
que é a última, ele vem a ser ‘1’; isto é: são diferentes – pelo que se deve concluir que o resultado está incorrecto.
Os dois casos seguintes versam somas cujo resultado está correcto:
● No penúltimo caso, trata-se de somar -4(10) com +6(10); a soma aritmética das suas representações em
Complemento para 2 conduz à representação em Complemento para 2 de +2(10)…
● No último caso, trata-se de somar +4(10) com -6(10); a soma aritmética das suas representações em
Complemento para 2 conduz à representação em Complemento para 2 de -2(10)…
Confira-se que, nestes dois últimos casos, são iguais os dois últimos transportes gerados na soma.
Com esta sessão, termina a abordagem de circuitos ditos Combinatórios – caracterizados pelo facto de a saída
num dado instante depender só dos valores então aplicados nas entradas. As sessões seguintes versam circuitos
ditos Sequenciais – caracterizados pelo facto de a saída num dado instante depender dos valores que foram sendo
aplicados nas entradas até então. Sistemas Digitais que são, são-lhe aplicáveis os conceitos, métodos e algoritmos
até agora abordados. Todavia, há algumas novidades… É hora de as começar a abordar…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 85 of 119
Latches / 14aº Projecto
Esta é a primeira sessão dedicada a circuitos Sequenciais; analogamente ao itinerário seguido em circuitos
Combinatórios, ela (e a próxima) destinam-se a abordar os tijolos básicos que lhe são próprios – e que se designam
de latches e flip-flops. Tal como as demais sessões, ir-se-á partir de um Projecto concreto…
Considere-se um Parque de Estacionamento, em cuja Saída se encontra uma Cancela automática. Para a abrir,
o condutor duma viatura lança moedas numa ranhura ai existente – com o que ela se fecha e a cancela se abre. A
viatura avança… Chegando à Rua, um sensor assinala o termo da sua passagem - com o que a cancela se fecha e a
ranhura se abre para um novo condutor… Os sinais gerados pela ranhura e pelo sensor na rua são impulsos curtos.
Ao lado, um Diagrama Temporal ilustra o que vai ocorrendo: mostra os impulsos curtos emitidos na ranhura à
Saída e no sensor na Rua, e a evolução da Situação da Cancela (Fechada ou Aberta, codificadas por ‘0’ e ‘1’).
O Diagrama assume que inicialmente a cancela se encontra Fechada. No instante ‘a-‘, que marca o termo do
lançamento da pertinente quantia na ranhura, esta emite um impulso curto (S=1 por algum tempo); com isso, a
cancela deve abrir – o que faz no instante ‘a+‘. A viatura avança e, algures mais tarde, o sensor detecta-a… No
instante ‘d-‘, que marca o termo da passagem da viatura, ele emite um impulso curto (R=1 por algum tempo); com
isso, a cancela irá fechar – no instante ‘d+‘. Para a viatura seguinte, a sequência de eventos será a mesma…
Analise-se o Diagrama logrado: é notório que, para as mesmíssimas combinações de entrada {S=0, R=0} (que
significam que nem a ranhura à Saída nem o sensor na Rua estão emitindo impulsos), a saída, ‘C’, do circuito que
controla a cancela tanto pode ser ‘0’ (para que advenha Fechada) como pode ser ‘1’ (para que fique Aberta)! Este é
um comportamento bem distinto daquele que se observou até agora: ao circuito de controlo, é insuficiente
conhecer as entradas num instante, ele tem que saber o que se passou antes, tem que saber memorizar o passado!
Aproveitando conhecimentos já adquiridos (em particular o conceber a saída como uma função das entradas),
convirá entender tal memória como o valor de uma entrada de um tipo novo, nomeada de ‘Q’. Doravante, há que
ter em conta dois tipos de entradas/variáveis: as ditas externas ou primárias (e que são as que foram consideradas
até agora) e as ditas internas ou secundárias – destinadas a suportar a memória do passado: o seu Estado!
Isso entendido, a primeira etapa será, intui-se, estabelecer uma codificação para todas as entradas. Na prática, e
ademais das entradas externas ‘S’ e ‘R’ (com uma codificação óbvia), bastará acrescentar uma entrada interna,
‘Q’; ela deverá memorizar o que é preciso para o circuito determinar a sua saída ‘C’, e que vem a ser o seguinte:
será que ‘S’ já sinalizou mas ‘R’ ainda não? É que, em caso afirmativo, a cancela deve advir Aberta…
Segue-se a construção do mapa de Karnaugh da saída, ‘C’ – e que acaba por seguir pari passu a sua entrada
interna, ‘Q’. A esse respeito, recomenda-se associar essa variável à coluna à esquerda, e relegar as variáveis
externas para as linhas do topo. Para preencher o mapa, uma boa política será acompanhar o Diagrama Temporal:
• de início, {Q=0, S=0, R=0} – o que corresponde à célula ‘0’ do mapa; enquanto nada se alterar, Q(t+1)=0…
• no instante ‘a-‘, a ranhura à Saída emite um impulso curto (S=1, com Q=0 e R=0 – o que remete para a célula
‘2’); aquele impulso provoca a mudança de Estado do circuito: este deve passar a memorizar que ‘S’ já sinalizou
mas ‘R’ ainda não; em termos práticos, ‘Q’ deverá assumir o valor/Estado ‘1’: Q(t+1)=1, na célula ‘2’;
• a situação passou a ser {Q=1, S=1, R=0}, o que corresponde à célula ‘6’ do mapa; Q(t+1) mantém-se ‘1’;
• algum tempo depois, ‘S’ regressa a ‘0’ – pelo que a situação passa a ser {Q=1, S=0, R=0}, o que corresponde
à célula ‘4’ do mapa; e enquanto nada se alterar, mantém-se o Estado Q(t+1)=1…
• no instante ‘d-‘, o sensor na Rua emite um impulso curto (R=1, com Q=1 e S=0 – o que remete para a célula
‘5’); esse impulso provoca a mudança de Estado do circuito: este deve deixar de memorizar que ‘S’ já sinalizou
mas ‘R’ ainda não; em termos práticos, ‘Q’ deverá assumir o valor/Estado ‘0’: Q(t+1)=0, na célula ‘5’;
• a situação passou então a ser {Q=0, S=0, R=1}, o que corresponde à célula ‘1’ do mapa; Q(t+1) mantém-se ‘0’
• algum tempo depois, ‘R’ regressa a ‘0’ – pelo que a situação passa a ser {Q=0, S=0, R=0}, o que corresponde
à célula ‘0’ do mapa: foi reposta a situação inicial…
• enfim, preenche-se com indiferenças, ‘X’, as células respeitantes a eventos que nunca ocorrem, e que vêm a
ser aquelas em que, simultaneamente, {S=1, R=1}: a cada instante, só se pode estar emitindo um impulso…
O mapa tem uma configuração peculiar: cada linha caracteriza um Estado – no sentido de que cada célula sua
explicita qual o Estado seguinte quando, partindo o circuito desse Estado (dito actual), ocorre a combinação das
entradas externas que corresponde a essa célula. Como que cada linha é o mapa parcial para cada Estado.
A obtenção da SOP ou POS simplificada, e o correspondente logigrama são triviais. A um circuito com tal
funcionamento, dá-se o nome de latch SR (ou latch RS) – e é a ele que serão dedicadas as próximas linhas…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 87 of 119
Latches / Latch SR
Ao lado, apresenta-se o mapa de Karnaugh da latch SR a que se chegou, mais precisamente: o mapa do Estado
seguinte, ‘Q(t+1)’, em função do Estado actual, ‘Q(t)’, e das entradas externas, {S, R}.
Visando aplicá-la em outros Projectos, convirá repensar o significado dos literais {S, R} – descolando-os da
sua aplicação no 14aº Projecto para denotar os sinais emitidos pela ranhura à Saída e pelo sensor na Rua…
Analisem-se, então as sucessivas colunas daquele Mapa. Verifica-se que:
● Quando {S=0, R=0} – modo de funcionamento dito de “Hold” –, o estado mantém-se tal como era: se, antes,
era Q(t)=0, depois continua sendo Q(t+1)=0 – e se, antes, era Q(t)=1, depois continua sendo Q(t+1)=1; quer dizer: uma
latch SR é um circuito digital capaz de memorizar um bit! Resta saber: como obrigá-lo a “guardar“ um ‘1’ ou um
‘0’? A resposta vem nas colunas seguintes do Mapa:
● Quando S=1 (e R=0) – modo de funcionamento dito de “Set” –, o estado transita obrigatoriamente para ‘1’,
independentemente do que era antes; quer dizer: para que a latch memorize o valor ‘1’, activa-se a entrada ‘S’
(Set); ela pode de imediato ser desactivada, que a latch continua memorizando o bit ‘1’;
● E quando R=1 (e S=0) – modo de funcionamento dito de “Reset” –, o estado transita obrigatoriamente para
‘0’, independentemente do que era antes; quer dizer: para que a latch memorize o valor ‘0’, activa-se a entrada ‘R’
(Reset); ela pode de imediato ser desactivada, que a latch continua memorizando o bit ‘0’;
Doravante, os literais {S, R} deverão ser entendidos como abreviaturas das operações {Set, Reset}: Set
significando “pôr a ‘1’”, e Reset significando “pôr a ‘0’”…
● Resta a combinação {S=1, R=1}. Na prática, ela significa querer fazer Set (pôr a ‘1’) e Reset (pôr a ‘0’) ao
mesmo tempo! – e é expectável que se volva num comportamento sui generis… Será abordado mais adiante.
A partir do Mapa, podem materializar-se duas versões para o logigrama, suportadas em NANDs e NORs:
Versão com NANDs:
A partir da SOP simplificada, a dupla complementação seguida da aplicação das leis de De Morgan conduz a
uma expressão somente com NANDs – a partir de que o desenho do logigrama é trivial, vidé ao lado.
O logigrama exibe duas peculiaridades:
• Por um lado, aquilo que se designa de feedback (realimentação): a própria saída, ‘Q’, é usada como entrada
interna (do AND-W) do circuito; aliás, é esse “truque” que habilita o circuito a memorizar um bit: quando se
inactivam as duas entradas, {S=0, R=0}, ambos os NANDs “funcionam” como inversores – pelo que o estado
seguinte, ’Q(t+1)’, vem a ser a dupla negação do estado actual, ’ Q(t)’: a saída do circuito não se altera…
• De notar, também, que, além de ‘Q’, há uma outra saída, ‘Q’’ – que o próprio leitor poderá confirmar que vem
a ser o complemento de ‘Q’ se ao menos uma das entradas {S, R} for ‘0’.
É hora de inquirir: qual o sui generis acima referido acerca do comportamento da latch SR?
• Admita-se que se força {S=1, R=1}; então, as saídas de ambos os NANDs advêm Q=Q’=1. Isso, é claro,
“viola” algo comum às restantes combinações de {S, R}: elas conduzem a ‘Q’’ ser o complemento de ‘Q’;
• Mais grave ainda: admita-se que, vigorando {S=R=1}, se aplica simultaneamente {S=0, R=0}; então, a saída
do NAND-W volve-se Q’= Q =0 e, “ao mesmo tempo”, a saída do NAND-E vem a ser Q= Q '=0. Com isso, a saída
do NAND-W volve-se Q’= Q =1 e, “ao mesmo tempo”, o NAND-E força a saída Q= Q '=1: voltou-se ao princípio
– e a continuação adivinha-se: uma oscilação das duas saídas, ‘1’→’0’ →’1’ →’0’… Na prática, porém, não é
realizável aquele “ao mesmo tempo”: os tempos de propagação dos NANDs reais são diferentes – pelo que ‘Q’
tenderá a convergir para algum valor… A priori, porém, não se sabe é qual… Conclusão óbvia: se o Projectista
aceitar que possam vir a estar activas ambas as entradas {S, R}, terá de cuidar para não as deixar transitar ao
mesmo tempo para {S=R=0}! Por mor de simplicidade, a praxis neste itinerário é: nunca admitir {S=R=1}.
Ao lado, apresenta-se o símbolo IEC do integrado SN74279, uma latch SR. Ambas as entradas {S, R} são
activas a Low; de notar que a saída, ‘Q’, é dada sob as formas normal e complementar (o que, como se constatou,
é exacto apenas se não se activarem simultaneamente {S e R})
Versão com NORs:
A partir da POS simplificada, a dupla complementação seguida da aplicação das leis de De Morgan conduz a
uma expressão somente com NORs - a partir de que o desenho do logigrama é trivial, vidé ao lado.
Deixa-se ao leitor averiguar o que sucede se se activarem simultaneamente as duas entradas {S, R}…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 89 of 119
Latches / Latch SR com enable (controlada / sincronizada)
Tendo em conta que o estado de uma latch pode mudar “logo que” alguma das suas entradas muda, é hora de
referir que usar latches para desenhar circuitos Digitais não é algo que se possa asseverar ser sempre trivial… Pelo
que doravante este itinerário se irá concentrar quase exclusivamente numa família especial de latches (e nos seus
derivados flip-flops), ditas de latches controladas ou sincronizadas; elas são caracterizadas pelo facto de o seu
estado poder mudar somente quando lhe for sinalizado explicitamente que o pode fazer.
Recordando o intermezzo sobre Enabling/Disabling, não será de espantar que esse controlo se concretize numa
entrada mais, dita de enable (de uso mais comum em latches) ou clock (relógio, de uso mais comum em flip-flops).
Admita-se então que se dispõe de uma latch, com entradas {S, R} activas a High (versão NOR) ou activas a
Low (versão NAND). Como usá-la para concretizar uma latch com entradas activas a High, sejam {S_H, R_H}, e
controlada por uma entrada enable ‘C’ (que, como se fará daqui por diante, se pressupõe implicitamente ser activa
a High)? A resposta é interpor, entre cada uma das entradas {S_H, R_H} e a correspondente entrada da latch, um
AND – activado pela tal entrada enable (e garantindo que o nível de actividade da sua saída corresponde ao da
entrada a que se interliga), vidé ao lado.
O preenchimento da Tabela de Verdade condensada para semelhante latch controlada é trivial:
• quando a entrada enable não estiver activa (C=0), o estado mantém-se impávido e sereno: Q(t+1)= Q(t);
• mas, se ela advir activa (C=1), o estado seguinte será aquele para o qual uma latch não enabled transita,
quando o seu estado actual é ‘Q(t)’ e as entradas são {S, R}.
Ao lado, apresenta-se o símbolo IEC duma latch SR controlada. A saída, ‘Q’, é dada sob as formas normal e
complementar. As entradas {S, R} são activas a High; mas existe uma outra, também activa a High, que é rotulada
‘C’ – para denotar a entrada enable. Note-se que os rótulos {S, R} são prefixados por ‘1’ – e que ‘C’ é sufixado por
‘1’. Isso reflecte a notação de dependência da Standard 91-1984: para assinalar que, se alguma das entradas {S,
R} advir activa, isso é reconhecido pela latch só quando a entrada enable estiver activa, ‘C’ é sufixado por ‘1’ – e
todas as entradas prefixadas por ‘1’ (no caso: {S, R}) são consideradas inactivas enquanto ‘C’ estiver inactiva.
Ao lado, apresenta-se um Diagrama Temporal da evolução de uma latch SR controlada:
● Inicialmente, ela encontra-se no estado Q=0, e todas as entradas {S, R e enable} se encontram inactivas;
● No instante ‘t1’, activa-se a entrada ‘S’ – mas o estado não se altera (pois a entrada enable está inactiva);
● Em ‘t2’, activa-se a entrada enable – com o que, em ‘t3’ (isto é: decorrido o pertinente tempo de propagação
tpLH), o estado da latch muda, passando a ser Q=1;
● Em ‘t4’, desactiva-se a entrada ‘S’ – com o que a latch ingressa no estado Hold: mantém-se Q=1;
● Em ‘t5’, activa-se a entrada ‘R’ – com o que, em ‘t6’ (isto é: decorrido o pertinente tempo de propagação
tpHL), o estado muda de novo, ficando Q=0;
● Em ‘t7’, desactiva-se a entrada ‘R’ – com o que a latch regressa ao estado Hold: mantém-se Q=0;
● Em ‘t8’, activa-se a entrada ‘S’ – com o que, em ‘t9’, o estado se altera outra vez, ficando Q=1;
● Em ‘t10’, desactiva-se a entrada enable – com o que, até advir de novo activa, se mantém Q=1;
● Em ‘t11’, desactiva-se a entrada ‘S’ – sem, é claro, nenhum efeito no estado da Latch: ela está disabled…
(A título de curiosidade, refiram-se parâmetros temporais concernindo a desactivação do enable duma latch
controlada; cabe ao projectista discernir se os há-de ter em conta, ou não, na aplicação em que está engajado; se
for o caso, as entradas {S, R} (ou ‘D’, numa latch D) têm que permanecer estáveis ao menos TSetUp segundos antes
de se desactivar o enable; e têm que continuar estabilizadas pelo menos THold segundos depois de o desactivar)
A haver mudança na saída da latch, os atrasos tpHL e tpLH (tempo de propagação da saída de High a Low ou
vice-versa) são contabilizados a partir do instante em que mudou a entrada que provocou essa mudança.
No Diagrama, as transições ‘0’ para ‘1’ (ou vice-versa) são oblíquas – para denotar que não são instantâneas,
“demoram o seu tempo”; para medir os tempos referidos (tpHL e tpLH, e TSetUp e THold), o instante em que ocorre
uma transição é considerado ser aquele em que o nível eléctrico está “a meio” dos níveis que representam ‘0’ e ‘1’.
(Neste itinerário, adoptou-se o nome latch SR – que não latch RS; isso justifica-se pela sua semelhança
funcional com o flip-flop JK, a abordar adiante: quando ao menos uma entrada é ‘0’, o efeito dum par de valores
aplicado a {S, R} será o mesmo se ele for aplicado nas entradas {J,K}. Optando assim, a entrada ‘S’ tem um peso
maior que ‘R’ – e é isso que determina a sua ordenação em Mapas, Tabelas e Diagramas Temporais; todavia, em
logigramas e símbolos IEC, segue-se a ordem inversa: ‘S’ em cima, ‘R’ em baixo – para reflectir graficamente que,
quando ‘S’ e ‘R’ são diferentes, o efeito da activação do enable é propagar os valores de ‘S’ e ‘R’ para ‘Q’ e ‘ Q ’)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 91 of 119
Latches / Latch D com enable (controlada / sincronizada)
Constatou-se que é arriscado activar em simultâneo ambas as entradas de uma latch SR. Pressuposto que ela
dispõe de uma entrada enable, uma maneira de o evitar é forçar que, a cada momento, essas entradas sejam
complementares uma da outra: se suceder que em algum momento em ‘S’ se force um valor genérico ‘D’, então em
‘R’ deverá aplicar-se ‘ D ’. Para o concretizar fisicamente, bastará introduzir um inversor, vidé ao lado.
Ao circuito assim logrado, com uma só entrada de dados ‘D’ (além da entrada enable), dá-se o nome de latch D
(controlada ou sincronizada).
O preenchimento da Tabela de Verdade condensada para a latch D controlada é trivial:
● quando a entrada enable não estiver activa (C=0) – modo de funcionamento dito de “Hold” –, o estado
mantém-se impávido e sereno: Q(t+1)= Q(t);
● mas, se ela advir activa (C=1) – modo de funcionamento dito de “Cópia/Transparente” –, o estado seguinte
passará a ser o valor que então estiver sendo aplicado na entrada ‘D’.
(Abra-se um parêntesis para assinalar que, segundo alguns autores, é este modo de funcionamento o que subjaz
ao nome atribuído a esta latch: ‘D’ remete para “Delay” – no sentido de que a latch passará a assumir o valor à
entrada após ter decorrido o tempo necessário para a entrada enable advir activa - se o não estiver ainda - e,
naturalmente, o tempo de propagação, tpHL ou tpLH, da latch; outros autores preferem justificar ‘D’ como
remetendo para Data Input)
A partir da Tabela de Verdade condensada, a expressão algébrica simplificada é óbvia. E a sua semelhança com
a expressão algébrica da saída de um Multiplexer sugere um modo alternativo de materializar uma latch D: em vez
de usar uma latch SR e um inversor, basta recorrer a um Multiplexer 2:1, vidé ao lado.
Ao lado, apresentam-se dois símbolos IEC para a latch D controlada. A saída, ‘Q’, é dada sob as formas
normal e complementar. A entrada ‘D’ é activa a High; quanto à entrada enable, que é qualificada ‘C’, num dos
símbolos (de que é exemplo o integrado SN7475) ela é activa a High, e no outro é activa a Low.
De salientar uma nova aplicação da notação de dependência: para assinalar que um valor na entrada ‘D’ pode
ter algum efeito no estado da latch somente quando ‘C’ estiver activa, esta é sufixada por ‘1’ – e ‘D’ é prefixada
com ‘1’.
Ao lado, um Diagrama Temporal ilustra este funcionamento:
– na entrada enable, ‘C’, ocorre uma sequência de bits, ‘0’→’1’ →‘0’→’1’… em que a duração de cada um
deles não é necessariamente a mesma;
– na entrada ‘D’, ocorre outra sequência de bits, ‘0’→’1’ →‘0’→’1’…
– na saída ‘Q’, observa-se o resultado… Repare-se que o Diagrama pressupõe que a entrada enable é activa a
High:
a. Ainda que ‘D’ tenha já assumido o valor ‘1’, somente quando a entrada enable advir ‘1’ (como ocorre no
instante ‘1’) é que o estado ‘Q’ se volve ‘1’;
b. Semelhantemente, mesmo que ‘D’ tenha entretanto assumido o valor ‘0’, somente quando a entrada enable
advir ‘1’ (atente-se ao instante ‘2’) é que o estado ‘Q’ vem a tomar o valor ‘0’;
c. Mesmo que ‘D’ se altere, como sucede antes do instante ‘4’, se a entrada enable não for activada, não se
constatará qualquer mudança em ‘Q’;
d. Em sentido contrário, se a entrada enable estiver activada, eventuais alterações em ‘D’ provocarão pari passu
alterações em ‘Q’ (vejam-se a propósito o desenrolar dos acontecimentos após os instantes ‘5’ e ‘7’)…
A esta última observação não se pode reagir com um “encolher de ombros”: uma latch D assim pode conduzir a
uma sucessão de estados, que não é simplesmente aquele que a sua Tabela de Verdade determina para o valor
aplicado à sua entrada ‘D’ no momento em que se activou a entrada enable. Para algumas aplicações, isso é um
problema que há que defrontar – mas isso fica relegado para a próxima sessão: não se pode pôr o Rossio na rua da
Betesga…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 93 of 119
Latches / 14bº Projecto (Entradas assíncronas Preset e Clear)
É hora de abordar as assim denominadas “Entradas assíncronas ou directas” Preset e Clear. Quiçá um Projecto
ajude a apreender a sua importância…
Considere um concurso televisivo, onde se defrontam três concorrentes. A cada um deles estão associados um
botão e uma lâmpada. Qualquer concorrente que ouça a pergunta do júri, e subentendido que pensa saber a
resposta correcta, pode de imediato clicar no respectivo botão – mas somente se acende a lâmpada daquele que
tiver sido mais rápido… O sinal gerado pelo clicar num botão é um impulso curto.
Ao lado, apresenta-se uma possível codificação para os pertinentes predicados, e outrossim o logigrama de um
circuito para materializar o objectivo enunciado – de que só se acenda a lâmpada do concorrente mais rápido.
Devendo haver igualdade de tratamento para todos os concorrentes, é expectável que a parte do logigrama que
diz respeito a cada um seja idêntica para todos eles … Considere-se então o que ocorre quando o mais rápido clica
no “seu” botão: porquanto ele gera um impulso curto, convém memorizá-lo numa latch D cuja entrada enable
esteja de antemão activa (será a activação da saída dessa latch o que irá forçar o acender da lâmpada associada a
esse concorrente); por outro lado, há que, de imediato, desactivar as latches associadas aos outros concorrentes…
Para conseguir tal objectivo, uma solução é aplicar as saídas das três latches a um OR, e interligar a saída deste,
suposta activa a Low, às entradas enable das latches.
Acompanhe-se então o evoluir dos acontecimentos:
– admita-se que, inicialmente, as latches estão no estado ‘0’; as lâmpadas estarão apagadas, e, como as entradas
do OR estão todas a ‘0’, a sua saída ficará High: as entradas enable das latches estarão de início, todas activas;
– quando o concorrente mais rápido clicar no “seu” botão, a respectiva latch ingressa de imediato no estado ‘1’;
isso provoca o acender da respectiva lâmpada, e mais ainda, força a saída do OR a volver-se Low – com isso
inactivando as entradas enable de todas as latches: doravante, não há margem para se acender outra lâmpada…
Esta solução acarreta uma pergunta óbvia: como é que se regressa ao estado inicial, que talvez o júri tenha uma
pergunta mais no cardápio? A resposta passa por introduzir um par de entradas mais, sejam {S, R}, que habilitem a
fazer ingressar a latch num determinado estado (‘1’ ou ‘0’) independentemente da entrada ‘D’; isso é feito mesmo
que a entrada enable esteja inactiva, e por isso mesmo elas são ditas de entradas assíncronas ou directas!
Elas são designadas de entradas Preset e Clear: consoante aquela que for activada, assim a latch ingressa
respectivamente no estado ‘1’ ou no estado ‘0’. Ao lado, apresenta-se o logigrama já com entradas Preset e Clear –
intuindo-se que o regresso ao estado inicial se consegue activando a entrada Clear e inactivando a entrada Preset.
De notar que, no símbolo da latch D, as entradas {S, R}, e ao contrário do que ocorre com a entrada ‘D’, não são
prefixadas (por ‘1’) – precisamente para denotar que o seu efeito não depende da entrada enable!
Qualquer tipo de latch (SR ou D) ou flip-flop pode comportar essas entradas assíncronas Preset e Clear.
Ao lado, apresenta-se o logigrama de uma latch SR com entrada enable e entradas assíncronas Preset e Clear
activas a Low – e o respectivo símbolo IEC. Repare-se:
– quando ambas as entradas Preset e Clear estão inactivas {Preset=0 e Clear=0}, o logigrama volve-se no de
uma vulgar latch SR controlada concretizada com NANDs;
– quando se activa a entrada Clear, as saídas dos NANDs {N, W} advêm ‘1’; se, então, estiver inactiva a
entrada Preset, todas as entradas do NAND-E são ‘1’, pelo que a latch ingressa no estado Q=0;
– quando se activa a entrada Preset, as saídas dos NANDs {S, E} advêm ‘1’ (isto é, a latch ingressa no estado
Q=1); se, então, estiver inactiva a entrada Clear, todas as entradas do NAND-W são ‘1’, pelo que a saída de
NAND-W advém ‘0’.
De notar que, no símbolo, há dois pares de entradas {S, R}: um primeiro prefixado por ‘1’ – significando que
pode ter efeito na latch se e só se estiver activa a entrada enable; e um segundo que não é prefixado –
precisamente para denotar que podem alterar o estado da latch independentemente da entrada enable estar activa!
De notar que a saída, ‘Q’, é dada sob as formas normal e complementar (o que, como será pacífico, é exacto
apenas se não se activarem simultaneamente ambas as entradas assíncronas Preset e Clear.
Há que acentuar que, se um integrado disponibiliza alguma entrada Preset ou Clear, ela não pode “ficar no ar”:
o projectista não pode pressupor que um pino “no ar” significa ficar “a Low” ou “a High”, tem mesmo que
garantir, a todo o momento, que lhe seja aplicado o pertinente nível Low ou High!
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 95 of 119
Latches / Diagramas de Estado / Tabelas de Excitação
Um tijolo básico de circuitos combinatórios (como seja um AND ou um XOR) pode ser caracterizado por uma
Tabela de Verdade, expressão algébrica ou Diagrama Temporal… Semelhantemente, uma latch pode ser descrita
por um Mapa de Karnaugh, pela expressão que dela se deduz, dita de Equação característica, e por um Diagrama
Temporal; mas há ainda duas outras maneiras – o Diagrama de Estados e a Tabela de Excitação – que é tempo de
abordar. Isso é feito adiante em torno da latch SR, deixando-se ao leitor aplicar à latch D a metodologia abaixo…
Recorde-se o Mapa de Karnaugh da latch SR.
1. Nele, é patente que a coluna à esquerda, associada ao estado ‘Q(t)’, se desdobra por dois valores,
correspondentes a outros tantos estados: Q(t)=0, e Q(t)=1; a primeira etapa na construção do Diagrama de Estados
é associar-lhes um par de círculos, etiquetados por, respectivamente, ‘0’e ‘1’, vidé ao lado.
2. A segunda etapa é traçar setas, devidamente rotuladas, que reproduzam graficamente a evolução dos dois
estados quando se aplicam as combinações admissíveis nas entradas da latch; nomeadamente,
2.1 A linha do Mapa correspondente ao estado Q(t)=0 estabelece que, desse estado, se pode evoluir para o
estado Q(t+1)=1 se e só se {S=1, R=0}; graficamente, isso traduz-se numa seta dirigida do círculo que representa o
estado Q=0 para aquele que representa o estado Q=1, seta essa rotulada por SR=10;
2.2 Essa linha estabelece que, no estado Q(t)=0, se pode continuar no mesmo estado Q(t+1)=0 se {S=0, R=0}
ou {S=0, R=1}; isso traduz-se numa seta dirigida do círculo que representa o estado Q=0 para ele mesmo, seta
essa rotulada por SR=00 e SR=01;
2.3 A linha correspondente ao estado Q(t)=1 estabelece que, desse estado, se pode evoluir para o estado
Q(t+1)=0 se e só se {S=0, R=1}; isso traduz-se numa seta dirigida do círculo que representa o estado Q=1 para
aquele que representa o estado Q=0, seta essa rotulada por SR=01;
2.4 Essa mesma linha estabelece que, no estado Q(t)=1, se pode continuar no mesmo estado se {R=0, S=0}
ou {S=1, R=0}; isso traduz-se numa seta dirigida do círculo que representa o estado Q=1 para ele mesmo, seta
essa rotulada por SR=00 e SR=10.
Por mor de simplificação, e quando a uma seta se associam vários rótulos, convirá (se isso for possível)
condensá-los: o par SR=00 e SR=01 condensa-se em SR=0X e o par SR=00 e SR=10 condensa-se em SR=X0.
Do Diagrama de Estados (ou mesmo do Mapa de Karnaugh), poder-se-á deduzir a assim denominada Tabela de
Excitação: uma Tabela que clarifica como se deve excitar uma latch para que ela tenha uma dada evolução.
1. A primeira etapa consiste em traçar a estrutura da Tabela: à esquerda, dispõem-se duas colunas, associadas,
respectivamente a ‘Q(t)’ (o estado actual) e a ‘Q(t+1)’ (o estado seguinte); e no topo dispõem-se duas linhas,
associadas às entradas da latch {S, R};
2. Visivelmente, nas colunas à esquerda apresentam-se todas as possibilidades de evolução da latch; o que há
agora a fazer é varrer todas as suas linhas, de cima para baixo – e inscrever na Tabela o que se deve aplicar nas
entradas para lograr cada evolução em particular; concretamente,
2.1 A linha {Q(t)=0, Q(t+1)=0} deve ser entendida como uma interrogação: estando a latch inicialmente no
estado Q(t)=0, o que é que se deve aplicar nas entradas {S, R} para que ela permaneça nesse mesmo estado? O
Diagrama de Estados esclarece-o: devem aplicar-se os valores {S=0, R=X} – e são eles mesmos o que se inscreve
nas colunas {S, R} da linha {Q(t)=0, Q(t+1)=0};
2.2 A linha {Q(t)=0, Q(t+1)=1} é uma outra interrogação: estando a latch inicialmente no estado Q(t)=0, que
deve aplicar-se nas entradas para que ela mude para o estado Q(t+1)=1? Pelo Diagrama, deve aplicar-se {S=1, R=0}
– e são estes valores o que se inscreve nas colunas {S, R} da linha {Q(t)=0, Q(t+1)=1};
2.3 A linha {Q(t)=1, Q(t+1)=0} é outra interrogação: estando a latch inicialmente no estado Q(t)=1, que deve
aplicar-se nas entradas para que ela mude para o estado Q(t+1)=0? Pelo Diagrama, deve aplicar-se {S=0, R=1} – e
são estes valores o que se inscreve nas colunas {S, R} da linha {Q(t)=1, Q(t+1)=0};
2.4 A linha {Q(t)=1, Q(t+1)=1} é a interrogação final: estando a latch inicialmente no estado Q(t)=1, que deve
aplicar-se nas entradas para que ela permaneça nesse mesmo estado? Pelo Diagrama, deve aplicar-se {S=X, R=0}
– e são estes valores o que se inscreve nas colunas {S, R} da linha {Q(t)=1, Q(t+1)=1}.
Estes vários modos de caracterizar uma latch são todos eles, importantes:
– o Mapa de Karnaugh e o Diagrama de Estados, porque a partir de qualquer deles se deduzem os outros;
– a Equação característica, que é a ela que um “espião” recorre para descobrir para que serve um circuito;
– a Tabela de Excitação, que é a ela que um projectista recorre para desenhar um Circuito Sequencial.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 97 of 119
Latches / Análise de Circuitos com Latches
Que a Equação característica é o instrumento a que um “espião” recorre para descobrir para que serve um
circuito pode testemunhar-se com um exemplo concreto. A menção ao “espião” pode levar o leitor a “saltar” este
assunto, que “não é consigo”, mas desengane-se: 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 de espião”: conferir que o
circuito que realizou tem mesmo o comportamento requerido – e este passo de maneira nenhuma se deve omitir!
Considere-se o par de logigramas ao lado, cada qual com uma latch D e uma latch SR – ambas enabled pela
mesma entrada enable; designem-se de {Q1, Q0} os respectivos estados. O primeiro passo na análise do circuito é
escrever as expressões que traduzem o comportamento da saída do circuito e das entradas das latches. Elas são as
mesmas para os dois logigramas: conquanto geograficamente diferentes, vêm a ser funcionalmente equivalentes!
No logigrama à esquerda, as latches dispõem-se horizontalmente ao lado uma da outra; já no da direita, elas
dispõem-se verticalmente uma por baixo da outra. E é natural a curiosidade: qual a preferível?
À resposta aqui sustentada não será alheio o conceber a saída dum circuito como função das entradas – não só
das externas, mas também das internas: as que suportam o seu Estado, e que são as latches. Permanecendo fiel à
localização à esquerda das entradas dum logigrama, falta decidir a ordem… Ora, no mapa de Karnaugh feito para
o 14aº Projecto (e nos mapas relativos às latches estudadas), os estados foram sempre associados às colunas à
esquerda – o que dá às entradas internas o “direito” a serem julgadas as de maior peso… Conclusão: o autor
prefere situar à esquerda as entradas externas e as latches, com as primeiras por cima; excepções a esta filosofia
são os logigramas que acompanham o desenvolvimento das latches e flip-flops (veja-se a introdução das entradas
enable, Preset e Clear), em que – por mor de eles advirem mais expressivos – as latches se situam à direita…
Tendo em mira o desenho do Diagrama de Estados, o segundo passo é substituir as expressões das entradas das
latches nas respectivas equações características. O resultado são expressões que exprimem o estado seguinte de
cada latch – em função dos estados das duas latches e da entrada externa ‘X’ nalgum instante.
O terceiro passo é converter tais expressões nas assim denominadas Tabela de Transições e Saídas – que
indicam, para cada combinação das entradas internas e externas {Q1, Q0, X} nalgum instante ‘t’, a saída ‘Z’ do
circuito nesse instante e os estados das latches no instante seguinte ‘t+1’. Existirão três Tabelas, para ‘Z’, ‘Q1’ e
‘Q0’; elas são a duas dimensões: as colunas à esquerda representam as latches {Q1, Q0}; a linha no topo representa
a entrada externa ‘X’. Estando envolvidas duas latches, e pois que cada uma pode assumir dois valores {Q=0 e
Q=1}, o circuito poderá assumir quatro estados distintos, que convirá identificar por números: {‘0’, ‘1’, ‘2’ e ‘3’}.
O preenchimento das Tabelas não deverá provocar engulhos. Veja-se o caso da primeira linha, para a qual
{Q1=Q0=0}; substituindo estes valores nas expressões de ‘Z’ e dos estados seguintes das latches, obtém-se Z=0,
Q1(t+1)=0, Q0(t+1)= X ; isto sugere inscrever ‘00’, ‘00’ e ‘10’ na primeira linha de ‘Z’, ‘Q1’ e ‘Q0’, respectivamente.
O passo seguinte será aglutinar as duas Tabelas dos estados seguintes das latches, ‘Q1’ e ‘Q0’, numa só Tabela,
dita do estado seguinte do circuito, ‘Q1Q0(t+1)’; veja-se o caso da primeira linha, em que, consoante X=0 ou X=1,
assim advém {Q1=0, Q0=1} ou {Q1=0, Q0=0}; aglutinar significa preencher a primeira linha da nova Tabela com
‘01’ e ‘00’, respectivamente nas colunas ‘X=0’ e ‘X=1’. Para as restantes linhas, a metodologia é a mesma…
Convém reescrever a Tabela obtida numa Tabela de Estados/Saída, em que cada par de bits ‘Q1Q0’ é entendido
como o código binário dum número, e ele é substituído pela sua representação na base 10; essa Tabela descreve
“para que Estado” evoluem os Estados {‘0’, ‘1’, ‘2’ e ‘3’} 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 a primeira
linha, relativa ao estado E=0: quando X=1, a saída é Z=0, e o estado seguinte será E=0; isso volve-se numa seta
dirigida do círculo ‘0’ para ele mesmo – rotulada por X=1/Z=0, ou, como o manda a lei do menor esforço, 1/0…
Dado o Diagrama de Estados, advém trivial traçar o Diagrama Temporal da evolução do circuito, a partir de
algum estado, seja {Q1=0, Q0=0}, e à medida que ‘X’ varia: enquanto X=1, mantem-se Z=0, e o estado continua
sendo ‘00’; quando advém X=0, continua sendo Z=0, mas, quando enable=1, em ‘t4’, ingressa no estado ‘01’ – e aí
permanece enquanto X=0; quando ocorre X=1, advém Z=1, e, em ‘t7’, ingressa no estado ‘11’ – e aí fica enquanto
X=1; aquando de X=0, continua sendo Z=1, e, em ‘t9’, ingressa no estado ‘10’ – e aí se mantém enquanto X=0; etc
(Nota: o logigrama foi concebido de forma a se evitarem problemas críticos de circuitos assíncronos: há só uma
variável externa – e, quando a sua alteração leva a uma mudança no estado do circuito, de facto só uma das latches
muda de estado, e, enquanto essa variável não voltar a mudar, também o estado do circuito não volta a mudar).
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 99 of 119
Flip-flops / 15aº Projecto
Esta sessão encerra a abordagem dos tijolos básicos próprios dos circuitos Sequenciais. Debruçar-se-á
sobretudo sobre flip-flops. Como nas outras sessões, ir-se-á desenrolar a partir de um Projecto concreto...
Considere-se que, para acender ou apagar uma lâmpada, foi disponibilizado um botão de pressão, caracterizado
pelo seguinte: quando premido, emite um impulso de curta duração, retornando depois à situação de repouso.
Ao lado, traçou-se um Diagrama Temporal ilustrando como se pretende que evolua o estado da lâmpada:
• Pressupondo que a lâmpada está inicialmente apagada, ela acende em ‘t1‘, o instante em que é premido o
botão – e ele emite um impulso curto; e continua acesa mesmo quando, em ‘t2‘, finda esse impulso;
• Quando, em ‘t3‘, o botão volta a ser premido – e volta a emitir um impulso –, a lâmpada apaga-se; e continua
apagada mesmo quando, em ‘t4‘, esse impulso se esvanece;
• A continuação intui-se…
Decidindo-se pela codificação ao lado, um projectista concebeu um logigrama envolvendo uma latch SR
enabled. A justificação apontada pelo “artista” foi a seguinte:
• ‘B’ está directamente ligado à entrada enable da latch; com isso, enquanto o botão não for premido, ela
encontra-se disabled – pelo que a lâmpada mantém o seu estado (aceso ou apagado);
• Isto é: somente quando ele for premido é que a latch advém enabled (e portanto poderá mudar de estado); o
que resta fazer é providenciar que o que então estiver aplicado nas entradas {S, R} a force mesmo a mudar de
estado; ora, isso consegue-se com as ligações estabelecidas no logigrama: as subsequentes expressões para as
entradas {S, R}, quando substituídas na equação característica da latch, conduzem a que, quando o botão é
premido e portanto a latch advém enabled, ela mude de estado – com o que, se a lâmpada estiver acesa, se apague
(e vice-versa)…
Será que o logigrama estará correcto – que conduz mesmo ao Diagrama Temporal acima? A resposta é: não,
está errado! Para o compreender, convirá olhar mais em pormenor a sucessão de eventos a partir do momento em
que de facto se prime o botão…
• Suponha-se que, inicialmente, ‘Q’ se encontra no estado ‘0’ – e portanto S=1 e R=0; suponha-se também que
‘B’ é ‘0’;
• Admita-se, então, que o botão é premido: ‘B’ volve-se ‘1’… e a latch fica enabled:
• Um certo tempo tpHL depois, ‘ Q ’, e por conseguinte também ‘S’, advêm ‘0’;
• E um certo tempo tpLH depois, ‘Q’, e por conseguinte também ‘R’, advêm ‘1’;
• Quer dizer: as entradas {S, R} mudaram de valor, passaram a ser ‘0’ e ‘1’, respectivamente…
• Mas, se o impulso curto não for “tão curto assim”, ‘B’ ainda continuará permanecendo ‘1’…
• Com o que a latch se manterá enabled:
• Um certo tempo tpLH depois, ‘ Q ’, e por conseguinte também ‘S’, advêm ‘1’;
• E um certo tempo tpHL depois, ‘Q’, e por conseguinte também ‘R’, advêm ‘0’;
• Quer dizer: as entradas {S, R} mudaram outra vez de valor, passaram a ser ‘1’ e ‘0’, respectivamente…
• Ou seja: foi reposta a situação imediatamente a seguir ao premir do botão – e a continuação adivinha-se: uma
oscilação {apagada → acesa → apagada → acesa → apagada …} da lâmpada, que acabará quando terminar o
impulso curto detonado pelo premir do botão, mas de que não se sabe como acabará: se acesa, se apagada…
É claro que o problema ficaria resolvido se, quando acontecesse o enable da latch, fosse permitida uma única
alteração no estado da latch – e é precisamente a este assunto que serão dedicadas as próximas páginas.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 101 of 119
Flip-flops / Flip-flop SR Master-slave
Como garantir que, quando ocorrer o enable da latch, haja uma única alteração no seu estado? Revendo a
evolução temporal do logigrama proposto para o 15aº Projecto, é claro o seu calcanhar de Aquiles: reside no facto
de as entradas {S, R} dependerem do Estado da própria latch – mudando quando este muda –, e portanto
habilitando a que, quando advém activa a entrada enable, o seu estado sofra duas (ou mais) mudanças. No sentido
de o evitar, a solução será deixar que o estado da latch mude somente depois de a entrada enable ficar inactiva!
Uma primeira estratégia para o conseguir é a assim denominada estrutura master-slave: em vez de usar uma
única latch SR, recorre-se a duas latches em série, ditas de mestre e escravo, vidé ao lado – e de tal modo
interligadas a uma entrada clock externa que as respectivas entradas enable ‘C’ ficam activas em momentos
diferentes (quando uma delas, seja ‘Cmaster’, está activa, a outra, ‘Cslave’, estará inactiva, e vice-versa).
A lógica subjacente é a seguinte: suponha-se que, em dado momento, estando estáveis as entradas externas {S,
R}, e portanto estáveis as entradas {S, R} da latch mestre, advém activa a entrada clock. Em consequência disso, a
entrada enable ‘Cmaster’ fica activa – e o estado dessa latch pode mudar (isso dependendo, é claro, dos valores
aplicados em {S, R}). Por outras palavras: a sua saída, seja ‘Qmaster’, pode advir diferente – o que equivale a dizer
que as entradas {S, R} da latch escravo podem ficar diferentes. Porém, essa latch está então impedida de mudar de
estado – pois que a respectiva entrada enable ‘Cslave’ se encontra inactiva (é a consequência do inversor entre a
entrada clock e ‘Cslave’); por outras palavras, a sua saída, ‘Qslave’, mantém-se imperturbável…
Algum tempo mais tarde, a entrada clock advém inactiva – por conseguinte inactivando a entrada enable
‘Cmaster’, porém activando a entrada enable ‘Cslave’; com isso, o valor na saída ‘Qmaster’ propaga-se para a latch
escravo, isto é: se Qmaster=0, irá ficar Q=Qslave=0, e, se Qmaster=1, ficará Q=Qslave=1.
Visto globalmente: quando advém activa a entrada clock, regista-se temporariamente na latch mestre o valor
com que deve ficar a saída terminal ‘Q’ – mas somente depois de aquela ficar inactiva é que esse valor é
propagado para a latch escravo – e apresentado na saída ‘Q’ da estrutura.
Consequência disso é que a saída visível ‘Q’ da estrutura muda no flanco dos impulsos recebidos na entrada
clock – e que neste caso é dito descendente (falling) ou negativo porque corresponde à transição ‘1’→‘0’ nessa
entrada; se se quisera que ‘Q’ mudasse no flanco ascendente (rising) ou positivo, isto é, na transição ‘0’→‘1’ na
entrada clock, bastaria alterar adequadamente a localização do inversor… A um tijolo básico com esta propriedade
dá-se o nome de flip-flop – e, neste caso, trata-se de um flip-flop SR; e, ao flanco dos impulsos de relógio em que
muda a saída visível ‘Q’ da estrutura dá-se o nome de flanco de comutação (ou activo) do relógio.
Não é demais comparar as saídas visíveis de latches e flip-flops: a de uma latch reage enquanto a entrada
enable estiver activa, já a de um flip-flop reage só quando o valor na entrada clock muda – ou, no calão aplicável,
no flanco (descendente ou ascendente) do relógio.
Ao lado, apresenta-se o símbolo IEC do flip-flop SR master-slave. As duas entradas {S, R} são activas a High
– e, como expectável, os seus rótulos são prefixados por ‘1’, e ‘C’ é sufixado por ‘1’. A saída, ‘Q’, é dada sob as
formas normal e complementar – e sinalizadas com ‘┐’, símbolo de atraso que assinala que mudam no flanco
descendente de ‘C’.
A título de completude do 15aº Projecto, ao lado apresenta-se o circuito de controlo da lâmpada – todavia
usando agora um flip-flop SR master-slave reagindo no flanco descendente.
O Diagrama Temporal reflecte a alteração feita, de substituir a latch por um flip-flop: quando ‘B’ emite um
impulso curto…
• Pressuponha-se que a lâmpada está inicialmente apagada;
• No instante em que é premido o botão – e ele emite um impulso curto –, o estado da latch mestre altera-se,
mas o estado da latch escravo mantém-se impávido – portanto continuando a lâmpada apagada;
• Quando esse impulso se esvanece, o estado da latch escravo altera-se – com o que a lâmpada se acende –, mas
o estado da latch mestre mantém-se impávido;
• A continuação intui-se…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 103 of 119
Flip-flops / Flip-flop JK Master-slave
Sendo arriscado activar em simultâneo ambas as entradas de uma latch SR, uma solução para o evitar é garantir
que, a cada momento, elas sejam complementares uma da outra – e foi esse o raciocínio que conduziu à latch D.
Resultado de uma filosofia diferente é o assim designado flip-flop JK (concebido por Jack Kilby): tem um
mapa de Karnaugh em tudo semelhante ao de uma latch (ou flip-flop) SR – com a diferença de que, sim, se podem
activar em simultâneo ambas as entradas {J, K}, a consequência sendo o flip-flop mudar de estado, vidé ao lado.
Com isso, o flip-flop JK apresenta, ademais dos modos de funcionamento de uma latch SR, um outro dito de
Toggles: o estado do flip-flop JK muda quando ambas as entradas são ‘1’.
Quanto ao correspondente Diagrama de Estados, ele vem a ser muito parecido com o da latch SR – a diferença
sendo que, agora, há uma outra maneira de, a partir do estado Q(t)=0, se ingressar no estado Q(t+1)=1, e vice-versa.
Como materializar um flip-flop assim? – eis a pergunta que agora se impõe. A resposta da lei do menor esforço
será natural: partir daquilo que já se sabe fazer, um flip-flop SR, e construir uma malha combinatória a aplicar nas
entradas {S, R}, de modo que o conjunto funcione como um flip-flop JK, vidé ao lado.
Por noutras palavras: é já conhecida a equação característica dum flip-flop SR; quanto à equação de um flip-
flop JK, não custa deduzi-la do mapa de Karnaugh ao lado. O desafio é claro: que é que se deve aplicar nas
entradas {S, R}, para que a equação característica do conjunto seja a do flip-flop JK? É natural que o leitor olhe
para as equações e exclame: “É canja: basta fazer QJS e R=K!”. Porém, esta resposta está errada: se o estado
inicial fosse Q=0, e ‘J’ e ‘K’ fossem, ambos, ‘1’, sucederia {S=1 e R=1} – o que, já se repetiu, é arriscado!
O método correcto de encontrar a resposta é fazer o seguinte, vidé ao lado:
● Porquanto se pretende exprimir {S, R} em função de {J, K} e ‘Q’, há que elaborar os mapas de Karnaugh de
{S, R}, em que à esquerda se dispõem três colunas para, precisamente, {Q(t), J e K};
● Após o que, como expectável, se preenchem as três colunas com todas as (8) combinações dessas entradas;
● A etapa seguinte é usar a equação característica do flip-flop JK, ou talvez mais fácil ainda, o seu Diagrama
de Estados, para preencher uma coluna, ‘Q(t+1)’; por exemplo, nas primeiras duas linhas trata-se de discernir qual o
estado seguinte, ‘Q(t+1)’, quando o actual é Q(t)=0 e as entradas são J=0 e K=X (versão condensada de K=0 ou
K=1}; o Diagrama mostra que ele é Q(t)=0 – e é esse valor, ‘0’, que se inscreve na coluna ‘Q(t+1)’;
● Enfim, linha a linha, preenchem-se as colunas {S, R}, recorrendo à Tabela de Excitação do flip-flop SR; por
exemplo, nas primeiras duas linhas verifica-se que Q(t)=0 e Q(t+1)=0 – o que remete para a seguinte pergunta: como
excitar as entradas {S, R}, para que aconteça essa “transição” de estados (‘0’→‘0’)? A resposta da Tabela de
Excitação é {S=0, R=X} – e são estes valores {0, X} que se inscrevem nas colunas {S, R}, respectivamente;
● A última etapa é, é claro, lograr as expressões algébricas simplificadas de {S, R} e desenhar o logigrama…
Convém fixar esta metodologia: os cinco passos pautando o desenho de um flip-flop JK a partir de um flip-
flop SR são, como se verá na Parte III deste itinerário, aqueles que se repetidamente se usarão para a síntese de
circuitos Sequenciais (síncronos).
Ao lado, apresentam-se símbolos IEC do flip-flop JK master-slave. Em ambos, as entradas {J, K} são activas a
High – e, como expectável, os seus rótulos são prefixados por ‘1’, e ‘C’ é sufixado por ‘1’. A saída, ‘Q’, é dada
sob as formas normal e complementar – e sinalizadas com ‘┐’, significando que mudam no flanco de ‘C’ –
descendente ou ascendente, consoante se trata do símbolo da esquerda ou da direita.
Uma última nota: terá o leitor verificado que, na precedente sessão, se abordaram as latches SR e D – mas não
se mencionou qualquer latch JK… A razão tem a ver com o modo Toggle, como se pode constatar no Diagrama
Temporal ao lado, em que se pressupôs uma latch JK – isto é, que reage enquanto a entrada enable estiver activa,
que não apenas num seu flanco.
Inicialmente, o estado é Q=0 – após o que as entradas {J, K} assumem diferentes valores:
• Quando {J=0, K=0}, o estado não se altera, quando a entrada enable advém activa, continua Q=0;
• Quando {J=1, K=0}, o estado torna-se Q=1, quando a entrada enable advém activa, e aí continua;
• Quando {J=0, K=1}, o estado fica sendo Q=0, quando a entrada enable advém activa, e aí continua;
• Quando {J=1, K=1}, o estado muda para Q=1 (toggles) quando a entrada enable advém activa; mas,
continuando ela activa, volta a mudar (toggles), agora para Q=0, e depois para Q=1, etc… Há um toggle contínuo,
razão para não se poder usar um tijolo JK que não seja master-slave (ou edge-triggered, como adiante se verá).
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 105 of 119
Flip-flops / 15bº Projecto
Esta sessão começou, recorde-se, tendo em vista sintetizar um circuito para controlar o acender e apagar de
uma lâmpada a partir dos impulsos gerados por um botão de pressão – tendo-se chegado ao logigrama ao lado.
Admita-se, agora, que chegava às mãos do leitor um logigrama assim – e lhe pediam para o analisar…
As etapas para tal são conhecidas: determinar as expressões das entradas {S, R} – e aplicá-las na equação
característica do flip-flop SR – chegando a uma expressão para o estado seguinte em função do estado actual…
O traçado do Diagrama temporal reflecte-o: sempre que findar o impulso gerado por ‘B’ – e portanto houver um
flanco descendente na entrada de relógio –, o estado do circuito muda: de ‘0’ para ‘1’ ou de ‘1’ para ‘0’…
A pergunta resume-se agora ao seguinte: o que é “isto”, este é o Diagrama temporal de quê? A resposta mais
imediata será: “isto” é um Divisor de Frequência (por 2)! E, retorquir-se-á: mas que é isso, de Divisor de
Frequência? Para o apreender, um bom exemplo será um relógio de segundos, minutos e horas:
Admita que ele dispõe de três ponteiros “alimentados” por impulsos {Is, Im, Ih}: muito simplificadamente, cada
um deles avança um tick quando finda o impulso que lhe diz respeito. Pressuponha, ainda, que ele se suporta sobre
um circuito electrónico gerando um impulso ‘Is’ por segundo. Sempre que um impulso ‘Is’ finda, o ponteiro dos
segundos avança 1 tick; quando tiverem sido gerados 60 impulsos ‘Is’, produz-se o impulso ‘Im’ – e o ponteiro dos
minutos avança 1 tick; quando tiverem sido gerados 60 impulsos ‘Im’, produz-se o impulso ‘Ih’ – e o ponteiro das
horas avança 1 tick… Circuitos assim (que, por N impulsos recebidos, produzem 1 impulso), dizem-se Divisores
de Frequência (por N) – do que se depreende que um relógio será um encadeado de Divisores de Frequência.
Isto dito, será compreensível a resposta acima: “isto” é um Divisor de Frequência (por 2)! Com efeito, o
Diagrama testemunha que, após recebidos 4 impulsos (ou, equivalentemente, após 4 flancos descendentes) em ’B’,
foram produzidos 2 impulsos (e 2 flancos descendentes) em ‘L’ – o que se volve numa proporção 2:1.
Os impulsos na saída ‘L’ do circuito têm uma duração não tão curta como os recebidos em ‘B’ – mas, se se
quiser que eles adquiram uma duração similar, bastará acrescentar um AND, vidé ao lado.
E tendo apreendido que um relógio será um encadeado de Divisores de Frequência, intui-se como lograr um
Divisor de Frequência por 4: bastarão dois Divisores de Frequência por 2, designem-se eles de {Q1 e Q0},
dispostos em série – de tal modo que a entrada de relógio do primeiro, ‘Q0’, seja directamente alimentada por ‘B’,
e a entrada de relógio do segundo, ‘Q1’, seja alimentada pela saída, ‘Q0’, do primeiro.
Assim fazendo, acontecerá o seguinte: por cada par de flancos descendentes em ‘B’, ocorrerá um flanco
descendente em ‘Q0’ – e por cada par de flancos descendentes em ‘Q0’, ocorrerá um flanco descendente em ‘Q1’;
no conjunto, portanto, por cada quatro flancos descendentes em ‘B’, ocorrerá um flanco descendente em ‘Z’.
O AND que produz a saída ‘Z’ destina-se, é claro, a lograr impulsos com uma duração similar aos de ‘B’.
Como já aconteceu na sessão anterior (em que se analisou um circuito com uma latch D e uma latch SR), este
último circuito, com dois flip-flops SR, vem a apresentar quatro estados; designando de {Q1 e Q0} os estados
individuais dos flip-flops, portanto atribuindo um peso menor a ‘Q0’, eles vêm a memorizar ciclicamente os
códigos binários dos símbolos da base ‘4’. Por tal motivo, ele designa-se contador cíclico ascendente de módulo 4.
No caso, e em virtude do modo como os flip-flops reagem, trata-se dum contador assíncrono. Para apreender o
significado deste adjectivo, reparem-se nos momentos {t1, t2, t3 e t4} assinalados no Diagrama Temporal:
– admita-se que, inicialmente, os estados dos flip-flops são {Q1=0 e Q0=0}, ou, mais compactamente, ‘00’;
– no instante ‘t1’, ocorre um flanco descendente em ‘B’, pelo que o flip-flop ‘Q0’ muda de estado – com o que o
circuito passa ao estado ‘01’;
– no instante ‘t2’, ocorre novo flanco descendente em ‘B’, pelo que o flip-flop ‘Q0’ muda outra vez de estado –
passando o circuito ao estado ‘00’; mas isso significa um flanco descendente em ‘Q0’, pelo que o flip-flop ‘Q1’
vem também ele a mudar de estado – com o que o circuito passa enfim ao estado ‘10’. Assincronismo significa
precisamente este fenómeno de os flip-flops não reagirem em simultâneo: ‘Q1’ muda só depois de ‘Q0’ mudar.
O circuito transita então, de facto, pelos estados ‘00’ → ‘01’ → ‘00’ → ‘10’… e não como a sequência ao lado
levaria a entender… Claro é que o intervalo de tempo em que o circuito permanece no estado intermédio ‘00’ entre
‘01’ e ‘10’ é assaz curto, cerca do tempo de propagação do flip-flop SR (e um fenómeno análogo ocorre na
transição dos estados ‘11’ para ‘00’, em ‘t4’). Há aplicações para as quais esse intervalo de tempo é desprezável –
mas outras há para as quais não o é, pelo que oportunamente se terão de abordar contadores síncronos…
Deixa-se ao leitor o desenho dum logigrama dum contador assíncrono cíclico ascendente de módulo 8: o tempo
sendo escasso, convirá dedicá-lo a contadores cujo módulo não seja potência de 2 – e é o que se fará já de seguida.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 107 of 119
Flip-flops / 15cº Projecto
Pressupondo que já não haverá dúvidas quanto à construção de um contador cujo módulo seja potência-de-2,
suponha-se então que se pretende um contador cíclico de módulo ’3’ – isto é, que a sequência de contagem envolva
apenas três números, concretamente {0, 1, 2}, ou, em binário: {‘00’, ‘01’, ‘10’}…
Um projectista deduziu, e bem, que, para suportar três estados diferentes, um só flip-flop seria insuficiente –
tendo então proposto um circuito com dois flip-flops, interligados conforme ao logigrama ao lado; na prática,
resolveu partir do logigrama dum contador de módulo-4, e fazer-lhe alguns ajustes; a lógica do “artista” foi esta:
• A saída, ‘Z’, do circuito deve volver-se num impulso cujo flanco descendente deverá acontecer quando,
estando o circuito no estado ‘10’, ocorra o flanco descendente em ‘B’; ora, isso consegue-se detectando essa
situação – o que remete para um implicante primo: concretamente um AND com as pertinentes entradas…
• Sem quaisquer alterações (no logigrama do contador de módulo-4), o flip-flop ‘Q0’ estaria oscilando, ao ritmo
dos impulsos em ‘B’, entre os estados ‘0’ e ‘1’; o que agora se requer é que, quando ocorrer o flanco descendente
em ‘Z’, ‘Q0’ permaneça no estado ‘0’ (em vez de ingressar no estado ‘1’); ora, do Diagrama de Estados dum flip-
flop SR, basta, para tal, que, quando ocorrer esse flanco descendente, se esteja forçando S0=0 – ou seja: enquanto
Z=0, a entrada ‘S0’ deverá comportar-se como no contador de módulo-4 – mas, quando Z=1, ela deve ser forçada a
tomar o valor ‘0’; isso remete para um OR com as pertinentes entradas, e com saída activa a Low…
• Sem quaisquer alterações (no logigrama do contador de módulo-4), o flip-flop ‘Q1’ estaria oscilando, ao ritmo
dos impulsos em ‘Q0’, entre os estados ‘0’ e ‘1’; o que agora se requer é que, quando ocorrer o flanco descendente
em ‘Z’, ‘Q1’ transite para o estado ‘0’ (em vez de continuar no estado ‘1’); ora, do Diagrama de Estados, basta,
para tal, que, quando ocorrer esse flanco descendente, se esteja forçando S1=0 e R1=1; ora, se as entradas {S1 e R1}
estiverem interligadas como no contador de módulo-4, isso fica automaticamente garantido; só resta providenciar
para que, então, a respectiva entrada de relógio esteja enabled; globalmente, esta deve, pois, funcionar assim:
enquanto Z=0, ela deverá comportar-se como no contador de módulo-4 – mas, quando Z=1, ela deve ser forçada a
tomar o valor ‘1’ – para que, aquando do flanco descendente em ‘Z’, também nela ocorra um flanco descendente…
Será que o logigrama estará correcto – que resulta mesmo num contador cíclico de módulo ’3’? A resposta é:
não, está errado! Para o compreender, convirá olhar mais em pormenor a sucessão de eventos em torno do instante
em que ocorre o flanco descendente em ‘B’ quando o circuito se encontra no estado ‘10’…
Ao lado, o Diagrama Temporal da esquerda apresenta uma evolução dos estados de um contador de módulo ’3’.
Todavia, veja-se mais de perto o que ocorre após o circuito proposto ingressar no estado ‘10’:
• Algum tempo depois, seja no instante ‘t3’, ocorre um impulso em ‘B’, isto é: ‘B’ advém ‘1’…
ficando então activas as entradas do AND que produz ‘Z’ – que, após um tempo ‘tpLH’, advém então ‘1’;
• Com isso, a saída do OR muda: após um tempo ‘tpHL’ a saída ‘S0’ fica ‘0’, e, ‘tpLH’ depois, ‘Clk1’ advém ‘1’;
Dirá o artista que é mesmo isso que se quer: quando findar o impulso em ‘B’, em‘t4’, ‘Q0’ tomará o valor ‘0’ e,
após um tempo ‘tpHL’, ‘Z’ retornará a ‘0’ – com o que ‘Clk1’ retornará também a ‘0’, e ‘Q1’ tomará o valor ‘0’…
Mas, de facto, e em virtude do modo como o flip-flop R master-slave funciona, as coisas não se passarão assim:
‘Clk0’ está interligada a ‘B’ – pelo que, quando este, em ‘t3’, advir ‘1’, o mestre irá reagir… Ora, então, verifica-se
{S0=1 e R0=0} – com o que o mestre ingressará no estado QMaster=1. Dirá o artista que, algum tempo tpHL + tpLH
depois, ‘S0’ tomará o valor ‘0’… Todavia, e o logigrama da latch SR mostra-o claramente, isso não mudará o
estado QMaster: com R=0, e desde que ‘Q’ se volva ‘1’, não mais deixará de o ser! A este fenómeno dá-se o nome
de 1’s catching (pois será o suporte natural para concretizar um circuito que detecte se numa linha ocorreu algum
‘1’).… Quando, então, em ‘t4’, ocorrer o flanco descendente em ‘B’, o escravo adquirirá o estado do mestre, isto é,
‘Q0’ volver-se-á em ‘1’ – e, não, em ‘0’, como se esperaria de um contador de módulo-3…
Como resolver este problema? Note-se que ele acontece porque, enquanto o mestre está enabled, as suas
entradas não permanecem constantes: ‘S0’, antes de tomar o valor ‘0’, chegou a ser ‘1’; bem vistas as coisas, o
problema ficaria solucionado se o mestre ficasse enabled somente depois de ‘S0’ tomar o valor ‘1’ – ou, visto de
outra maneira: “um tudo nada” antes de ficar disabled! A um flip-flop que reage assim – isto é, o seu estado
seguinte depende das entradas tais como estão no instante preciso em que ocorre o flanco de comutação do
relógio – dá-se o nome de flip-flop edge-triggered. No caso, e para o lograr, bastaria, e em vez de interligar
directamente a linha ‘B’ a ‘Clk0’, interpor um circuito que encurtasse drasticamente o intervalo de tempo em que o
mestre ficasse enabled – mas convém passar em revista outras estratégias…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 109 of 119
Flip-flops / Flip-flops edge-triggered
O logigrama proposto para o 15cº Projecto exibe o que não se deve considerar excepção: a oscilação, entre ‘0’ e
‘1’, das entradas dos flip-flops, antes do flanco de comutação. Em virtude das suas consequências, convirá, então:
– ou, se se usar um flip-flop master-slave, garantir que as entradas não mudam enquanto o clock estiver High;
– ou conceber um outro tipo de flip-flops – de tal modo que o estado seguinte dependa só dos valores que estão
aplicados às suas entradas no preciso instante em que ocorre o flanco de comutação. Flip-flops assim são ditos de
edge-triggered. Como serão eles por dentro? Eis três das estratégias seguidas para os lograr:
Uma primeira estratégia, aplicável a, por exemplo, uma latch D enabled, foi já sugerida: consiste em detectar
o instante em que ocorre o flanco de comutação – e, nesse momento, gerar um impulso muito breve (para a activar)
Ao lado, está esquematizada a estrutura global de um flip-flop dotado de um circuito cumprindo esse objectivo:
pressupondo que do gerador de impulsos de relógio, estão chegando impulsos, o assim denominado detector de
flancos “transforma-os” em impulsos bem mais breves – e são eles que são aplicados na entrada enable da latch.
Como será esse detector “lá por dentro”? Ao lado, apresentam-se dois esquemas possíveis, para equipar flip-
flops reagindo aos flancos, respectivamente ascendente e descendente do relógio.
À esquerda, usam-se três (ou mais) inversores em série para atrasar muito ligeiramente os sinais recebidos em
‘Clk’; designando de ‘Clkd’ a saída do último, o AND entre ‘Clk’ e ‘Clkd’ resulta numa sucessão de impulsos
extremamente breves, gerados precisamente aquando do flanco ascendente dos impulsos de relógio originais.
Isto compreendido, não deverá ser necessário gastar tempo com o esquema ao lado à direita…
(Abra-se um parêntesis: esta estratégia é pouco fiável porque, consideradas as tolerâncias nos tempos de atraso
dos inversores, não é possível garantir uma duração mínima para o impulso gerado)
Ao lado, apresentam-se símbolos IEC de flip-flops D edge-triggered. A entrada ‘D’ é activa a High – e, como
expectável, o seu rótulo é prefixado por ‘1’, e ‘C’ é sufixado por ‘1’. ‘C’ é sinalizada com ‘>’, que assinala que o
flip-flop é edge-triggered; se for o caso de ele reagir ao flanco descendente de ‘C’, há que o assinalar, mediante o
indicador de polaridade. A saída, ‘Q’, é dada sob as formas normal e complementar. (Os símbolos IEC de flip-
flops SR ou JK edge-triggered são análogos, a diferença sendo que as entradas são rotuladas {S, R} ou {J, K})
Uma segunda estratégia, que se volve no flip-flop D master-slave, baseia-se no facto de a latch D não sofrer
do fenómeno 1’s catching: usa, como mestre, uma latch D (e não SR), vidé ao lado. Com efeito, enquanto Clk=1,
‘Qmaster’ acompanha pari passu o valor na entrada ‘D’, ignorando transitórios que nela tenham eventualmente
ocorrido – com o que, quando ‘Clk’ advém ‘0’, o que o escravo fica memorizando é o “último” valor de ‘D’.
Uma terceira estratégia é usar estruturas não master-slave que vieram entretanto a ser concebidas.
Ao lado, apresenta-se um exemplo assim: um flip-flop D edge-triggered positivo constituído por três latches
{Latch0, Latch1, Latch2} sabiamente interligadas. Não custará entender o seu funcionamento:
– quando Clk=0, ambas as saídas ‘Q0’ e ‘Q1’ ficam sendo ‘1’; com isso, a saída ‘Q’0’ da Latch0 advém igual a
‘ D ’, e, consequentemente, a saída ‘Q’1’ da Latch1 advém igual a ‘ D ’. Repare-se que a circunstância Q0=Q1=1
conduz a que as saídas da Latch2 permanecem inalteradas durante todo o intervalo de tempo em que Clk=0;
– poderão, eventualmente, ocorrer oscilações na entrada ‘D’ – que elas se irão repercutir pari passu nas saídas
{Q’0, Q
’1} – com o que estas ficarão reflectindo o valor nessa entrada quando ela enfim estabilizar;
– quando Clk=1, a saída ‘Q1’ advém igual a ‘ D ’; e, consequentemente, a saída ‘Q0’ toma o valor’ D ’;
– poder-se-ia suspeitar que eventuais alterações em ‘Q0’ e ‘Q1’ se volveriam em alterações nas saídas {Q0’, Q1
’}
das latches da esquerda (em virtude dos feedback assinalados) – mas tal não sucede: o leitor poderá conferir por si
que elas permanecem exactamente como estavam antes do flanco ascendente do relógio, Q’0= D e Q
’1= D ;
– isso tem uma consequência directa: a entrada 1R não muda; em consequência, ‘Q1’ não sofre mais alterações
– e por isso mesmo também ‘Q0’ não as sofre: presumindo que ‘Clk’ advém ‘1’ somente após ‘D’ estabilizar, ‘Q0’ e
‘Q1’ transitaram, de um golpe só, sem quaisquer oscilações de permeio, para os valores “finais”!
– globalmente, constata-se que, de uma situação (Clk=0) em que Q0=Q1=1, e portanto as entradas da Latch2
são iguais, se evoluiu para uma situação (Clk=1) em que são complementares uma da outra; por outras palavras: só
uma delas se alterou, sem ter havido quaisquer transitórios… O resultado é que o estado imediato do flip-flop após
o ‘Clk’ ter passado a ser ‘1’ vem a ser Q2= D : trata-se mesmo de um flip-flop D edge-triggered positivo.
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 111 of 119
Flip-flops / Flip-flop T
Além dos flip-flops SR, D e JK, o mercado oferece um outro, dito de flip-flop T – que pode conceptualmente ser
entendido como o resultado da interligação de ambas as entradas de um flip-flop JK, vidé ao lado.
O respectivo Diagrama de Estados encontra-se ao lado; exibe dois modos de funcionamento:
● Quando T=0 – modo de funcionamento dito de “Hold” –, o estado mantém-se tal como era: se, antes, era
Q(t)=0, depois continua sendo Q(t+1)=0 – e se, antes, era Q(t)=1, depois continua sendo Q(t+1)=1;
● Quando T=1 – modo de funcionamento dito de “Toggles” –, o estado muda (de ‘0’ para ‘1’ ou vice-versa)…
Vidé ao lado o símbolo IEC de um flip-flop T edge-triggered reagindo ao flanco descendente de ‘C’. A entrada
‘T’ é activa a High – e, como expectável, o seu rótulo é prefixado por ‘1’, e ‘C’ é sufixado por ‘1’. A entrada ‘C’ é
sinalizada com ‘>’ e com o indicador de polaridade. A saída, ‘Q’, é dada sob as formas normal e complementar.
Um flip-flop T é especialmente vocacionado para materializar Divisores de Frequência (ou Contadores). Em
particular, o Divisor de Frequência por 2, com o Diagrama Temporal figurado ao lado, foi já apresentado como
motivo para o logigrama anexo, envolvendo um flip-flop SR; as ligações que nele constam destinam-se, como se
viu, a garantir que, por cada flanco de comutação do relógio, o estado do flip-flop muda. Ora, esta é precisamente a
característica do modo de funcionamento Toggles – o que sugere que, recorrendo a um flip-flop T, há uma maneira
mais simples de o fazer: forçando ‘1’ na sua entrada ‘T’, vidé ao lado.
E se, pela apropriada conexão em série de dois flip-flops SR, se consegue lograr um Divisor de Frequência por
4, assim fica mais fácil fazê-lo mediante dois flip-flops T: designando-os de {Q1 e Q0}, bastará dispô-los em série
– de tal modo que a entrada de relógio do primeiro, ‘Q0’, seja directamente alimentada por ‘B’, e a entrada de
relógio do segundo, ‘Q1’, seja alimentada pela saída, ‘Q0’, do primeiro.
O circuito logrado, que apresenta quatro estados, pode também ser designado de contador cíclico ascendente
de módulo 4 – assíncrono, porquanto os flip-flops não reagem em simultâneo: ‘Q1’ muda só depois de ‘Q0’ mudar:
a saída ‘Q0’ muda após ter decorrido um tempo de propagação tpLH ou tpHL depois do flanco descendente de ‘B’ –
e a saída ‘Q1’ muda somente depois de ter decorrido um tempo de propagação tpLH ou tpHL após o flanco
descendente de ‘Q0’.
É hora, porém, de anunciar que é possível constituir uma versão síncrona para esse contador – isto é, em que
os flip-flops (e porque as suas entradas de relógio se encontram ambas ligadas a ‘B’) reajam “ao mesmo tempo”:
bastará discernir os modos de funcionamento a imprimir aos dois flip-flops para conseguir o efeito em vista:
● Relativamente ao flip-flop ‘Q0’, e conferindo pelo Diagrama Temporal que, sempre que houver um flanco
descendente em ‘B’, ele deverá mudar de estado, a conclusão é óbvia: ele deverá funcionar permanentemente no
modo Toggles – o que conduz a fixar ‘1’ na entrada ‘T’ desse flip-flop;
● Já quanto ao flip-flop ‘Q1’, o Diagrama Temporal mostra que, para ele mudar de estado, não basta que haja
um flanco descendente em ‘B’: só o fará se o estado de ‘Q0’ nesse instante for ‘1’; por outras palavras: se, aquando
desse flanco em ‘B’, Q0=0, ele deverá funcionar no modo Hold (isto é: dever-se-á aplicar-lhe T=0), mas se for
Q0=1, ele deverá funcionar no modo Toggles (isto é: dever-se-á aplicar-lhe T=1); a conclusão é clara: ‘T’ segue
pari passu a saída de ‘Q0’, pelo que se deverá ligar, à entrada ‘T’ do flip-flop ‘Q1’, a saída de ‘Q0’.
As entradas de relógio dos flip-flops estarão ambas ligadas a ‘B’ – com o que, quando ocorrer o flanco
descendente em ‘B’, ambos irão reagir “ao mesmo tempo”; nomeadamente, no segundo flanco descendente
assinalado, ‘Q0’ irá transitar de ‘1’ para ‘0’, e ‘Q1’ irá transitar de ‘0’ para ‘1’: parecerão estar a funcionar em
simultâneo, em que a menção “parecerão” significa que, sendo impossível garantir que os tempos de propagação
sejam realmente iguais, só idealmente é que os flip-flops reagirão “ao mesmo tempo”.
Quiçá sendo desnecessário mencioná-lo, a alteração sofrida em ‘Q0’ aquando do flanco descendente do sinal de
relógio não terá então quaisquer efeitos em ‘Q1’: pois que os flip-flops são edge-triggered, a evolução de cada um
depende do que estiver aplicado à sua entrada ‘T’ no instante preciso em que ocorre o flanco descendente em ‘C’;
se ‘Q0’ mudar, isso terá efeitos, quando muito, no flanco descendente seguinte do sinal de relógio.
Esta característica torna sumamente pacífico o desenho de circuitos síncronos, isto é: em que todos os flip-flops
são alimentados pelo mesmo sinal de relógio. Mas isso fica para a Parte III deste itinerário…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 113 of 119
Flip-flops / Recapitulando... O Bando dos Quatro
Ao lado, apresenta-se uma sinopse dos quatro tijolos básicos próprios de circuitos sequenciais, a saber: latches
e flip-flops SR e D, e flip-flops JK e T; enquanto tal, ela não traz nada de novo, é um ponto de chegada deste
itinerário – e, ao mesmo tempo, um ponto de partida para o que aí vem…
Para cada um, apresentam-se:
● A Tabela de Verdade/Mapa de Karnaugh da sua saída (que é o estado seguinte ‘Q(t+1)’), em função do estado
actual, ‘Q(t)’, e das entradas específicas de cada latch ou flip-flop…
● A equação característica, que é a expressão algébrica que se deduz do Mapa, exprimindo o estado seguinte
‘Q(t+1)’, como função do estado actual, ‘Q(t)’, e das entradas específicas de cada latch ou flip-flop…
● O Diagrama de Estados, que traduz sob forma gráfica a sua evolução temporal: para que estado seguinte é
que ele transita quando, estando originalmente em algum estado actual {‘0’ ou ‘1’}, lhe são aplicados valores
concretos nas entradas…
● A Tabela de Excitação, que indica quais os valores a aplicar nas entradas para lograr cada uma das quatro
transições possíveis: {‘0’→’0’}, {‘0’→’1’}, {‘1’→’0’} e {‘1’→’1’}…
Estes vários modos de caracterizar uma latch ou flip-flop são, como se referiu já, todos eles, importantes:
– o Mapa de Karnaugh e o Diagrama de Estados, porque a partir de qualquer deles se deduzem os outros;
– a Equação característica, que é a ela que um “espião” recorre para descobrir para que serve um Circuito;
– a Tabela de Excitação, que é a ela que um Projectista recorre para desenhar um Circuito Sequencial.
Todos eles são aplicáveis a latches e flip-flops; consoante a maneira como reagem a uma alteração nalguma
entrada, há a considerar as seguintes variedades:
– Latch não controlada: a saída pode mudar em qualquer momento;
– Latch controlada: a saída pode mudar enquanto a entrada enable estiver activa,
– Flip-flop: a saída pode mudar só quando o valor na entrada clock muda – ou, no calão aplicável, no flanco de
comutação (descendente ou ascendente) do relógio; existem duas variantes de flip-flops:
– Flip-flop master-slave (pulse triggered): a saída depende dos valores que as entradas foram tendo ao
longo de todo o intervalo de tempo em que a entrada clock esteve activa (a seguir ao precedente flanco de
comutação do relógio);
– Flip-flop edge-triggered: a saída depende só dos valores que as entradas têm no instante preciso em que
ocorre o flanco de comutação do relógio.
(A menção “pode mudar” significa genericamente que, para uma combinação particular das entradas, o estado
seguinte pode vir a coincidir com o estado actual – portanto não dando azo a qualquer mudança de estado)
Em termos de aplicações,
– na síntese de circuitos sequenciais general purpose, os mais interessantes serão os flip-flops D e T:
– os flip-flops D estão especialmente vocacionados para concretizar registos (armazéns de informação);
– os flip-flops T estão especialmente vocacionados para concretizar contadores;
– já na síntese de circuitos sequenciais genéricos, quiçá os mais interessantes sejam os flip-flops JK e SR – mas
oportunamente se discutirão métodos de síntese ditos não-clássicos suportados em registos e contadores.
(Abra-se um parêntesis de explicação para advertências “Se sobrar tempo na aula…” neste e noutros slides:
Na sessão inicial, deixou-se subentendido que cada sessão se bastaria numa aula teórica de 1:30; na prática, nas
aulas ministradas pelo autor, o tempo útil acabou por se reduzir a 1:20 – já que os primeiros 10 minutos eram
gastos à espera que os mais de cem alunos viessem de outros pavilhões do campus universitário e se acomodassem.
Isso foi previsto a priori, pelo que a colecção de slides concernindo uma sessão foram desenhados para não
exceder esses 1:20 – mas slides há que foram anotados “Se sobrar tempo na aula…”: se, ao longo da exposição, a
audiência manifestasse dificuldade em acompanhar o assunto em questão, seria preferível gastar tempo em superá-
la, mesmo que isso levasse a “saltar” tais slides – que em rigor não introduzem novidade de maior)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 115 of 119
Flip-flops / Análise de Circuitos com Flip-flops
Já se viu que a Equação característica é o instrumento usado para discernir o comportamento de um circuito
com latches; o mesmo vale para circuitos com flip-flops, como se pode testemunhar com o circuito ao lado.
● O circuito envolve um flip-flop JK e um flip-flop T – cujas entradas de relógio ‘C’ recebem impulsos da
mesma fonte, clk (e que por isso é dito de circuito síncrono); designem-se de ‘Q1’ e ‘Q0’ os respectivos estados.
● O primeiro passo na análise é escrever as expressões algébricas que traduzem o comportamento da saída do
circuito e das entradas dos flip-flops. O segundo passo é substituir as expressões das entradas dos flip-flops nas
respectivas equações características; resultam expressões que exprimem o estado seguinte dos flip-flops – em
função dos seus estados e da entrada ‘X’ no instante em que ocorre o flanco activo (no caso, ascendente) do clock.
● O terceiro passo é converter tais expressões nas Tabelas de Estado/Saída {Q1, Q0, Z} – 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 activo do relógio, os estados dos flip-flops no instante ‘t+1’ seguinte. Veja-se o
caso da primeira linha, em que {Q1=Q0=0}; substituindo estes valores nas expressões entretanto obtidas, obtém-se
Z= X , Q1(t+1)= X, Q0(t+1)=X; isto sugere inscrever ‘10’, ‘01’ e ‘01’ na primeira linha de ‘Z’, ‘Q1’ e ‘Q0’…
● O passo seguinte será aglutinar as duas Tabelas dos estados seguintes {Q1, Q0}, numa só Tabela, dita do
estado seguinte do circuito, ‘Q1Q0(t+1)’; veja-se o caso da primeira linha, em que, conforme X=0 ou X=1, assim
advém {Q1=0, Q0=0} ou {Q1=1, Q0=1}; aglutinar significa preencher a primeira linha da nova Tabela com ‘00’ e
‘11’, respectivamente nas colunas ‘X=0’ e ‘X=1’. Para as restantes linhas, a metodologia é a mesma…
A Tabela obtida pode reescrever-se numa outra em que cada par de bits ‘Q1Q0’ é entendido como o código
binário de um número, e ele é substituído pela representação desse número na base 10; essa Tabela descreve “para
que Estado” evoluem os Estados {‘0’, ‘1’, ‘2’ e ‘3’} 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 número ou
código binário; depois, traçam-se setas rotuladas, descrevendo graficamente a Tabela obtida. Veja-se a primeira
linha, relativa ao estado E=0: quando X=0, a saída é Z=1, e o estado seguinte será E=0; isso volve-se numa seta
dirigida do círculo ‘0’ para ele mesmo – rotulada por X=0/Z=1, ou, como o manda a lei do menor esforço, 0/1…
● Dado o Diagrama de Estados, advém trivial traçar o Diagrama Temporal da evolução do circuito, a partir de
algum estado, seja {Q1=0, Q0=1}, e à medida que ‘X’ varia e os impulsos de relógio se sucedem:
– o estado do circuito pode mudar só aquando do flanco activo do relógio; de facto, ele vem a mudar nos
instantes t2, t4, t5, t8: em t2, ingressa no estado ‘10’ (porquanto o estado é ‘01’ e X=1); em t4, ingressa em ‘11’ (pois
o estado é ‘10’ e X=0); em t5, reingressa em ‘10’; em t8, retorna a ‘11’ (pois o estado é ‘10’ e X=0)...
– já a saída ‘Z’ do circuito pode mudar quando muda ‘X’ ou quando muda o estado do circuito (no caso em
questão, quando ‘Q1’ se altera); com isso, os instantes em que ‘Z’ muda vêm a ser os seguintes: em t1, passa a ‘0’
(pois que, conquanto o estado se mantenha em ‘01’, ‘X’ advém ‘1’); em t2, passa a ‘1’ (pois que, embora ‘X’
continue ‘1’, o estado muda, para ‘10’; em t3, passa a ‘0’ (pois que, conquanto o estado continue em ‘10’, ‘X’
advém ‘0’); em t6, passa a ‘1’ (pois que, conquanto o estado continue em ‘10’, ‘X’ advém ‘1’); em t7, passa a ‘0’
(pois que, conquanto o estado continue em ‘10’, ‘X’ advém ‘0’).
Ao lado, detalham-se os eventos após ‘t1’: ‘X’ advém ‘1’ – com o que as entradas {K, J, T} se volvem ‘1’; com
isso, é expectável que os flip-flops venham a mudar de estado – faltando só que ocorra o flanco activo do relógio, o
que sucederá em ‘t2’; isso provoca alterações nas entradas {K, J, T}, porém sem que elas se repercutam nos
estados dos flip-flops! Em ‘t3’, ‘X’ advém ‘0’ – com o que as entradas {J, T} mudam de valor; é expectável que o
flip-flop ‘Q0’ mude de estado – bastando que ocorra o flanco activo seguinte, o que virá a suceder em ‘t4’…
Em ambos os casos, são patentes as duas fases a que o uso dos flip-flops obriga: antes de mais, aplicam-se-lhes,
nas respectivas entradas, os valores a que eles deverão reagir – e só depois se força o flanco activo do relógio…
Ora, os fabricantes de circuitos integrados explicitam valores temporais que há que ter em conta no desenho de
circuitos: para que os flip-flops funcionem como se quer,
● as entradas {S, R, J, K, T, D} dos flip–flops têm que estar estáveis ao menos TSetUp (abreviadamente, Tsu)
segundos antes do flanco activo do relógio; a esse tempo TSetUp, dá-se o nome de Tempo de preparação;
● e essas mesmas entradas têm que continuar estabilizadas até pelo menos THold (abreviadamente, Th) segundos
depois desse flanco; a esse tempo THold, dá-se o nome de Tempo de manutenção.
Se isso não for garantido para algum flip-flop, o fornecedor não se responsabiliza pelo que irá suceder: o flip-
flop pode entrar num assim designado estado meta-estável – cujo futuro é uma incógnita…
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 117 of 119
Flip-flops / Frequência Máxima do Relógio (clock)
Considere-se o logigrama ao lado. A entrada ‘C’ é dita de relógio/clock porquanto a sequência de bits ‘0’→’1’
→‘0’→’1’…, que nela ocorre é, em muitas aplicações, periódica – este adjectivo significando que o intervalo de
tempo entre dois flancos de comutação consecutivos é constante. A esse intervalo dá-se o nome de período do
relógio, ‘T’. O seu inverso, 1/T, denomina-se de frequência de relógio – e em termos práticos indica quantos
impulsos de relógio se sucedem em cada unidade de tempo. Uma questão importante é: qual o menor período do
relógio, ‘T’, possível? – e, por consequência, qual o maior valor que pode ter a frequência de relógio, 1/T?
Para responder a esta questão, convirá observar detalhadamente o desenrolar dos acontecimentos desde que
ocorre um flanco de comutação do relógio até acontecer o flanco de comutação seguinte…
Quiçá a topologia conferida ao logigrama ao lado seja a mais apropriada para acompanhar esse historial: à
esquerda, encontram-se os flip-flops… e à sua direita encontra-se uma malha combinatória, com duas funções:
– por um lado, produzir a saída do circuito, ‘Z’;
– por outro lado, produzir os novos valores a aplicar nas entradas {J, K e T} dos flip-flops – e que são
responsáveis pelas mudanças dos estados a acontecer no próximo flanco de comutação do relógio…
Suponha-se, então, que, em dado momento, ocorre um flanco de comutação do relógio…
– e admita-se que, então, as entradas dos flip-flops são tais que as respectivas saídas {Q1 e/ou Q0} irão mesmo
mudar; ora, isso não será instantâneo: para que as saídas adquiram os seus novos valores, será preciso aguardar um
certo tempo de propagação, tpLH ou tpHL – contado a partir do momento em que ocorre o flanco de comutação;
– mas a alteração dessas saídas significa que poderão mudar as saídas da malha combinatória – em particular,
poderão mudar as que produzem os novos valores a aplicar às entradas dos flip-flops; de novo, isso não será
instantâneo: para que as entradas dos flip-flops adquiram os seus novos valores, haverá que esperar um certo tempo
de propagação, tpLH ou tpHL – contado a partir do momento em que mudaram as saídas dos flip-flops;
– quando isso enfim acontecer, ainda assim não poderá logo ocorrer o próximo flanco de comutação: será
preciso aguardar um certo tempo de preparação, tsu – contado a partir de quando mudaram as entradas dos flip-
flops –, em que essas entradas têm que permanecer estáveis, para que ocorra o próximo flanco de comutação.
Globalmente, pois, há que deixar decorrer, entre dois flancos de comutação consecutivos, um tempo total – que
será uma soma onde entram o tempo de propagação dos flip-flops, o tempo de propagação da malha combinatória
e o tempo de preparação dos flip-flops (adiante, esta asserção será enunciada com mais exactidão).
Isto significa que, face a um circuito concreto, há que conhecer parâmetros temporais que os pertinentes
catálogos associam aos integrados que referem, e de que se dão ao lado alguns exemplos.
Ora, estes parâmetros são omissos quanto à malha combinatória – em particular a que produz os feedbacks que
alimentam as entradas dos flip-flops: requerem-se operações aritméticas… Há que calcular o tempo de propagação
total associado a cada feedback entre uma das saídas dos flip-flops e uma das respectivas entradas: sucessivamente,
– qual o tempo total associado aos feedbacks entre as saídas {Q1 e Q0} e a entrada ‘T’ do flip-flop-0?
– qual o tempo total associado aos feedbacks entre as saídas {Q1 e Q0} e a entrada ‘J’ do flip-flop-1?
– qual o tempo total associado aos feedbacks entre as saídas {Q1 e Q0} e a entrada ‘K’ do flip-flop-1?
Na prática, cada questão volve-se em discernir, mentalmente, um caminho de feedback – vidé ao lado –, que
será sempre (se existente) aquele que interliga uma saída fonte {Q1 ou Q0} a uma entrada destino {J, K ou T}; e
adicionar os tempos de propagação individuais das gates que fazem parte desse caminho – e, mais ainda, os
tempos de propagação do flip-flop fonte e o tempo de preparação do flip-flop destino…
Considere-se, por exemplo, o tempo total associado ao feedback entre a saída ‘Q0’ e a entrada ‘T’ do flip-flop-0.
Ele vem a ser a soma do tempo de propagação do flip-flop T, dos tempos de propagação do AND e do OR, e do
tempo de preparação do flip-flop T – que resulta 90 ns (nano-segundos). O que isto significa é que, entre dois
flancos de comutação consecutivos do relógio, tem que mediar pelo menos 90 ns…
Procedendo similarmente para calcular os tempos totais associados a todos os feedbacks entre saídas e entradas
dos flip-flops, chega-se a uma lista de valores: 90, 100, 80 e 65 ns… Daqui, conclui-se que, entre dois flancos de
comutação consecutivos do relógio, tem que mediar pelo menos um período mínimo T=100 ns: ele é o valor que
cobre todos aqueles que a lista apresenta – e que, não por acaso, é o tempo total associado ao feedback mais lento.
A maior frequência de relógio a que o circuito poderá operar será, então, 1/(100 10-9
)=107 ciclos/seg=10 MHz
(Constata-se que se ignorou tHold, o intervalo de tempo em que as entradas dos flip-flops têm de permanecer
estáveis após o flanco de comutação: o tempo de propagação dos flip-flops, tpLH ou tpHL, já o excede… pelo que o
único cuidado a garantir é que a entrada externa ‘X’ continue estável ao menos tHold após o flanco de comutação)
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 119 of 119
Flip-flops / Culinária: como fazer Flip-flops com Flip-flops?
Com esta sessão dedicada a flip-flops, finda a abordagem aos tijolos básicos próprios a circuitos sequenciais, e
finda também a Parte II deste itinerário. A parte III será toda ela dedicada ao desenho (ou, sob uma outra
designação comum, síntese) de circuitos sequenciais; entretanto, e a modos de preliminares, não será desperdício
de tempo dedicar algum tempo à síntese de um tipo simples de circuitos sequenciais: os próprios flip-flops…
Em si, isso já foi feito: recorde-se o desenho da Latch D a partir da Latch SR, ou o do flip-flop T a partir de um
flip-flop JK, ou, com uma ênfase especial, o desenho do flip-flop JK a partir do flip-flop SR (ambos master-slave) –
ao longo de 5 passos… Na altura, ele foi explicitamente sublinhado como o método geral para a síntese de
Circuitos Sequenciais (síncronos) – mas haverá casos simples, em que ele é dispensável, bastarão equações
características, vidé adiante…
O desafio é passar em revista os vários flip-flops considerados {SR, D, JK e T}, cujas equações características
se recordam ao lado, e concretizá-los a partir de qualquer um dos outros. Nomeadamente:
– eis o primeiro problema: como concretizar um flip-flop D a partir de um flip-flop JK – ou, por outras palavras,
e supondo que se dispõe de um flip-flop JK, que é que se deve ligar às suas entradas para obter um flip-flop D?
Confrontando as respectivas equações características, esta pergunta é equivalente a: que é que se deve ligar às
entradas {J e K} para que a expressão do estado seguinte, ‘Q(t+1)’ se transforme na de um flip-flop D, Q(t+1)=D? A
resposta – sob a forma de expressões de {J e K} em termos de ‘D’ – encontra-se ao lado, tal como o subsequente
logigrama;
– o problema inverso será o seguinte: como concretizar um flip-flop JK a partir de um flip-flop D – ou, por
outras palavras, que é que se deve ligar à entrada ‘D’ para que a expressão do estado seguinte, ‘Q(t+1)’ se transforme
na de um flip-flop JK? A resposta – sob a forma de expressões de ‘D’ em termos de {J e K} (e de ‘Q’) – encontra-
se ao lado, tal como o subsequente logigrama;
– um problema semelhante será: como concretizar um flip-flop T a partir de um flip-flop JK – ou, por outras
palavras, que é que se deve ligar às entradas {J e K} para que a expressão do estado seguinte, ‘Q(t+1)’ se transforme
na de um flip-flop T? A resposta – sob a forma de expressões de às entradas {J e K} em termos de 'T’ – encontra-se
ao lado, tal como o subsequente logigrama;
– eis outros problemas similares, cujas respostas se deixam ao leitor:
– como concretizar um flip-flop SR ou T a partir de um flip-flop D ?
– como concretizar um flip-flop SR ou D ou JK a partir de um flip-flop T ?
– como concretizar um flip-flop T a partir de um flip-flop SR ?