Menu
Coddy logo textTech

Always Bloğu

Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 46 / 90.

Yordamsal blok, tıpkı C veya Python gibi yazılım programlama dillerinde olduğu gibi, ifadelerin ardışık olarak birbiri ardına yürütüldüğü bir kod bloğudur. Verilog'da iki yordamsal 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 olarak çalışır. Simülasyon başladığında sonsuza kadar tekrarlanır. Flip-flop'lar, sayaçlar ve kombinasyonel 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ı bildirir. Bu olmadan (ve içinde #5 gibi bir gecikme bulunmadığında), blok sonsuz döngüye girer ve simülasyon kilitlenirdi.

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;
endmodule

Bu Kod Nasıl Çalışır

BölümAnlamı
alwaysBu kodu sürekli, sonsuza kadar çalıştır
@(posedge clk)Saatin 0'dan 1'e geçmesini bekle (yükselen kenar)
count <= count + 1count 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.

@(posedge clk) duyarlılık listesi, sürekli olarak değil, yalnızca saat kenarlarında yürütülmesini 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;
end

Bu, a veya b değiştiğinde çalışır.

challenge icon

Görev

Bu modülün çalışmasını sağlamak 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ğişir
  • out2, out1'i takip eder (out1 ile aynı değere sahiptir)

Yapılacaklar:

  1. Bir always @(posedge clk) bloğu ekle
  2. İçinde, out1'i değiştir (out1 = ~out1 kullan)
  3. out2'yi out1'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 always bloğu ekle
  // out1 her clock'ta toggle olur
  // out2 out1'i takip eder

endmodule
quiz iconKendini test et

Bu 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

Kendi başına pratik yap: Online Verilog derleyicisi