FPGA

Allikas: Vikipeedia
Altera Stratix IV GX FPGA

FPGA (field-programmable gate array, väliprogrammeritav väravamassiiv või programmeeritav ventiilmaatriks) on mikroskeem, mis on disainitud nii, et selle täpse konfiguratsiooni määrab selle kasutaja, mitte tootja. FPGA konfiguratsioon määratakse tavaliselt riistvara kirjeldamise keelega (hardware description language – HDL), mis on sarnane keelele, millega kirjeldatakse rakendus-spetsiifilisi mikroskeeme (application-specific integrated circuit – ASIC). FPGA suudab esitada igat loogilist funktsiooni, mida rakendus-spetsiifiline mikroskeem võib esitada.[1]

FPGA koosneb programmeeritavatest loogikakomponentidest, mida kutsutakse loogikaplokkideks, ja seadistatavatest vaheühendustest, mille abil saab loogikaplokke ühendada. Loogika plokke saab panna tegema keerulisi funktsioone aga ka lihtsaid loogilisi tehteid nagu näiteks AND ja XOR. Tihti on FPGA igas loogikaplokis ka mäluelemendid, mis võivad olla lihtsad trigerid või keerulisemad mäluüksused.[2]

Lisaks digitaalsetele funktsioonidele on mõnel FPGA-l võimalused ka analoogelektroonika jaoks. Enamasti saab programaatiliselt muuta kiibi jalal oleva signaali muutumise kiirust ja väljundvoolu tugevust. Teiseks on suhteliselt tavalised analoogsignaali võrdlejad. Eksisteerivad ka mõned seadmed, milles on olemas nii analoog-digitaalmuundurid kui ka digitaal-analoogmuundurid, mis lubavad FPGA-l käituda nagu süsteemikiip.[3]

Ajalugu[muuda | redigeeri lähteteksti]

FPGA kasvas välja programmeeritavatest püsimäludest (PROM) ja programmeeritavatest loogikaseadmetest (PLD). Neid mõlemaid sai programmeerida, aga loogikaväravate-vahelised ühendused jäid samaks.[4]

Ameerika Ühendriikide Merepinna Sõjandusdepartemang (Naval Surface Warfare Department) rahastas hilistel 1980ndatel Steve Casselman-i poolt juhitud eksperimenti, mille eesmärgiks oli luua arvuti, mis juurutaks 600 000 taasprogrammeeritavat loogikaväravat. Casselmanil see õnnestus ja sellega seonduv patent anti välja 1992. aastal.

Mõned teedrajavad kontseptsioonid ja tehnoloogiad programmeeritavate loogikaväravate ja loogikaplokkide kohta leiduvad patentides, mis anti 1985. aastal David W. Page'ile ja LuVerne R. Petersonile.

Xilinx-i kaasasutajad Ross Freeman ja Bernard Vonderschmitt leiutasid 1985. aastal esimese kommertsiaalse FPGA – XC2064.[5] XC2064-l olid programmeeritavad väravad ja programmeeritavad vaheühendused. See oli uue tehnoloogia ja turu algus.[6] XC2064-l oli 64 seadistatavat loogikaplokki, millel oli kaks 3 sisendiga otsingutabelit.[7]

Xilinx jätkas konkurentideta ja kasvas kiirelt kuni 1990ndate keskpaigani, millal konkurendid kanda kinnitasid. 1993. aastaks oli Actel-i käes 18% kogu FPGA-de turust.[6]

1990ndad oli FPGA-de jaoks kiire kasvu periood nii keerukuse kui ka tootmismahtude poolest. Üheksakümnendate alguses kasutati FPGA-sid peamiselt telekommunikatsioonis ja võrgusides. Kümnendi lõpuks leidsid FPGA-d tee tööstuslikesse rakendustesse.[8]

Kaasaegsed arengud[muuda | redigeeri lähteteksti]

