Menggunakan System Tasks
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 77 dari 90.
Tugas sistem adalah perintah bawaan di Verilog yang diawali dengan tanda dolar ($). Tugas ini menjalankan fungsi yang berguna, seperti mencetak pesan, mengakhiri simulasi, dan membuat file bentuk gelombang.
Kita sudah membahas $display, $monitor, $dumpfile, dan $dumpvars di pelajaran sebelumnya. Di pelajaran ini, kita akan melihat tugas sistem tambahan yang berguna dalam testbench.
Tugas Sistem Tambahan
| Tugas Sistem | Tujuan |
|---|---|
$time | Mengembalikan waktu simulasi saat ini |
$finish | Mengakhiri simulasi |
$stop | Menjeda simulasi |
$random | Menghasilkan angka acak |
$time
Mengembalikan waktu simulasi saat ini. Berguna untuk melacak kapan peristiwa terjadi.
$display("Current time is %0t", $time);$finish
Mengakhiri simulasi. Selalu gunakan di akhir testbench.
$finish;$stop
Menjeda simulasi. Simulasi dapat dilanjutkan dengan perintah simulator. Berguna untuk debug.
$stop;$random
Menghasilkan angka acak. Berguna untuk membuat stimulus pengujian acak.
reg [7:0] rand_value;
rand_value = $random;Contoh Menggunakan Beberapa Tugas Sistem
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleTantangan
Tambahkan tugas sistem yang hilang ke testbench ini.
Yang harus dilakukan:
- Tambahkan
$displayuntuk mencetak waktu saat ini di awal - Tambahkan
$displayuntuk mencetak waktu saat ini di akhir - Tambahkan
$finishuntuk mengakhiri simulasi
Coba sendiri
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: Tambahkan $display yang menampilkan waktu saat ini di awal
// Format: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: Tambahkan $display yang menampilkan waktu saat ini di akhir
// Format: "End time: %0t"
// TODO: Tambahkan $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 ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator14Dasar-Dasar Testbench
Apa Itu TestbenchMembuat StimulusDisplay dan MonitorDumpfile dan DumpvarsMenggunakan System TasksRekap: Testbench Lengkap3Sistem 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