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