Sürekli Atama
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 37 / 90.
Donanımda bir bağlantı, bir devredeki iki noktayı birbirine bağlayan fiziksel bir kablodur. Kablo yerine yerleştirildikten sonra bağlantı kalıcıdır ve her zaman aktiftir. Bir uç değişirse, diğer uç derhal değişir.
Verilog'ta bu davranışı modellemek için bir yola ihtiyacımız var. Bir değeri bir wire üzerine aktarmak ve onu sonsuza kadar bağlı tutmak istiyoruz. Bu işlemi yapma sürecine continuous assignment denir.
Sürekli atama (continuous assignment), bir wire ile bir ifade (expression) arasında kalıcı bir bağlantı oluşturmak için assign anahtar sözcüğünü kullanır. Tıpkı fiziksel bir kabloda olduğu gibi, wire ifadenin değerini sürekli olarak alır.
Bunu tek bir kez değer yazmak yerine bir kablo lehimlemek gibi düşünün.
Sözdizimi
assign wire_name = expression;| Bölüm | Anlam |
|---|---|
assign | continuous assignment başlatan anahtar kelime |
wire_name | Sürülen wire (reg olamaz) |
expression | wire'ı süren değer |
Basit Örnek
wire out;
assign out = a & b;Bunun anlamı şudur: out, a AND b ifadesine always equal olur. a veya b ne zaman değişirse, out hemen değişir.
Nasıl Çalışır
Bir değeri depolayan reg yapısının aksine, continuous assignment yapılan bir wire sürekli olarak update edilir:
module continuous_demo;
reg a, b;
wire c;
assign c = a & b; // c her zaman a AND b'yi takip eder
initial begin
a = 0; b = 0;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0
a = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0 (1&0=0)
b = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=1 (1&1=1)
$finish;
end
endmoduleOutput:
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1a veya b her değiştiğinde, c otomatik olarak güncellenir.
Çoklu Assignment'lar
Bir module içinde birden fazla continuous assignment bulunabilir:
module multiple_assign (
input a, b, c,
output x, y
);
assign x = a & b;
assign y = x | c; // y, x'e bağlıdır
endmoduleTüm assignment'lar paralel ve continuous olarak çalışır.
Yaygın Kullanımlar
Sürekli atamalar (`continuous` `assignment`) şunlar için kullanılır:
- Basit kombinasyonel mantık (AND, OR, XOR)
- Kabloları (`wire`) birbirine bağlama
- Üç durumlu (tri-state) tamponlar oluşturma
- Kombinasyonel ifadelerden (`expression`) çıkışları (`output`) sürme
Görev
Yapılacaklar:
zdeğişkeninix AND yile equal yapan eksik continuous assignment'ı ekleyin.
Kendin dene
module continuous_challenge (
input x,
input y,
output z
);
// TODO: z'yi x AND y'ye eşit yapan eksik continuous assignment'ı ekle
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ığı