Penundaan Penugasan
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 69 dari 90.
Dalam pelajaran sebelumnya, kita membahas penundaan umum (#10 a = b;) dan penundaan gerbang (and #5 (out, a, b);). Sekarang kita membahas penundaan penugasan, yaitu penundaan yang terjadi di dalam blok prosedural (seperti initial atau always) sebagai bagian dari pernyataan penugasan.
Penundaan penugasan menunggu selama waktu yang ditentukan, lalu melakukan penugasan. Penundaan diletakkan setelah simbol # dan sebelum penugasan.
Sintaks:
variable = #delay expression;Tidak seperti penundaan umum #10 a = b; (tunda lalu tetapkan), penundaan penetapan a = #10 b; mengambil nilai b pada saat itu, menunggu 10 unit waktu, lalu menetapkannya ke a.
Penundaan Penugasan vs Penundaan Umum
| Penundaan Umum | Penundaan Penugasan | |
|---|---|---|
| Sintaks | #10 a = b; | a = #10 b; |
| Kapan nilai dibaca? | Pada saat penugasan (setelah penundaan) | Segera (sebelum penundaan) |
| Nilai apa yang ditugaskan? | Nilai b pada saat itu | Nilai b pada waktu 0 (atau waktu pembacaan) |
| Kapan nilai ditugaskan? | Setelah penundaan | Setelah penundaan |
Contoh: Perbedaannya
initial begin
b = 1;
#5 b = 0;
// Penundaan umum
#10 a1 = b; // Menunggu 10, lalu membaca b (b=0) → a1=0
// Penundaan penugasan
a2 = #10 b; // Membaca b sekarang (b=0), menunggu 10, lalu menetapkan nilainya → a2=0
endKeduanya memberikan hasil yang sama di sini. Perbedaannya terlihat saat b berubah selama penundaan.
Contoh Perbedaan Utama
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // Membaca b=1 pada waktu 0, menetapkan a1=1 pada waktu 10
end
initial begin
#5 b = 0; // Mengubah b menjadi 0 pada waktu 5 (selama penundaan)
end- Pada waktu 0:
a1membacab = 1 - Pada waktu 5:
bberubah menjadi0(saata1masih menunggu) - Pada waktu 10:
a1diberi nilai1(nilai yang dibaca pada waktu 0), bukan0
Dengan penundaan umum #10 a2 = b; di blok terpisah, b akan dibaca pada waktu 10 (nilainya 0).
Aturan Penting
| Aturan | Penjelasan |
|---|---|
= ditulis sebelum # | a = #10 b; bukan a #10 = b; |
| Nilai langsung dibaca | Sisi kanan langsung dievaluasi |
| Penugasan dilakukan setelah penundaan | Sisi kiri menerima nilai kemudian |
| Hanya untuk blok prosedural | Digunakan dalam initial atau always |
Tantangan
Yang harus dilakukan:
Tambahkan penundaan assignment yang hilang agar a mendapatkan nilai b setelah 15 satuan waktu, tetapi langsung membaca b.
Coba sendiri
module assignment_challenge;
reg a, b;
// Blok terpisah untuk mengubah b selama penundaan
initial begin
b = 1;
// TODO: Tambahkan penundaan penugasan
// a harus menerima nilai b setelah 15 satuan waktu
// Baca b sekarang, lalu tetapkan nilainya setelah penundaan
end
initial begin
#5 b = 0; // Mengubah b selama penundaan
#20 $display("Time %0t: a = %b", $time, a);
$finish;
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 ALU13Timing dan Penundaan
Apa Itu PenundaanPenundaan GerbangPenundaan PenugasanDirektif TimescalePembangkitan ClockRangkuman: Kontrol Timing5Operator 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