Engelleyici Atama
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 49 / 90.
Verilog'un iki tür işlemsel ataması (procedural assignment) vardır: bloklayan (=) ve bloklamayan (<=). Bu derste, bloklayan atama konusuna odaklanıyoruz.
Bloklamalı atama = operatörünü kullanır. Mevcut atama tamamlanana kadar bir sonraki ifadenin yürütülmesini blokladığı için "bloklamalı" olarak adlandırılır. Kod, sırayla, adım adım çalışır.
Sözdizimi:
variable = expression;Bloklayan Atama Ne Zaman Kullanılır
Bloklayan atama (=), kombinasyonel mantık — girişler değiştiğinde çıkışların anında değiştiği, saat sinyali (clock) ve bellek (memory) bulunmayan devreler — için kullanılır.
Kombinasyonel mantık örnekleri:
- AND / OR / XOR kapıları
- Toplayıcılar ve çıkarıcılar
- Çoğullayıcılar
- Kod Çözücüler
Verilog örneği:
always @(*) begin
sum = a + b; // Bloklamalı atama
carry = a & b; // Bloklamalı atama
endAlways Bloklarında Bloklamalı Atamalar (Kombinasyonel Mantık)
always @(*) begin
temp = a & b; // Adım 1
out = temp | c; // Adım 2 (adım 1'deki temp'i kullanır)
endSıralama önemlidir. Bu, kombinasyonel mantık için uygundur.
Blocking ve Non-Blocking
Blocking (=) | Non-blocking (<=) | |
|---|---|---|
| Yürütme | Birbiri ardına | Hepsi aynı anda |
| Sonraki satır bekler mi? | Evet | Hayır |
| Kullanım Alanları | Kombinasyonel mantık | Ardışıl mantık (flip-floplar) |
Önemli: Flip-Floplar için Blocking Kullanmayın
Görev
Geçici bir değişken kullanarak x ve y değerlerini takas etmek için eksik bloklayan atamaları (blocking assignments) ekleyin.
Ne yapmalı:
xdeğerinitempdeğişkenine atayın (x'i temp içinde saklayın)ydeğerinixdeğişkenine atayın (y'yi x'in içine taşıyın)tempdeğeriniydeğişkenine atayın (saklanan x'i y'nin içine taşıyın)
Kopya kağıdı
Engelleyici atama (=) ardışık olarak yürütülür — her ifade bir sonrakine geçmeden önce tamamlanır. always @(*) blokları içindeki kombinasyonel mantık için kullanılır.
always @(*) begin
temp = a & b; // Adım 1
out = temp | c; // Adım 2 (güncellenmiş temp değerini kullanır)
endEngelleyici (=) |
Engelleyici Olmayan (<=) |
|
|---|---|---|
| Yürütme | Birbiri ardına | Hepsi aynı anda |
| Kullanım Alanı | Kombinasyonel mantık | Ardışıl mantık (flip-floplar) |
Kendin dene
module swap;
reg x, y;
reg temp;
initial begin
x = 1;
y = 0;
$display("Before swap: x=%d, y=%d", x, y);
// TODO: Adım 1 - x'i temp'e ata
// TODO: Adım 2 - y'yi x'e ata
// TODO: Adım 3 - temp'i y'ye ata
$display("After swap: x=%d, y=%d", x, y);
$finish;
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ığı