Memverifikasi Output
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 83 dari 90.
Tantangan
Dalam pelajaran ini, kamu akan menambahkan perintah untuk membuang bentuk gelombang dan memastikan pengontrol lampu lalu lintas berfungsi dengan benar.
Sampai sekarang, testbench tersembunyi dan ditambahkan ke modulmu. Pada langkah ini, testbench menjadi bagian dari file kamu: pertahankan modul traffic_light dari langkah sebelumnya (pengaturan waktu counter, tanpa input next) dan tambahkan modul testbench di bawahnya. Jika filemu belum memiliki module testbench, salin yang ini:
module testbench;
reg clk, reset;
wire red, yellow, green;
traffic_light uut (
.clk(clk),
.reset(reset),
.red(red),
.yellow(yellow),
.green(green)
);
always #1 clk = ~clk;
initial begin
// TODO: Add $dumpfile to create "traffic.vcd"
// TODO: Add $dumpvars to dump all signals (0, testbench)
$display("Traffic Light Test");
$monitor("Time %0t: red=%b, yellow=%b, green=%b", $time, red, yellow, green);
clk = 0;
reset = 1;
#2 reset = 0;
#90;
$finish;
end
endmoduleYang harus dilakukan:
Perbarui testbench untuk:
- Tambahkan
$dumpfileuntuk membuat file bentuk gelombang bernamatraffic.vcd - Tambahkan
$dumpvarsuntuk membuang semua sinyal di testbench - Jalankan simulasi dan periksa outputnya
Pengujian membandingkan seluruh output simulator, jadi testbench harus mencetak persis seperti yang dicetak testbench di atas dan tidak mencetak apa pun lagi: header $display("Traffic Light Test"), satu baris $monitor untuk setiap perubahan lampu, clock yang berganti setiap satuan waktu, reset yang dilepas pada waktu 2, dan $finish setelah #90. Jangan tambahkan baris $display lain (jangan tulis "Test complete").
Output yang diharapkan (simulator menambahkan sendiri baris akhir $finish called at 92):
VCD info: dumpfile traffic.vcd opened for output.
Traffic Light Test
Time 0: red=1, yellow=0, green=0
Time 3: red=0, yellow=0, green=1
Time 65: red=0, yellow=1, green=0
Time 87: red=1, yellow=0, green=0Coba sendiri
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// Status: 0=Hijau, 1=Kuning, 2=Merah
reg [1:0] state;
reg [5:0] counter;
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Mulai dari merah
counter <= 0;
end else begin
if (counter == 0) begin
// Ubah status
if (state == 0) begin // Hijau -> Kuning
state <= 1;
counter <= 10; // Kuning berlangsung selama 10 detik
end else if (state == 1) begin // Kuning -> Merah
state <= 2;
counter <= 40; // Merah berlangsung selama 40 detik
end else begin // Merah -> Hijau
state <= 0;
counter <= 30; // Hijau berlangsung selama 30 detik
end
end else begin
counter <= counter - 1;
end
end
end
// Logika output
always @(*) begin
red = (state == 2);
yellow = (state == 1);
green = (state == 0);
end
endmodule
module testbench;
reg clk, reset;
wire red, yellow, green;
traffic_light uut (
.clk(clk),
.reset(reset),
.red(red),
.yellow(yellow),
.green(green)
);
always #1 clk = ~clk;
initial begin
// TODO: Tambahkan $dumpfile untuk membuat "traffic.vcd"
// TODO: Tambahkan $dumpvars untuk merekam semua sinyal (0, testbench)
$display("Traffic Light Test");
$monitor("Time %0t: red=%b, yellow=%b, green=%b", $time, red, yellow, green);
clk = 0;
reset = 1;
#2 reset = 0;
#90;
$finish;
end
endmodule
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 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