Menu
Coddy logo textTech

Clock Üretimi

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 71 / 90.

Saat (clock), düzenli aralıklarla sürekli olarak 0 ve 1 arasında geçiş yapan bir sinyaldir. Saatler, flip-floplar ve sayıcılar gibi ardışıl mantık devreleri için temel öneme sahiptir.

Neden Saat Sinyali Üretilir?

Testbench'lerde, ardışıl devreleri test etmek için bir saat sinyaline ihtiyacınız vardır. Saat sinyali; flip-flop'ların, kaydedicilerin ve durum makinelerinin davranışını yönlendirir.

Saat Sinyali Oluşturma Yöntemleri

YöntemAçıklama
# gecikmesi ile alwaysEn yaygın yöntem
forever döngüsüAlternatif yöntem
repeat döngüsüBelirli sayıda döngü için

Yöntem 1: Gecikmeli Always Bloğu

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • zaman 0'da clk = 0
  • Her 5 zaman biriminde, clk durum değiştirir
  • Periyot = 10 zaman birimi
  • Frekans = 1/10 = 0.1 zaman birimi başına

Yöntem 2: Forever Döngüsü

reg clk;

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end

always yöntemiyle aynı sonuç.

Yöntem 3: Sabit Çevrimler için Tekrarla

reg clk;

initial begin
  clk = 0;
  repeat (10) begin
    #5 clk = ~clk;
  end
end

Tam olarak 10 saat kenarı (5 tam çevrim) oluşturur, ardından durur.

challenge icon

Görev

Her 4 zaman biriminde bir değişen (periyot = 8 zaman birimi) bir saat üretmek için eksik kodu ekleyin.

Yapılacaklar:

  1. Bir initial bloğu kullanarak 0 anında clk değerini 0 olarak başlatın
  2. clk değerini her 4 zaman biriminde bir değiştirmek için gecikmeli bir always bloğu kullanın

Kopya kağıdı

Bir saat (clock), düzenli aralıklarla 0 ve 1 arasında geçiş yapar. Periyot = 2 × gecikme.

Yöntem 1: Always bloğu (en yaygın)

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk; // Period = 10

Yöntem 2: Forever döngüsü

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

Yöntem 3: Repeat (sabit sayıda kenar)

initial begin
  clk = 0;
  repeat(10) #5 clk = ~clk; // 10 edges = 5 cycles
end

Kendin dene

module clock_challenge;
  reg clk;
  
  // YAPILACAK: Adım 1 - clk = 0 değerini atamak için initial bloğu ekleyin
  
  
  // YAPILACAK: Adım 2 - clk değerini her 4 zaman biriminde bir tersine çevirmek için always bloğu ekleyin
  

  initial begin
    $monitor("Time %0t: clk = %b", $time, clk);
    #20;
    $display("Clock generated for 20 time units");
    $finish;
  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