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 

* ohjelmiston (SW) kehitys voi tapahtua samanaikaisesti laitteiston (HW) kehittämisen kanssa
* järjestelmän suorituskyky voidaan varmentaa laitekehityksen alkuvaiheessa 
* järjestelmän toiminnallisuuden jakaminen ohjelmiston ja laitteiston suhteen voidaan tehdä osittain kokeilemalla ja tuotteistettava järjestelmäarkkitehtuuri voidaan päättää pohjautuen mittaustuloksiin simulointien lisäksi
* FPGA-piiri on ohjelmoinnin ja testauksen jälkeen valmis käytettäväksi ilman ASIC-piirin vaatimaa valmistusaikaa (engl. turn around time)

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

* Ylimääräinen tehonkulutus johtuen mahdollisista valitun FPGA-pohjan ylimääräisistä lohkoista/toiminnallisuuksista verrattuna sovelluksen vaatimiin tarpeisiin. Useimmiten äärimmäinen tehonkulutuksen minimointi vaatiikin ASIC-piiritoteutuksen FPGA-vaiheen jälkeen. FPGA-pohja joudutaan usein valitsemaan noin max 80% johdotustäyttösuhteen mukaan, koska lohkot ovat valmiiksi paikoitettuja piille ja on varmistettava johdotuksen onnistuminen. Uuden FPGA-pohjan valinta kesken piirin suunnittelun ja testauksen saattaa johtaa aikatauluviiveisiin toteutuksessa. 
* Äärimmäistä nopeutta saattaa olla vaikea saavuttaa ilman huomattavaa tehonkulutuksen lisäystä ja mahdollisesti siitä johtuvaa järjestelmän ylimääräistä lämpenemistä ja sen vaatimia lämmönpoistotoimenpiteitä 
* Kasvavissa tuotantovolyymeissa FPGA:n hinta saattaa osoittautua ASIC-toteutusta kalliimmaksi. Koska ASIC-piirin toteus vaatii suunnittelu-, testaus- ja valmistusaikaa ja mahdollisesti uusia toimittajia tuotantoketjussa, on siirtyminen FPGA-piiristä ASICiin suunniteltava huolellisesti etukäteen, jos tuotantovolyymit kasvavat. Ajoituksen epäonnistuminen voi johtaa hinta-/suorituskilpailukyvyn nopeaan menettämiseen. 
* Useita FPGA-piirejä sisältävissä järjestelmissä siirtyminen ASIC/SoC-systeemi/järjestelmäpiireihin voi tapahtua piiri/toiminnallisuus kerrallaan, ja tämä saattaa vaatia useiden kuukausien/yli vuoden kehitys-/tuotteistusajan käytännössä, mutta mahdollistaa optimaalisen suorituskyvyn ja kustannukset/hinnan järjestelmän eri tuotanto- ja kehitysvaiheessa.

## Valmistajia
Merkittävimpiä digitaalisia FPGA-ja FPGA-SoC piirivalmistajia ovat
 
*AMD (Xilinx,) 
*Achronix
*Intel (ent. Altera)
*Lattice Semiconductor 
*Microchip Technology (ml. Microsemi) 
*Quicklogic

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

* Suorituskykyvaatimukset (nopeus, tehonkulutus)
* Ulkoisten liityntöjen määrä, liityntävaatimukset (LVCMOS, LVDS, LVTTL, HSTL jne.) ja niiden yleiskäyttöisyys
* Muisti(e)n (SRAM, OTP, NVM jne.) koko
* Kehitysympäristön (ohjelmisto ja laitteisto) saatavuus,ja valmistajan tuki yleisesti ja eriyisesti standardiliityntöjen osalta: ovatko liitynnät (esim I2C, SPI jne) saatavana kiinteinä (hard macro) vai SW-muodossa (soft macro) 
* Mahdollisten maksullisten (ohjelmisto)lisenssien välttämättömyys kehitysvaiheessa ja tuotannollistamisessa joskus jopa kolmannelta osapuolelta
* Fyysinen koko ja piirin/piirien eri kotelontimahdollisuudet
* Valmistajan kyky tuottaa piirejä mahdollisesti kasvavissa määrin taloudellisesti
* Kovetus-/jäädytysmahdollisuudet (engl. hardening/freezing) eli siirtyminen suorituskyvyltään vähintään vastaavaan/lopulliseen ASIC/SoC-piiriin, mikäli on odotettavissa tuotantomäärien kasvua. Muutamat FPGA-piirivalmistajat ovat solmineet sopimuksia piivalimoiden kanssa varmistaakseen joustavan siirtymisen FPGAsta ASICiin/SoCiin, jos omaa valmistuskapasiteettia ei ole tai se ei riitä ASIC/SoC-tuotantomääriin
* Jos kyseessä on FPGA-SoC-piiri, mitä valmiita ytimiä/IP-lohkoja on käytetty piiripohjassa, ja miten niiden suorituskyky ja siirtäminen ASICin osaksi käytännössä varmistetaan (ml. käyttölisenssit)
* Kyseessä olevan FPGA:n/-piiriperheen/-valmistajan oma ja mahdollinen käyttäjä-/harrastajayhteisön tuki

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ä.

## Katso myös

* ASIC (*Application Specific Integrated Circuit*)
* EPLD (*Erasable programmable logic device*)
* PAL (*Programmable array logic*)
* GAL (*Generic array logic*)
* Laitteistokuvauskieli
* Logiikkasynteesi
* Mikropiiri
* Digitaalipiirit

## Lähteet

## Aiheesta muualla
* 
*