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

Erdem⁣

Paylaşımcı üye
Katılım
14 Ocak 2013
Mesajlar
713
Puanları
106
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.
 

Forum istatistikleri

Konular
128,125
Mesajlar
915,236
Kullanıcılar
449,837
Son üye
betül hüsrevoğlu

Yeni konular

Geri
Üst