Menu
Coddy logo textTech

Engelleyici Atama

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

Verilog'un iki tür işlemsel ataması (procedural assignment) vardır: bloklayan (=) ve bloklamayan (<=). Bu derste, bloklayan atama konusuna odaklanıyoruz.

Bloklamalı atama = operatörünü kullanır. Mevcut atama tamamlanana kadar bir sonraki ifadenin yürütülmesini blokladığı için "bloklamalı" olarak adlandırılır. Kod, sırayla, adım adım çalışır.

Sözdizimi:

variable = expression;

Bloklayan Atama Ne Zaman Kullanılır

Bloklayan atama (=), kombinasyonel mantık — girişler değiştiğinde çıkışların anında değiştiği, saat sinyali (clock) ve bellek (memory) bulunmayan devreler — için kullanılır.

Kombinasyonel mantık örnekleri:

  • AND / OR / XOR kapıları
  • Toplayıcılar ve çıkarıcılar
  • Çoğullayıcılar
  • Kod Çözücüler

Verilog örneği:

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

Always Bloklarında Bloklamalı Atamalar (Kombinasyonel Mantık)

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

Sıralama önemlidir. Bu, kombinasyonel mantık için uygundur.

Blocking ve Non-Blocking

 Blocking (=)Non-blocking (<=)
YürütmeBirbiri ardınaHepsi aynı anda
Sonraki satır bekler mi?EvetHayır
Kullanım AlanlarıKombinasyonel mantıkArdışıl mantık (flip-floplar)

Önemli: Flip-Floplar için Blocking Kullanmayın

challenge icon

Görev

Geçici bir değişken kullanarak x ve y değerlerini takas etmek için eksik bloklayan atamaları (blocking assignments) ekleyin.

Ne yapmalı:

  1. x değerini temp değişkenine atayın (x'i temp içinde saklayın)
  2. y değerini x değişkenine atayın (y'yi x'in içine taşıyın)
  3. temp değerini y değişkenine atayın (saklanan x'i y'nin içine taşıyın)

Kopya kağıdı

Engelleyici atama (=) ardışık olarak yürütülür — her ifade bir sonrakine geçmeden önce tamamlanır. always @(*) blokları içindeki kombinasyonel mantık için kullanılır.

always @(*) begin
  temp = a & b;    // Adım 1
  out = temp | c;  // Adım 2 (güncellenmiş temp değerini kullanır)
end
Engelleyici (=) Engelleyici Olmayan (<=)
Yürütme Birbiri ardına Hepsi aynı anda
Kullanım Alanı Kombinasyonel mantık Ardışıl mantık (flip-floplar)

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