Testbench Yazma
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 82 / 90.
Görev
Bu derste, trafik ışığı denetleyicisinin doğru çalıştığını doğrulamak için bir testbench oluşturacaksın.
Yapılacaklar:
Aşağıdakileri yapan bir testbench oluştur:
- Sinyalleri bildir (
regclk ve reset için,wirered, yellow ve green için) traffic_lightmodülünüuutadıyla örnekle- Her 1 zaman biriminde geçiş yapan bir saat sinyali oluştur
- Reset sinyalini 2 zaman birimi boyunca uygula, ardından serbest bırak
- Simülasyonu 100 zaman birimi boyunca çalıştır
Simülasyon, yazdırdığı çıktıya göre kontrol edilir; bu nedenle initial bloğunun da tam olarak şu satırları üretmesi gerekir:
- Saat ve reset ayarlanmadan önce
$displayileTraffic Light Testyazdır - 100 zaman biriminin ardından
$displayileTest completeyazdır - Çıktıya kendi satırını ekleyen
$finishile simülasyonu sonlandır
Kendin dene
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
reg [5:0] counter;
// Çıkış atamaları
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
// Zamanlamalı durum makinesi
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: clk ve reset için reg bildir
// TODO: red, yellow, green için wire bildir
// TODO: traffic_light modülünü uut adıyla örnekle
// clk, reset, red, yellow, green bağla
// TODO: Saat üret (her 1 zaman biriminde değiştir)
initial begin
$display("Traffic Light Test");
// TODO: clk'yi 0'a başlat
// TODO: Reset uygula (2 zaman birimi için reset=1, sonra reset=0)
// TODO: Simülasyonu 100 zaman birimi çalıştır
$display("Test complete");
$finish;
end
endmoduleTemel Bilgiler bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerMod Alma OperatörüKarşılaştırma OperatörleriTekrar - Basit MatematikBit Düzeyi Operatörleri7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND, OR ve NOT KapılarıXOR ve XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Verme
If İfadesiIf - ElseTekrar - Basit KarşılaştırıcıCase İfadesiCasex ve CasezTekrar - ALU Tasarımı2Veri Türleri
Wire TürüReg TürüTamsayı ve GerçelVektörlerDizilerParametrelerÖzet - Sinyalleri Tanımlama5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörTekrar - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüTekrar DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiTekrar - Döngü Kalıpları3Sayı Sistemi
İkili GösterimBoyutlu SayılarBoyutsuz SayılarNegatif SayılarÖzel X ve Z DeğerleriTekrar - Sayı Biçimleri6Modüller
Modül YapısıGiriş ve Çıkış PortlarıÇift Yönlü PortlarModül ÖrneklendirmeAda Göre Port EşlemeSıraya Göre Port EşlemeTekrar - Bir Modül Oluşturma9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiBloklayıcı AtamaBloklamayan AtamaTekrar - Always ve Initial Karşılaştırması15Trafik Işığı Denetleyicisi
Durumları TanımlamaDurum Makinesi MantığıKendi başına pratik yap: Online Verilog derleyicisi