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
endContoh Sederhana
forever begin
$display("This prints forever");
endIni 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
endIni 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
endinitial begin
#100;
disable clock_gen; // Sekarang ini berfungsi
endPerulangan forever vs Perulangan Lainnya
| Perulangan | Berhenti? | Kapan Digunakan |
|---|---|---|
for | Ya (setelah jumlah iterasi tetap) | Jumlah pengulangan diketahui |
while | Ya (saat kondisi bernilai salah) | Kondisi berhenti tidak diketahui |
repeat | Ya (setelah jumlah iterasi tetap) | Jumlah pengulangan diketahui |
forever | Tidak (tidak pernah) | Sinyal berkelanjutan (jam) |
Aturan Penting
| Aturan | Penjelasan |
|---|---|
| Harus menyertakan penundaan | #10 atau @(posedge clk) |
| Tanpa penundaan, simulasi macet | Perulangan tak terbatas tanpa kemajuan waktu |
Gunakan bersama disable untuk menghentikannya | Atau simulasi tidak akan pernah berakhir |
| Sebaiknya digunakan dalam testbench | Tidak dapat disintesis |
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
endmodulePelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
1Pengantar
Apa Itu VerilogPerangkat Keras vs Perangkat LunakModul PertamamuKomentarTingkat Abstraksi Desain4Operator Bagian 1
Operator AritmetikaOperator ModuloOperator PerbandinganUlasan, Matematika SederhanaOperator Bitwise7Penugasan dan Gerbang
Penugasan KontinuPenugasan dengan OperatorPrimitif Gerbang BawaanGerbang AND, OR, NOTGerbang XOR, XNORUlasan: Rangkaian Gerbang Logika10Pengambilan Keputusan
Pernyataan IfIf - ElseRangkuman: Komparator SederhanaPernyataan CaseCasex dan CasezRangkuman: Desain ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator3Sistem Bilangan
Representasi BinerBilangan BerukuranBilangan Tanpa UkuranBilangan NegatifNilai Khusus X dan ZRingkasan: Format Bilangan6Modul
Struktur ModulPort Input dan OutputPort InoutInstansiasi ModulPemetaan Port Berdasarkan NamaPemetaan Port Berdasarkan UrutanRangkuman: Bangun Modul9Blok Prosedural
Blok alwaysBlok initialDaftar SensitivitasPenugasan BlockingPenugasan Non-BlockingRangkuman: always vs initial15Pengendali Lampu Lalu Lintas
Menentukan StatusLogika Mesin StatusLatihan sendiri: Compiler Verilog online