Altifigence Academy

2 / 20 · Conceito

Produtos com sinal e largura do acumulador

Derive a largura do acumulador a partir da faixa dos operandos no pior caso.

Inclua a entrada mais negativa

Uma entrada de W bits em complemento de dois varia de −2^(W−1) a 2^(W−1)−1. O maior produto positivo ocorre quando ambas as entradas têm o valor mais negativo. Para W=8, (−128)×(−128)=16384, que excede 127×127=16129. Um produto completo com sinal de duas entradas de W bits é representado com segurança em 2W bits.

Para uma redução contendo K termos, este curso escolhe a regra conservadora abaixo. K deve ser positivo; a regra pressupõe larguras iguais dos operandos e nenhum viés adicional.

Wacc=2W+⌈log⁡2K⌉W_{acc}=2W+\lceil\log_2 K\rceil

A regra é um limite simples e seguro, não uma afirmação de largura mínima para todo K. Com W=8 e K=4, escolha dezoito bits. Quatro produtos máximos somam 65536. Um acumulador com sinal de dezessete bits chega apenas a 65535, portanto falha exatamente nesse limite. Dezoito bits cobrem −131072 a 131071. Quando K=1, nenhum bit adicional de acumulação é acrescentado.

Preserve o sinal explicitamente

Declare sinais intermediários em vez de adivinhar o dimensionamento das expressões. AW deve ser pelo menos PW.

SystemVerilog
localparam int PW = 2*W;
localparam int AW = PW + $clog2(K);
logic signed [W-1:0] a, b;
logic signed [PW-1:0] product;
logic signed [AW-1:0] addend, acc;
assign product = $signed(a) * $signed(b);
assign addend = {{(AW-PW){product[PW-1]}}, product};

Um padrão de oito bits 0xFE representa −2. Multiplicá-lo por três produz −6; ampliar esse produto exige extensão de sinal. A extensão com zeros transforma um número negativo em positivo. Documente o ponto em que um padrão de bits de uma interface sem sinal se torna um valor aritmético com sinal.

A largura depende da redução completa mantida no acumulador. Dividir K em blocos não justifica reduzir a largura de um acumulador parcial se ele puder sofrer overflow antes da combinação. Adicionar um viés ou combinar várias reduções exige uma nova análise de faixa.

Teste mínimo×mínimo, mínimo×máximo, máximo×máximo e sinais alternados. Mantenha tanto a referência com inteiros amplos quanto o resultado da largura escolhida. A acumulação exata dentro da faixa especificada e o comportamento modular ou a saturação fora dela são contratos distintos; tratar todas as diferenças como overflow genérico oculta erros reais de sinal.

Experimente

Para W=4 e K=3, encontre o AW conservador e a soma positiva máxima. Qual bit estende o produto −8×7?

Ler a explicação

PW=8 e ceil(log2 3)=2, portanto AW=10. A soma positiva máxima é 3×64=192. O produto é −56 e deve ser estendido com uns. Dez bits com sinal cobrem −512..511.

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