Atama Gecikmeleri
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 69 / 90.
Önceki derslerde, genel gecikmeleri (#10 a = b;) ve kapı gecikmelerini (and #5 (out, a, b);) ele almıştık. Şimdi, bir atama ifadesinin parçası olarak bir prosedürel blok (initial veya always gibi) içinde gerçekleşen gecikmeler olan atama gecikmelerini ele alıyoruz.
Bir atama gecikmesi belirli bir süre bekler, ardından atamayı gerçekleştirir. Gecikme, # sembolünden sonra ve atamadan önce yerleştirilir.
Sözdizimi:
variable = #delay expression;Genel bir gecikmenin #10 a = b; (gecikme ve ardından atama) aksine, bir atama gecikmesi a = #10 b; o andaki b değerini alır, 10 zaman birimi bekler ve ardından a değişkenine atar.
Atama Gecikmesi vs Genel Gecikme
| Genel Gecikme | Atama Gecikmesi | |
|---|---|---|
| Sözdizimi | #10 a = b; | a = #10 b; |
| Değer ne zaman okunur? | Atama anında (gecikmeden sonra) | Hemen (gecikmeden önce) |
| Hangi değer atanır? | O andaki b değeri | Zaman 0'daki (veya okuma anındaki) b değeri |
| Değer ne zaman atanır? | Gecikmeden sonra | Gecikmeden sonra |
Örnek: Fark
initial begin
b = 1;
#5 b = 0;
// Genel gecikme
#10 a1 = b; // 10 birim bekler, sonra b'yi okur (b=0) → a1=0
// Atama gecikmesi
a2 = #10 b; // b'yi şimdi okur (b=0), 10 birim bekler, sonra atama yapar → a2=0
endBurada her ikisi de aynı sonucu verir. Fark, gecikme sırasında b değiştiğinde ortaya çıkar.
Temel Fark Örneği
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // 0 anında b=1 değerini okur, 10 anında a1=1 atamasını yapar
end
initial begin
#5 b = 0; // 5 anında (gecikme sırasında) b'yi 0 olarak değiştirir
end- 0 anında:
a1,b = 1değerini okur - 5 anında:
b,0değerine değişir (a1hala beklerken) - 10 anında:
a1'e0değil,1(0 anında okunan değer) atanır
Ayrı bir bloktaki #10 a2 = b; gibi genel bir gecikme ile, b 10 anında okunurdu (değer 0).
Önemli Kurallar
| Kural | Açıklama |
|---|---|
=, # işaretinden önce gelir | a = #10 b;, a #10 = b; değil |
| Değer anında okunur | Sağ taraf hemen değerlendirilir |
| Atama gecikmeden sonra gerçekleşir | Sol taraf değeri daha sonra alır |
| Yalnızca prosedürel bloklar içindir | initial veya always içinde kullanılır |
Görev
Yapılması gerekenler:
Eksik atama gecikmesini ekleyin; böylece a, 15 zaman birimi sonra b değerini alır, ancak b değerini hemen okur.
Kopya kağıdı
Atama gecikmesi sağ tarafı hemen okur, gecikme süresi kadar bekler ve ardından atamayı gerçekleştirir:
variable = #delay expression;Genel gecikme ile arasındaki temel fark:
Genel Gecikme #10 a = b; | Atama Gecikmesi a = #10 b; | |
|---|---|---|
| b değerinin okunması | Gecikmeden sonra | Hemen |
| Değerin atanması | Gecikmeden sonra | Gecikmeden sonra |
Gecikme sırasında b değiştiğinde sonuçlar farklılık gösterir:
initial begin
b = 1;
a1 = #10 b; // Reads b=1 now, assigns a1=1 at time 10
#5 b = 0; // b changes at time 5 — a1 still gets 1
// With #10 a2 = b; → reads b=0 at time 10, so a2=0
endYalnızca prosedürel bloklar (initial veya always) içinde geçerlidir.
Kendin dene
module assignment_challenge;
reg a, b;
// Gecikme sırasında b'yi değiştirmek için ayrı blok
initial begin
b = 1;
// TODO: Atama gecikmesi ekle
// a, 15 zaman birimi sonra b değerini almalı
// b'yi şimdi oku, gecikmeden sonra ata
end
initial begin
#5 b = 0; // Gecikme sırasında b'yi değiştirir
#20 $display("Time %0t: a = %b", $time, a);
$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ı13Zamanlama ve Gecikmeler
Gecikmeler NedirKapı GecikmeleriAtama GecikmeleriTimescale DirektifiClock ÜretimiÖzet - Zamanlama Kontrolü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ığı