Menu
Coddy logo textTech

Engelleyici Olmayan Atama

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

Önceki derste, adım adım yürütülen bloklayan atama (=) konusunu işlemiştik. Şimdi ise hep birlikte — paralel olarak yürütülen bloklamayan atama (<=) konusunu işleyeceğiz.

Bloklamayan atama (non-blocking assignment) <= operatörünü kullanır. Bir sonraki ifadenin yürütülmesini engellemediği için "bloklamayan" olarak adlandırılır. Bir blok içindeki tüm bloklamayan atamalar aynı anda yürütülür.

Sözdizimi:

variable <= expression;

Bloklamayan Atama Ne Zaman Kullanılır?

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

Ardışıl mantık örnekleri:

  • Flip-floplar
  • Yazmaçlar
  • Sayıcılar
  • Durum makineleri
  • Kaydırmalı yazmaçlar

Verilog örneği:

initial begin
  a <= 5;      // Planlandı, ancak henüz yürütülmedi
  b <= a + 2;  // Planlandı, a'nın ESKİ değerini kullanır
  c <= b * 3;  // Planlandı, 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 yapılır.

Always Bloklarında Non-Blocking (Ardışıl Mantık)

Non-blocking, ardışıl mantık (sequential logic) için kullanılır — saat (clock) kullanan ve belleğe (flip-floplar, kaydediciler, sayaçlar) sahip devreler.

always @(posedge clk) begin
  q <= d;           // q, saat kenarında d değerini 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
Ardışıl mantık için <= kullanınalways @(posedge clk)
Kombinasyonel mantık için = kullanınalways @(*)
Engellemeyen (Non-blocking) 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

Engelleyici Olmayan Atamayı Tamamlayın

Bu 2 bitlik kaydırmalı kaydedicinin (shift register) çalışması için eksik olan engelleyici olmayan atamaları ekleyin.

Nasıl çalışır:

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

Ne yapmalı:

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

Kopya kağıdı

Engellemeyen atama (<=), tüm ifadeleri paralel olarak yürütür — eski değerleri kullanır ve zaman adımının sonunda güncelleme yapar.

// Hepsi a ve b'nin ESKİ değerlerini kullanır
a <= 5;
b <= a + 2;  // eski a'yı kullanır
c <= b * 3;  // eski b'yi kullanır

Saatli always blokları içindeki ardışıl mantık (flip-floplar, kaydediciler, sayaçlar) için <= kullanın:

always @(posedge clk) begin
  q     <= d;           // engellemeyen
  count <= count + 1;   // engellemeyen
end
AtamaKullanım alanıYürütme
<=Ardışıl mantık (posedge clk)Paralel olarak
=Kombinasyonel mantık (always @(*))Adım adım

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
      // YAPILACAK: Kaydırma mantığını ekleyin
      // Adım 1: d'yi q1'e ata (bloklamayan)
      // Adım 2: q1'i q2'ye ata (bloklamayan)
    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.

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