Menu
Coddy logo textTech

Números Negativos

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 16 de 90.

Em Verilog, números negativos são representados usando o formato de complemento de dois. O complemento de dois é uma forma de representar números positivos e negativos em binário. O bit mais significativo (MSB) indica o sinal:

  • 0 = número positivo
  • 1 = número negativo

Como calcular o complemento de dois

Para encontrar o complemento de dois de um número:

  1. Escreva o número positivo em binário
  2. Inverta todos os bits (0 torna-se 1, 1 torna-se 0)
  3. Adicione 1

Exemplo: Representar -5 em 4 bits

PassoOperaçãoResultado
15 positivo em binário0101
2Inverter todos os bits1010
3Adicionar 11011

-5 em complemento de dois de 4 bits é <strong>4'b1011</strong>

Escrevendo Números Negativos em Verilog

Você pode escrever números negativos diretamente usando o formato decimal:

reg signed [3:0] a;
a = -5;        // O Verilog usa automaticamente o complemento de dois

Para números binários com tamanho definido, você deve escrever o valor em complemento de dois:

a = 4'b1011;   // Isso é -5 em complemento de dois de 4 bits

Sinalizado vs Não Sinalizado

Por padrão, o Verilog trata os números como não sinalizados (unsigned). Para trabalhar com números negativos, declare os sinais como signed:

reg signed [3:0] negative;   // Pode armazenar de -8 a 7
reg [3:0] positive;          // Pode armazenar de 0 a 15

Intervalo de Números com Sinal

Para N bits, um número com sinal pode representar:

  • Mínimo: -2^(N-1)
  • Máximo: 2^(N-1) - 1
BitsIntervalo
4 bits-8 a 7
8 bits-128 a 127
16 bits-32768 a 32767

Notas Importantes

  • Use a palavra-chave signed para habilitar o tratamento de números negativos
  • Sem signed, o Verilog trata todos os valores como positivos
  • A aritmética de complemento de dois funciona automaticamente ao usar signed
  • O MSB determina o sinal: 1 = negativo, 0 = positivo
challenge icon

Desafio

Complete o código escrevendo os valores corretos em complemento de dois.

O que fazer:

  1. Defina a como -3 usando binário em complemento de dois de 4 bits
  2. Defina b como -8 usando binário em complemento de dois de 4 bits
  3. Defina c como -1 usando binário em complemento de dois de 4 bits

Folha de consulta

Em Verilog, números negativos usam o formato de complemento de dois. O MSB indica o sinal: 0 = positivo, 1 = negativo.

Calculando o Complemento de Dois:

  1. Escreva o número positivo em binário
  2. Inverta todos os bits
  3. Some 1

Exemplo: -5 em 4 bits → 010110101011 = 4'b1011

Declare sinais como signed para lidar com números negativos:

reg signed [3:0] negative;   // Pode armazenar de -8 a 7
reg [3:0] positive;          // Pode armazenar de 0 a 15

Atribua valores negativos diretamente ou via binário em complemento de dois:

reg signed [3:0] a;
a = -5;        // O Verilog usa automaticamente o complemento de dois
a = 4'b1011;   // Equivalente: -5 em complemento de dois de 4 bits

Intervalo para signed de N bits: -2^(N-1) a 2^(N-1) - 1 (ex: 4 bits: -8 a 7).

Experimente você mesmo

module negative_challenge;
  reg signed [3:0] a, b, c;
  
  initial begin
    a = 4'b______;   // -3 in 4-bit two's complement
    b = 4'b______;   // -8 in 4-bit two's complement
    c = 4'b______;   // -1 in 4-bit two's complement
    
    $display("a = %d", a);
    $display("b = %d", b);
    $display("c = %d", c);
    $finish;
  end
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos