Ana içeriğe geç

Blocking ve Non-Blocking Atamalar

· loading · loading · · ·
HDL SystemVerilog HDL
Axolot Logic
Yazar
Axolot Logic
Sayısal Tasarım Mühendisi
Table of Contents
SystemVerilog - This article is part of a series.
Part 6: This Article

İşte bu kısmın Türkçe çevirisi:


⛓️ SystemVerilog’da Blocking ve Non-Blocking Atamalar
#

SystemVerilog, always veya initial blokları içinde iki tür işlemsel (procedural) atama sağlar:


➡️ Blocking Atama (=)
#

  • Anında ve sıralı olarak çalışır
  • Her satır, tamamlanmadan bir sonrakine geçilmesini engeller
  • Genellikle kombinasyonel mantıkta kullanılır

✅ Örnek:
#

always @(*) begin
  a = b;
  c = a;  // güncellenmiş 'a' kullanılır
end

Böyle düşün: Normal programlama dillerindeki gibi adım adım ilerleyen atamalar.


Non-Blocking Atama (<=)
#

  • Atamayı planlar — hemen gerçekleşmez
  • Tüm sağ taraflar önce değerlendirilir, ardından sol taraflar güncellenir
  • Ardışıl (saatle çalışan) mantıkta kullanılır

✅ Örnek:
#

always @(posedge clk) begin
  a <= b;
  c <= a;  // 'a' henüz güncellenmedi, eski değeri kullanır
end

Böyle düşün: Flip-flop davranışı gibi — değerler saat döngüsünün sonunda güncellenir.


🧠 En İyi Uygulama
#

Bağlam Tercih Edilen Atama
Kombinasyonel mantık (always @(*)) = (blocking)
Ardışıl mantık (always @(posedge clk)) <= (non-blocking)

❗ Aynı always bloğu içinde = ve <= asla karıştırılmamalı — bu, karmaşık ve hatalı simülasyon sonuçlarına yol açabilir.


SystemVerilog - This article is part of a series.
Part 6: This Article

Related

SystemVerilog Diziler
· loading · loading
HDL SystemVerilog HDL
SystemVerilog Döngüler & Akış Kontrol İfadeleri
· loading · loading
HDL SystemVerilog HDL
SystemVerilog Giriş
· loading · loading
HDL SystemVerilog HDL
SystemVerilog Tasklar ve Fonksiyonlar
· loading · loading
HDL SystemVerilog HDL
SystemVerilog Typedef & Alias
· loading · loading
HDL SystemVerilog HDL
SystemVerilog Veri Türleri
· loading · loading
HDL SystemVerilog HDL