Menu
Coddy logo textTech

Bloklamayan Atama

Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 50 / 90.

Önceki derste, adım adım yürütülen bloklayan atama (=) konusunu ele aldık. Şimdi ise tüm atamaları aynı anda, paralel olarak yürüten bloklamayan atama (<=) konusunu ele alacağız.

Engellemeyen atama, <= operatörünü kullanır. Bir sonraki ifadenin yürütülmesini engellemediği için "engellemeyen" olarak adlandırılır. Bir bloktaki tüm engellemeyen atamalar aynı anda yürütülür.

Sözdizimi:

variable <= expression;

Bloklamayan Atama Ne Zaman Kullanılır

Bloklamayan atama (<=), saat kullanan ve belleğe sahip devreler olan sıralı mantık için kullanılır. Çıkışlar yalnızca bir saat kenarında (genellikle yükselen kenarda) değişir.

Sıralı mantık örnekleri:

  • Flip-flop'lar
  • Yazmaçlar
  • Sayaçlar
  • Durum makineleri
  • Kaydırma yazmaçları

Verilog örneği:

initial begin
  a <= 5;      // Zamanlandı, ancak henüz yürütülmedi
  b <= a + 2;  // Zamanlandı, a'nın ESKİ değerini kullanır
  c <= b * 3;  // Zamanlandı, b'nin ESKİ değerini kullanır
end

Her üç atama da eski değerler kullanılarak aynı anda gerçekleşir. Zaman adımının sonunda tüm güncellemeler birlikte gerçekleşir.

Always Bloklarında Bloklamayan Atamalar (Sıralı Mantık)

Bloklamayan atamalar, sıralı mantık için kullanılır: saat sinyali kullanan ve belleğe sahip devreler (flip-flop'lar, yazmaçlar, sayaçlar).

always @(posedge clk) begin
  q <= d;           // q, saat kenarında d'yi alır
  count <= count + 1; // count, saat kenarında artar
end

Her iki atama da saat kenarından önceki değerler kullanılarak aynı anda gerçekleşir.

Özet

KuralAçıklama
Sıralı mantık için <= kullanınalways @(posedge clk)
Kombinasyonel mantık için = kullanınalways @(*)
Bloklamayan atamalar paralel olarak yürütülürTüm atamalar aynı anda gerçekleşir
Değerler zaman adımının sonunda güncellenirHemen değil
challenge icon

Görev

Engellemesiz Atamayı Tamamlayın

Bu 2 bitlik kaydırma yazmacının çalışmasını sağlamak için eksik engellemesiz atamaları ekleyin.

Nasıl çalışır:

  • Her saat kenarında q1, d değerini alır
  • q2, q1'in eski değerini alır

Yapılacaklar:

  1. d değerini q1'e atayın (engellemesiz)
  2. q1 değerini q2'ye atayın (engellemesiz)

Kendin dene

module shift_register (
  input clk,
  input reset,
  input d,
  output reg q1,
  output reg q2
);
  
  always @(posedge clk or posedge reset) begin
    if (reset) begin
      q1 <= 0;
      q2 <= 0;
    end else begin
      // TODO: Kaydırma mantığını ekle
      // Adım 1: d'yi q1'e ata (non-blocking)
      // Adım 2: q1'i q2'ye ata (non-blocking)
    end
  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.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi