FPGA Tabanlı Hesap Makinesi Tasarımı ve Uygulamaları
Platformumuzdaki en çok okunan ve popüler makaleleri görmek için Trendler bölümüne geçebilirsiniz.
FPGA (Field Programmable Gate Array) tabanlı hesap makineleri, donanım seviyesinde hesaplama yetenekleri sunan projelerdir. Bu tür projeler, temel aritmetik işlemler (+, -, *, /) yanı sıra logaritma, üs alma ve trigonometrik fonksiyonlar (sin, cos, tan) gibi karmaşık matematiksel işlemleri destekleyebilir. FPGA üzerinde bu fonksiyonların gerçekleştirilmesi, yazılım tabanlı hesap makinelerinden farklı olarak doğrudan donanımın programlanması yoluyla yapılır.
Giriş Verilerinin İşlenmesi ve Klavye Tasarımı
Projede kullanılan klavye, yaklaşık 30 adet pushbutton (basmalı düğme) içerir. Bu düğmeler, 32:5 kodlayıcı (encoder) aracılığıyla 5 bitlik bir giriş sinyaline dönüştürülür. Kodlayıcı, 4 adet 8:3 kodlayıcı ve bazı AND kapısı entegre devreleri kullanılarak oluşturulmuştur. FPGA, bu 5 bitlik sinyali alır, sinyalin debouncing (titreşim önleme) işlemini yapar ve tekrar 30 butona karşılık gelen sinyallere çözer. Böylece her buton basımı, hesap makinesinin giriş tamponuna bir karakter olarak eklenir.
Her karakter, 8 bitlik benzersiz bir kimlik ile temsil edilir. Bu karakterler sayılar, operatörler, fonksiyonlar, ondalık noktalar, virgüller, parantezler ve sabitler (pi ve e) olabilir. "Evaluate" (değerlendir) sinyali gönderildiğinde, hesaplama süreci başlar.
Ayrıca Bakınız
Sayısal İfadelerin Dönüştürülmesi ve İşlenmesi
İlk aşamada, "numbuilder" modülü, ayrı ayrı girilen sayısal tokenları tek bir sayıya dönüştürür. Örneğin, 9 . 0 1 8 3 9 1 ifadesi 9.018391 sayısına çevrilir. Bu sayı, işaret, mantissa ve işaretli üs formatında temsil edilir ve toplamda 44 bitlik bir veri yapısı oluşturur.
Sonrasında, infix (orta) gösterimdeki ifadeler postfix (ters Polonya) gösterimine dönüştürülür. Bu dönüşüm, hesaplamanın daha kolay yapılabilmesi için gereklidir. Postfix ifadeler, postfix değerlendirme modülü tarafından işlenir ve sonuç hesaplanır.
Matematiksel Fonksiyonların Hesaplanması
Trigonometrik fonksiyonlar, logaritma ve üs alma işlemleri doğrudan FPGA üzerinde hesaplanır. Bu hesaplamalar için Taylor serisi yaklaşımı kullanılır; her terim manuel olarak hesaplanır ve toplanır. CORDIC algoritması kullanılmamıştır, çünkü base10 formatından base2 formatına dönüşüm yapılamamıştır.
Bu yöntemle hesaplama yapılmasına rağmen, doğruluk 6 basamaktan sonra azalmaya başlar. Bunun nedeni, modüller arasındaki bağımlılıklar nedeniyle hataların birikmesidir.
Sonuçların Gösterilmesi ve İletilmesi
Hesaplama tamamlandığında, sonuç ve giriş tamponu SPI (Serial Peripheral Interface) protokolü kullanılarak Arduino'ya gönderilir. Arduino, hesaplama işlemi yapmaz; sadece 16x2 LCD ekranda giriş ve sonucu görüntüler. Arduino'nun kullanılması, FPGA'nın doğrudan LCD sürücüsü için gerekli kütüphanelere sahip olmamasından kaynaklanmaktadır.
Bazı yorumlarda, FPGA'nın yerleşik SPI/I2C modüllerinin olduğu ve doğrudan LCD sürücüsü olarak kullanılabileceği belirtilmiştir. Ancak bu, kullanılan FPGA kartının kaynakları ve tasarım karmaşıklığı göz önünde bulundurulduğunda tercih edilmemiştir.
Tasarımın Kaynak Kullanımı ve Alternatif Yaklaşımlar
Proje, yaklaşık 40.000 LUT (Look-Up Table), 25.000 flip-flop ve 14 DSP (Digital Signal Processor) modülü kullanmaktadır. Bu kaynak kullanımı nedeniyle, daha ucuz FPGA kartları bu tasarımı destekleyememektedir.
Alternatif olarak, CORDIC algoritması kullanılarak hesaplamaların yapılması önerilmiştir. CORDIC, trigonometrik ve logaritmik hesaplamalar için optimize edilmiş bir yöntemdir ve FPGA üzerinde IP çekirdeği olarak veya yazılım tabanlı softcore işlemcilerle uygulanabilir. Bu yöntem, kaynak kullanımını önemli ölçüde azaltabilir.
Ayrıca, klavye için matris tarama yöntemi kullanmak, kaynakları daha verimli kullanmayı sağlar. Debounce ve kod çözme işlemleri HDL (Hardware Description Language) ile FPGA üzerinde yapılabilir.
Sonuç
FPGA tabanlı hesap makineleri, dijital tasarım ve donanım programlama becerilerini geliştirmek için etkili projelerdir. Tasarım sürecinde kullanılan yöntemler, kaynak kullanımı, doğruluk ve donanım-software entegrasyonu gibi faktörler göz önünde bulundurulmalıdır. Taylor serisi ile fonksiyon hesaplamaları yapılabilirken, CORDIC algoritması daha verimli bir alternatif olarak öne çıkmaktadır. Ayrıca, giriş birimleri ve çıktı ekranları için kullanılan yöntemler, tasarımın karmaşıklığını ve maliyetini etkiler. FPGA üzerinde doğrudan hesaplama yapmak, mikrodenetleyici kullanımına göre farklı avantajlar ve zorluklar sunar.















