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 pernah berhenti dengan sendirinya.

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

Sintaks:

forever begin
  // Kode yang berulang terus-menerus
end

Contoh Sederhana

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

Ini akan terus mencetak tanpa henti dan membuat simulasimu crash. Selalu tambahkan jeda atau kondisi penghentian.

Membuat Jam (Penggunaan Umum)

Penggunaan forever yang paling umum adalah untuk membuat jam:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Balikkan nilai 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

Forever dibandingkan dengan Perulangan Lain

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

Aturan Penting

AturanPenjelasan
Harus menyertakan jeda#10 atau @(posedge clk)
Tanpa jeda, simulasi macetPerulangan tak terbatas tanpa kemajuan waktu
Hentikan perulangan dengan disable atau akhiri simulasi dengan $finishJika tidak, simulasi tidak akan pernah berakhir
Paling cocok digunakan dalam testbenchTidak dapat disintesis
challenge icon

Tantangan

Yang harus dilakukan:

Tambahkan perulangan forever yang belum ada untuk membuat clock yang berubah setiap 10 unit 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