Menu
CoddyTech

Forever loop

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 61 dari 90.

Perulangan forever mengulang blok kode terus-menerus, selamanya. Perulangan ini tidak akan berhenti dengan sendirinya.

Perulangan forever dijalankan berulang kali tanpa henti. Perulangan ini berguna untuk menghasilkan clock dan sinyal kontinu lainnya di testbench.

Sintaks:

forever begin
  // Kode yang berulang selamanya
end

Contoh Sederhana

forever begin
  $display("This prints forever");
end

Ini akan mencetak tanpa henti dan membuat simulasimu mengalami crash. Selalu tambahkan jeda atau kondisi berhenti.

Menghasilkan Clock (Penggunaan Umum)

Penggunaan forever yang paling umum adalah untuk menghasilkan clock:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Ubah nilai clk setiap 5 satuan waktu
  end
end

Ini membuat jam yang berjalan selama seluruh simulasi.

Selamanya dengan Disable

Kamu bisa menghentikan perulangan forever menggunakan pernyataan disable:

initial begin : clock_gen   // Nama ditambahkan di sini
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // Sekarang ini berfungsi
end

Perulangan forever vs Perulangan Lainnya

PerulanganBerhenti?Kapan Digunakan
forYa (setelah jumlah iterasi tetap)Jumlah pengulangan diketahui
whileYa (saat kondisi bernilai salah)Kondisi berhenti tidak diketahui
repeatYa (setelah jumlah iterasi tetap)Jumlah pengulangan diketahui
foreverTidak (tidak pernah)Sinyal berkelanjutan (jam)

Aturan Penting

AturanPenjelasan
Harus menyertakan penundaan#10 atau @(posedge clk)
Tanpa penundaan, simulasi macetPerulangan tak terbatas tanpa kemajuan waktu
Gunakan bersama disable untuk menghentikannyaAtau simulasi tidak akan pernah berakhir
Sebaiknya digunakan dalam testbenchTidak dapat disintesis
challenge icon

Tantangan

Yang harus dilakukan:

Tambahkan perulangan forever yang belum ada untuk membuat clock yang berganti setiap 10 satuan waktu.

Coba sendiri

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: Tambahkan perulangan forever untuk mengubah nilai clk setiap 10 satuan waktu
  end
endmodule
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online