Altifigence Academy

16 / 63 · Conceito

Somadores e propagação do carry

Derive as equações do somador completo e analise função, largura e atraso do carry em cascata.

Represente uma soma de um bit usando dois bits

A soma de ai,bi,cia_i,b_i,c_i vai de 0 a 3 e precisa do bit de soma sis_i e do carry seguinte ci+1c_{i+1}. A soma vale 1 com uma quantidade ímpar de uns; o carry vale 1 com pelo menos dois.

si=ai⊕bi⊕cis_i=a_i\oplus b_i\oplus c_i
ci+1=aibi+(ai⊕bi)cic_{i+1}=a_ib_i+(a_i\oplus b_i)c_i

Definindo geração gi=aibig_i=a_ib_i e propagação pi=ai⊕bip_i=a_i\oplus b_i, resulta ci+1=gi+picic_{i+1}=g_i+p_ic_i, onde ++ é OR. O meio somador é o caso sem carry de entrada: soma por XOR e carry por AND.

Mude as três entradas e confira sempre a+b+cin = sum+2×cout. O carry alimenta a posição seguinte e não tem o mesmo peso de sum.

Soma de uma posição e carry para a próxima

a + b + cin = sum + 2 × cout

Até onde o carry precisa se propagar

Considere 1111 + 0001 em quatro bits. O bit 0 gera um carry que atravessa as outras três posições. A soma armazenada é 0000 e o carry final, 1. Em um somador ripple-carry, o cálculo superior pode esperar pelo carry das posições inferiores.

c2=g1+p1g0+p1p0c0c_2=g_1+p_1g_0+p_1p_0c_0

Expandir a expressão mostra como calcular carries em paralelo. Somadores rápidos combinam geração e propagação em grupos, com compromissos de área e atraso que incluem fan-in, fiação e biblioteca. O + do RTL não obriga uma implementação ripple-carry específica.

Preserve no projeto a largura da soma

SystemVerilog
logic [3:0] a, b, sum;
logic cin, cout;
logic [4:0] wide_sum;
assign wide_sum = {1'b0, a} + {1'b0, b} + {4'b0000, cin};
assign sum = wide_sum[3:0];
assign cout = wide_sum[4];

Cinco bits bastam para 15+15+1=3115+15+1=31. Decida primeiro se precisa apenas dos bits baixos, se o carry passa à próxima etapa ou se precisa de saturação. O controle didático verifica a tabela-verdadeTabela-verdade Tabela que enumera todas as combinações possíveis de entradas e a saída de cada uma. A evolução temporal é verificada separadamente nas formas de onda. Saiba mais de uma posição do somador completo; não mede o atraso do circuito sintetizado.

Alterar as entradas

Experimente

Em unsigned de 4 bits, calcule soma completa, soma de 4 bits e carry para a=9a=9, b=6b=6, cin=1c_{in}=1. Interpretando o mesmo circuito como signed, carry basta para detectar overflow?

Ler a explicação

A soma completa é 16, 10000: sum=0000 e carry=1. Como signed, 1001 representa -7, portanto −7+6+1=0-7+6+1=0, dentro do intervalo. Carry e overflow com sinal são condições diferentes.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.