Programozható logika:
Az FPGA (Field Programmable Gate Array) egy programozható logikai áramkört jelent. Segítségével logikai kapuk, számlálók, multiplexerek memóriák és bármely más digitális áramkör kialakítható, így benne komplex és nagy adatfeldolgozó képességű hálózat egyaránt megvalósítható. Lehetőséget ad módosítható, pontos hardver szintű vezérlésre, valósidejű nagy teljesítményű adatfeldolgozásra, vagy több, egymástól független rendszer létrehozására.
Programozása főként VHDL nyelven vagy Verilog-ban történik, melyek külalakja standard programozási nyelvekhez hasonló, bár jelentősen eltérő hardver leíró nyelvekként funkcionál.
Az FPGA általában jelentősen több fejlesztési időt igényel és magasabb árkategória, mint egy mikrovezérlő, így fontos megfontolni, hogy mikor célszerű alkalmazni. Általában akkor esik a választás FPGA használatára, mikor a mikrokontroller már kiegészítő hardverekkel sem képes a kívánt specifikációt elérni reális költségekkel. Mikrokontrollerrel hardveres problémák megvalósíthatóak ugyan, de sok kompromisszum árán: pontatlanabb vezérlés, lassabb adatfeldolgozás, nagyobb késleltetések, aránytalan költségek. Egy frekvenciamodulált jelet még képes előállítani szervo motorhoz, viszont videójel-feldolgozására már nem megfelelő választás.
Régi Xilinx FPGA típusok és az ISE:
Spartan 3, Spartan 6, Virtex/Kintex 6
A Spartan 3 kiválóan alkalmas első FPGA-nak. A legjobb FPGA, ami kapható TQ144-es tokozásban, ami 100 IO lábbal rendelkezik. Maximális órajele ~100 MHz és kevés logikai blokk van benne. Az utolsó típus, mely rendelkezik (bár kisebb lábszámú) TQ tokozással a Spartan 6. Ez a tokozás az újabb szériákban már egyáltalán nem támogatott, azok kézzel már praktikusan nem forraszthatóak. Végezetül a 6-os széria felsőkategóriás elemei a Virtex/Kintex.
A régi szériák fejlesztőkörnyezete az ISE Design Suite. A Xilinx többi szoftverével ellentétben viszonylag hibamentes. Egyszerű, bár kissé kényelmetlen kapcsolásirajz alapú logikai áramkörtervezővel rendelkezik, és szövegszerkesztőjébe megbízható syntax checker lett beépítve. Processzor központú (mikroblaze, powerpc) tervezéshez külön programként van jelen a Xilinx Platform Studio, és a hozzá tartozó Software Development Kit.
Tanulási célzattal a régi technológia tokozásának köszönhetően könnyen alkalmazható, ennek ellenére nem javaslom. Attól függetlenül, hogy kevés logikai területtel rendelkeznek, a korszerűbb modellek és a fejlesztőkörnyezet is jelentősen fejlődött, változott.
Mai Xilinx FPGA típusok és a Vivado:
A jelenleg még támogatott modellek a 7-es szériától kezdődnek. Paramétereikről részletesen nem írnék, általánosan minden specifikációjuk jobb az előzőhöz képest, részletekről ezen a linken lehet olvasni: https://www.xilinx.com/products/silicon-devices/fpga.html. Ezeket már csak Vivadoban lehet programozni, melynek felépítése teljesen eltérő az előző fejlesztőkörnyezethez képest. Pár jelentős különbséget emelnék ki:
-Újraírták, és beleintegrálták (optimalizálatlanul) közel az összes szoftvert ami az ISE-hez is tartozott, pl. Vivado szimulátor, EDK, SDK.
-A projekthez a Vivado horribilis mennyiségű fájlt, illetve másolatot hoz létre, melynek kezelése kellemetlen, illetve több a hibalehetőség.
-A fordítás és a teljes fejlesztőkörnyezet kezelhető TCL nyelven adott utasításokkal.
-HDL alapú fejlesztéshez csak egy egyszerűsített realtime syntax checker van, ami használhatatlan. Sokszor hosszú várakozási idő után derük csak ki egy vessző hiba.
-A kapcsolásirajz alapú szerkesztő már nem a logikai szintű kapcsolatokat támogatja, hanem inkább a moduláris elemek, buszrendszerek használatára kényszerít, melyhez számtalan segédeszközzel lett ellátva.
Összességében használata rendkívül kényelmetlen, de a hibáinak kiismeréseivel végül jól használható, sokrétű rendszert kapunk.
System on chip: ZYNQ típusú FPGA
https://www.xilinx.com/products/silicon-devices/soc.html
A programozható logikából összerakható közel bármilyen architektúrával rendelkező processzor, ezek közül egy példa a mikroblaze. Ezeket a processzorokat elsődlegesen vezérlésre szokták használni, mivel kis órajele miatt nagy adatmennyiséget nem képes feldolgozni. A kis órajelre megoldásul, a ZYNQ-be fizikailag integráltak egy processzort, perifériákkal ellátva, így jelentősen nagyobb sebességre képes. Egy szabványos ARM processzorra számtalan már előre megírt forráskód, és gondolkodásunkhoz jobban igazodó nyelv (C/C++) tartozik. Viszont a hardveres vezérlésre, sőt, akár számítási teljesítményt növelő perifériák létrehozására rendelkezésünkre áll az FPGA. Ezáltal magas szinten és hardveresen egyaránt programozható rendszert kapunk. A bonyolult feladatok akár előre megírt modulokból összerakhatóak és a nagy számítási kapacitást igénylő logikából huzalozhatóak. Például ha négy csatornás oszcilloszkópot szeretnénk csinálni, akkor a trigger rendszert, a mintavételezést, a jelek előfeldolgozását az FPGA végezheti, a kijelző kezelését és a jel kirajzolását akár a processzoron futó operációs rendszer is futtathatja.
Embeded Linux:
http://www.wiki.xilinx.com/Linux
Standalone program futtatása esetén a processzor nagy hatékonysággal és megbízhatósággal hajtja végre a feladatot. Viszont számtalan típusú mikrokontroller és periféria létezik, nem lehet minden mindennel kompatibilis szabványok nélkül. A Linux részben ezt a feladatot látja el, szabványok közé foglalja a rendszer működését. Elrejti a hardvert a szoftverek elől, így azok csupán a szabványos interfészeken keresztül kommunikálhatnak. Ennek köszönhetően ha egy perifériának a driver-ét linux kompatibilissé teszik, azzal egyszerre rengeteg eszközzel lesznek használhatóak. Közel minden protokollhoz és perifériához, ami létezik ma már elérhető Linux driver, azaz ezek felhasználásával gyakran akár összelegózható a projekt jelentős része.
A linuxon való fejlesztésnek az első lépése a legnehezebb, meg kell ismerni a teljes rendszer felépítését:
-a fordító és a makefile beállítását
-a kernel modulok használatát, írását, device tree-be illesztését
-kernelnek a módosítását, optimalizálását buildroot vagy xilinx petalinux SDK segítségével.
http://www.wiki.xilinx.com/PetaLinux+Getting+Started
A linux pár hónap alatt elsajátítható olyan szinten, hogy github tudással már kényelmesen használhatóvá váljon. A szabadon elérhető szoftverek segítségével akár ethernetről lehet JTAG kábel nélkül FPGA-t programozni, hálózatot monitorozni vagy a programozott logikát debuggolni.
High Level Synthesys:
Célja hogy egy informatikus hardveres ismeretek nélkül, akár automatizáltan letudja fordítani valamely magas szintű nyelven írt programját hardveres logikára. Ez a koncepció véleményem szerint számtalan ponton hibás. A HLS-el fordított programok általában vezérlésre (időzítésre) nem alkalmasak, csak funkcionális pl számítási feladatok ellátására használható. Továbbá a számítási algoritmust is optimalizálni kell a rendelkező hardveres erőforrásokra, szintaktikailag illeszteni kell a megvalósulni kívánt logikához. Ennek ellenére függvények megvalósítására kiválóan alkalmazható és komplex, nagy teljesítmények esetében gyakran olyan optimalizálásokra is képes, mely HDL leírással már nehezen lenne megvalósítható.
Költséghatékony prototípus panelek:
https://www.xilinx.com/products/boards-and-kits/cost-optimized-design.html
Kezdésnek elsődlegesen jó támogatottságú panelt választanék az elérhető példaprogramok miatt, mint például az AVNET vagy a Digilent. Tőlük konkrét panelek például az Artix 7 Arty, Minized, vagy Microzed. Javaslom az olyan panelt, amelyen Zynq típusú FPGA, 1Gb memória és ethernet csatlakozó van. Egy ilyen eszközzel az FPGA és Linux fejlesztéshez kapcsolódó területek nagy része megtanulható.
Tutorialok, egyetemi anyagok:
Példaprogramok, részletes leírásokkal konkrét hardverekhez:
https://reference.digilentinc.com/learn/programmable-logic/start
Mérnökinformatikus digit anyaga részletes kiindulási alap:
http://www.mit.bme.hu/oktatas/targyak/vimiaa02
MSC programozható logikai áramkörök mellékspec. az alábbi sorrendben:
Kiváló nyelvi összefoglaló és elméleti anyag:
http://www.mit.bme.hu/oktatas/targyak/vimima13
Microblaze típusú processzor és a buszrendszer használata:
http://www.mit.bme.hu/oktatas/targyak/vimima14
Komplex mérnöki feladat mely az FPGA logikáig és a processzor standalone használatáig terjed: