Always Bloğu
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 46 / 90.
Yordamlı blok, C veya Python gibi yazılım programlama dillerindeki gibi ifadelerin birbiri ardına, sıralı olarak yürütüldüğü bir kod bloğudur. Verilog'da iki yordamlı 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 çalışır. Simülasyon başladıktan sonra sonsuza kadar tekrar eder. Flip-floplar, sayaçlar ve birleşimsel 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ı söyler. Bu olmadan (ve içinde #5 gibi bir gecikme bulunmadığında) blok sonsuz döngüye girer ve simülasyonun takılmasına neden olur.
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 durmadan, tekrar tekrar çalıştır |
@(posedge clk) | Saat sinyalinin 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.
Hassasiyet listesi @(posedge clk), sürekli olarak değil, yalnızca saat kenarlarında çalıştırılmasını 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ı 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ğerini değiştirir out2,out1'i takip eder (out1ile aynı değere sahip olur)
Yapman gerekenler:
- Bir
always @(posedge clk)bloğu ekle - Bloğun içinde
out1'in değerini değiştirmesini sağla (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 bir always bloğu ekle
// out1 her saat döngüsünde durum değiştirir
// 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