Ana içeriğe geç

SystemVerilog'da Blocking ve Non-Blocking Atamalar – Farklar ve En İyi Kullanım

· loading · loading · ·
Donanım Tasarımı SystemVerilog Blocking Non-Blocking RTL Tasarımı Simülasyon Always Bloğu
Donanım Tasarımı
Axolot Logic
Yazar
Axolot Logic
Sayısal Tasarım Mühendisi
Table of Contents
SystemVerilog Tasarım Serisi - This article is part of a series.
Part 13: This Article

⛓️ 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ğlamTercih 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 Tasarım Serisi - This article is part of a series.
Part 13: This Article

Related

SystemVerilog Veri Türleri
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Verilog RTL Tasarımı Veri Tipleri Sentezleme Simülasyon
Donanım Tasarımı Doğrulama
SystemVerilog Boyutsuz Literaller
· loading · loading
Donanım Tasarımı SystemVerilog Literal RTL Tasarımı Başlatma Sentezleme Reset Mantığı
Donanım Tasarımı
SystemVerilog Clocking Block – Testbench Zamanlama Kontrolü
· loading · loading
Doğrulama Donanım Tasarımı SystemVerilog Clocking Block RTL Tasarımı Testbench UVM Zamanlama
Doğrulama Donanım Tasarımı
SystemVerilog Döngüler ve Kontrol Akışı – for, while, foreach, repeat, break
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Döngüler Kontrol Akışı Testbench RTL Tasarımı Break/Continue
Donanım Tasarımı Doğrulama
SystemVerilog Enum Veri Tipi
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Enum Durum Makinesi RTL Tasarımı Testbench Hata Ayıklama
Donanım Tasarımı Doğrulama
SystemVerilog Giriş
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Verilog RTL Tasarımı UVM Donanım Doğrulama IEEE 1800
Donanım Tasarımı Doğrulama