Aprenda › Tema 8
Multiplexadores, decodificadores e codificadores explicados
Leitura de 8 min · Equipe bitGateLab
Os blocos combinacionais de média complexidade são as peças com que se monta quase qualquer sistema digital: o multiplexador escolhe um dado entre vários, o demultiplexador encaminha um dado para um destino, o decodificador ativa uma única linha de acordo com um número binário e o codificador faz o contrário. Aqui você vai ver suas equações, suas tabelas-verdade e duas aplicações que aparecem em todas as provas: implementar uma função lógica com um multiplexador e projetar um decodificador para display de 7 segmentos.
O multiplexador (MUX)
Um multiplexador de 2n entradas de dados tem n entradas de seleção e uma saída. O número binário nas linhas de seleção indica qual entrada de dados passa para a saída. O mais simples é o MUX 2 para 1:
Y = S·I0 + S·I1
Com S = 0 a saída copia I0; com S = 1 copia I1. O MUX 4 para 1 usa duas linhas de seleção S1 S0, e cada entrada de dados é multiplicada pelo mintermo de seleção correspondente:
Y = S1·S0·I0 + S1·S0·I1 + S1·S0·I2 + S1·S0·I3
| S1 | S0 | Y |
|---|---|---|
| 0 | 0 | I0 |
| 0 | 1 | I1 |
| 1 | 0 | I2 |
| 1 | 1 | I3 |
Cada termo é uma AND da entrada de dados com as linhas de seleção (diretas ou negadas), e todas se juntam em uma OR.
Implementar uma função com um MUX
Como o MUX já contém todos os mintermos das suas variáveis de seleção, ele serve como "função programável". Com um MUX de 2n entradas você pode realizar qualquer função de n variáveis colocando 0 ou 1 em cada entrada de dados. Melhor ainda: com o mesmo MUX você pode fazer uma função de n + 1 variáveis se conectar a variável restante (ou a sua negação) às entradas de dados.
Exemplo: realize F(A, B, C) = Σm(1, 2, 6, 7) com um MUX 4 para 1, usando A e B como seleção (A = S1, B = S0).
- Agrupe a tabela-verdade em pares com o mesmo valor de A B e veja como F depende de C.
- AB = 00: m0 = 0 (C = 0), m1 = 1 (C = 1). F = C, portanto I0 = C.
- AB = 01: m2 = 1 (C = 0), m3 = 0 (C = 1). F = C, portanto I1 = C.
- AB = 10: m4 = 0, m5 = 0. I2 = 0.
- AB = 11: m6 = 1, m7 = 1. I3 = 1.
Verificação com A = 0, B = 1, C = 0 (mintermo 2): a seleção 01 escolhe I1 = C = 1. Correto, m2 pertence à função.
O demultiplexador e o decodificador
O demultiplexador (DEMUX) 1 para 4 recebe um dado D e o envia a uma de quatro saídas de acordo com S1 S0; as demais ficam em 0: Y0 = D·S1·S0, Y1 = D·S1·S0, Y2 = D·S1·S0, Y3 = D·S1·S0.
Se no DEMUX você fixa D = 1 e chama essa entrada de "habilitação", obtém um decodificador: n entradas e 2n saídas, das quais apenas uma está ativa, a que corresponde ao número de entrada. Um decodificador 3 para 8 gera os 8 mintermos de três variáveis. Por isso qualquer função de três variáveis pode ser montada com um decodificador e uma porta OR que junte as saídas dos seus mintermos.
Exemplo: somador completo com um decodificador 3 para 8. Entradas A, B e Cin.
- Soma S = Σm(1, 2, 4, 7): OR de 4 entradas com as saídas Y1, Y2, Y4, Y7.
- Carry Cout = Σm(3, 5, 6, 7): OR de 4 entradas com Y3, Y5, Y6, Y7.
Confira um caso: A = 1, B = 1, Cin = 0 é o número 110 = 6. Só Y6 é ativada; Y6 não está na OR de S (S = 0), mas está na de Cout (Cout = 1). De fato, 1 + 1 + 0 = 10 em binário.
O codificador de prioridade
O codificador faz a operação inversa: de 2n linhas, ele entrega o número binário de n bits da linha ativa. O problema é o que fazer se duas forem ativadas ao mesmo tempo; a solução prática é o codificador de prioridade, que entrega o número da linha ativa mais alta. Para 4 entradas, de D3 (a de maior prioridade) a D0:
Y1 = D3 + D2, Y0 = D3 + D2·D1, V = D3 + D2 + D1 + D0
A saída V ("válido") indica que há pelo menos uma entrada ativa; sem ela você não conseguiria distinguir "D0 ativa" de "nenhuma ativa", porque as duas dão Y1 Y0 = 00. Teste com D2 = D1 = 1: Y1 = 1 e Y0 = 0 + 0·1 = 0, ou seja, 10 = 2. Ganha D2, como deve ser.
Decodificador BCD para 7 segmentos
Um display de 7 segmentos tem um LED por segmento. O decodificador recebe um dígito BCD (A B C D, com A como bit mais significativo) e acende os segmentos que desenham esse dígito. Para um display de cátodo comum, 1 significa segmento aceso:
| Dígito | ABCD | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|---|
| 0 | 0000 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0001 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0010 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0011 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0100 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0101 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0110 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0111 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1000 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1001 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
Os códigos 1010 a 1111 não são BCD válidos, portanto são tratados como condições irrelevantes (X) no mapa de Karnaugh. Isso simplifica muito cada segmento.
Segmento a: vale 0 somente nos dígitos 1 e 4. No mapa de 4 variáveis, com X em 10 a 15, os maiores grupos são: A (8 células com os X), C (8 células), B·D (mintermos 5, 7, 13, 15) e B·D (os quatro cantos: 0, 2, 8, 10).
a = A + C + B·D + B·D
Confira o 4 (0100): A = 0, C = 0, B·D = 1·0 = 0, B·D = 0·1 = 0. Resultado 0: o segmento a fica apagado, correto.
Se o display for de ânodo comum, cada segmento acende com 0, de modo que todas as saídas são invertidas.
Erros comuns
- Inverter a ordem das linhas de seleção: se S1 e S0 forem trocadas, a entrada I1 troca de lugar com I2 e a função fica errada.
- Esquecer que muitos decodificadores têm saídas ativas em nível baixo e usar uma OR onde vai uma NAND.
- Projetar um codificador sem prioridade e sem saída de válido, que entrega 00 tanto para "D0 ativa" quanto para "nada ativo".
- Misturar a tabela de cátodo comum com um display de ânodo comum: acendem exatamente os segmentos contrários.
- Não aproveitar as combinações 1010 a 1111 como irrelevantes e acabar com equações com o dobro do tamanho.
Experimente no simulador
Compare a tabela-verdade da função com a versão feita com multiplexador.
- Crie uma tabela-verdade de três entradas A, B, C e marque F = 1 nas linhas 1, 2, 6 e 7.
- Coloque no editor um multiplexador de 4 para 1 (ou monte-o com quatro AND, duas NOT e uma OR de quatro entradas) e conecte A e B à seleção.
- Conecte C, a negação de C, um 0 fixo e um 1 fixo às entradas de dados, nessa ordem.
- Mude as entradas percorrendo as oito combinações e observe que a saída coincide com a tabela.
- Repita com o segmento a do display: insira a coluna dele em uma tabela de 4 variáveis, marque as linhas 10 a 15 como X e confira os grupos que o mapa de Karnaugh propõe.
Exercícios
- Realize F(A, B, C) = Σm(0, 3, 5, 6) com um MUX 4 para 1 usando A e B como seleção.
Resposta
AB = 00: m0 = 1, m1 = 0, I0 = C. AB = 01: m2 = 0, m3 = 1, I1 = C. AB = 10: m4 = 0, m5 = 1, I2 = C. AB = 11: m6 = 1, m7 = 0, I3 = C. É a função de paridade par (vale 1 quando há um número par de uns): F = A ⊕ B ⊕ C.
- De quantas linhas de seleção precisa um MUX de 16 entradas e quantas variáveis pode ter, no máximo, a função que ele implementa?
Resposta
4 linhas de seleção (24 = 16). Conectando a variável restante aos dados, ele pode implementar qualquer função de até 5 variáveis.
- Obtenha a equação do segmento e usando as combinações 10 a 15 como irrelevantes.
Resposta
e = 1 em 0, 2, 6 e 8. Grupos: B·D (0, 2, 8, 10) e C·D (2, 6, 10, 14). Resultado: e = B·D + C·D = D·(B + C).
- No codificador de prioridade de 4 entradas, que saída resulta de D3 = 0, D2 = 0, D1 = 1, D0 = 1?
Resposta
Y1 = 0 + 0 = 0, Y0 = 0 + 1·1 = 1, V = 1. Saída 01: D1 ganha de D0.