16
Prof V Vargas, IST Descodificação 26/11/13, Pg 1/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Decoder_all.pdf · guindaste, ele disponibiliza um conjunto de 15 válvulas hidráulicas:

  • Upload
    vodiep

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Prof V Vargas, IST Descodificação 26/11/13, Pg 1/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 2/16

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….

Prof V Vargas, IST Descodificação 26/11/13, Pg 3/16

.

Prof V Vargas, IST Descodificação 26/11/13, Pg 4/16

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!

Prof V Vargas, IST Descodificação 26/11/13, Pg 5/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 6/16

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.

Prof V Vargas, IST Descodificação 26/11/13, Pg 7/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 8/16

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…

Prof V Vargas, IST Descodificação 26/11/13, Pg 9/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 10/16

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…

Prof V Vargas, IST Descodificação 26/11/13, Pg 11/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 12/16

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

Prof V Vargas, IST Descodificação 26/11/13, Pg 13/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 14/16

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…

Prof V Vargas, IST Descodificação 26/11/13, Pg 15/16

Prof V Vargas, IST Descodificação 26/11/13, Pg 16/16

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…“