FPGA

FPGA ("Field-programmable gate array", suomeksi "ohjelmoitava porttimatriisi") on usean sovelluksen toteuttamiseen soveltuva järjestelmäpiiri/mikropiiri, jonka sisältämä logiikka voidaan ohjelmoida helposti uudelleen. FPGA-piirit ovat kehittyneet 1980-luvulla aikaisemmista ohjelmoitavista logiikkapiireistä kuten CPLD- ja PAL-piireistä, joita käytettiin järjestelmien digitaaliosien toteuttamiseen. Ohjelmoitavuuden ja useiden standardoitujen liityntävaihtoehtojen (esim. UART, I2C, SPI jne.) ansiosta FPGA-piirillä on mahdollista toteuttaa useita eri toiminnallisuuksia. FPGA-piirejä käytetään erityisesti sulautetuissa järjestelmissä, sekä yleisesti prototypointiin, pieniin ja jopa keskisuuriin tuotantosarjoihin. Aluksi FPGA-piirit eivät sisältäneet valmiita ohjelmoitavia prosessoriytimiä, mutta monipuolisimmat piirit saattavat sisältää useita prosessoreita ja niitä kutsutaankin usein FPGA-SoC-piireiksi. 
Valtaosa FPGA-piireistä on digitaalisia, mutta on myös niin sanottua sekasignaalia ("mixed signal") käsitteleviä piirejä. Sekasignaalia käsittelevät piirit käsittelevät sekä analogisia- että digitaalisia signaaleja samalla piisirulla.
Käyttökohteet.
FPGA-piirit ovat nopeuttaneet sulautettujen järjestelmien kehitystä, koska 
FPGA-piirit ovat välttämättömiä sellaisissa sovelluksissa, joissa standardointi kehittyy nopeasti esimerkiksi tietoliikenteessä, tai kehitetään uutta menetelmää esim. mittauksiin, anturointiin, lääketieteelliseen kuvantamiseen tai kvanttilaskennan demonstrointiin. Toiminnallisuuden (esim. salauksen, laskentakyvykkyyden jne) lisääminen olemassaolevaan ja toimivaan järjestelmään saattaa tapahtua joustavimmin ja nopeimmin FPGA-piiri(e)n avulla. Tästä esimerkkinä toimii anturien lisääminen matkapuhelimiin 2010-luvun alussa, kun käytössä olevien järjestelmäpiirien (ASIC/SoC) laskentakapasiteetti ei riittänyt käsittelemään lisääntyvien anturisignaalien laskentaan. Nopeimmat tuotteistajat lisäsivät erillisen FPGA-piirin pelkästään anturisignaalien laskentaan ja lisäsivät nopeasti järjestelmän suorituskykyä (muuttamatta järjestelmäpiiriä) ja menestystään markkinoilla. Tämän seurauksena osa anturivalmistajista myös kehitti erillisiä moduleja, jotka sisälsivät anturin lisäksi FPGA:n yleisimmillä järjestelmissä käytetyillä standardiliitynnöillä - ja vapauttivat/säästivät laskentaresursseja (engl. off-loading) järjestelmäpiireiltä. Samanlaista kehitystä tapahtuu autoteollisuudessa, puettavassa ja lentävässä/lennätettävässä elektroniikassa (UA/UAV), joissa järjestelmäpiirit ovat vasta kehtteillä tai joista on olemassa vasta ensimmäinen tuoteversio. On olemassa paljon sovelluksia (avaruus, anturointi, mittaustekniikka jne), joiden valmistusmäärät eivät tarvitse suorituskyvyn ja/tai kustannusten vuoksi parempaa integrointiastetta (ASIC/SoC/järjestelmä-/systeemipiiri) kuin FPGA.
Myös sovelluskohtaisia (esim autoelektroniikka) sovelluspiirejä on kehitetty (esim. Gowin Semiconductor Corp). Nissä on pyritty optimoimaan ko. sovellusalueen tyypillisten/standardoitujen liitännät, käytettävissä olevat jännitteet jne, ja näin ylimääräisten toimintojen määrä verrattuna ASIC-/SoC-/systeemipiireihin jää vähäiseksi jo kehityksen alkuvaiheessa.
Haittoja.
Suurimpia haittapuolia FPGA-piirien käytöstä tuotannossa saattaa olla
Valmistajia.
Merkittävimpiä digitaalisia FPGA-ja FPGA-SoC piirivalmistajia ovat
Sekasignaali-FPGA-Soc-piirejä on Infineonilla (ent. Cypress Semiconductor Corp:n ns. PSOC-/Programmable System on Chip-tuoteperhe) ja Microsemilla (ns Fusion-tuoteperhe). Tosin analogisten ja analogis-digitaalisten osien suorituskyky (esim. muunninten resoluutio ja nopeus) saattaa olla rajoittunutta. Useissa sovelluksissa kuitenkin esimerkiksi 10-12 bitin muunninten resoluutio ja/tai samalla piipalalla (engl. chip) oleva langaton yhteyslohko/-toiminto voi mahdollistaa kokonaan uuden tuotteen tai tuotekategorian.
Valmistusteknologiat.
FPGA-piirit valmistetaan yleisimmin CMOS-teknologialla, johon on lisätty erilaisia muistioptioita (OTP engl. One Time Programmable, NVM engl. Non-Volatile Memory jne.) lisääviä valmistusaskelia, ja substraattina käytetään puolijohtavaa piitä. FPGA-piirien valmistusteknologiat ovat yleensä 1-3 sukupolvea jäljessä tiheimpien tuotanto-ASIC/IC-piirien valmistusteknologioista, ja siitäkin syystä ne ovat esim. hitaampia, mutta valmistuskustannuksiltaan halvempia kulutettua piin pinta-alaa kohti. 
Myös eristävälle substratille valmistettuja (FD-SOI Fully Depleted Silicon on Insulator) FPGA-piirejä on julkaistu tehonkulutuksen minimoimiseksi ja häiriömarginaalien parantamiseksi. Tavoitteena on myös ollut säteilynkeston parantaminen esim. avaruussovelluksiin. 
Käyttö ja ominaisuudet.
FPGA-piirejä verrataan usein sovelluskohtaisiin mikropiireihin (ASIC ja järjestelmäpiiri (SoC, "System on Chip")), sillä niiden sovellusalueet ovat usein samoja. FPGA-piirien suunnittelu poikkeaa huomattavasti esimerkiksi ASIC-piirien suunnittelusta. FPGA-piiriin verrattuna ASIC/SoC kuluttaa yleensä vähemmän tehoa ja sitä kautta lämpenee vähemmän, koska kaikki ylimääräiset liitännät ja elementit on karsittu pois. Yleensä FPGA-toteutus vie enintään n. 80% käytettävistä toiminnoista, mikä mahdollistaa toimintojen muuttamisen suunnittelun loppuvaiheessa esimerkiksi standardoinnin kehittyessä tai asiakastarpeiden muuttuessa. Vaikka ASIC/SoC on yleensä pienikokoisempi ja maksaa suurissa erissä vähemmän kuin saman toiminnalisuuden FPGA, suunnittelun ja koepiirien tuottaminen on huomattavsti nopeampaa. Näistä syistä sulautettujen laitteistojen tuotekehityksessä alkuvaiheessa käytetään FPGA-piirejä ja siirrytään ASIC/SoC-piirien käyttöön, kun tuotantomäärät kasvavat. Koska siirtyminen ASIC/SoC-piireihin ei tapahdu ilman uudelleen suunnittelua, valmistusta ja testausta, on siirtymisajankohta FPGAsta ASICiin/SoCiin määriteltävä siten, että ASIC/SoC-piirien mahdolistavat suorituskykylisäykset ja taloudellinen tehokkuus toteutuvat käytännössä. On huomattava, että siirtyminen FPGA:sta ASIC/SoC-piiriin tai joskus -piireihin vaatii tavallisimmin muutoksia myös useisiin muihinkin järjestelmän osiin kuten mm. tehontuottoon/käyttöjännitteisiin, kellotukseen, järjestelmäpiirilevyyn, testattavuuteen, mahdollisesti tarvittavaan salaukseen ja jopa tuotteen mekaaniseen ratkaisuun. 
Ennen FPGA-piirien suunnittelua on valittava soveltuva valmistaja ja tuoteperhe. Tärkeimpiä valintakriteereitä ovat
Sekasignaali-FPGA-piiriä valittaessa on lisäksi selvitettävä ovatko piirin mahdollisten muunninten suorituskyky riittävä ja mitä muita analogisia/analogis-digitaalisia lohkoja (esim. lämpötilamittaus, kosketusanturien kontrollointi jne.) tai langattomia yhteys- (esim. bluetooth) ja salauslohkoja on saatavilla integroituna FPGA:han.
Kun laitteistokuvauskielellä kirjoitettu malli on syntetisoitu, se voidaan suoraan ladata piirille ja aloittaa käyttö siinä missä ASIC-piirin kanssa alotettaisiin vasta piirin valmistukseen tähtäävä suunnittelutyö. Kriittisin vaihe FPGA:n suunnittelussa on yleensä ajoitusten simulointi,ja hyväksyminen (engl. timing closure). Kun laitteistokuvaus ajoituksineen ja hyväksytty,laitteistokuvaus voidaan tallettaa pieneen oheispiiriin/muistiin, josta se automaattisesti syötetään FPGA-piiriin aina kun laite käynnistetään. Heti tämän jälkeen itse FPGA aloittaa toimintansa.
FPGA-piirien kasvaessa toteutuvan ajoituksen testaaminen saattaa kerralla koko piirille olla vaativa tehtävä. Siksi on kehitetty FPGA-piirejä, joissa ajoituksen hyväksyminen voidaan tehdä osittain lohkoille, joita kutsutaan verkkoalueiksi (engl. NoC, Network on chip), ja näin nopeuttaa ajoituksen testausta ja hallintaa.
Mallissa havaittujen suunnitteluvirheiden korjaus on helppoa vaatiessaan vain uuden syntetisoinnin ja piirin uudelleenohjelmoinnin. Tämän takia FPGA-piirit sopivat erityisesti ASIC-piirien prototyypitykseen, sekä laiteajuri- ja firmwarekehitykseen siksi ajaksi ennen kuin varsinainen ASIC-piiri on valmis. FPGA-piirejä käytetään myös tilanteissa joissa piirin sisältävää laitetta valmistetaan pieni kappalemäärä jolloin kappalehinnalla ei ole suurta merkitystä, kokoa ja tehonkulutusta ei tarvitse minimoida, logiikan uudelleenohjelmoitavuus ja virheiden korjaus tuotteen toimituksen jälkeen on välttämätöntä, tai laite halutaan mahdollisimman nopeasti markkinoille.
Piirin toiminnan suunnitteluun jokainen FPGA-piirin valmistaja tarjoaa oman alustakohtaisen ohjelmiston. Yleensä ohjelmisto on saatavilla Windows- ja Linux-käyttöjärjestelmille ja se on ominaisuuksiltaan erittäin monipuolinen. Arvokkaiden yrityslisenssien lisäksi suunnitteluohjelmistoista julkaistaan yleensä myös pieniä rajoituksia sisältävä ilmaisversio.
FPGA-piirien ympärille on syntynyt myös järjestelmävalmistajia, jotka ovat valmiiksi integroineet FPGA-piirin oheistoimintoineen valmiille piirilevylle ja mähdollistavat tuotekehityksen nopean aloituksen.
Rakenne.
FPGA-piiri koostuu geneerisistä logiikkaelementeistä, joiden toteuttama kombinatorinen logiikka ja väliset kytkennät ovat ohjelmoitavissa. FPGA-piirin valmistaja ilmoittaa yleensä logiikkaporttimäärän jota vastaavan toiminnallisuuden piiri pystyy parhaimmillaan toteuttamaan. Nykyaikaisissa piireissä tämä määrä lasketaan sadoissa tuhansissa porteissa. Käytännössä tästä maksimimäärästä jäädään usean kymmenen prosentin päähän, sillä ohjelmoitavien logiikkaelementtien välinen reititys piirillä optimaalisella tavalla on erittäin vaikeaa. Pitkät reitit logiikkalementtien välillä myös rajoittavat kellotaajuutta jolla piiriä voidaan käyttää. Mikäli logiikkaportteja tarvitaan enemmän kuin mihin yksi piiri pystyy, on useamman FPGA-piirin yhteiskäyttö mahdollista joillain alustoilla.
FPGA-piiri saattaa sisältää myös ei-ohjelmoitavia osia esimerkiksi usein käytettyjä aritmeettisia operaatioita varten, digitaalisia suotimia ja muita vastaavia suhteellisen yksinkertaisia piirejä, muistia, tai joskus jopa kokonaisia yleiskäyttöisiä ohjelmoitavia suorittimia. Näiden avulla piirin suorituskykyä ja tehonkulutusta voidaan parantaa. Prototyypitystä varten FPGA-piirejä saa myös piirilevyillä, joilla on valmiina muita mahdollisesti hyödyllisiä piirejä ja muuta elektroniikkaa, kuten A/D-muuntimia, muistipiirejä, näyttöjä, kytkimiä, liittimiä yms. Lopputuotteessa FPGA-piirin ohjelmointidata saattaa olla tallennettuna haihtumattomalle muistille josta se ladataan FPGA-piirille laitteen käynnistyessä.