Menu
Coddy logo textTech

Engelleyici Atama

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 49 / 90.

Verilog iki tür yordamsal atamaya sahiptir: blocking (=) ve non-blocking (<=). Bu derste, blocking assignment konusuna odaklanacağız.

Blocking assignment, = operatörünü uses. Mevcut assignment tamamlanana kadar bir sonraki ifadenin çalıştırılmasını engellediği için buna "blocking" denir. Kod step step, sırayla çalışır.

Sözdizimi:

variable = expression;

Blocking assignment Ne Zaman Kullanılır

Blocking assignment (=), çıkışların girişler değiştiğinde anında değiştiği, clock ve bellek bulunmayan devreler olan kombinasyonel mantık için kullanılır.

Kombinasyonal mantık örnekleri:

  • AND / OR / XOR kapıları
  • Toplayıcılar ve çıkarıcılar
  • Multiplekserler
  • Dekoderler

Verilog örneği:

always @(*) begin
  sum = a + b;      // Bloklayan atama
  carry = a & b;    // Bloklayan atama
end

Always Bloklarında Blocking (Kombinezonal Mantık)

always @(*) begin
  temp = a & b;    // Adım 1
  out = temp | c;  // Adım 2 (temp'i adım 1'den kullanır)
end

Sıralama önemlidir. Kombinasyonel mantık için bu durum uygundur.

Blocking vs Non-Blocking

 Blocking (=)Non-blocking (<=)
ExecutionBirbiri ardınaHepsi birden
Next line waits?EvetHayır
UsesKombinezonsal mantıkArışıl mantık (flip-flop'lar)

Önemli: Flip-Flop'lar için Blocking Kullanmayın

challenge icon

Görev

Geçici bir değişken kullanarak x ve y değerlerini değiştirmek için eksik blocking assignment'ları (engelleyen atamaları) ekleyin.

Ne yapılmalı:

  1. x değerini temp değişkenine atayın (x'i temp içine kaydedin)
  2. y değerini x değişkenine atayın (y'yi x içine taşıyın)
  3. temp değerini y değişkenine atayın (kaydedilen x'i y içine taşıyın)

Kendin dene

module swap;
  reg x, y;
  reg temp;
  
  initial begin
    x = 1;
    y = 0;
    
    $display("Before swap: x=%d, y=%d", x, y);
    
    // TODO: Adım 1 - x'i temp'e ata
    
    // TODO: Adım 2 - y'yi x'e ata
    
    // TODO: Adım 3 - temp'i y'ye ata
    
    $display("After swap: x=%d, y=%d", x, y);
    $finish;
  end
endmodule
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler