Merhaba arkadaşlar bu kurs serisinde VHDL dili ile FPGA programlamayı öğreneceğiz. Kodlarımızı Vivado programında yazacağız. Basys 3 kartında kodumuzun doğruluğunu test edeceğiz.
İlk olarak genel bilgileri öğrenelim.
FPGA NEDİR?
FPGA (Field Programmable Gate Arrays), " Alanda Programlanabilir Kapı Dizileri " anlamına gelen yarı iletken teknolojisine sahip cihazlardır.
FPGA çipleri üretim aşamasından sonra kullanıcı/tasarımcı tarafından yapılan tasarıma göre yapısının değiştirilebileceği tümdevrelerdir.
FPGA çipleri birbirinden bağımsız bir şekilde üretilmiş 1 K/M transistör olarak düşünülebilir
Temel olarak kullanıcının bir ya da daha fazla mantıksal işlemlerini gerçekleştirmek için de programlayabileceği donanım devresidir.
Tasarımcının istediği devreye göre bu transistörler FPGA teknolojisi ile birbirine bağlanarak istenilen tasarım gerçekleştirilir
FPGA YAPISI
Kullanıcının tasarladığı lojik devreye göre, lojik bloklar ve aralarındaki
bağlantılar programlanmaktadır.
Konfigüre edilebilir lojik bloklar: Configurable Logic Blocks (CLB)
CLB, kullanıcının oluşturmak istediği lojik devre için fonksiyonel elemanlar sağlamaktadır.
Giriş Çıkış Blokları: Input/Output Blocks (IOB)
IOB çipin iç sinyal hatları ile çipin pinleri arasında bir arabirim sağlar.
Arabağlantılar( Interconnections) ,CLB ve IOB giriş çıkışları arasındaki yönlendirmeyi tayin edmektedir.

Programlanabilir mantık kapıları, genel olarak bellek ve ya diğer öğelerden de meydana gelmiştir.FPGA nın en önemli olan ve de ayırt edici özelliği pararel işlemler yapabilme kabiliyeti olmaktadır.
Paralel işlem yapmak nedir?
FPGA programlarken akılımızdan çıkarmamamız gereken belkide en önemli nokta budur. Paralelden kast edilen tüm satırların aynı anda çalıştığıdır. Bu da FPGA programlama dili olan VHDL i bir çok yazılım dilinden c, c++, python gibi dillerden ayırmaktadır. Çünkü bu diller sıralı bir şekilde çalışır ama VHDL de codlar eş zamanlı olarak çalışır.
HDL NEDİR?
VHL (Hardware Description Language), " Donanım Tanımlama Dili " bir donanım parçasını modellemek için kullanılan yazılım dilidir. VHDL ile Verilog en yaygın kullanılan iki türüdür.
Donanım tasarlama dillerinin iki temel amacı vardır.
1) Dijital devreleri ve sistemleri modellemek için kullanılabilirler. Başka bir deyişle herhangi bir dijital devreyi tanımlayan gerekli olan her şeyi sağlarlar.
2) Bir çeşit devre modeli, devrenin sonraki simülasyonuna ve testine izin verirler.
VHDL NEDİR?
VHDL (Very High-Speed Integration Circuit) , "Çok Yüksek Hızlı Entegrasyon Devresi" HDL'nin (Donanım Tanımlama Dili) kısaltmasıdır. Karmaşık dijital devrelerin davranışını tanımlamak ve simüle etmek için kullanılan bir IEEE (Elektrik ve Elektronik Mühendisleri Enstitüsü) standart donanım tanımlama dilidir.
VHDL, muazzam miktarda veriyi işleyebilen işlevlerin tasarımına ve uygulanmasına izin verebilen çok heyecan verici bir dildir. Nispeten düşük maliyetli ve düşük güçlü bir donanım kullanarak.
Dahası, gerçekten etkileyici olan şey, basit VHDL modülleri aracılığıyla şunları yapabilirsiniz:
İletişim kurmak gibi temel ns düzeyindeki mantık olaylarına doğrudan erişime sahiptir.
Karmaşıklık grafikleri görselleştirmek için bir USB bağlantı noktası veya bir VGA monitör kullanarak yapabilirisiniz.
UYARI :
Yüksek seviyeli bir dil olan VHDL kodu yazma girişimleri style genellikle kimsenin anlamadığı bir kodla sonuçlanır. Ve bu çok normaldir. Eğer yazdığınız kod diğer sıralı dillere benziyorsa python gibi, o kötü yazılmış bir koddur. Ve VHDL çok geveze bir dildir :)
FPGA yı diğer sayısal işaret işleme birimlerinden (CPU DSP gibi) popüler yapmasının nedeni ;
Yüsek işlem gücü
Düşük güç tüketimi
Düşük gecikme
Yüksek paralellik özellikleridir.
FPGA nın Avantajları ;
Hızlı ilk Üretim
Yüksek Hız
Esneklik
Paralel İşlemler
Düşük Maliyet
FPGA bir çok farklı firma tarafından üretilir ;
Xilinx
Altera
Actel
Anadigm
Atmel
Leopard Logic
Quick Logic
Ama Xilinx firmasının üretmiş olduğu kartlar daha popülerdir. Ve FPGA üretim pazarının büyük bir oranını kapsar. Biz de bu yüzden Xilinx firmasının bir kartı olan Basys 3 kartını kullanacağız.
Xilinx Ailesi

