Circuitos combinatórios
Módulos, multiplexadores, descodificadores, desmultiplexadores e o somador ripple-carry.
Portas isoladas não chegam longe. O passo seguinte é encapsular grupos de portas em módulos com uma função clara e combinar módulos e portas para construir circuitos maiores. Um módulo pode repetir-se: um circuito iterativo é constituído por repetições de um mesmo módulo, e os barramentos (feixes de fios desenhados como um só traço) simplificam os diagramas.
Multiplexador
O multiplexador (MUX) seleciona uma de várias entradas de dados e copia-a para a saída. Um MUX tem duas entradas de dados e , uma entrada de seleção e uma saída :
Quando , sai ; quando , sai . Um MUX tem entradas de controlo e existem multiplexadores , e por aí fora. Há um resultado que deves reter: todas as expressões lógicas se podem implementar com multiplexadores , bastando ligar as entradas de dados a constantes ou a variáveis e usar as variáveis como seleção.
Descodificador binário
O descodificador binário faz o trabalho inverso: transforma um código com poucos bits em sinais individuais. Um descodificador tem entradas e saídas, e ativa exatamente a saída cujo índice corresponde ao código de entrada. Um descodificador com entrada 10 ativa a saída e desativa as restantes.
O descodificador tem ainda uma entrada de habilitação (enable, EN): com EN desativada, nenhuma saída ativa. Um facto útil: um descodificador binário seguido de uma porta OR permite realizar todas as funções de variáveis, porque cada saída é um mintermo e a OR soma os mintermos pretendidos.
Desmultiplexador
O desmultiplexador (DEMUX) tem uma entrada de dados, entradas de controlo e saídas. A entrada é copiada para a saída selecionada; as restantes ficam a zero. Podes vê-lo como um descodificador binário com uma entrada adicional de dados: em vez de ativar a saída selecionada com valor fixo, copia para ela o valor da entrada.
O somador ripple-carry
O full adder (FA) soma três bits, dois operandos e um transporte de entrada, e produz a soma e o transporte de saída. Encadeando um FA por cada posição, com o transporte a passar de um módulo para o seguinte, obtém-se o somador ripple-carry, que soma duas palavras de bits. É o exemplo canónico de circuito iterativo.
Soma () com () com um somador de 4 bits, seguindo o transporte da direita para a esquerda:
Posição: 3 2 1 0
A: 1 0 1 1
B: 0 1 1 1
Transporte: 1 1 1 0 1 (entra 0 na posição 0)
Soma: 0 0 1 0
Posição 0: , escreve 0 e transporta 1. Posição 1: , escreve 1 e transporta 1. Posição 2: , escreve 0 e transporta 1. Posição 3: , escreve 0 e transporta 1. O resultado é 0010 com transporte final 1, ou seja, . Confirma: .
O nome conta a fraqueza: o transporte propaga-se (ripple) posição a posição, por isso somar palavras largas demora. Somadores rápidos calculam os transportes em paralelo, mas pagam com mais portas.
Experimenta: soma
1100() com1010() pelo mesmo método e confirma que obténs `10110_2 = 22$.