Professor: Gabriel Soares Baptista
Hoje avançamos de soma e subtração para a multiplicação binária.
O circuito parece mais complexo à primeira vista, mas nasce da combinação de blocos que você já conhece:
Um multiplicador digital é uma rede de portas AND que gera produtos parciais e de somadores que combinam essas linhas.
Na aula anterior, cada coluna resolvia uma soma ou subtração local e repassava carry ou borrow.
Agora a ideia cresce em outra direção:
Multiplicadores maiores são construídos de forma hierárquica, reutilizando blocos menores.
Duas identidades fundamentais para a multiplicação digital:
$$ A \cdot 0 = 0 $$
Se uma entrada de uma AND vale $0$, a saída obrigatoriamente vale $0$.
$$ A \cdot 1 = A $$
Se uma entrada de uma AND vale $1$, a saída copia a outra entrada.
Suponha que $A$ seja um bit do multiplicando e o outro sinal seja um bit do multiplicador:
É por isso que a geração de produtos parciais é feita com portas AND.
$$ A(B + C) = AB + AC $$
Um mesmo sinal pode influenciar dois caminhos ao mesmo tempo.
O inverso também vale:
$$ AB + AC = A(B + C) $$
Isso aparece quando reorganizamos a lógica de controle ou fatoramos expressões.
$$ A + 0 = A $$
Somar logicamente com $0$ não altera a informação.
$$ A + A = A $$
Repetir o mesmo termo em uma OR não cria um novo comportamento.
Isso evita duplicação desnecessária de portas.
Multiplicar no papel gera linhas parciais que depois são somadas.
Em binário, cada dígito só pode ser $0$ ou $1$, o que simplifica a leitura.
Considere $101_2 \times 11_2$:
$$ \begin{array}{r} \phantom{+}101 \\ \times\ 011 \\ \hline \phantom{+}101 \\ +1010 \\ \hline \phantom{+}1111 \end{array} $$
Confirmação em decimal:
$$ 5 \times 3 = 15 $$
A estrutura importa mais que o resultado: a multiplicação apareceu como soma de linhas simples.
Se o multiplicando for $A$ e o multiplicador for $B$, cada bit $B_j$ gera uma linha parcial:
$$ p_{ij} = A_i \cdot B_j $$
Cada bit do multiplicador funciona como um seletor que decide se uma cópia do multiplicando entra na soma final.
$$ p_{ij} = A_i \cdot B_j $$
$$ \begin{array}{c|c||c} A_i & B_j & p_{ij} \\ \hline 0 & 0 & 0 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \\ 1 & 1 & 1 \end{array} $$
Essa é exatamente a tabela de uma AND. Nenhuma porta especial é necessária.
O que torna um multiplicador maior é a necessidade de somar muitos produtos nas colunas corretas.
Sejam:
$$ A = A_1A_0 \qquad \text{e} \qquad B = B_1B_0 $$
O produto terá até 4 bits:
$$ P = P_3P_2P_1P_0 $$
Os quatro produtos parciais elementares são:
$$ \begin{aligned} p_{00} &= A_0B_0 \\ p_{10} &= A_1B_0 \\ p_{01} &= A_0B_1 \\ p_{11} &= A_1B_1 \end{aligned} $$
Cada produto parcial é uma porta AND.
O circuito completo aparece quando colocamos esses produtos nas colunas corretas do resultado.
$$ \begin{array}{c|c|c|c|l} P_3 & P_2 & P_1 & P_0 & \text{linha parcial} \\ \hline 0 & 0 & A_1B_0 & A_0B_0 & \text{multiplicação por } B_0 \\ 0 & A_1B_1 & A_0B_1 & 0 & \text{multiplicação por } B_1 \text{, deslocada} \end{array} $$
A coluna intermediária precisa somar dois produtos parciais — isso é um Meio Somador.
Coluna 0:
$$ P_0 = A_0B_0 $$
Coluna 1 (Meio Somador):
$$ \begin{aligned} P_1 &= (A_1B_0) \oplus (A_0B_1) \\ C_1 &= (A_1B_0)(A_0B_1) \end{aligned} $$
Coluna 2 e 3 (soma de $A_1B_1$ com $C_1$):
$$ \begin{aligned} P_2 &= (A_1B_1) \oplus C_1 \\ P_3 &= (A_1B_1) \cdot C_1 \end{aligned} $$
A lógica repete o princípio da aula 12:
$$ \begin{aligned} P_0 &= A_0B_0 \\ P_1 &= (A_1B_0) \oplus (A_0B_1) \\ P_2 &= (A_1B_1) \oplus C_1 \\ P_3 &= (A_1B_1)C_1 \end{aligned} $$
com
$$ C_1 = (A_1B_0)(A_0B_1) $$
Quatro portas AND geram os produtos parciais, e duas pequenas somas combinam as colunas internas.
O multiplicador $2 \times 2$ é a primeira célula de uma técnica que cresce por hierarquia.
Em vez de desenhar todas as portas AND de um multiplicador grande, montamos multiplicadores maiores a partir de:
Essa ideia é uma aplicação direta da distributiva.
Operandos de 4 bits:
$$ A = A_3A_2A_1A_0 \qquad \text{e} \qquad B = B_3B_2B_1B_0 $$
Separamos cada um em dois blocos de 2 bits:
$$ A = A_H \cdot 2^2 + A_L \qquad \text{e} \qquad B = B_H \cdot 2^2 + B_L $$
onde:
$$ A_H = A_3A_2, \quad A_L = A_1A_0 \qquad B_H = B_3B_2, \quad B_L = B_1B_0 $$
$$ \begin{aligned} A \cdot B &= (A_H \cdot 2^2 + A_L)(B_H \cdot 2^2 + B_L) \\ &= A_LB_L + (A_HB_L \ll 2) + (A_LB_H \ll 2) + (A_HB_H \ll 4) \end{aligned} $$
O símbolo $\ll 2$ significa deslocar 2 posições para a esquerda (multiplicar por $2^2$).
$$ \begin{array}{c|c|c} \text{produto} & \text{deslocamento} & \text{papel no resultado} \\ \hline A_LB_L & \ll 0 & \text{parte menos significativa} \\ A_HB_L & \ll 2 & \text{contribuição cruzada} \\ A_LB_H & \ll 2 & \text{contribuição cruzada} \\ A_HB_H & \ll 4 & \text{parte mais significativa} \end{array} $$
Etapas da construção:
multiplicador_2x2 geram $P_{LL}, P_{HL}, P_{LH}, P_{HH}$$$ \begin{array}{c|c|c} \text{produto parcial} & \text{operação no Logisim} & \text{valor alinhado} \\ \hline P_{LL} & \text{sem shifter} & P_{LL} \\ P_{HL} & \text{shifter com constante } 2 & P_{HL} \ll 2 \\ P_{LH} & \text{shifter com constante } 2 & P_{LH} \ll 2 \\ P_{HH} & \text{shifter com constante } 4 & P_{HH} \ll 4 \end{array} $$
$$ \begin{aligned} S_1 &= P_{LL} + (P_{HL} \ll 2) \\ S_2 &= S_1 + (P_{LH} \ll 2) \\ P &= S_2 + (P_{HH} \ll 4) \end{aligned} $$
Resultado final em barramento de 8 bits:
$$ P = P_7P_6P_5P_4P_3P_2P_1P_0 $$
Não criamos uma técnica nova para 4 bits. Apenas reutilizamos o multiplicador $2 \times 2$ quatro vezes.
Operandos de 8 bits:
$$ A = A_7A_6A_5A_4A_3A_2A_1A_0 \qquad \text{e} \qquad B = B_7B_6B_5B_4B_3B_2B_1B_0 $$
Separamos em dois blocos de 4 bits:
$$ A = A_H \cdot 2^4 + A_L \qquad \text{e} \qquad B = B_H \cdot 2^4 + B_L $$
onde:
$$ A_H = A_7A_6A_5A_4, \quad A_L = A_3A_2A_1A_0 \qquad B_H = B_7B_6B_5B_4, \quad B_L = B_3B_2B_1B_0 $$
$$ \begin{aligned} A \cdot B &= (A_H \cdot 2^4 + A_L)(B_H \cdot 2^4 + B_L) \\ &= A_LB_L + (A_HB_L \ll 4) + (A_LB_H \ll 4) + (A_HB_H \ll 8) \end{aligned} $$
$$ \begin{array}{c|c|c} \text{produto} & \text{deslocamento} & \text{papel no resultado} \\ \hline A_LB_L & \ll 0 & \text{parte menos significativa} \\ A_HB_L & \ll 4 & \text{contribuição cruzada} \\ A_LB_H & \ll 4 & \text{contribuição cruzada} \\ A_HB_H & \ll 8 & \text{parte mais significativa} \end{array} $$
A montagem repete o mesmo modelo do $4 \times 4$:
$$ \begin{array}{c|c|c} \text{produto parcial} & \text{operação no Logisim} & \text{valor alinhado} \\ \hline P_{LL} & \text{sem shifter} & P_{LL} \\ P_{HL} & \text{shifter com constante } 4 & P_{HL} \ll 4 \\ P_{LH} & \text{shifter com constante } 4 & P_{LH} \ll 4 \\ P_{HH} & \text{shifter com constante } 8 & P_{HH} \ll 8 \end{array} $$
$$ \begin{aligned} S_1 &= P_{LL} + (P_{HL} \ll 4) \\ S_2 &= S_1 + (P_{LH} \ll 4) \\ P &= S_2 + (P_{HH} \ll 8) \end{aligned} $$
Resultado final em barramento de 16 bits:
$$ P = P_{15}P_{14}\ldots P_1P_0 $$
A estrutura é a mesma do $4 \times 4$: splitters, quatro blocos menores, extensores, deslocadores e somadores.
Nesta aula vimos como a multiplicação binária pode ser construída com produtos parciais, deslocamentos e somadores.
A divisão binária exige uma lógica de decisão: comparar valores, escolher entre manter ou subtrair, e encadear restos parciais.
Por isso, vamos deixar a divisão para depois de estudar blocos de seleção e comparação.
No próximo capítulo, Módulos MSI Combinacionais: Decodificadores, Encoders, Mux e Demux (Cap. 9), vamos estudar blocos funcionais prontos para uso em sistemas maiores.