Hiljutine trend on viia traditsiooniline FPGA edasi ja ühendada see mikroprotsessori ja teiste lisaseadmetega, et moodustada süsteemikiip. Näiteks sellistest hübriid-tehnoloogiatest võib tuua Xilinx Virtex-II PRO ja Virtex-4 seadmed, kus on üks või rohkem PowerPC protsessorit FPGA loogikakangasse integreeritud. Atmel-i FPSLIC on veel üks selline seade, mis kasutab AVR-i protsessorit koos Atmel-i programmeeritava loogika-arhitektuuriga.

Alternatiivne lähenemine protsessorite kasutamises on võimalus kasutada tarkvaralisi protsessoreid, mis on juurutatud otse FPGA loogikale.

Lisaks hakkavad tekkima mõned uued arhitektuurid, mis ei ole enam tüüpilised FPGA-d. Tarkvaraliselt seadistatav mikroprotsessori seeria Stretch S5000 kasutab hübriidset lähenemist pakkudes kasutajale tavapäraseid protsessorituumasid ja FPGA-sarnaseid programmeeritavaid tuumasid samal kiibil.

Loogikaväravate arv[muuda | redigeeri lähteteksti]

  • 1987: 9000, Xilinx[6]
  • 1992: 600 000, Naval Surface Warfare Department
  • ~2000: Miljonid[8]
  • 2010: Miljardid

Turu suurus[muuda | redigeeri lähteteksti]

  • 1985: Esimene kommertsiaalne FPGA tehnoloogia leiutati Xilinx-i poolt.[6]
  • 1987: 14 miljonit dollarit[6]
  • ~1993: Üle 385 miljoni dollari[6]
  • 2005: 1,9 miljardit dollarit[9]
  • 2010: hinnanguliselt 2,75 miljardit dollarit[9]

FPGA võrdluses teistega[muuda | redigeeri lähteteksti]

Teadusuuring on näidanud, et FPGA-del võtavad konstruktsioonid keskmiselt umbes 18 korda rohkem pindala, vajavad 7 korda rohkem voolu ja on 3 korda aeglasemad kui samad lahendused rakendus-spetsiifilise mikroskeemi peal.[10]

FPGA eelisteks on võimalus seda uuesti programmeerida, et parandada skeemi vigasid. Ja tüüpiliselt läheb nende peal juurutatud toote turule toomiseks vähem aega.[11]

Tootjad saavad valida ka kesktee, kui nad arendavad välja oma toote disaini FPGA peal, kuid lõppversiooni toodavad tavalise tehnoloogia baasil.

Võrdluses keerukate programmeeritavate loogika seadmetega[muuda | redigeeri lähteteksti]

Peamised erinevused kompleksse programmeeritava loogikaseadme ja FPGA vahel on arhitektuuriline. Loogikaseadmetel on tavaliselt väike hulk loogikaväravate jadasid, mis hiljem kokku kogutakse, ja nii saab täpsemini ennustada aega, mis kulub signaali töötlemiseks. Lisaks saab neile paigutada rohkem loogikat, aga vähem loogikaelementide vahelisi ühendusi, mis tähendab omakorda vähem paindlikkust. FPGA arhitektuuris on just nimelt loogikaplokkide vahelistel ühendustel rohkem rõhku ja see muudab nad paindlikumaks.

Rakendused[muuda | redigeeri lähteteksti]

FPGA rakenduste seas on signaalitöötlus, tarkvaraline raadio, rakendus-spetsiifilise mikroskeemi prototüüpimine, pilditöötlus, kõnetuvastus, krüptograafia, bioinformaatika, arvutiriistvara emuleerimine, raadioastronoomia ja kasvav hulk igasugu muid rakendusi.

FPGA-d alustasid pakkudes alternatiivi komplekssetele loogikaseadmetele. Nende ülesandeks oli teiste laialdaselt levinud skeemide kokkuühendamine. Kui FPGA-de võimalused kasvasid, hakkasid nad järjest rohkem ülesandeid täitma. Tänapäeval on mõned kohe päris süsteemikiibi rollis.[12][13]

