Duyarlılık Listesi
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 48 / 90.
Duyarlılık listesi, always bloğuna ne zaman çalıştırılacağını bildirir. @ sembolünden sonra parantezlerin içinde yazılır.
Duyarlılık listesi, always bloğunu tetikleyen sinyaller veya olaylar kümesidir. Listedeki herhangi bir sinyal değiştiğinde blok yürütülür.
Sözdizimi:
always @(sensitivity_list) begin
// Kod, listedeki sinyaller değiştiğinde çalışır
endDuyarlılık Listesi Türleri
| Tür | Sözdizimi | Blok Ne Zaman Çalışır |
|---|---|---|
| Tüm sinyaller (kombinasyonel) | always @(*) | İçerideki 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, o sinyal değiştiğinde simülasyonda output güncellenmez; bu nedenle simülasyon artık sentezlenmiş donanımla eşleşmez.
Seçenek 3: Kenar Tetiklemeli (posedge)
always @(posedge clk) begin
q <= d; // Saatin 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.
Yaygın Hatalar
| Hata | Neden Yanlış |
|---|---|
always @(a or b or c) kullanılıyor ancak d kullanılıyor | d eksik → simülasyonda çıktı güncelliğini yitirir (sim/synth 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ını sağlamak için doğru duyarlılık listesini ekleyin. 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