Menu
Coddy logo textTech

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
end

Duyarlılık Listesi Türleri

TürSözdizimiBlok Ne Zaman Çalışır
Tüm sinyaller (kombinasyonel)always @(*)İçerideki herhangi bir sinyal değiştiğinde
Belirli sinyalleralways @(a or b)a veya b değiştiğinde
Kenar tetiklemeli (ardışıl)always @(posedge clk)Saatin yükselen kenarında
Birden fazla kenaralways @(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
end

Bir 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
end

Yü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;
end

Saat kenarında veya reset kenarında çalışır.

Yaygın Hatalar

HataNeden Yanlış
always @(a or b or c) ancak d kullanıyord eksik → latch
always @(posedge clk or reset)reset için posedge eksik
always @(clk)Flip-floplar için posedge clk kullanılmalı
challenge icon

Görev

Yapılacaklar:

  1. Bu flip-flop'un çalışması için doğru duyarlılık listesini ekleyin. Blok, clk sinyalinin 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ürSözdizimiTetiklenme zamanı
Tüm sinyalleralways @(*)Okunan herhangi bir sinyal değiştiğinde
Belirli sinyalleralways @(a or b)a veya b değiştiğinde
Yükselen kenaralways @(posedge clk)clk'un yükselen kenarı
Birden fazla kenaralways @(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;
end

Yaygı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

endmodule
quiz iconKendini test et

Bu 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