Verilog sınama tezgahı nasıl yazılır

Erdem⁣

Katılımcı Üye
Katılım
14 Ocak 2013
Mesajlar
502
Puanları
58
Aslında arkadaşlar bu konu, benim de yeni öğrenmekte olduğum bir konu.

Verilog öğrenmek isteyen arkadaşlar en baştan bu konuyu araştırma zahmetine girmesin diye kısaca giriş seviyesinde bir yazı hazırlamayı düşündüm.

vlog1.png
Diyelim ki donanım düzeyinde yukarıdaki işlevi Verilog kullanarak gerçekleştirmek istiyoruz.

Kod:
module birseyler(input a, b, c,
                 output y);

   assign y = ~b & ~c | a & ~b;
endmodule // birseyler
Gördüğünüz gibi Verilog kodu oldukça basit. a, b ve c'yi giriş olarak tanımladık. y ise çıkış olacak.

Yazdığımız işlevin doğru çalışıp çalışmadığını sınamamız gerekiyor.
Kod:
module sina1;
   reg a, b, c;
   wire y;

   // sınanacak cihazı ilklendir
   birseyler dut (.a(a), .b(b), .c(c) , .y(y));

   // girişleri birer birer uygula
   initial begin
      $dumpfile("birseyler.vcd");
      $dumpvars(1, sina1.a, sina1.b, sina1.c, sina1.y);
      a = 0;
      b = 0;
      c = 0; // girişleri uygula 10 ns bekle
      #10;
      c = 1;
      #10;
      b = 1;
      c = 0;
      #10;
      c = 1;
      #10;
      a = 1;
      b = 0;
      c = 0;
      #10;
   end // initial begin
endmodule // sina1
Sınama için farklı şekilde sınama tezgahları yazmak mümkün olsa da şimdilik en basitini yazıyoruz.

Dikkat ederseniz sina1 işlevinin herhangi bir girişi ya da çıkışı yok. İlk önce sınanacak cihazı ilklendiriyoruz.

$dumpfile ile bu değişkenleri yazmak istediğimiz kütüğü belirtiyoruz. $dumpvars ile de hangi değişkenlerin kütüğe yazılacağını belirtiyoruz. Bir sonraki kısımda ise basitçe değişkenlere vermek istediğimiz değerleri belirtiyoruz. Daha sonra bir süre bekliyoruz. Örneğin '#10' 10 nano saniye kadar bekle demek.

Kodu derleyelim.
$ iverilog -o birseyler birseyler.v sina1.v

Çalıştıralım.
$ vvp birseyler

Oluşturulan dalga şekline bakmak için :
$ gtkwave birseyler.vcd &

komutunu verebiliriz.

gtkwave1.png
Girişlerin istediğimiz gibi olduğunu görebiliriz.

Dikkat ederseniz çıkış işlevini yani y'nin değerinı sınamadık. Aslında bunun da yöntemleri var. Ama şimdilik yazıyı giriş seviyesinde tutmak için bu noktada sonlandırıyorum.

Daha önceki Verilog'a giriş niteliğindeki yazı için buraya bakabilirsiniz.
 

Ekli dosyalar

Sponsor Bağlantı

Forum istatistikleri

Konular
112,478
Mesajlar
791,694
Kullanıcılar
413,341
Son üye
feba1907
Üst