vitor m. p. vargas / ist sistemas digitais (part ii) page...

119
Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 1 of 119

Upload: trinhngoc

Post on 29-Oct-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 1 of 119

Vitor M. P. Vargas / IST Sistemas Digitais (Part II) Page 2 of 119

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 4 of 119

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 6 of 119

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 8 of 119

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 10 of 119

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 12 of 119

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 14 of 119

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 16 of 119

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 18 of 119

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 20 of 119

.

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 22 of 119

.

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 24 of 119

.

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 26 of 119

.

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 28 of 119

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 30 of 119

.

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 32 of 119

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 34 of 119

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 36 of 119

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 38 of 119

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 40 of 119

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 42 of 119

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 44 of 119

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 46 of 119

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 48 of 119

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 50 of 119

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 52 of 119

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 54 of 119

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 56 of 119

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 58 of 119

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 60 of 119

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 62 of 119

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 64 of 119

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 66 of 119

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 68 of 119

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 70 of 119

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 72 of 119

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 74 of 119

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 76 of 119

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 78 of 119

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 80 of 119

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 82 of 119

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 84 of 119

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 86 of 119

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 88 of 119

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 90 of 119

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 92 of 119

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 94 of 119

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 96 of 119

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 98 of 119

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 100 of 119

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 102 of 119

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 104 of 119

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 106 of 119

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 108 of 119

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 110 of 119

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 112 of 119

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 114 of 119

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 116 of 119

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 118 of 119

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 ?