Menu
CoddyTech

Números Negativos

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

Em Verilog, os números negativos são representados no 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 se torna 1, 1 se torna 0)
  3. Some 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 é 4'b1011

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 usa automaticamente o complemento de dois

Para números binários de 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, os sinais reg e wire são sem sinal. 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 dos 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 permitir o tratamento de números negativos
  • Sem signed, um reg ou wire 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

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