FPGA-d leiavad eriti kasutust just seal, kus osatakse ära kasutada nende arhitektuuri poolt pakutavat paralleelsust. Üheks selliseks alaks on koodimurdmine ja krüptograafiliste algoritmide lahendamine jõumeetodil.

FPGA-d kasutatakse ka muidu palju tehteid nõudvate algoritmide kiirendamiseks, et säästa protsessoriressurssi (sageli on pudelikaelaks just andmevahetuskiirus ja seetõttu sobib FPGA-le anda ülesandeid, kus on vaja samade andmetega teha palju tehteid). FPGA-d pole veel saanud iga kõrgema otsa arvuti koostisosaks, sest nende programmeerimine on võrreldes tavalise tarkvaraga kordades keerulisem ja selleks ei ole veel piisavalt häid tööriistu, mis suudaksid seda keerukust vähendada.

Traditsiooniliselt on FPGA-sid kasutatud peamiselt väikesemahulistes projektides. Väikeste mahtude juures on FPGA-de eest makstav lisaraha siiski väiksem, kui rakendus-spetsiifilise mikroskeemi tootmine. Tänapäeval on langenud hinnad ja kasvanud jõudlus oluliselt laiendanud FPGA-de tööpõldu.

Arhitektuur[muuda | redigeeri lähteteksti]

Kõige levinum FPGA arhitektuur[2] koosneb loogikaplokkide massiivist (sõltuvalt tootjast kutsutakse seda kas seadistavaks loogikaplokiks (CLB) või loogika-massiiviplokkiks (LAB)), sisend/väljund jalgadest ning vaheühendustest. Üldiselt on kõigil ühendustel sama ribalaius.

Rakenduse mikroskeem peab olema FPGA-le tõlgendatud adekvaatsete ressurssidega. Kui CBL/LAB-de ja sisendite/väljundite arvu saab kergesti tuletada konkreetsest disainist, siis ühendusradade arv võib isegi sama palju loogikat sisaldavate skeemide puhul märgatavalt varieeruda. Kuna kasutamata ühendusrajad lisavad hinda, aga mitte tulemust, siis üritavad FPGA-de tootjad pakkuda just piisavalt radasid, et oleks võimalik enamikke disaine, mis sobivad loogika elementide arvu poolest, ühendada. Need arvud on saadud hinnangute, mis on tuletatud Rent-i reeglist, või olemasolevate disainidega eksperimenteerimise abil.

Üldiselt koosneb loogikaplokk (CLB või LAB) mõnest loogikarakust. Tüüpiline loogikarakk koosneb 4 sisendiga otsingutabelist, täisliitjast ja D-tüüpi flip-flopist nagu all näidatud. Otsingutabel on joonisel jagatud kaheks 3 sisendiga otsingutabeliks. Tavarežiimis on need läbi vasakul oleva multipleksori kombineeritud üheks 4 sisendiga otsingutabeliks. Aritmeetikarežiimis söödetakse nende väljundid liitjale. Režiimi saab valida keskmise multipleksori programmeerimise abil. Väljund võib olla sünkroonne või asünkroonne sõltuvalt joonisel paremal asuva multipleksori programmeerimisest. Praktikas kasutatakse tervet või osa täisliitjast otsingutabeli funktsioonina, et ruumi säästa.[14][15][16]

Lihtsustatud näidis loogikarakust

Loogikarakk koosneb tavaliselt kahest või neljast sellisest struktuurist, kus mõned signaalid on neile ühised. Loogikaplokkides on tüüpiliselt omakorda mõned loogikarakud.

Viimastel aastatel on tootjad oma tippklassi toodetes asendanud 4 sisendiga otsingutabelid 6 sisendiga otsingutabelite vastu, mis pidid kiiremad olema.[17]

Kuna kella signaali jaoks on tavaliselt kasutusel eraldi rajad, siis tegeletakse nende signaalidega eraldi.

Selle näidisarhitektuuri loogika ploki jalgade asukoht on näidatud alloleval joonisel.

Loogikaplokk (in — sisend, out — väljund)

