Instrukcja if
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 52 z 90.
Instrukcja if to blok podejmujący decyzje, który wykonuje kod tylko wtedy, gdy warunek jest prawdziwy. Instrukcja if sprawdza warunek.
Jeśli warunek jest true (1), kod wewnątrz zostaje wykonany. Jeśli warunek jest false (0), kod jest pomijany.
Składnia:
if (condition) begin
// Kod wykonuje się, gdy condition ma wartość true
endProsty przykład
if (reset) begin
count = 0;
endW tym przykładzie:
beginiendsłużą do oznaczenia początku i końca bloku kodu
- Jeśli
resetma wartość 1 (prawda), kod międzybeginaendzostaje wykonany →countprzyjmuje wartość 0 - Jeśli
resetma wartość 0 (fałsz), kod wewnątrz jest pomijany → nic się nie dzieje
begin i end działają jak nawiasy klamrowe { } w innych językach programowania. Grupują instrukcje, dzięki czemu Verilog wie, który kod należy do warunku if. Chociaż jest tu tylko jedna instrukcja, używanie begin i end nadal jest dobrą praktyką, która zapewnia spójność.
Instrukcja if w bloku always
always @(posedge clk) begin
if (reset)
count <= 0;
endUwaga: W przypadku pojedynczej instrukcji begin i end są opcjonalne. Na przykład w powyższym bloku always po if nie trzeba używać begin/end, ponieważ zawiera on tylko jedną instrukcję.
Warunkiem może być dowolne wyrażenie
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endWażne zasady
| Zasada | Wyjaśnienie |
|---|---|
| Warunkiem może być dowolne wyrażenie | Wartości różne od zera (i znane) są traktowane jako prawda, a zero jako fałsz |
Do wielu instrukcji potrzebne są begin / end | Podobnie jak { } w innych językach |
Bez begin/end następuje tylko jedna instrukcja | Tylko następny wiersz |
Wyzwanie
Co zrobić:
- Dodaj brakującą instrukcję
if, aby to działało.
- Gdy
enablema wartość1,outpowinno być równea & b - Gdy
enablema wartość0,outpowinno pozostać równe0(nie zmieniać się)
Kod początkowy inicjuje out = 0 i testuje oba przypadki.
Spróbuj swoich sił
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Przypadek testowy 1: enable = 1
enable = 1;
// TODO: Dodaj instrukcję if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Przypadek testowy 2: enable = 0
enable = 0;
out = 0;
// TODO: out powinno pozostać równe 0
$display("enable=0: out = %d (should be 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