Menu
Coddy logo textTech

Negative Numbers

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

Em Verilog, números negative são representados usando o formato two's complement. two's complement é uma forma de representar números positive e negative em binário. O bit mais significativo (MSB) indica o sinal:

  • 0 = número positive
  • 1 = número negative

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 se torna 1, 1 se torna 0)
  3. Adicione 1

Exemplo: Representar -5 em 4 bits

EtapaOperaçã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;        // Verilog automaticamente usa complemento de dois

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

a = 4'b1011;   // This is -5 in 4-bit two's complement

Com sinal vs. sem sinal

Por padrão, Verilog trata os números como 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

Observações importantes

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

Desafio

Complete o código escrevendo os valores corretos de two's complement.

O que fazer:

  1. Defina a como -3 usando binário de 4 bits em two's complement
  2. Defina b como -8 usando binário de 4 bits em two's complement
  3. Defina c como -1 usando binário de 4 bits em two's complement

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

Pratique por conta própria: Compilador de Verilog online