If Statement
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 52 sur 90.
L’instruction if est un bloc de prise de décision qui exécute le code uniquement lorsqu’une condition est vraie. L’instruction if vérifie une condition.
Si la condition est true (1), le code à l’intérieur executes. Si la condition est false (0), le code est ignoré.
Syntaxe :
if (condition) begin
// Le code s'exécute lorsque condition est true
endExemple simple
if (reset) begin
count = 0;
endDans cet exemple :
beginetendsont utilisés pour marquer le début et la fin du bloc de code
- Si
resetvaut 1 (vrai), le code situé entrebeginetends’exécute →countdevient 0 - Si
resetvaut 0 (faux), le code situé à l’intérieur est ignoré → rien ne se passe
begin et end fonctionnent comme des accolades { } dans d’autres langages de programmation. Ils regroupent des instructions afin que Verilog sache quel code appartient à la condition if. Même s’il n’y a qu’une seule instruction ici, utiliser begin et end reste une bonne pratique pour assurer la cohérence.
Instruction if dans un bloc always
always @(posedge clk) begin
if (reset)
count <= 0;
endRemarque : Pour une seule instruction, begin et end sont facultatifs. Par exemple, dans le bloc always ci-dessus, aucun begin/end n’est nécessaire après if parce qu’il ne contient qu’une seule instruction.
La condition peut être n’importe quelle expression
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endRègles importantes
| Règle | Explication |
|---|---|
| condition peut être n’importe quelle expression | Les valeurs non nulles (et connues) sont traitées comme vraies, zéro comme faux |
begin / end nécessaires pour plusieurs instructions | Comme { } dans d’autres langages |
Sans begin/end, une seule instruction est exécutée | Uniquement la ligne suivante |
Défi
Que faire :
- Add l’instruction
ifmanquante pour faire fonctionner cela.
- When
enablevaut1,outshould être égal àa & b - When
enablevaut0,outshould rester à0(ne pas changer)
Le code de départ initialise out = 0 et teste les deux cas.
Essayez vous-même
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Cas de test 1 : enable = 1
enable = 1;
// TODO: Ajouter une instruction if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Cas de test 2 : enable = 0
enable = 0;
out = 0;
// TODO: out devrait rester 0
$display("enable=0: out = %d (should be 0)", out);
$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 VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicEntraînez-vous par vous-même : Compilateur Verilog en ligne