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.