Iga sisend on juurdepääsetav ühest loogikaploki küljest, samal ajal kui väljund võib minna ainult kas paremal või all asuvale loogikaplokkide kanalile. Iga väljund võib olla ühendatud naaberloogikaploki suvalise sisendi külge.

Sarnaselt võib sisend/väljund jalg olla ühendatud suvalise ühenduse segmendiga, mis asub naaberkanalil. Näiteks kiibi ülal paikneva sisend/väljund jala võib ühendada suvalise juhtmega, mis asub tema all paikneval horisontaalsel kanalil.

Üldiselt on FPGA vaheühendused segmenteerimata. See tähendab, et iga ühenduse osa ulatub ühe loogikaplokini ja lõppeb lülitikarbis. Mõnede programmeeritavate lülitite sisselülitamine lülitikarbis tekitab pika pikema raja. Kiiremate vaheühenduste saavutamiseks kasutavad mõned FPGA arhitektuurid ka pikemaid radasid, mis läbivad mitut loogikaplokki, enne kui jõuavad mõnda lülitikarpi.

Kõikjal, kus ristuvad vertikaalne ja horisontaalne loogikaplokkide kanal, on lülitikarp. Sellises arhitektuuris, kus rada läheb lülitikarpi, on kolm programmeeritavat lülitit, mis määravad ära, millise teise samasse karpi mineva rajaga see rada ühendatakse.

Moodsas FPGA-s võib lisaks olla veel kõrgema taseme funktsionaalsust, mis on riistvaraliselt fikseeritud. Üldkasutatavate funktsioonide fikseerimine vähendab vajaminevat pindala ja teeb need kiiremaks võrreldes primitiivsetest loogikaplokkidest tehtutega. Sellistest lisaelementidest on kõige sagedasemad: kordajad, integreeritud protsessorid, kõrge kiirusega sisend/väljund loogika ja sisseehitatud mälu.

FPGA-sid kasutakse laialdaselt ka süsteemidisaini testimiseks. See lubab mikrokiibi valmistajatel testida oma disaini enne, kui mikrokiip tehases valmis tehakse.

FPGA disain ja programmeerimine[muuda | redigeeri lähteteksti]

Et määrata FPGA käitumine peab kasutajal olema riistvara kirjeldamise keelega (hardware description language – HDL) või elektriskeemiga disain. HDL on parem vorm, kui on vaja töötada suurte struktuuridega, sest seal saab neid nummerdada, mitte ei pea igat väikest osa käsitsi joonistama. Aga visualiseerimiseks on parem kasutada skeemi.

Kasutades seejärel mõnda abiprogrammi genereeritakse elektriliste ühenduste nimekiri. Järgnevalt saab selle ühenduste nimekirja konkreetse FPGA peale kaardistada. Selle jaoks on tavaliselt FPGA tootja poolt valmistatud kinnine tarkvara. Kasutaja vaatab tulemuse üle erinevate valideerimismeetoditega, mis võivad näidata nii ajastuse analüüsi kui ka süsteemi simulatsiooni.

Kui disainimise ja valideerimise protsess on lõppenud, genereeritakse FPGA tootja tarkvara poolt binaarfail, mille abil seadistatakse lõpuks FPGA. Seadistamiseks kasutatakse jadaühendust või välist mäluseadet.

Kõige tavalisemad HDL-id on VHDL ja Verilog. Kuid HDL-id on tavaliselt suhteliselt keerulised ja seda võrreldakse oma raskusastme poolest assemblerkeelega.

Selleks, et lihtsustada komplekssete süsteemide disainimist FPGA-del, on loodud teeke, mis sisaldavad keerulisi funktsioone ja skeeme, mis on testitud ja optimiseeritud. Inglise keeles on nende nimetus tihtipeale "IP cores" ja nad on saadaval FPGA-de tootjate ja kolmandate osapoolte käest. Enamasti on need tasulised ja kinniste litsentsidega, kuid mõned on ka avatud lähtekoodi ja vaba litsentsiga.

Vaata ka[muuda | redigeeri lähteteksti]

Viited[muuda | redigeeri lähteteksti]