Menulis Testbench
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 82 dari 90.
Tantangan
Dalam pelajaran ini, kamu akan membuat testbench untuk memverifikasi bahwa pengontrol lampu lalu lintas berfungsi dengan benar.
Yang harus dilakukan:
Buat testbench yang:
- Mendeklarasikan sinyal (
reguntuk clk dan reset,wireuntuk red, yellow, green) - Membuat instance module
traffic_lightdengan namauut - Membuat clock yang berganti setiap 1 satuan waktu
- Menerapkan reset selama 2 satuan waktu, lalu menonaktifkannya
- Menjalankan simulasi selama 100 satuan waktu
Simulasi diperiksa berdasarkan hasil cetaknya, jadi blok initial juga harus menghasilkan baris-baris berikut secara tepat:
- Cetak
Traffic Light Testdengan$displaysebelum clock dan reset disiapkan - Setelah 100 satuan waktu, cetak
Test completedengan$display - Akhiri simulasi dengan
$finish, yang menambahkan barisnya sendiri ke output
Coba sendiri
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
reg [5:0] counter;
// Penetapan output
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// Mesin keadaan dengan pengaturan waktu
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2;
counter <= 0;
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
counter <= 10;
end
1: begin
state <= 2;
counter <= 40;
end
2: begin
state <= 0;
counter <= 30;
end
endcase
end else begin
counter <= counter - 1;
end
end
end
endmodule
module testbench;
// TODO: Deklarasikan reg untuk clk dan reset
// TODO: Deklarasikan wire untuk red, yellow, green
// TODO: Instansiasikan module traffic_light dengan nama uut
// Hubungkan clk, reset, red, yellow, green
// TODO: Buat clock (ubah nilainya setiap 1 satuan waktu)
initial begin
$display("Traffic Light Test");
// TODO: Inisialisasi clk ke 0
// TODO: Terapkan reset (reset=1 selama 2 satuan waktu, lalu reset=0)
// TODO: Jalankan simulasi selama 100 satuan waktu
$display("Test complete");
$finish;
end
endmoduleSemua 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