FPGA (Field Programmable Gate Array), donanım olarak yeniden yapılandırılabilir bir mimaridir. Başka bir deyişle, iç yapısını değiştirmek üzere programlanabilen bir yongadır. FPGA’lar, uzun yıllardır uygulamaya özel yongaların (ASIC’ler) yerine düşük hacimli çözümler olarak kullanılmaktadır.
FPGA'nın Temel Yapısı
FPGA mimarisi temel olarak dört bölümden oluşur: yapılandırılabilir mantık bloğu (CLB), giriş-çıkış bloğu (IOB), iç bağlantı (Interconnect) ve diğer gömülü birimler. FPGA cihazının iç yapısı aşağıda gösterilmiştir.

Yapılandırılabilir Mantık Bloğu (CLB)
CLB, FPGA'nın temel mantık birimidir. Gerçek sayı ve özellikler cihazdan cihaza değişiklik gösterebilir, ancak her CLB, 4 veya 6 girişli yapılandırılabilir bir anahtar matrisi, birkaç seçim devresi (çoklayıcılar vb.) ve flip-flop içerir.
Giriş ve Çıkış Bloğu (IOB)
FPGA'lar birçok G/Ç standardını destekleyebildiğinden, sistem tasarımları için ideal bir arayüz köprüsü görevi görürler. FPGA'daki G/Ç girişleri bankalar halinde gruplandırılmıştır ve her bir banka farklı G/Ç standartlarını bağımsız olarak destekleyebilir. Günümüzde en gelişmiş FPGA'lar, esnek G/Ç desteği sunan ondan fazla G/Ç bankası sunmaktadır.
İç Kablolama (Bağlantı)
CLB'ler mantık işlevlerini yerine getirirken, esnek bağlantı yönlendirme sistemi CLB'ler ile giriş/çıkışlar (I/O) arasında sinyallerin aktarılmasından sorumludur. Yönlendirme türleri arasında, cihaz içindeki özel CLB bağlantıları (kısa kablo kaynakları) ile yüksek hızlı yatay ve dikey uzun kablolar (uzun kablo kaynakları) arasında değişen seçeneklerin yanı sıra, saat sinyalleri ve diğer genel sinyaller için kullanılan genel düşük sapma yönlendirme (genel özel yönlendirme kaynakları) da bulunmaktadır.
Gömülü Üniteler
Gömülü donanım çekirdekleri arasında RAM, DSP, DCM (Dijital Saat Yönetimi Modülü) ve diğer özel arayüz donanım çekirdekleri vb. yer almaktadır.
FPGA Özellikleri
- FPGA kullanılarak ASIC devresi tasarlandığında, geliştirme süresi kısadır, maliyet düşüktür, risk azdır ve kalite istikrarlıdır;
- FPGA, düşük güç tüketimine sahip yüksek hızlı CMOS teknolojisini kullanır;
- FPGA mimarisi, esnek mantık birimi, yüksek entegrasyon, geniş uygulama yelpazesi;
- FPGA, PLD ve genel kapı dizisinin avantajlarıyla uyumludur ve büyük ölçekli devreleri gerçekleştirebilir;
- Yerinde yeniden programlama mümkündür ve sonraki bakım maliyeti düşüktür;
- FPGA, çok işlevli gereksinimleri aynı anda karşılayabilen bir paralel hesaplama sistemidir.
FPGA nasıl çalışır?
FPGA, programlama verilerini dahili statik depolama birimlerine yükleyerek mantık işlevlerini gerçekleştirir. Depolama biriminde saklanan değer, mantık biriminin mantık işlevini ve her bir mantık birimi modülü arasındaki ya da modül ile G/Ç arasındaki bağlantı modunu belirler ve nihayetinde FPGA’nın gerçekleştirdiği işlevi belirler. FPGA, kombinasyonel mantığı uygulamak için küçük bir arama tablosu kullanır; her arama tablosu bir D flip-flop'un girişine bağlanır ve D flip-flop, diğer mantık devrelerini veya I/O'yu sürmek için kullanılır, böylece birleşik bir mantık fonksiyonu oluşturur ve sıralı mantık fonksiyonunun temel mantık birimi modülünü gerçekleştirir; bu modüller birbirlerine veya I/O modülüne metal tellerle bağlanır.
İşte FPGA'nın çalışma prensibini açıklayan basit bir örnek:

Yukarıdaki şekilde gösterildiği gibi, 16bitRAM'i 0000000000000001 olarak yapılandırıyoruz ve bu devre F=A&B&C&D'ye eşdeğerdir;
Yalnızca A=B=C=D=1 olduğunda F=1, aksi takdirde F=0;
"0000000000000001" Bu sayı dizisi FPGA programlamasıdır.
FPGA'nın Mantık Bloğu
FPGA'da "LUT" (Lookup Table) adı verilen özel bir terim vardır.
LUT, herhangi bir FPGA'nın en temel birimini oluşturur.
LUT yalnızca dijital kombinasyonel mantığı uygulayabilir, bu nedenle veri kilitlemeyi gerçekleştirmek için bir kayıt flipflop (ff) eklenir;
Aşağıdaki şekilde gösterildiği gibi: LUT+ kayıtları, modern FPGA'ların temel yapısını oluşturur.

FPGA Geliştirme Süreci
FPGA geliştirme süreci, FPGA yongalarını geliştirmek için EDA geliştirme yazılımı ve programlama araçlarının kullanıldığı süreçtir. FPGA geliştirme süreci, işlev tanımlama/cihaz seçimi, tasarım girdisi, işlev simülasyonu, mantık sentezi, yerleşim ve yönlendirme ile uygulama, programlama ve hata ayıklama gibi ana adımları içeren şekilde genel olarak aşağıdaki şekilde gösterilmiştir.
İşlev tanımı/cihaz seçimi:
FPGA tasarım projesi başlamadan önce, sistem işlevlerinin tanımlanması ve modüllerin bölünmesi gerekir. Ayrıca, sistemin işlevi ve karmaşıklığı gibi görev gereksinimlerine göre, çalışma hızı ile cihazın kaynakları, maliyetleri ve bağlantıları dağıtılarak planlanabilir. Performans gibi unsurlar arasında dengeleme yapılarak uygun tasarım şeması ve uygun cihaz türü seçilmelidir.
Tasarım girdisi:
Tasarım girdisi, tasarlanan sistemi veya devreyi kod olarak ifade etmek için donanım tanımlama dilinin kullanılmasına işaret eder. En yaygın olarak kullanılan donanım tanımlama dili Verilog HDL'dir.
İşlevsel simülasyon:
İşlevsel simülasyon, mantık sentezi öncesinde kullanıcı tarafından tasarlanan devrenin mantık işlevinin doğrulanmasını ifade eder. Simülasyondan önce, bir test platformu oluşturmak ve test uyarıcılarını hazırlamak gerekir. Simülasyon sonuçları, her bir düğümün sinyallerindeki değişikliklerin gözlemlenebileceği rapor dosyaları ve çıkış sinyal dalga formları oluşturur. Hatalar bulunursa, mantık tasarımını revize etmek için tasarıma geri dönülür. Yaygın simülasyon araçları arasında Model Tech'in ModelSim'i, Sysnopsys'in VCS'si ve diğer yazılımlar bulunur.
Mantıksal sentez:
Sözde sentez, üst düzey soyutlamanın tanımını alt düzey tanımına dönüştürmektir. Sentetik optimizasyon, oluşturulan mantık bağlantılarını hedef ve gereksinimlere göre optimize eder ve hiyerarşik tasarımı, FPGA yerleşim ve yönlendirme yazılımının uygulayabileceği düzlemsel hale getirir. Mevcut seviyeye gelince, kapsamlı optimizasyon, tasarım girdisini gerçek kapı seviyesi devreler yerine AND kapıları, OR kapıları, NOT kapıları, RAM'ler ve flip-flop'lar gibi temel mantık birimlerinden oluşan mantıksal olarak bağlı bir ağ listesine derlemeyi ifade eder.
Tasarım ve uygulama:
Düzenleme ve yönlendirme, uygulama araçlarını kullanarak mantığı hedef cihaz yapısının kaynaklarına eşlemek, mantığın en uygun düzenini belirlemek, mantık ile giriş ve çıkış işlevleri arasında bağlantı kuran kablolama kanallarını seçmek ve ilgili dosyaları (yapılandırma dosyaları ve ilgili raporlar gibi) oluşturmak olarak anlaşılabilir; uygulama ise sentezlemeyle oluşturulan mantık ağ listesini belirli bir FPGA yongasına yapılandırmaktır. Yalnızca FPGA yonga üreticisi yonga yapısını en iyi bildiğinden, düzen ve yönlendirme için yonga geliştiricisi tarafından sağlanan araçlar seçilmelidir.
Programlama hata ayıklama:
Tasarımın son adımı, programlama ve hata ayıklamadır. Yonga programlama, veri dosyalarının (bit akışı dosyaları, Bitstream Oluşturma) oluşturulmasını ve programlama verilerinin FPGA yongasına yüklenmesini ifade eder; bundan sonra kart testi gerçekleştirilebilir. Son olarak, FPGA dosyasını (örneğin .bit dosyası) bilgisayardan kart üzerindeki FPGA yongasına indirin.
FPGA ile CPU ve GPU Karşılaştırması
Hem CPU'lar hem de GPU'lar, komut kod çözme ve paylaşımlı bellek özellikleriyle von Neumann mimarisini izler. Buna karşın, FPGA'lar komutlara dayanmayan ve paylaşımlı bellek gerektirmeyen, doğası gereği farklı bir mimariye sahiptir. Aşağıdaki tablo aralarındaki farkları göstermektedir:
| Feature | FPGA | CPU | GPU |
|---|---|---|---|
| Architecture | Reconfigurable logic | Von Neumann | Von Neumann |
| Instruction | No instructions | Instructions | Instructions |
| Shared Memory | No shared memory | Arbitration and shared memory | Arbitration and shared memory |
| Parallel Processing | Pipeline and data parallelism | Data parallelism | Data parallelism |
| Flexibility | Reprogrammable | Fixed functionality | Fixed functionality |
| Computational Power | Suitable for complex tasks | General-purpose computing | Parallel computing and vector processing |
| Latency | Low latency | Medium latency | Relatively high latency |
| Power Consumption | High power consumption | Medium power consumption | High power consumption |
| Application Areas | Electronics, communication, embedded systems | General-purpose computing | Graphics processing, scientific computing |
FPGA Mühendisleri İçin Gerekli Beceriler
- Verilog dili ve donanım devreleriyle ilişkisi
- Geliştirme araçları (Synplify, Vivodo, ISE, Modelsim'de uzman)
- FPGA tasarım sürecine aşina olma (simülasyon, sentez, yerleşim ve yönlendirme, zamanlama analizi)
- Kaynak tahmininde uzmanlık (özellikle dilim, lut, ram ve diğer kaynakların tahmini)
- Temel kavramlarda uzmanlık (kurulum süresi, tutma süresi, akış hesaplaması, gecikme süresi hesaplaması, rekabet riski, glitch'leri ortadan kaldırma yöntemleri vb.
- Dijital devreler (kombinasyon devreleri, flip-floplar, özellikle frekans bölücü oluşturan D flip-floplar, sıralı devreler ve Verilog dilinde tanımlanabilenler)
FPGA Üreticileri
- Xilinx: Geliştirme platformu, FPGA'nın mucidi olan ISE'dir;
- Altera: geliştirme platformu, programlanabilir mantık cihazlarının mucidi Quartus II'dir;
- Actel: geliştirme platformu, Libero'dur;
- Lattice: geliştirme platformu ISPLEVER'dir;
- Atmel




