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
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 (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
endHer iki atama da saat kenarından önceki değerler kullanılarak aynı anda gerçekleşir.
Özet
| Kural | Açıklama |
|---|---|
Ardışıl mantık için <= kullanın | always @(posedge clk) |
Kombinasyonel mantık için = kullanın | always @(*) |
| Engellemeyen (Non-blocking) atamalar 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
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,ddeğerini alır q2,q1'in eski değerini alır
Ne yapmalı:
ddeğeriniq1'e atayın (engelleyici olmayan)q1değeriniq2'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ırSaatli 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| Atama | Kullanı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
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ığı