Przypisanie blokujące
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 49 z 90.
Verilog ma dwa rodzaje przypisań proceduralnych: blokujące (=) i nieblokujące (<=). W tej lekcji skupimy się na przypisaniu blokującym.
Przypisanie blokujące używa operatora =. Nazywa się „blokującym”, ponieważ blokuje wykonanie następnej instrukcji do momentu zakończenia bieżącego przypisania. Kod wykonuje się krok po kroku, po kolei.
Składnia:
variable = expression;Kiedy używać przypisania blokującego
Przypisania blokującego (=) używa się w przypadku logiki kombinacyjnej: obwodów, w których wyjścia zmieniają się natychmiast po zmianie wejść, bez zegara i bez pamięci.
Przykłady logiki kombinacyjnej:
- Bramki AND / OR / XOR
- Sumatory i odejmatory
- Multipleksery
- Dekodery
Przykład w Verilogu:
always @(*) begin
sum = a + b; // Przypisanie blokujące
carry = a & b; // Przypisanie blokujące
endPrzypisania blokujące w blokach always (logika kombinacyjna)
always @(*) begin
temp = a & b; // Krok 1
out = temp | c; // Krok 2 (używa temp z kroku 1)
endKolejność ma znaczenie. W przypadku logiki kombinacyjnej to jest w porządku.
Blokujące a nieblokujące
Blokujące (=) | Nieblokujące (<=) | |
|---|---|---|
| Wykonanie | Jedno po drugim | Wszystkie naraz |
| Czy następna linia czeka? | Tak | Nie |
| Zastosowanie | Logika kombinacyjna | Logika sekwencyjna (przerzutniki) |
Ważne: nie używaj przypisań blokujących dla przerzutników
Wyzwanie
Dodaj brakujące przypisania blokujące, aby zamienić wartości x i y za pomocą zmiennej tymczasowej.
Co należy zrobić:
- Przypisz wartość
xdotemp(zapisz x w temp) - Przypisz wartość
ydox(przenieś y do x) - Przypisz wartość
tempdoy(przenieś zapisane x do y)
Spróbuj swoich sił
module swap;
reg x, y;
reg temp;
initial begin
x = 1;
y = 0;
$display("Before swap: x=%d, y=%d", x, y);
// TODO: Krok 1 - Przypisz wartość x do temp
// TODO: Krok 2 - Przypisz wartość y do x
// TODO: Krok 3 - Przypisz wartość temp do y
$display("After swap: x=%d, y=%d", x, y);
$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