FPGA (väljas programmeeritav väravate massiiv): määratlus ja rakendused
FPGA (väljas programmeeritav väravate massiiv): mis see on, kuidas töötab ja kus kasutatakse — paindlikud programmeeritavad loogikalahendused tööstuses, side-, AI- ja signaalitöötluses.
Väljas programmeeritav väravate massiivi (sageli lühendatult FPGA) on elektrooniline komponent, mida kasutatakse rekonfigureeritavate digitaalahelate ehitamiseks. See tähendab, et FPGA erineb loogikaväravast, sest loogikaväraval on fikseeritud funktsioon. Seevastu FPGA-l on valmistamise ajal määratlemata funktsioon. Enne kui FPGAd saab kasutada vooluahelas, tuleb see programmeerida, st ümber konfigureerida.
FPGAd on programmeeritavate loogikaseadmete ehk PLDde kategooriasse kuuluvad integraallülitused. FPGAd on PLD-tüübist kõige suurema jõudlusega, kõige paindlikumad ja ka kõige kallimad. FPGA-de puuduseks võrreldes teiste PLD-dega on see, et nad ei mäleta oma disaini, kui voolu välja lülitatakse. Seetõttu vajab FPGA eraldi konfiguratsioonimälu kiipi, mis hoiab FPGA disaini. Kui FPGA-le antakse vool tagasi, loeb FPGA fikseeritud osa konfiguratsioonimälu kiibilt konfiguratsiooni. Pärast seda, kui FPGA on konfigureeritud, on ta võimeline täitma funktsiooni, mis on talle disainiga antud.
FPGA erineb mikroprotsessorist või mikrokontrollerist. FPGA ei ole oma põhivormis võimeline tarkvara käivitama. Ainult siis, kui FPGA-le antakse konfiguratsioon, mis sisaldab protsessorarhitektuuri, on ta võimeline tarkvara käivitama.
FPGA arhitektuuri põhielemendid
Kuigi tootjate arhitektuurid erinevad, jagunevad peamised osad tavaliselt järgmiselt:
- Loogikaüksused (LUTid ja flip-flopid) — kokku moodustavad need programmeeritava loogika baasploki, mida kasutatakse combinational ja sequential loogika ülesehitamiseks.
- Konfigureeritav ühendusvõrk — ridade ja veergude võrk, mis ühendab loogikaelemendid omavahel.
- Plokkmälud (BRAM) — sisseehitatud RAMi plokid, mida kasutatakse andmete ja puhverite hoidmiseks.
- DSP-liinid — spetsiaalsed kiired plokid aritmeetiliste (nt korrutamine, akumuleerimine) operatsioonide jaoks.
- Kiire seriaalne I/O ja transceiverid — kõrgkiiruslikud kanalid Etherneti, PCIe, Serial RapidIO jms jaoks.
- PLL / kellajuhtimine — kellasüsteemide ja sageduste genereerimiseks ning faasi sünkroniseerimiseks.
- Sisse/väljapordi plokid (IOB) — toetavad erinevaid signaalistandardeid (LVDS, LVCMOS vms) ja sisend-/väljataseme seadeid.
Kuidas FPGA tööle panna — arendusprotsess
Tavapärane töövoog FPGA projektis sisaldab järgmisi samme:
- Kirjutada disain riistvarakirjelduskeeles (HDL) nagu VHDL, Verilog või kaasaegsem SystemVerilog. Võimalik on kasutada ka kõrgema taseme tööriistu (HLS), mis teisendavad C/C++/OpenCL koodi HDL-iks.
- Teostada loogikasüntees — HDL-kood teisendatakse FPGA spetsiifilisteks loogikaelementideks.
- Paigutamine ja marsruutimine (place & route) — loogikaelemendid ja ühendused asetatakse füüsilisse FPGA struktuuri.
- Timing-analüüs ja optimeerimine — veendutakse, et disain töötab soovitud kellasagedusel.
- Genererida bitifail (bitstream), mis sisaldab FPGA konfigureerimisandmeid.
- Laadida bitifail FPGA-sse kas otse konfiguratsioonimällu või vahetult seadmele läbi JTAG, SPI, SD-kaardi vms.
Konfiguratsioon ja mälu tüübid
Erinevad FPGA pered kasutavad erinevat konfiguratsiooni- ja tehnoloogilist aluspõhja:
- SRAM-põhised FPGA-d — kõige levinumad; konfiguratsioon on laetud välisest mälust voolu saamisel. Need on ümberprogrammeeritavad ja toetavad tavaliselt bitstreami krüpteerimist, kuid konfiguratsioon on volatiilne.
- Flash-põhised FPGA-d — säilitavad konfiguratsiooni ka voolu puudumisel; sobivad vähese võimsuse ja kiire alglaadimisega rakendustesse.
- Antifuse FPGA-d — üksik- või piiratud kordusega püsikonfiguratsioon, kasutatakse rasketes keskkondades (nt kosmosetööstus) tänu kõrgele usaldusväärsusele.
Tarkvara ja tööriistad
FPGA tootjad pakuvad arendustarkvara, näiteks:
- AMD (endine Xilinx) — Vivado, Vitis, ISE (vanemad seadmed)
- Intel (endine Altera) — Quartus Prime
Lisaks on olemas kolmanda osapoole tööriistad ja avatud lähtekoodiga voogud, samuti HLS-tööriistad, mis võimaldavad osa disaini genereerida C/C++-st või OpenCL-ist.
Eelised ja puudused
- Eelised: väga suur paralleelsus ja kiirus teatud ülesannetes (nt signaalitöötlus), kõrge paindlikkus (suudab olla mitme erineva seadme prototüüp), madalam idufaasikulud kui ASIC-il (madalam NRE), võimalik lunaarne optimeerimine ja partitsioneerimine.
- Puudused: suurem voolutarve ja ühikuhind võrreldes massitoodetud ASIC-idega, keerukam arendusprotsess (tõhusaks kasutamiseks on vaja erioskusi), SRAM-FPGA-de volatiilsus nõuab konfiguratsioonimälu, turvarisk — bitistriim võib vajada krüpteerimist.
Erinevus ASIC-i ja mikrokontrolleriga
FPGA vs ASIC:
- ASIC on optimeeritud fikseeritud funktsiooniks, odavam suurtel partiidel ja madalam võimsus ühe funktsiooni täitmisel, kuid kallis ja aeganõudev arenduses.
- FPGA lubab kiiret prototüüpimist ja disaini iteratsiooni ilma kallite maskkuludeta.
FPGA vs mikrokontroller/protsessor:
- Mikrokontrollerid täidavad järjestikust tarkvaratööd ja sobivad juhtimisloogikaks; FPGA võimaldab paralleelset riistvara-kiirendust ja võib sisaldada kas hard protsessorituuma (nt ARM Zynq-seeriates) või pehme protsessorituuma (soft-core), mida käitab tarkvara.
Rakendused
FPGA-d leiavad kasutust paljudes valdkondades:
- Telekommunikatsioon ja võrgud (pakub reaalajas pakettide töötlemist ja protokollide kiirendust)
- Digitaalne signaalitöötlus ja tarkvara-põhine raadioside (SDR)
- Pilditöötlus ja masinnägemine (kiirendatud filtrid ja algoritmid)
- Tööstusautomaatika ja juhtsüsteemid
- Kosmosetööstus ja kaitse (radiaaltolerantsed ja antifuse-FPGA-d)
- Andmebaasi- ja tehisintellekti kiirendid (FPGA-põhised aktseleratsioonikaardid)
- Prototüüpimine uute ASIC-ide ja keerukate loogikalahenduste jaoks
Lisavõimalused ja tänapäevased trendid
Tänapäevased FPGA-d sisaldavad sageli süsteemi-tasandi funktsioone (SoC-FPGA), kus on integreeritud protsessorituumad, või suured arvutusplokid AI-kiirenduseks. Muud trendid hõlmavad kõrgetasemelist sünteesi (HLS), bitistriimi turvalisuse ja krüpteerimise tuge, ning pilve- või andmekeskuse kiirenduslahendusi.
Kui oled huvitunud FPGA-ga alustamisest, on head kohad õppimiseks arendusplaadid (nt Xilinx/AMD ja Intel eval-plaadid), tootjate õppevahendid ja paljud veebikursused, mis katavad nii HDL-keeli kui ka töövooge (süntees, place&route, timing). FPGA-d annavad palju vabadust, kuid nõuavad ka teadmisi riistvara ja süsteemi disaini põhimõtetest.


