Menu
Coddy logo textTech

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
end

Przypisania 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)
end

Kolejność ma znaczenie. W przypadku logiki kombinacyjnej to jest w porządku.

Blokujące a nieblokujące

 Blokujące (=)Nieblokujące (<=)
WykonanieJedno po drugimWszystkie naraz
Czy następna linia czeka?TakNie
ZastosowanieLogika kombinacyjnaLogika sekwencyjna (przerzutniki)

Ważne: nie używaj przypisań blokujących dla przerzutników

challenge icon

Wyzwanie

Dodaj brakujące przypisania blokujące, aby zamienić wartości x i y za pomocą zmiennej tymczasowej.

Co należy zrobić:

  1. Przypisz wartość x do temp (zapisz x w temp)
  2. Przypisz wartość y do x (przenieś y do x)
  3. Przypisz wartość temp do y (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
endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online