Opérateur conditionnel
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 28 sur 90.
L'opérateur conditionnel ? : sélectionne entre deux valeurs selon une condition. Il est également appelé opérateur ternaire. L'opérateur conditionnel évalue une condition et retourne l'une des deux valeurs :
condition ? value_if_true : value_if_falseSi la condition est vraie (1), la première valeur est retournée. Si fausse (0), la deuxième valeur est retournée.
Pourquoi utiliser l'opérateur conditionnel
C'est une façon compacte d'écrire une logique simple si-sinon en une seule ligne. Les utilisations courantes incluent :
- La sélection entre deux signaux
- La création de multiplexeurs
- La définition de valeurs par défaut
- Les affectations conditionnelles en ligne
Syntaxe et exemples
Exemple de base :
result = (a > b) ? a : b; // result obtient le plus grand de a et bSelect between values:
data_out = (enable) ? data_in : 8'b00000000; // Output data if enabled, else 0Inverser le signal de manière conditionnelle :
out = (invert) ? ~in : in; // Si invert est 1, sortie inversée ; sinon inchangéeExemple de code
module conditional_demo;
reg [3:0] a, b, max;
reg enable;
reg [3:0] data_in, data_out;
initial begin
a = 4'd7;
b = 4'd9;
enable = 1;
data_in = 4'b1010;
max = (a > b) ? a : b; // 9
data_out = (enable) ? data_in : 4'b0000; // 1010
$display("max = %d", max);
$display("data_out = %b", data_out);
$finish;
end
endmoduleOutput:
max = 9
data_out = 1010Opérateurs conditionnels imbriqués
Vous pouvez imbriquer des opérateurs conditionnels pour effectuer plusieurs sélections :
result = (a > b) ? a : (b > c) ? b : c; // a si a > b, sinon le plus grand de b et cUtilisez des parenthèses pour rendre les conditions imbriquées claires.
Remarques importantes
- La condition doit être un bit unique (ou une expression qui s'évalue à 0 ou 1)
- Conservez la même largeur de bits pour les deux options de valeur — si elles diffèrent, Verilog étend silencieusement la plus étroite
- L'opérateur peut être utilisé dans des assignations continues (
assign) et des blocs procéduraux (always,initial)
Défi
Écrivez les expressions conditionnelles correctes pour chaque tâche.
Ce qu'il faut faire :
- Définissez
maxcomme le plus grand entrexety - Définissez
abscomme la valeur absolue deval(si négative, rendez-la positive) - Définissez
output_dataàdatasienablevaut 1, sinon à8'b0
Essayez vous-même
module conditional_challenge;
reg [3:0] x, y;
reg [3:0] max;
reg signed [3:0] val;
reg [3:0] abs;
reg enable;
reg [7:0] data;
reg [7:0] output_data;
initial begin
x = 4'd12;
y = 4'd8;
val = -4'sd5;
enable = 1;
data = 8'b10101010;
max = ______; // le plus grand de x et y
abs = ______; // valeur absolue de val
output_data = ______; // data si enable, sinon 0
$display("max = %d", max);
$display("abs = %d", abs);
$display("output_data = %b", output_data);
$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