FPGA ve VHDL üzerine


An itibariyle okulun Ar-Ge labında staj yaparken burada staja başlama sebebim olan FPGA üzerine birşeyler yazayım dedim. ilk hafta (ve biraz da ikinci hafta) ufak işlerle geçtikten sonra. VHDL'e rahat bir giriş yaptım. VHDL ne? VHDL en basit olarak FPGA'ların programlandığı, programlama dili. Yazım olarak bildiğimiz (C gibi) programlama dillerine benzerliği var. Fakat uygulaması çok farklı. Çünkü VHDL bir donanım tanımlama dili (V-Hardware Description Language) . Ve böyle olmasının sebebi de cihazımız FPGA'nın yapısı..

FPGA nedir peki? Açılımı Field Programmable Gate Array (Alanda Programlanabilir Kapı Dizileri) olan bu cihaz pratikte bazen bir işlemci gibi çalışsa da aslında iç yapısı çok farklı. FPGA'nın içerisinde sıradan işlemcilerin vazgeçilmezi olan temel birimler (ALU'lar, Register'lar, Bellekler vs) yok. Hiç biri yok. FPGA içerisinde sadece temel lojik kapılardan oluşan küçük birimler, bunları birbirine bağlayan veri yolları ve bu veri yollarını açıp kapatmaya (yönlendirmeye) yarayan anahtarlar var. Bir FPGA'in içerisinde birkaç yüzbin adet lojik kapı bulunabiliyor. Ve bu lojik kapıları aklınıza gelebilecek her türlü lojik tasarımı gerçekleştirebilecek şekilde kullanabiliyorsunuz. Mesela; sayıcı, saklayıcı, alu, flip-floplar.. hatta pekala bir FPGA ile kendi işlemcinizi dahi tasarlayıp çalıştırabilirsiniz.

FPGA'leri sektörde popüler yapan yönü paralel işlem kabiliyeti ve yüksek hızlarda çalışabilmesi. FPGA'lerin çalışma frekansları 10 MHz'lerden bir kaç GHz'e kadar çıkabiliyor. Paralel işlem kabiliyeti ise son derece esnek (harbi son derece) olan tasarımından kaynaklanıyor. Paralel olarak 10 farklı analog dijital dönüştürücüden bilgi alıp bu bilgiyi aynı anda işlemek mi istiyorsunuz? Bu işleme algoritmasını VHDL dilini kullanarak (pekala bir şematik editörden de faydalanabilirsiniz) geliştiriyorsunuz. Yani kendinize bir VHDL dili ile bir modül oluşturuyorsunuz. Bu modülleri FPGA içerisinde 10 tanesi paralel olacak biçimde yerleştiriyorsunuz. Farklı pinlerden (Çoğu FPGA'nın bol bol pini var, besleme ve toprak pinleri hariç neredeyse tamamını kendi isteğidiğiniz biçimde kullanabiliyorsunuz) ADC çıkışlarını alıyorusunuz, işlem yapan modüllerinize giriş olarak bağlıyorsunuz (bunlar küçük bir ayar dosyası ile yapılıyor). Tamamdır; bu modüllere ayrı ayrı saatlerini de verdikten sonra hepsi ayrı birer "işlemci" olarak çalışacaktır.

Gelgelelim VHDL'e. Bu dilde kullanılan bazı kalıplar (if,for gibi) normal (işlemciler için olan 🙂 ) programlama dillerindeki yapılar gibi yazılıp, kullanılıyor. Fakat VHDL'de farkı olan şu; alta alta yazdığınız komutlar (!) sırayla işlenmiyor. Bunların hepsi aynı anda işleniyor. Yani aslında sistem sizin yazdığınız komutlara göre kapılardan bir tasarım oluşturuyor (sentezleme deniyor buna) ve bu tasarım da o komutlara göre paralel olarak çalışan kapılardan oluşuyor. Paralel çalışan kapılar demek, paralel yürüyen işlemler ve paralel gelen sonuçlar demek…

Şimdilik Active-HDL adlı simülasyon programı ile VHDL denemeleri yapıyorum. Labaratuarımızda FPGA kitleri mevcut. Dün akşam çok sağolsun Cenk Abi, zamanını ayırdı bize bir donanım örneği yaptı. Doğrusu prosedür karışık. Bugün biraz daha simülasyon'la haşır neşir olduktan sonra ufak bir dalış denemesi yapacağım.

Hadi bakalım…


Bir cevap yazın

E-posta hesabınız yayımlanmayacak.