Menu
Coddy logo textTech

Negative Numbers

Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 16 sur 90.

Dans Verilog, les nombres négatifs sont représentés au format two's complement. two's complement est une méthode permettant de représenter à la fois les nombres positifs et négatifs en binaire. Le bit de poids fort (MSB) indique le signe :

  • 0 = nombre positif
  • 1 = nombre négatif

Comment calculer le Two's complement

Pour trouver le Two's complement d’un nombre :

  1. Écrire le nombre positive en binaire
  2. Inverser tous les bit (0 devient 1, 1 devient 0)
  3. Ajouter 1

Exemple : représenter -5 sur 4 bits

ÉtapeOpérationRésultat
15 positif en binaire0101
2Inverser tous les bits1010
3Ajouter 11011

-5 en complément à deux sur 4 bits est <strong>4'b1011</strong>

Écrire des nombres négatifs en Verilog

Vous pouvez écrire directement des nombres négatifs au format décimal :

reg signed [3:0] a;
a = -5;        // Verilog utilise automatiquement le complément à deux

Pour les nombres binaires de taille définie, vous devez écrire la valeur en complément à deux :

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

Signé contre non signé

Par défaut, Verilog traite les nombres comme unsigned. Pour travailler avec des nombres négatifs, déclarez les signaux comme signed :

reg signed [3:0] negative;   // Peut stocker de -8 à 7
reg [3:0] positive;          // Peut stocker de 0 à 15

Plage des nombres signés

Pour N bits, un nombre signé peut représenter :

  • Minimum : -2^(N-1)
  • Maximum : 2^(N-1) - 1
BitsPlage
4 bits-8 à 7
8 bits-128 à 127
16 bits-32768 à 32767

Notes importantes

  • Utilisez le mot-clé signed pour activer la gestion des nombres négatifs
  • Sans signed, Verilog traite toutes les valeurs comme positives
  • L'arithmétique du complément à two fonctionne automatically lors de l'utilisation de signed
  • Le MSB détermine le signe : 1 = negative, 0 = positive
challenge icon

Défi

Complétez le code en écrivant les valeurs correctes en two's complement.

À faire :

  1. Définissez a sur -3 en utilisant une représentation binaire sur 4 bits en two's complement
  2. Définissez b sur -8 en utilisant une représentation binaire sur 4 bits en two's complement
  3. Définissez c sur -1 en utilisant une représentation binaire sur 4 bits en two's complement

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Verilog en ligne