Always Bloğu
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 46 / 90.
Yordamsal blok, tıpkı C veya Python gibi yazılım programlama dillerinde olduğu gibi, ifadelerin ardışık olarak birbiri ardına yürütüldüğü bir kod bloğudur. Verilog'da iki yordamsal blok vardır: initial (bir kez çalışır) ve always (sürekli çalışır). always bloğuyla başlayalım.
always bloğu sürekli olarak çalışır. Simülasyon başladığında sonsuza kadar tekrarlanır. Flip-flop'lar, sayaçlar ve kombinasyonel mantık gibi çalışmaya devam etmesi gereken donanımları tanımlamak için kullanılır.
Temel sözdizimi:
always @(sensitivity_list) begin
// Tekrar tekrar çalışan kod
end@(sensitivity_list), bloğa ne zaman çalışacağını bildirir. Bu olmadan (ve içinde #5 gibi bir gecikme bulunmadığında), blok sonsuz döngüye girer ve simülasyon kilitlenirdi.
Always Bloğu Örneği: Sayaç
Sayaç oluşturmak için always bloğunu nasıl kullanabileceğimize dair bir örnek aşağıda verilmiştir.
module counter (
input clk,
output reg [3:0] count
);
always @(posedge clk) count <= count + 1;
endmoduleBu Kod Nasıl Çalışır
| Bölüm | Anlamı |
|---|---|
always | Bu kodu sürekli, sonsuza kadar çalıştır |
@(posedge clk) | Saatin 0'dan 1'e geçmesini bekle (yükselen kenar) |
count <= count + 1 | count değerinin mevcut değerini al, 1 ekle ve sonucu tekrar ona kaydet |
Blok, saatin her yükselen kenarında çalışır. Her seferinde count 1 artar.
@(posedge clk) duyarlılık listesi, sürekli olarak değil, yalnızca saat kenarlarında yürütülmesini söyler. Bu olmadan döngü gecikme olmaksızın sonsuza kadar çalışırdı.
Birden Fazla Sinyal İçeren Always Bloğu
Belirli sinyalleri listeleyebilirsiniz:
always @(a or b) begin
out = a & b;
endBu, a veya b değiştiğinde çalışır.
Görev
Bu modülün çalışmasını sağlamak için eksik always bloğunu ekle.
Nasıl çalışır:
- Her yükselen saat kenarında
out1, 0'dan 1'e veya 1'den 0'a geçerek değişir out2,out1'i takip eder (out1ile aynı değere sahiptir)
Yapılacaklar:
- Bir
always @(posedge clk)bloğu ekle - İçinde,
out1'i değiştir (out1 = ~out1kullan) out2'yiout1'e eşitle
Kendin dene
module toggler (
input clk,
output reg out1,
output reg out2
);
initial begin
out1 = 0;
out2 = 0;
end
// TODO: posedge clk ile always bloğu ekle
// out1 her clock'ta toggle olur
// out2 out1'i takip eder
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temel Bilgiler bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerMod Alma OperatörüKarşılaştırma OperatörleriTekrar - Basit MatematikBit Düzeyi Operatörleri7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND, OR ve NOT KapılarıXOR ve XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Verme
If İfadesiIf - ElseTekrar - Basit KarşılaştırıcıCase İfadesiCasex ve CasezTekrar - ALU Tasarımı2Veri Türleri
Wire TürüReg TürüTamsayı ve GerçelVektörlerDizilerParametrelerÖzet - Sinyalleri Tanımlama5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörTekrar - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüTekrar DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiTekrar - Döngü Kalıpları3Sayı Sistemi
İkili GösterimBoyutlu SayılarBoyutsuz SayılarNegatif SayılarÖzel X ve Z DeğerleriTekrar - Sayı Biçimleri6Modüller
Modül YapısıGiriş ve Çıkış PortlarıÇift Yönlü PortlarModül ÖrneklendirmeAda Göre Port EşlemeSıraya Göre Port EşlemeTekrar - Bir Modül Oluşturma9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiBloklayıcı AtamaBloklamayan AtamaTekrar - Always ve Initial Karşılaştırması15Trafik Işığı Denetleyicisi
Durumları TanımlamaDurum Makinesi MantığıKendi başına pratik yap: Online Verilog derleyicisi