Nombres avec taille
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 14 sur 90.
Il existe un moyen de déclarer un nombre avec une taille spécifique en Verilog. C'est ce qu'on appelle un nombre dimensionné. C'est utile car cela évite toute confusion sur le nombre de bits de votre nombre et garantit que votre matériel se comporte exactement comme prévu.
Un nombre dimensionné suit ce format : [bits]'[format][value]
<strong>bits</strong>— le nombre de bits (par exemple,8)<strong>'</strong>— une apostrophe qui sépare la taille du format (requis)
<strong>format</strong>— la base du nombre :bpour le binaire,dpour le décimal,hpour l'hexadécimal, ouopour l'octal<strong>value</strong>— le nombre réel (par exemple,1010)
Par exemple :
4'b1010— 4 bits, binaire 1010 (décimal 10)8'd255— 8 bits, décimal 255 (binaire 11111111)16'hFF— 16 bits, hexadécimal FF (binaire 0000000011111111)3'b1— 3 bits, binaire 001 (les bits de gauche sont remplis de zéros)
Exemple de code :
reg [7:0] data;
data = 8'b10101010; // 8 bits, binaire 10101010
data = 8'd170; // 8 bits, décimal 170
data = 8'hAA; // 8 bits, hex AALes trois exemples assignent la même valeur à data.
Pourquoi la taille est importante
Sans taille :
reg [7:0] data;
data = 1; // Qu'est-ce que cela signifie ? 1 bit ? 8 bits ?Verilog suppose par défaut que les petits nombres font 32 bits, ce qui peut causer des problèmes.
Avec taille :
reg [7:0] data;
data = 8'b00000001; // Effacer : valeur 8 bits 1Remplissage par des zéros
Lorsque vous affectez une valeur plus petite à un vecteur plus grand, Verilog remplit les bits de gauche avec des zéros :
reg [7:0] data;
data = 4'b1010; // Devient 8'b00001010Défi
Complétez le code en écrivant les nombres dimensionnés corrects.
Ce qu'il faut faire :
- Définissez
asur un nombre binaire de 8 bits pour le décimal 170 (binaire "10101010") - Définissez
bsur un nombre binaire de 4 bits pour le décimal 12 (binaire "1100") - Définissez
csur un nombre hexadécimal de 16 bits pour le décimal 255 (hex "FF")
Aide-mémoire
Un nombre dimensionné en Verilog suit le format : [bits]'[format][value]
bits— nombre de bits'— séparateur apostrophe requisformat—b(binaire),d(décimal),h(hexadécimal),o(octal)value— le nombre réel
reg [7:0] data;
data = 8'b10101010; // 8 bits, binaire
data = 8'd170; // 8 bits, décimal
data = 8'hAA; // 8 bits, hex (les trois sont égaux)Sans taille, Verilog utilise par défaut 32 bits, ce qui peut provoquer un comportement inattendu. Les bits de gauche sont complétés par des zéros lorsque la valeur est inférieure à la taille déclarée :
reg [7:0] data;
data = 4'b1010; // Devient 8'b00001010Essayez vous-même
module sized_challenge;
reg [7:0] a;
reg [3:0] b;
reg [15:0] c;
initial begin
a = ______; // binaire 8 bits pour 170 (10101010)
b = ______; // binaire 4 bits pour 12 (1100)
c = ______; // hexadécimal 16 bits pour 255 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", 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