Post on 28-Jan-2019
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 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 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 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 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 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 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 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…“