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 çalışan blocking (engelleyen) atamayı (=) ele almıştık. Şimdi ise hepsi bir arada — paralel olarak çalışan non-blocking (engellemeyen) atamayı (<=) işleyeceğiz.
Non-blocking atama <= operatörünü kullanır. Sonraki ifadenin yürütülmesini engellemediği (block) için buna "non-blocking" denir. Bir bloktaki tüm non-blocking atamalar aynı anda yürütülür.
Sözdizimi:
variable <= expression;Ne Zaman Non-Blocking Assignment Kullanılır?
Non-blocking assignment (<=), ardışıl mantık (sequential logic) — saat (clock) kullanan ve belleğe sahip devreler — için kullanılır. Çıkışlar yalnızca bir clock edge'inde (genellikle yükselen kenarda) değişir.
Ardışıl mantık örnekleri:
- Flip-flop'lar
- Yazmaçlar (Registers)
- Sayaçlar
- Durum makineleri
- Kaydırmalı kaydediciler
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
endHer üç 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 için kullanılır — bir saat (clock) kullanan ve belleğe sahip olan devreler (flip-flop'lar, yazmaçlar, sayıcılar).
always @(posedge clk) begin
q <= d; // q, saat kenarında d'yi alır
count <= count + 1; // count, saat kenarında artar
endHer iki atama da clock edge öncesindeki values kullanılarak aynı anda gerçekleşir.
Özet
| Kural | Açıklama |
|---|---|
Ardışıl mantık için <= kullanın | always @(posedge clk) |
Kombinezonsal mantık için = kullanın | always @(*) |
| Non-blocking paralel olarak yürütülür | Tüm atamalar aynı anda gerçekleşir |
| Değerler zaman adımının sonunda güncellenir | Hemen değil |
Görev
Non-Blocking Assignment İşlemini Tamamlayın
Bu 2-bit shift register yapısının çalışması için eksik non-blocking atamaları ekleyin.
Nasıl çalışır:
- Her clock edge tetiklenmesinde,
q1değeriddeğerini alır q2,q1değerinin old halini alır
Yapılacaklar:
ddeğeriniq1üzerine atayın (non-blocking)q1değeriniq2üzerine atayın (non-blocking)
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
endmoduleBu 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
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı