Apa Itu Testbench
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 73 dari 90.
testbench adalah module Verilog khusus yang digunakan untuk menguji module lain. Testbench memberikan input ke desainmu dan memeriksa apakah output-nya benar.
Mengapa Kita Membutuhkan Testbench?
Saat kamu membuat module, kamu perlu memastikan module tersebut berfungsi dengan benar. Testbench memungkinkan kamu untuk:
- Menerapkan berbagai nilai input ke module
- Mengamati output
- Periksa apakah output sesuai dengan yang kamu harapkan
- Lakukan ini secara otomatis tanpa pengujian manual
Testbench dibandingkan dengan Modul Desain
| Modul Desain | Testbench | |
|---|---|---|
| Tujuan | Mengimplementasikan perangkat keras | Menguji modul desain |
| Memiliki port? | Ya (input dan output) | Tidak (mandiri) |
| Dapat disintesis? | Ya | Tidak (hanya simulasi) |
Contoh Testbench Sederhana
module testbench; // Tanpa port!
// Input dan output berasal dari module yang sedang kita uji (DUT).
reg a, b; // reg untuk input
wire c; // wire untuk output
// Ini adalah instansiasi module. Proses ini membuat salinan module and_gate dan menamainya dut.
and_gate dut ( // Buat instans DUT
.a(a),
.b(b),
.c(c)
);
// Ini adalah blok initial yang memberikan nilai uji ke input module yang sedang diuji.
initial begin // Berikan nilai uji
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
end
endmodulePoin Penting
- Testbench tidak memiliki port
regdigunakan untuk sinyal yang berubah (input ke DUT)wiredigunakan untuk sinyal dari DUT (output)
- Module yang sedang diuji disebut DUT (Design Under Test)
$finishmengakhiri simulasi
Kita akan membahas cara membuat stimulus, menampilkan hasil, dan fitur testbench lainnya dalam pelajaran berikutnya.
Tantangan
Kamu diberi sebuah modul gerbang AND. Tugasmu adalah menambahkan bagian yang hilang ke testbench-nya.
Yang harus dilakukan:
Tambahkan bagian berikut ke testbench:
- Deklarasikan
reguntuk inputadanb - Deklarasikan
wireuntuk outputc - Buat instance
and_gatedengan namadutdan hubungkan port-portnya
Coba sendiri
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
// Tugas 1: Deklarasikan reg untuk input a dan b
// Tugas 2: Deklarasikan wire untuk output c
// Tugas 3: Buat instansiasi and_gate dengan nama dut
// Hubungkan .a(a), .b(b), .c(c)
initial begin
a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
$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