FPGA Nedir? Pratik Bir Rehber | RunX Teknoloji
FPGA Nedir?
CPU programınızı çalıştırır. FPGA ise devreniz haline gelir.
Bu tek cümle fikrin tamamıdır ve geri kalan hemen her şey buradan türer. Ama aynı zamanda çoğu anlatımın atladığı kısımdır; bu yüzden alana yeni giren mühendisler çoğu zaman FPGA’yi “tuhaf ve kullanışsız bir işlemci” sanarak yollarına devam eder. Öyle değildir. Farklı bir sorunun farklı bir cevabıdır.
Bu yazı, yıl boyunca yayınlayacağımız bir serinin açılışı. Mühendislerimiz ilerleyen haftalarda tek tek konulara inecek: donanım kaynakları, doğrulama, yüksek hızlı arayüzler, sinyal işleme, uçta yapay zeka. Hepsinden önce, FPGA’nin gerçekte ne olduğu konusunda net olmakta fayda var.
Komut dizisi değil, bir mantık dokusu
FPGA, “Field-Programmable Gate Array” ifadesinin kısaltması. Türkçesiyle: üretimden sonra, sahada yapılandırılabilen bir mantık dizisi. İsim kendini açıklıyor.
Cihazın içinde küçük ve genel amaçlı yapı taşlarından oluşan bir doku bulunur:
- Lookup table’lar (LUT) - dört ile altı girişli, yapılandırılabilir küçük doğruluk tabloları. Bu girişlerin herhangi bir Boole fonksiyonunu gerçekleyebilirler.
- Flip-flop’lar - saat kenarları arasında durum tutan tek bitlik saklama elemanları.
- DSP blokları - aritmetik yoğun işler için sertleştirilmiş çarp-topla birimleri.
- Block RAM - doku boyunca dağıtılmış, çift portlu yonga içi bellek.
- Saat kaynakları - PLL’ler ve zamanlamayı cihaz genelinde dağıtan özel saat ağları.
- G/Ç ve transceiver’lar - basit pinlerden çok gigabitlik seri bağlantılara kadar.
Bu blokların hiçbiri tek başına işe yaramaz. FPGA’yi FPGA yapan şey, aralarındaki programlanabilir ara bağlantıdır: hangi bloğun hangisine bağlanacağına karar veren bir anahtarlama ağı. Cihazı yapılandırdığınızda, bitstream adı verilen bir dosya aracılığıyla milyonlarca anahtarı aynı anda konumlandırmış olursunuz.
Ortaya çıkan şey, cihazın çalıştırdığı bir program değildir. Cihazın dönüştüğü devrenin ta kendisidir.
“FPGA programlamak” ifadesinin yanıltıcı olmasının sebebi budur. VHDL veya SystemVerilog ile yazdığınız şey aslında bir donanım tarifidir - register’ların, veri yollarının, durum makinelerinin ve bunların zamanlama ilişkilerinin tanımı. Bir sentez aracı bu tarifi mevcut LUT’lara, flip-flop’lara ve DSP bloklarına eşler; yerleştirme ve rotalama aracı ise her parçanın fiziksel olarak nereye oturacağına ve sinyallerin aralarında nasıl ilerleyeceğine karar verir. Zihinsel model kodlamaktan çok mimarlığa yakındır.
Zaman yerine mekan
Anlaşılması en uzun süren kavramsal geçiş burada.
Yazılım işini zaman içinde yapar. Bir işlemcide tek bir aritmetik birim kümesi vardır ve komutlar bunları sırayla kullanır. Daha fazlasını mı istiyorsunuz? Ya daha fazla saat çevrimi harcarsınız ya da çekirdek sayısını artırıp paylaşımı değiştirirsiniz.
FPGA tasarımı ise işini mekan içinde yapar. Aynı anda sekiz çarpma gerekiyorsa sekiz çarpıcı örneklersiniz ve hepsi aynı saat kenarında çalışır. Bir filtre, bir kod çözücü ve bir kontrol döngüsünün eşzamanlı çalışması gerekiyorsa, her biri dokunun kendi bölgesinde yer alır ve hiçbiri diğerini beklemez.
Bunun iki sonucu var, ikisini de açıkça söylemekte fayda var.
Birincisi determinizmdir. 200 MHz’de saatlenen bir boru hattı her 5 nanosaniyede bir sonuç üretir - her örnekte, her karede, her seferinde. Kaçırılacak bir önbellek, sizi kesecek bir zamanlayıcı, aynı yürütme birimleri için yarışan başka bir kiracı yoktur. Gecikme, sonradan ölçüp “tutuyor” diye umduğunuz bir şey değildir; baştan hesapladığınız ve statik zamanlama analiziyle kanıtladığınız bir şeydir. Güvenlik ve görev kritik sistemlerde tasarımda FPGA bulunmasının tek sebebi çoğu zaman bu kanıtlanabilirliktir.
İkincisi, kaynakların çok somut biçimde sınırlı olmasıdır. Bedavaya bir döngü ekleyemezsiniz. Eklediğiniz her fonksiyon, başka bir şeyin artık kullanamayacağı LUT’ları, DSP bloklarını veya belleği tüketir. İyi FPGA mühendisliği büyük ölçüde bir bütçeleme disiplinidir - mantık, bellek bant genişliği ve hepsinden önemlisi zamanlama.
FPGA, CPU, GPU, ASIC: dürüst bir karşılaştırma
Bu dördü birbirinin rakibi olmaktan çok, bir ödünleşim yüzeyi üzerindeki farklı noktalardır.
| Güçlü yanı | Zayıf yanı | Tipik kullanım | |
|---|---|---|---|
| CPU | Esnek, hızlı geliştirilir, zengin yazılım ekosistemi | Sıralı çalışır; en kötü durum zamanlamasını sınırlamak zordur | Kontrol, orkestrasyon, kullanıcı arayüzleri |
| GPU | Devasa paralel işlem hacmi | Bu hacme yığınlama ile ulaşır, bu da gecikmeyi bozar; yüksek güç tüketimi | Eğitim, çevrimdışı toplu işleme |
| FPGA | Deterministik zamanlama, gerçek paralellik, zengin G/Ç, sahada yeniden yapılandırılabilirlik | Daha yüksek mühendislik eforu; ASIC’e göre düşük saat hızları | Gerçek zamanlı sinyal işleme, sensör arayüzleme, düşük gecikmeli çıkarım |
| ASIC | Hacimde en iyi performans, güç ve birim maliyet | Çok yüksek yinelenmeyen mühendislik maliyeti; üretildikten sonra esneklik yok | Gereksinimleri sabitlenmiş, yüksek hacimli ürünler |
İnsanların en sık yanlış kurduğu karşılaştırma, yapay zeka için FPGA ile GPU arasındaki karşılaştırmadır. GPU ham işlem hacminde neredeyse her zaman kazanır. Ama işlem hacmi ile gecikme farklı para birimleridir. GPU reklam edilen rakamlara işi yığınlayarak ulaşır ve bir yığında ilk eleman sonuncuyu bekler. Gereksiniminiz “bu kareyi 2 milisaniye içinde sınıflandır, her karede” ise yığınlama çözüm değil, problemin kendisidir.
Ticari olarak asıl önemli karşılaştırma FPGA ile ASIC arasındadır. ASIC güçte, hızda ve birim maliyette FPGA’yi geçer - ama bunu ancak modern süreç düğümlerinde milyonlarca dolara ulaşan yinelenmeyen mühendislik maliyetini ödedikten sonra ve ancak gereksinimleriniz hiç değişmeyecekse yapar. FPGA orta sahayı kazanır: orta hacimler, uzun ürün ömürleri, evrilen standartlar ve şartnamenin hala oynayabileceği her program.
Tablodaki her çip aslında bir RTL tasarımıdır
Karşılaştırmanın gizlediği bir şey var ve karşılaştırmanın kendisinden daha önemli.
CPU bir ASIC’tir. GPU da öyle. İkisi de dünyaya bitmiş bir nesne olarak gelmedi. Her biri, sayısal tasarım mühendisleri tarafından VHDL veya SystemVerilog ile yazılmış bir tarif olarak başladı; simülasyonda doğrulandı, sentezlendi, yerleştirildi, rotalandı ve en sonunda silikona işlendi. Register-transfer seviyesindeki tarif, o tablodaki her cihazın ortak atasıdır.
Bundan iki şey çıkar.
FPGA tasarımı ile ASIC tasarımı, farklı hedeflere yöneltilmiş aynı disiplindir. Mimari ve boru hattı kurgusu, saat alanı geçişleri, kaynak ve zamanlama bütçelemesi, doğrulama metodolojisi, zamanlama kapanışı - bunlar FPGA teknikleri değildir. Sayısal tasarım teknikleridir. Hedef, neyi optimize edeceğinizi değiştirir; zanaatı değiştirmez. Zorlu bir FPGA tasarımında zamanlamayı kapatabilen bir mühendis, dizüstü bilgisayarınızdaki işlemciyi üreten işin aynısını yapıyordur.
ASIC’lerin riski FPGA ile azaltılır. Bir maske setine karar vermeden önce - milyonlarca dolar ve aylarla ölçülen, geri dönüşü olmayan bir karar - ekipler RTL’lerini büyük FPGA’lere ya da FPGA tabanlı emülasyon platformlarına serer ve gerçek tasarım üzerinde gerçek yazılım çalıştırır. Orada bulunan bir hata mühendislik zamanına mal olur. Aynı hata tape-out sonrasında bulunursa bir respin’e mal olur. FPGA prototiplemenin ciddi silikon programlarında opsiyonel bir ek değil, standart bir aşama olmasının sebebi budur.
Aynı mantık ticari tarafta da geçerli. Pek çok ürün önce FPGA olarak sahaya çıkar ve ancak hacimler yatırımı haklı çıkardığında ASIC’e dönüşür - aynı RTL, farklı hedef. FPGA, ASIC’in ödün verilmiş sürümü değildir; ASIC’in geçmek zorunda olduğu aşamadır.
Dolayısıyla bir ekip “FPGA yetkinliğimiz var” dediğinde, bu dar bir uzmanlık tarifi değildir. Sayısal donanım tasarlayabilme yeteneğidir - yani tablodaki diğer her şeyi üretmiş olan beceri.
Fiyat itirazı
FPGA’lerin pahalı olduğu yönünde bir itibarı var. Bu itibarın nerede hak edildiğini, nerede edilmediğini ayırmakta fayda var.
Cihazlar muazzam bir aralığa yayılır. Üst uçta yüzlerce gigabit transceiver’ı ve tümleşik yüksek bant genişliğine sahip belleği olan, tanesi binlerce dolara satılan parçalar vardır - ve insanlar “FPGA” kelimesini duyduğunda genellikle bunları hayal eder. Alt uçta ise birkaç binden birkaç on bine kadar mantık hücresi olan, yüksek hızlı seri arayüzü bulunmayan, mütevazı G/Ç’li küçük cihazlar durur. Bunlar hacimde tek haneli dolarlara satılır; yani orta seviye bir mikrodenetleyiciyle aynı bantta. En küçüklerinden bazıları, yerine geçecekleri mikrodenetleyiciden daha ucuzdur.
Dolayısıyla “FPGA pahalı mı?” sorusu aslında FPGA hakkında bir soru değildir. “İşlemci pahalı mıdır?” sorusuyla aynı yapıdadır - cevap tamamen hangisi olduğuna bağlıdır ve gereksinimi karşılayan en küçük cihazı seçmek tasarım işinin çekirdek parçasıdır.
İtibarın hak edildiği yer mühendisliktir. Büyük cihaz ailelerinin araç lisansları ücretsiz değildir. Kart tasarımı daha zahmetlidir - güç sıralaması, konfigürasyon belleği, daha titiz sinyal bütünlüğü. Ve her şeyden önce tasarım ile doğrulama ciddi efor ister; doğrulama genellikle bunun büyük kısmını oluşturur.
Dürüst ödünleşim budur. Küçük bir programda maliyeti belirleyen nadiren cihazdır; mühendisliktir. İlk FPGA projeniz için bütçe kurmadan önce bunu bilmek, yoluna giren bir proje ile sizi şaşırtan bir proje arasındaki farktır.
Probleminiz FPGA istiyor mu?
Kendi işimizde aynı birkaç gösterge tekrar tekrar karşımıza çıkıyor.
Kaçıramayacağınız bir son teslim anı. Uçuş kontrol döngüleri, silah emniyet kilitleri, motor komütasyonu, radar işleme pencereleri. “Genellikle yeterince hızlı” cevabının kabul edilmediği yerler.
İşlemcinin kabul edebileceğinden hızlı gelen veri. JESD204B üzerinden yüksek hızlı ADC ve DAC’ler, MIPI üzerinden görüntü sensörleri, SDI üzerinden video, aynı anda birden çok akış üzerinden sensör füzyonu. FPGA fiziksel katmana en yakın duran bileşendir ve darboğaz çoğu zaman tam oradadır.
Hiçbir yonganın sizin için gerçeklemediği bir protokol. Özel veya eski arayüzler, tescilli veri yolu formatları, alışılmadık zamanlama gereksinimleri. Hazır bir parçanın basitçe var olmadığı yer burasıdır.
Hala hareket eden bir standart. Donanım sahaya çıktıktan sonra şartname değişebilecekse, yeniden yapılandırılabilirlik “olsa iyi olur” değildir; programı kurtaran şeydir.
Uçta, güç kısıtlı çıkarım. Sabit noktalı veri yollarına eşlenmiş kuantize sinir ağları birkaç watt içinde kullanılabilir doğruluk sunabilir; bu da çoğu zaman uçabilen bir sistemle uçamayan bir sistem arasındaki farktır.
Bileşen ömrü. Savunma ve havacılık programları yaşam döngüsünü on yıllarla ölçer. FPGA üreticileri cihazlarını çoğu işlemci hattından çok daha uzun süre desteklerler ve üreticiler arasında taşınabilir bir tasarım, tedarik zinciri kesintilerine karşı sigortadır.
Bir FPGA projesi gerçekte neleri içerir
Beklentiler bu konuda sık sık yanlış kurulduğu için dürüst bir not: RTL yazmak işin büyük kısmı değildir.
Tipik bir program şu aşamalardan geçer: gereksinim toplama, mimari ve kaynak bütçeleme, RTL gerçekleme, fonksiyonel doğrulama, zamanlama kapanışı, ardından kart seviyesinde entegrasyon ve test. Doğrulama düzenli olarak tasarımdan daha fazla efor tüketir - DO-254 ve benzeri güvence bağlamlarında ise baskın kalemdir, çünkü her gereksinimin, başarıyla geçtiği gösterilebilen bir teste izlenebilir olması gerekir.
Bu bir ek yük değildir. Deterministik garantilerin yalnızca simülasyonda değil, sahada da tutmasının sebebidir.
Seri bundan sonra nereye gidiyor
Önümüzdeki haftalarda mühendislerimiz bu başlıkları tek tek ele alacak: dokunun içindeki donanım kaynakları, SoC cihazlarda işlemci ile mantığın bir arada nasıl yaşadığı, cihaz ailesinin nasıl seçileceği, doğrulama metodolojisi, yüksek hızlı arayüzler, görüntü ve radar sinyal işleme, uçta yapay zeka.
RunX Teknoloji’de zamanlamanın umut edilmediği, mühendislikle kurulduğu FPGA ve SoC sistemleri tasarlıyoruz - IP çekirdeklerinden video hatlarına, radar sinyal işlemeden DO-254 doğrulamasına kadar. Elinizde son teslim tarihi olan bir proje varsa, doğru yerdesiniz.
Bize ulaşın: info@run-x.com | www.run-x.com