Menu
CoddyTech

Initial Bloğu

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

Verilog'da iki prosedürel blok vardır: initial (bir kez çalışır) ve always (sürekli çalışır). Şimdi initial bloğunu ele alalım.

Initial Bloğu Nedir?

initial bloğu simülasyonun başlangıcında (zaman 0'da) yalnızca bir kez çalışır. Tamamlandığında tekrar çalışmaz.

Başlıca test tezgâhlarında şu amaçlarla kullanılır:

  • Başlangıç değerlerini ayarlama
  • Test sinyalleri üretme
  • Mesajları görüntüleme
  • Simülasyonu başlatma

Sözdizimi

initial begin
  // İfadeler sırayla birer kez çalıştırılır
end

Temel Örnek

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

Çıktı:

Simulation started
This runs once

Test Sinyalleri için Başlangıç Bloğunu Kullanma

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

Bu, a değerini 0, 10 ve 20 anlarında değiştirir.

Initial ve Always

 initialalways
Çalışma biçimiBir kezSürekli (sonsuza kadar)
Kullanım alanıTest düzenekleri, başlatmaDonanım (flip-flop'lar, sayaçlar)
Sentezlenebilir mi?Yalnızca başlangıç değerleri için (FPGA)Evet (duyarlılık listesiyle)

Önemli Notlar

  • initial blokları esas olarak simülasyon içindir. Sentez araçları, #10 gibi gecikmeleri veya $display gibi görevleri donanıma dönüştüremez
  • initial ifadesini esas olarak test düzeneklerinde kullanın. Bir tasarım modülünde bunu yalnızca FPGA sentez araçları kullanır ve yalnızca bir yazmacın veya belleğin başlangıç değerini ayarlamak için kullanır
  • Test düzeneğinde serbest çalışan bir saat varsa (ör. always #5 clk = ~clk;), $finish çağırmadığınız sürece simülasyon sonsuza kadar çalışır; yalnızca bir initial bloğu varsa, olay kalmadığında simülatör kendiliğinden durur, ancak $finish eklemek yine de iyi bir uygulamadır
challenge icon

Görev

a değerini 0 olarak ayarlayan, ardından 10 zaman birimi sonra a değerini 1 olarak ayarlayan eksik initial bloğunu ekle.

Yapman gerekenler:

  1. initial begin ve end ekle
  2. a = 0 olarak ayarla
  3. #10 kadar bekle
  4. a = 1 olarak ayarla
  5. Simülasyonu bitirmek için $finish ekle

Kendin dene

module test;
  reg a;
  
  // TODO: initial bloğunu buraya ekle
  // a = 0 olarak ayarla
  // #10 kadar bekle
  // a = 1 olarak ayarla
  // Simülasyonu sonlandırmak için $finish; ekle
  
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