🔁 Verilog’ta Procedural ve Continuous Atamalar #
Verilog’ta donanım davranışını doğru modellemek için iki ana atama türü vardır: continuous ve procedural.
⚙️ Continuous Atama (assign
)
#
assign
anahtar kelimesi ile yapılır- Giriş değiştiğinde çıkış anında güncellenir
- Kombinasyonel mantık modellemek için kullanılır
- Sinyal tipi
wire
olmalıdır
✅ Örnek: #
assign y = a & b;
Özellikler:
always
veyainitial
bloğu dışında tanımlanır- Basit bağlantılar ve sürekli veri akışı için idealdir
- Fiziksel bir tel gibi davranır
🔁 Procedural Atama #
always
veyainitial
bloklarının içinde tanımlanır- Sıralı veya kontrollü mantığı ifade eder
- Sinyal tipi
reg
,integer
veyareal
olmalıdır
✅ Örnek: #
always @(posedge clk) begin
count <= count + 1;
end
Özellikler:
if
,case
,for
gibi kontrol yapıları desteklenir=
(blocking) veya<=
(non-blocking) kullanılır- Register, FSM, senkron mantık için uygundur
🧠 Özet Tablosu #
Özellik | Continuous Atama | Procedural Atama |
---|---|---|
Anahtar Kelime | assign |
always , initial |
Sinyal tipi | wire |
reg , integer , vs. |
Konum | Blok dışında | Blok içinde |
Güncelleme Zamanı | Sürekli | Olay tetiklenince |
Kontrol Yapıları | ❌ Yok | ✅ Var (if , case , vs.) |
Sentezlenebilirlik | ✅ Evet | ✅ Evet |
⚠️ Yaygın Hata #
reg y;
assign y = a & b; // ❌ HATA! reg tipi assign ile sürülemez
➡️ assign
için wire
kullanın ya da always
bloğuna taşıyın.
💡 Bu iki atama türünü anlamak, doğru ve sentezlenebilir Verilog kodları yazmak için kritiktir.