Duyarlılık Listesi
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 48 / 90.
Hassasiyet listesi, always bloğuna ne zaman çalışacağını söyler. @ simgesinden sonra parantez içinde yazılır.
Duyarlılık listesi, always bloğunu tetikleyen sinyal veya olaylar kümesidir. Listedeki herhangi bir sinyal değiştiğinde blok çalışır.
Sözdizimi:
always @(sensitivity_list) begin
// Listedeki sinyaller değiştiğinde kod çalışır
endDuyarlılık Listesi Türleri
| Tür | Sözdizimi | Blok Ne Zaman Çalışır |
|---|---|---|
| Tüm sinyaller (kombinasyonel) | always @(*) | İçindeki herhangi bir sinyal değiştiğinde |
| Belirli sinyaller | always @(a or b) | a veya b değiştiğinde |
| Kenar tetiklemeli (sıralı) | always @(posedge clk) | Saatin yükselen kenarında |
| Birden çok kenar | always @(posedge clk or posedge reset) | Saat kenarında veya sıfırlama kenarında |
Seçenek 1: Tüm Sinyaller (*)
Kombinasyonel mantık için en güvenli ve en yaygın olanıdır.
always @(*) begin
out = a & b; // a veya b değiştiğinde çalışır
end* blokta okunan tüm sinyalleri otomatik olarak içerir.
Seçenek 2: Belirli Sinyaller
always @(a or b) begin
out = a & b; // a veya b değiştiğinde çalışır
endBir sinyali unutursanız, bu sinyal değiştiğinde simülasyondaki çıktı güncellenmez; dolayısıyla simülasyon artık sentezlenmiş donanımla eşleşmez.
Seçenek 3: Kenar Tetiklemesi (posedge)
always @(posedge clk) begin
q <= d; // Saat sinyalinin yükselen kenarında çalışır
endYükselen kenar için posedge, düşen kenar için negedge kullanın.
Seçenek 4: Birden Fazla Kenar
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endSaat kenarında veya sıfırlama kenarında çalışır.
Sık Yapılan Hatalar
| Hata | Neden Yanlış |
|---|---|
always @(a or b or c) ama d kullanılıyor | d eksik → simülasyonda çıktı güncelliğini yitirir (simülasyon/sentez uyuşmazlığı) |
always @(posedge clk or reset) | reset için posedge eksik |
always @(clk) | flip-flop'lar için posedge clk kullanılmalı |
Görev
Yapılacaklar:
- Bu flip-flop'un çalışması için doğru duyarlılık listesini ekle. Blok,
clksinyalinin yükselen kenarında çalışmalıdır.
Kendin dene
module flipflop (
input clk,
input d,
output reg q
);
always @(______) begin
q <= d;
end
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