Sisemine struktuur
FPGAd põhinevad üldiselt programmeeritavatel loogikaelementidel ja programmeeritavatel ühendustel. Üheks loogikaelementide ehitusplokiks on programmeeritav lookup table (LUT). LUT-i saab programmeerida nii, et see väljastab mis tahes väärtuse, mille sisendväärtused on antud. Seega saab LUT-i programmeerida nii, et see oleks mis tahes tüüpi loogika, millel on sama arv sisendeid ja väljundeid. Näiteks saab programmeerida 2 sisendiga ja 1 väljundiga LUT-tabelit, et jäljendada 2 sisendiga AND, OR, NAND, NOR, XOR jne. loogikat. Selle LUTi väljundit saab kas salvestada registri abil või ühendada teiste LUTide sisendiga. Kasutades programmeeritavat muxi, saab FPGA-d programmeerida nii, et see valib registreeritud või registreerimata väljundi. Selline LUTi, registri ja muxi kombinatsioon on loogikaelemendi üldine struktuur.
Nende loogikaelementide ühendamiseks kasutatakse läbipääsutransistoreid. Transistori saab programmeerida nii, et see ühendab signaali või ei ühenda seda, andes FPGA-le võimaluse ühendada loogikaelemendid omavahel väga spetsiifiliselt. Näiteks kui ühe loogikaelemendi väljund toidab teise loogikaelemendi sisendit, saab läbipääsutransistori programmeerida nii, et see ühendab need kaks juhtme kokku ja vastab määratud loogikale. Loogikaelementide ja läbipääsutransistoride vahel saab kompilaator võtta HDL-i riistvarakirjelduse, luua loogikaelementide loogika ja ühendada need omavahel läbipääsutransistoride abil.
Küsimused ja vastused
K: Mis on programmeeritav väravasüsteem (FPGA)?
V: Väljas programmeeritav väravate massiivi (FPGA) on elektrooniline komponent, mida kasutatakse rekonfigureeritavate digitaalsete vooluahelate ehitamiseks. Selle funktsioon on valmistamise ajal määratlemata ja see tuleb programmeerida ehk ümber konfigureerida, enne kui seda saab kasutada vooluahelas.
K: Mille poolest erineb FPGA loogikaväravast?
V: FPGA erineb loogikaväravast, sest loogikaväraval on fikseeritud funktsioon, samas kui FPGA-l on valmistamise ajal määratlemata funktsioon.
K: Millist tüüpi integraallülitus on FPGA?
V: FPGA on programmeeritavate loogikaseadmete ehk PLDde kategooriasse kuuluv integraallülitus.
K: Millised on FPGA-de kasutamise puudused võrreldes teiste PLD-dega?
V: Üks puudus FPGAde kasutamisel võrreldes teiste PLDdega on see, et nad ei mäleta oma disaini, kui voolu välja lülitatakse, seega vajavad nad eraldi konfiguratsioonimälu kiipi, mis hoiab disaini. Samuti on need kallimad kui muud tüüpi PLD-d.
K: Kuidas programmeeritakse FPGA-d?
V: FPGA programmeerimiseks kasutavad insenerid Windowsile või Linuxile mõeldud inseneritarkvara, et töötada välja riistvara kirjeldamise keeltes, nagu VHDL ja Verilog, kirjutatud projekte. Seejärel tõlgib tarkvara selle koodi valitud FGPAs olemasolevateks loogikaelementideks ja paigutab need place and route protsesside abil, mis loob bitifaili, mida saab programmeerida kas konfiguratsioonimällu või otse FGPAsse ise, kasutades selle JTAG-porti ühendatud USB-programmeerijat.
K: Kas mikroprotsessorid ja mikrokontrollerid on sarnased FGPA-dega?
V: Ei, mikroprotsessorid ja mikrokontrollerid erinevad FGPAdest, sest põhilisel kujul ei saa ta tarkvara käivitada; ainult siis, kui talle antakse protsessorarhitektuuri sisaldav konfiguratsioon, on tal see võime.
Otsige