Altifigence Academy

2 / 24 · Conceito

Larguras, extensão de sinal e overflow

Use exemplos numéricos para distinguir interpretação, extensão e redução da largura.

Separe um padrão de bits de seu significado

O padrão de oito bits 1111_1101 representa 253 sem sinal ou -3 com sinal em complemento de dois. Os bits armazenados são idênticos, mas as comparações e extensões diferem. Um valor de oito bits com sinal varia de -128 a 127; um valor sem sinal varia de 0 a 255. A largura escolhe a quantidade de padrões representáveis, enquanto o uso de sinal escolhe sua interpretação numérica.

Faça extensão com zeros de 253 sem sinal ao movê-lo para dezesseis bits. Faça extensão de sinal de -3 repetindo seu bit mais significativo original, produzindo 1111_1111_1111_1101. A extensão com zeros transformaria -3 em 253. Em SystemVerilog, estabeleça explicitamente os tipos e as larguras dos operandos antes de calcular; não suponha que uma concatenação ou seleção parcial preserve a interpretação com sinal pretendida.

SystemVerilog
logic [7:0] ua, ub;
logic [8:0] usum;
logic signed [7:0] sa, sb;
logic signed [8:0] sax, sbx, ssum;
assign usum = {1'b0, ua} + {1'b0, ub};
assign sax = {sa[7], sa};
assign sbx = {sb[7], sb};
assign ssum = sax + sbx;

Aqui, ambas as entradas passam a ter nove bits antes da soma. A operação sem sinal 255+1 produz 256 e, depois, zero nos oito bits menos significativos. A operação com sinal 127+1 também produz o valor matemático 128, mas a redução para oito bits com sinal produz -128. Carry indica um limite sem sinal; overflow com sinal indica um limite com sinal. A soma de operandos de mesmo sinal com mudança no sinal do resultado indica overflow com sinal. Somar -1 e 1 pode produzir carry sem overflow com sinal.

Planeje também as larguras intermediárias. O maior produto de oito bits sem sinal é 65025 e exige dezesseis bits. A soma de quatro valores de oito bits sem sinal pode chegar a 1020, exigindo dez bits. Truncar cada soma parcial para oito bits perde informações que um registrador final mais largo não consegue recuperar.

OperaçãoResultado com largura ampliadaInterpretação com largura reduzida
sem sinal 255+12560 com carry
com sinal 127+1128-128 com overflow
com sinal -3+2-1-1 sem overflow

Use os avisos WIDTH do Verilator para investigar mudanças de tamanho não intencionais. As verificações em Node deste curso executam modelos numéricos, não esses trechos de HDL. Teste zero, extremos e sinais mistos antes de considerar exemplos positivos típicos como evidência de correção.

Experimente

Encontre o resultado de estender o sinal dos valores de oito bits -3 e 2 para nove bits e somá-los. Encontre também a largura mínima para a soma exata de quatro valores sem sinal iguais a 255.

Ler a explicação

Os operandos de nove bits são 111111101 e 000000010. Sua soma é 111111111, ou -1. Quatro valores de 255 somam 1020; nove bits sem sinal chegam apenas a 511, portanto são necessários dez bits.

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