Basys 3 Kartının Özellikleri

5200 dilimde 33280 mantık hücresi(her dilim 4 tane 6 ınput LUT lar ve flip flop)
1.800 Kbit hızlı blok RAM
Çip üzerinde analogdan dijitale dönüştürücü (XADC)
450 MHz'i aşan dahili saat hızları
90 DSP dilimi
Basys3 ayrıca aşağıdakiler de dahil olmak üzere gelişmiş bir bağlantı noktası ve çevre birimi koleksiyonu sunar:
16 tane switch
16 tane LED
5 tane pushbutton
4-digit 7-segment display
3 tane Pmod connectors
XADC signalleri için Pmod
12-bit VGA output
USB-UART Bridge
Serial Flash
FPGA programlama ve iletişim için Digilent USB-JTAG bağlantı noktası
Mouse, klavyeler için USB HID Host ve bellek çubukları

Kartın Datasheet özellikelrinden daha fazla bilgi öğrenebilirsiniz.
VIVADO PROGRAMI
Vivado programı lisanslı bir programdır. Direk Xilinx sitesinden indirmek istediğiniz sürümü indirebilrsiniz.
Programı indirdikten sonra klasik program setup adımlarını izliyoruz. Programın setup ını yaparken aşağıdaki gibi bir sayfa gelecektir.

Programın kurulumu bittikten sonra create new project dedikten sonra gerekli adımları izleyin. Kart özellikleri için seçmeniz gerekenler ;
Catogory => General Purpuse
Family => Artix 7
Package =>Cpg236
Speed => -1

Bu işlemleri yaptıktan sonra Design source menusunden dosyanızın üstüne çift tık yapın ve dosyanızı açın. Artık VHDL kodlmaya hazırız :)
FPGA TASARIM YÖNTEMLERİ ŞEMATİK
Şematik tasarım, tasarımcının devreyi grafiksel olarak modelleyebilmesine imkan sağlamaktadır.
Basit ve temel devre tasarımlarında tercih edilmektedir

Resimden de gördüğünüz gibi biz kod yazıyoruz ama ilk adıma baktığımızda lojik kapıların olduğunu görüyoz. Yani biz kod yazacağız ama yaptığımız her işlem lojic kapılar tarafından yönetiliyor. O zaman başlamadan lojik kapıları bir hatırlayalım.
LOJİK KAPILAR
Çıkış denklemi yazılırken çıkışın 1 olduğu değerler yazılır. Ve 1 ler kendisidir. 0 lar ise değilidir. A' demek A nın değili demektir.
VE KAPISI

A B C
0 0 0
0 1 0
1 0 0
1 1 1
C = A.B
VEYA KAPISI

A B C
0 0 0
0 1 1
1 0 1
1 1 1
C = A'B + AB' + AB
C = A + B
DEĞİL KAPISI

A C
0 1
1 0
C = A'
VE DEĞİL KAPISI

A B C
0 0 1
0 1 1
1 0 1
1 1 0
C = A'B' + A'B + AB'
C = (AB)'
VEYA DEĞİL KAPISI

A B C
0 0 1
0 1 0
1 0 0
1 1 0
C = A'B'
C = (A + B)'
ÖZEL VE KAPISI

A B C
0 0 0
0 1 1
1 0 1
1 1 0
C = A'B + AB'
Özel VEYA KAPISI

A B C
0 0 1
0 1 0
1 0 0
1 1 1
C = A'B' + AB
İlk giriş için bu kadar yeterli olduğunu düşünüyorum bir dahaki seriden itibaren kod yazmaya başlayabiliriz.
Comentários