FPGA
FPGA ("Field-programmable gate array") on digitaalinen mikropiiri, jonka sisältämä logiikka voidaan ohjelmoida helposti uudelleen. Tämän ansiosta FPGA-piirillä voi teoriassa toteuttaa minkä tahansa digitaalipiirin toiminnallisuuden. FPGA-piirejä käytetään erityisesti sulautetuissa järjestelmissä, sekä yleisesti prototyypitykseen. FPGA-piirit ovat kehittyneet 1980-luvulla aikaisemmista ohjelmoitavista logiikkapiireistä kuten CPLD- ja PAL-piireistä.
Alan merkittävimpiä piirivalmistajia ovat Altera, Xilinx ja Lattice Semiconductor.
FPGA-piirejä verrataan usein sovelluskohtaisiin mikropiireihin (ASIC), sillä niiden sovellusalueet ovat usein samoja. FPGA-piiriin verrattuna ASIC kuluttaa paljon vähemmän tehoa ja sitä kautta lämpenee vähemmän, on paljon pienikokoisempi ja maksaa suurissa erissä erittäin vähän, suurin saavutettavissa oleva kellotaajuus on suurempi ja logiikkaportteja saadaan mahtumaan piirille enemmän. ASICin suunnitteluprosessi on kuitenkin erittäin kallis ja hidas, ja valmiissa piirissä havaitut suunnitteluvirheet vielä lisäävät kustannuksia mikäli ne on pakko korjata. FPGA-piirin käyttöönotto sen sijaan on erittäin nopeaa.
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ö. Tarkkaan ottaen laitteistokuvaus tallentuu pieneen oheispiiriin josta se automaattisesti syötetään FPGA-piiriin aina kun laite käynnistetään. Heti tämän jälkeen itse FPGA aloittaa toimintansa.
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-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ä.