Nombres négatifs
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 16 sur 90.
En Verilog, les nombres négatifs sont représentés en utilisant le format du complément à deux. Le complément à deux est une méthode pour représenter à la fois les nombres positifs et négatifs en binaire. Le bit le plus significatif (MSB) indique le signe :
- 0 = nombre positif
- 1 = nombre négatif
Comment calculer le complément à deux
Pour trouver le complément à deux d'un nombre :
- Écrivez le nombre positif en binaire
- Inversez tous les bits (0 devient 1, 1 devient 0)
- Ajoutez 1
Exemple : Représenter -5 sur 4 bits
| Étape | Opération | Résultat |
|---|---|---|
| 1 | 5 positif en binaire | 0101 |
| 2 | Inverser tous les bits | 1010 |
| 3 | Ajouter 1 | 1011 |
-5 en complément à deux sur 4 bits est <strong>4'b1011</strong>
Écrire des nombres négatifs en Verilog
Vous pouvez écrire des nombres négatifs directement en utilisant le format décimal :
reg signed [3:0] a;
a = -5; // Verilog utilise automatiquement le complément à deuxPour les nombres binaires dimensionnés, vous devez écrire la valeur en complément à deux :
a = 4'b1011; // Ceci est -5 en complément à deux sur 4 bitsSigné vs Non-signé
Par défaut, Verilog traite les nombres comme non-signés. 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 à 15Plage des nombres signés
Pour N bits, un nombre signé peut représenter :
- Minimum : -2^(N-1)
- Maximum : 2^(N-1) - 1
| Bits | Plage |
|---|---|
| 4 bits | -8 à 7 |
| 8 bits | -128 à 127 |
| 16 bits | -32768 à 32767 |
Notes importantes
- Utilisez le mot-clé
signedpour activer la gestion des nombres négatifs - Sans
signed, Verilog traite toutes les valeurs comme positives
- L'arithmétique en complément à deux fonctionne automatiquement lors de l'utilisation de
signed - Le MSB détermine le signe : 1 = négatif, 0 = positif
Défi
Complétez le code en écrivant les bonnes valeurs en complément à deux.
Ce qu'il faut faire :
- Définissez
aà -3 en utilisant le binaire en complément à deux sur 4 bits - Définissez
bà -8 en utilisant le binaire en complément à deux sur 4 bits - Définissez
cà -1 en utilisant le binaire en complément à deux sur 4 bits
Aide-mémoire
En Verilog, les nombres négatifs utilisent le format du complément à deux. Le bit de poids fort (MSB) indique le signe : 0 = positif, 1 = négatif.
Calcul du complément à deux :
- Écrire le nombre positif en binaire
- Inverser tous les bits
- Ajouter 1
Exemple : -5 sur 4 bits → 0101 → 1010 → 1011 = 4'b1011
Déclarez les signaux comme signed pour gérer les nombres négatifs :
reg signed [3:0] negative; // Peut stocker de -8 à 7
reg [3:0] positive; // Peut stocker de 0 à 15Attribuez des valeurs négatives directement ou via le binaire en complément à deux :
reg signed [3:0] a;
a = -5; // Verilog utilise automatiquement le complément à deux
a = 4'b1011; // Équivalent : -5 en complément à deux sur 4 bitsPlage pour un type signé de N bits : -2^(N-1) à 2^(N-1) - 1 (par exemple, 4 bits : -8 à 7).
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
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états