If-else
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 53 z 90.
Instrukcja if-else pozwala wybrać między dwiema różnymi czynnościami w zależności od warunku. Jeśli warunek jest prawdziwy, wykonuje się jeden blok. Jeśli jest fałszywy, wykonuje się drugi blok.
Instrukcja if-else daje twojemu kodowi możliwość podjęcia decyzji: wykonaj jedną rzecz, jeśli warunek jest prawdziwy, a inną, jeśli warunek jest fałszywy.
Składnia:
if (condition) begin
// Wykonuje się, gdy condition ma wartość true (1)
end else begin
// Wykonuje się, gdy condition ma wartość false (0)
endProsty przykład
if (reset) begin
count = 0;
end else begin
count = count + 1;
end- Jeśli
resetma wartość 1 →countzmienia się na 0 - Jeśli
resetma wartość 0 →countzwiększa się o 1
Wiele instrukcji
Użyj begin i end, gdy masz więcej niż jedną instrukcję:
if (enable) begin
out = data_in;
valid = 1;
end else begin
out = 0;
valid = 0;
endIf-Else z wieloma warunkami
Możesz łączyć instrukcje if-else:
if (a > b) begin
max = a;
end else if (b > a) begin
max = b;
end else begin
max = a; // a i b są równe
endWażne zasady
| Zasada | Wyjaśnienie |
|---|---|
else jest opcjonalne | Możesz użyć if bez else |
else należy do najbliższego if | Zachowaj ostrożność przy zagnieżdżaniu |
Użyj begin/end dla wielu instrukcji | Wymagane przy więcej niż jednej linii |
Wyzwanie
Co zrobić:
- Dodaj brakującą instrukcję
if-else, aby to zadziałało. - Gdy
enablema wartość 1,outpowinno być równea & b. - Gdy
enablema wartość 0,outpowinno być równea | b.
Spróbuj swoich sił
module ifelse_challenge;
reg a, b, enable;
reg out;
initial begin
a = 1;
b = 0;
enable = 1;
// TODO: Dodaj instrukcję if-else
// Jeśli enable wynosi 1: out = a & b
// W przeciwnym razie: out = a | b
$display("out = %d (should be 0 because 1&0=0)", out);
$finish;
end
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online