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.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
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.
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ção | Resultado com largura ampliada | Interpretação com largura reduzida |
|---|---|---|
| sem sinal 255+1 | 256 | 0 com carry |
| com sinal 127+1 | 128 | -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.