Duyarlılık Listesi
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 48 / 90.
Duyarlılık listesi (sensitivity list), always bloğuna ne zaman çalışacağını söyler. @ sembolünden sonra parantez içine yazılır.
Duyarlılık listesi, always bloğunu tetikleyen bir dizi sinyal veya olaydır. 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 (ardışıl) | always @(posedge clk) | Saatin yükselen kenarında |
| Birden fazla kenar | always @(posedge clk or posedge reset) | Saat kenarında veya sıfırlama (reset) 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* karakteri, blok içinde okunan tüm sinyalleri otomatik olarak dahil eder.
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, bir latch (istenmeyen bellek) oluşur.
Seçenek 3: Kenar Tetikleme (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: Çoklu Kenarlar
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endSaat kenarında veya reset kenarında çalışır.
Yaygın Hatalar
| Hata | Neden Yanlış |
|---|---|
always @(a or b or c) ancak d kullanıyor | d eksik → latch |
always @(posedge clk or reset) | reset için posedge eksik |
always @(clk) | Flip-floplar için posedge clk kullanılmalı |
Görev
Yapılacaklar:
- Bu flip-flop'un çalışması için doğru duyarlılık listesini ekleyin. Blok,
clksinyalinin yükselen kenarında çalışmalıdır.
Kopya kağıdı
Duyarlılık listesi @ işaretini takip eder ve bir always bloğunun ne zaman yürütüleceğini tanımlar:
always @(sensitivity_list) begin
// listelenen sinyaller değiştiğinde yürütülür
end| Tür | Sözdizimi | Tetiklenme zamanı |
|---|---|---|
| Tüm sinyaller | always @(*) | Okunan herhangi bir sinyal değiştiğinde |
| Belirli sinyaller | always @(a or b) | a veya b değiştiğinde |
| Yükselen kenar | always @(posedge clk) | clk'un yükselen kenarı |
| Birden fazla kenar | always @(posedge clk or posedge reset) | Her iki kenardan biri tetiklendiğinde |
Kombinasyonel mantık için @(*) kullanın; ardışık mantık için posedge/negedge kullanın:
// Kombinasyonel
always @(*) begin
out = a & b;
end
// Ardışık (asenkron sıfırlamalı flip-flop)
always @(posedge clk or posedge reset) begin
if (reset) q <= 0;
else q <= d;
endYaygın hatalar: belirli bir listede bir sinyalin eksik olması latch oluşmasına neden olur; flip-floplar için always @(posedge clk) yerine always @(clk) yazmak; çoklu kenar listesinde reset'ten önce posedge'i atlamak.
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.
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ığı