Membuat Stimulus
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 74 dari 90.
Stimulus merujuk pada nilai input yang kamu terapkan pada desainmu untuk menguji apakah desain tersebut berfungsi dengan benar. Dengan mengubah input dan mengamati output, kamu dapat memastikan bahwa desainmu berperilaku sesuai harapan.
Anggap saja seperti menguji mesin: kamu menekan tombol yang berbeda (rangsangan) lalu mengamati apa yang terjadi (output). Membuat rangsangan yang baik adalah bagian penting dalam menulis testbench.
Sebagai contoh, lihat stimulus pada testbench berikut:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// STIMULUS DIMULAI DI SINI
// Kasus uji 1: Kedua input bernilai 0
a = 0; b = 0; #10;
// Kasus uji 2: a=0, b=1
a = 0; b = 1; #10;
// Kasus uji 3: a=1, b=0
a = 1; b = 0; #10;
// Kasus uji 4: Kedua input bernilai 1
a = 1; b = 1; #10;
// STIMULUS BERAKHIR DI SINI
$finish;
end
endmoduleSetiap STIMULUS diterapkan, lalu kita menunggu 10 satuan waktu (#10) sebelum stimulus berikutnya. Ini memberi DUT waktu untuk menghasilkan output.
Metode untuk Membuat Stimulus
| Metode | Cocok untuk | Contoh |
|---|---|---|
| Penugasan berurutan | Pengujian sederhana | a = 0; b = 0; #10; |
| For loop | Menguji semua kombinasi | for (i = 0; i < 4; i++) |
| Repeat loop | Mengulangi pola | repeat (10) #5 clk = ~clk; |
| Forever loop | Sinyal berkelanjutan | forever #5 clk = ~clk; |
Metode 1: Penugasan Berurutan
Cara paling sederhana untuk membuat STIMULUS. Kamu menetapkan nilai satu per satu dengan jeda.
initial begin
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
endCara 2: for loop
Berguna saat kamu ingin menguji semua kombinasi input yang mungkin.
integer i;
initial begin
for (i = 0; i < 4; i = i + 1) begin
{a, b} = i;
#10;
end
$finish;
endIni menguji: 00, 01, 10, 11.
Method 3: Perulangan repeat
Berguna untuk mengulang stimulus yang sama berkali-kali.
initial begin
a = 0; b = 1;
repeat (10) begin
#10 a = ~a;
end
$finish;
endMetode 4: Loop forever
Berguna untuk sinyal yang terus-menerus, seperti jam.
initial begin
clk = 0;
forever #5 clk = ~clk;
endAturan Penting
| Aturan | Penjelasan |
|---|---|
| Gunakan jeda di antara penetapan stimulus | #10 memberi waktu bagi DUT untuk merespons |
Gunakan reg untuk sinyal stimulus | Karena sinyal tersebut berubah seiring waktu |
Tambahkan $finish di akhir | Untuk menghentikan simulasi |
Tantangan
Kamu diberi modul gerbang OR. Tugasmu adalah menambahkan stimulus dan pernyataan $display yang belum ada untuk mencetak hasilnya.
Yang harus dilakukan:
Tambahkan stimulus untuk menguji keempat kombinasi input (00, 01, 10, 11):
- Pada setiap baris, tetapkan nilai untuk
xdany - Tambahkan
#10untuk jeda - Tambahkan
$displayuntuk mencetak hasilnya
$display harus terlihat seperti ini:
$display("%d %d | %d", x, y, z);Coba sendiri
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
$display("x y | z");
$display("---------");
// TODO: Tambahkan stimulus dan tampilan untuk 0 0
// TODO: Tambahkan stimulus dan tampilan untuk 0 1
// TODO: Tambahkan stimulus dan tampilan untuk 1 0
// TODO: Tambahkan stimulus dan tampilan untuk 1 1
$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