top of page

VHDL DİLİNDE İLK KODUMUZ

Tuğbanur Akgün

Diğer bölümde FPGA nedir? Donanım dili nedir? VHDL nedir? gibi başlıkları ele almıştık. Şimdi VHDL dili örnekler yaparak vhdl dilini anlayamaya ve öğrenmeye başlayalım. İlk başta anlaşılması zor ve karışlık gelecektir. Ama pes etmeden devamlı çalışın ve gayretli olun. Ve çok eğelenceli bir yazılım dünyasını keşfetmenin tadını çıkarın. Diğer yazılım programlama dillerindeki 'Hello World' veya donanımda led blink gibi ilk kodumuzu yazmaya başlayalım.


SORU 1 )

FPGA çipi üzerinde Swiç (switch) kullanarak led yakmak/söndürmek için gerekli devre tasarımını VHDL dilinde yazalım.


Basys 3 kartından hangi bölümleri kullanacağız;


16 adet switch den sıfırıncı switch

16 adet led imizden sıfırıncı led imizi kullanacağız.


KOD


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity sw_led is
    Port ( 
           sw  : in STD_LOGIC;
           led : out STD_LOGIC
           );
end sw_led;

architecture Behavioral of sw_led is

begin

       led <= sw;

end Behavioral;

Kod açıklamarına geçmeden önce kod blocklarını öğrenelim.


VHDL TASARIM BÖLÜMLERİ


Genel olarak 3 bölümden oluşmaktadır.




1) Kütüphane ve Paketler Bölümü

Adından da anlaşılacağı gibi gerekli kütüphaneleri eklediğimiz kısımdır.


2) Entity

Bu kısımda devremiz için gerekli giriş ve çıkış portlarını tanımladığımız kısımdır.


Peki nasıl yazmalıyız;


1 - Bir tane giriş veya çıkış için değişken ismi vermeliyiz.

2 - Değişken isimden sonra iki nokta koymamız lazım.

3 - Değişkenin giriş mi çıkış mı onu belirlememiz gerekli.

4 - Değişkenin tipini belirliyoruz.


3) Architecture

Ana kodumuzu yazdığımız kısımdır. Architecture ve begin arasındaki sinyallerini tanımlarız. Beginden sonra ana kodumuzu yazmaya başlayabiliriz.




KOD AÇIKLAMALARI


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

Bu iki kütüphaneyi lojik kapıları, std_logic ve std_logic_vector kullanabilmek için kodumuza dahil etmemiz gerekiyor.


 sw  : in STD_LOGIC;
 led : out STD_LOGIC

std_logic türünde sw isimli bir giriş tanımladık.

std_logic türünde led isimli bir çıkış tanımladık.


NOT:

Fark ettiğiniz gibi ilk değişken bittiği zaman satır sonuna noktalı virgül koyduk ama entity i bitirmeden önceki satır sonuna noktalı virgül koyuyoruz.


       led <= sw;

Switch imize vereceğimiz sw adlı değişkenin değerini( 0 - 1) led imize vereceğimiz led adlı değişkene verdik.


Kodumuzu yazdığımıza göre pin atamalarını yapabiliriz. 2 yol ile de yapabilirsiniz.



1. YOL


Add source yazan kutucuğa tıklayın.



Add or create constraints e tıklayın.



Add file seçin. Alta vereceğim dosyayı indirin ve onu ekleyin.



Finish demeden önce alt kutudaki copy seçeneğini işaretleyin. Yoksa asıl dosyamız bozulacaktır.




Design source menüsünden constraints tıklayın ve orada eklediğimiz Basys3 master kartını göreceğiz.


Çift tıklayın ve lazım olan pinleri atamaya başlayabiliriz.


Tüm pinler yorum satırı olarak gelecektir. Lazım olan pinlerin yorum satırı olmaktan çıkarın.


Kod yazarken tanımlamış olduğumuz isimler ile buradaki tanımlı isimler ile değiştirin.



## Switches
set_property PACKAGE_PIN V17 [get_ports {sw[0]}]					
	set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]
set_property PACKAGE_PIN V16 [get_ports {sw[1]}]					
	set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}]

## LEDs
set_property PACKAGE_PIN U16 [get_ports {led[0]}]					
	set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]

NOT )

sw[0]
led[0]

Bizim sw ve ledimiz 1 bit olduğu için buraları aşağıdaki gibi düzenlememiz gereklidir.


[0] ın anlatımı içindeki yazan biti al demektir. Ama bizim led ve sw değişkenimiz sadece 1 bit olduğu için sadece sw ve led olarak tanımlamamız yeterlidir.



## Switches
set_property PACKAGE_PIN V17 [get_ports {sw}]					
	set_property IOSTANDARD LVCMOS33 [get_ports {sw}]
set_property PACKAGE_PIN U16 [get_ports {led}]					
	set_property IOSTANDARD LVCMOS33 [get_ports {led}]

Sol taraftaki bölümden Run implementation seçeneğini seçelim.


Eğer hata alamsak koduz doğru demektir ve generate bitstream seçeneğini seçebiliriz.


Artık kodumuzu karta yükleyebiliriz.


Auto connect program device diyerek kodumuzu karta yükleyebiliriz.



2. YOL


Üstteki adımları hiç yapmadan kodumuzu yazma bittikten sonra Run implementation seçeneğini seçiyoruz.


Hata almazsak alttaki adımları izleyebiliriz.


Hata alırsak kodundaki hatayı düzeltelim ve tekrardan Run implementation diyelim.



1)




2)




Değişken isimlerini görmezseniz biraz imleci hareket ettirin ve pin isimlerini manuel olarak yazın.


3)


4)



Run implementation seçeneğini seçelim.

Eğer hata almazsak kodumuz doğru demektir.

Generate bitstream seçeneğinizi seçelim.

Artık kodumuzu karta yükleyebiliriz.

Auto connect program device diyerek kodumuzu karta yükleyebiliriz.



Basys 3 kartı pin atamaları;




Bazen kodumuzu karta yüklerken hata oluşabilir.

Kartı tak çıkart yapın.

Tekrar auto connect seçeneğini seçin ve karta yükleyebiliriz.



Ve VHDL dilinde ilk kodumuzu tamamlamış olduk. Diğer serilerde farklı kodlarda görüşmek üzere :)











 
 
 

Comentarios


SUBSCRIBE VIA EMAIL

  • Facebook
  • LinkedIn
  • Twitter
  • Instagram

Thanks for submitting!

© 2035 by Salt & Pepper. Powered and secured by Wix

bottom of page