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.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Represente uma soma de um bit usando dois bits
A soma de vai de 0 a 3 e precisa do bit de soma e do carry seguinte . A soma vale 1 com uma quantidade ímpar de uns; o carry vale 1 com pelo menos dois.
Definindo geração e propagação , resulta , 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.
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.
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
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 . 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 , , . 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 , dentro do intervalo. Carry e overflow com sinal são condições diferentes.