Lær FPGA-programmering: En komplett guide for nybegynnere og eksperter

Grensen mellom maskinvare og programvare er svært fin. Når man utvikler maskinvare for enheter som datamaskiner, er det avgjørende å sikre at den fungerer optimalt og er i stand til å utføre kode.

En Field Programmable Gate Array (FPGA) er en type maskinvarearkitektur som gir brukere muligheten til å tilpasse kretser uavhengig av sted og tidspunkt.

For de som vurderer en karriere innenfor informatikk eller teknologi, vil kunnskap om hvordan FPGA-programmering fungerer være en stor fordel.

I denne artikkelen vil vi utforske hva FPGA-programmering innebærer, hvordan det virker, og hvor det anvendes, samt dele diverse ressurser for å gi et mer inngående bilde av emnet.

FPGA-programmering

En FPGA er en integrert krets (IC) som består av konfigurerbare logiske blokker og et utvalg andre funksjoner, som kan programmeres og omprogrammeres av brukeren selv.

Begrepet «feltprogrammerbar» refererer til det faktum at FPGA-ens evner ikke er faste, men derimot justerbare. Brukere har dermed friheten til å endre kretsens funksjoner når som helst, for å imøtekomme spesifikke designkrav.

FPGA-programmering kan beskrives som prosessen med å skape databehandlingsløsninger ved hjelp av FPGA-er.

Programmereren må planlegge, designe og implementere portenes arkitektur for å lage en fungerende krets som tilfredsstiller brukernes behov. Det endelige målet med FPGA-programmering er å skape en maskinvarekrets som leverer en spesifikk utgang når den aktiveres.

Kretskortene i en FPGA er designet for å etterligne funksjonen til ekte kretser. Disse kortene blir derfor hyppig brukt av kvalitetssikringsteam for å teste nye produkter. Et FPGA-system består av ulike maskinvareelementer.

De logiske portene fungerer som de fundamentale byggesteinene i FPGA-er. Disse portene utfører boolske operasjoner på inn- og utdata. Det finnes også rutingressurser som styrer signaler fra ett punkt til et annet.

Bruksområder for FPGA-programmering

FPGA-programmering har oppnådd betydelig popularitet blant utviklere i dagens teknologiske landskap.

Her er noen av bruksområdene:

#1. Utvikling av ASIC-er

Utviklere er nå i stand til å designe applikasjonsspesifikke integrerte kretser (ASIC). ASIC-er har blitt svært populære i forbindelse med Bitcoin-mining.

Designet til en FPGA gjør det lett å rette feil. En fordel med FPGA er at den kan benyttes som modell for andre prosjekter, noe som sparer tid og ressurser på lang sikt.

#2. Fornybar energisektor

Fornybar energi fra vind og sol blir stadig mer utbredt i en verden som står overfor utfordringer knyttet til global oppvarming. Overførings- og distribusjonsstasjoner krever effektive kraftnett for at smarte nett skal fungere optimalt.

FPGA-er er svært nyttige for å forbedre skalerbarheten og ytelsen til smarte nett, samtidig som de bidrar til lavt strømforbruk.

#3. Luftfart og forsvar

Fly opererer tidvis i krevende miljøer. Derfor produserer selskaper strålingsherdede og strålingstolerante FPGA-er som tilbyr bedre pålitelighet, ytelse og livssykluskrav for ekstreme forhold, sammenlignet med tradisjonelle ASIC-implementeringer.

#4. Serverapplikasjoner

Datasentre/servere er blitt en nødvendighet, ettersom behovet for raskere databehandling øker dag for dag. Data må behandles i sanntid, selv under begrensede tids- og plassforhold.

Gjennom BRAM kan FPGA-er tilby tilkobling til eksterne datalagringselementer, og dermed akselerere databehandlingen på brikkene.

Fordeler med FPGA-programmering

  • FPGA-er kan rekonfigureres. Det er viktig å vurdere bruksområdene til FPGA-er. De kan konfigureres og deretter rekonfigureres for bruk i en ny applikasjon.
  • FPGA-er krever mindre manuell håndtering. Programvaren tar seg av ruting, timing og plassering i et FPGA-miljø. Slike oppgaver kan være tidkrevende og kompliserte hvis de skal håndteres manuelt.
  • FPGA-er er som «blanke ark». I motsetning til tradisjonelle ASIC-er med forhåndsdefinerte funksjoner, kan FPGA-er omprogrammeres for ulike bruksområder. En ingeniør kan dermed programmere et slikt system for diverse formål ved hjelp av HDL-er (Hardware Design Language).
  • Prototyping. ASIC-er er kostbare å produsere, og selv en liten feil kan bli svært dyr. Før man lanserer en ASIC på markedet, er det viktig å sørge for at systemet fungerer og oppfyller de tiltenkte målene. FPGA-er er omprogrammerbare, noe som betyr at man kan teste systemet helt til man oppnår ønsket design.

Hvordan programmere en FPGA

Designene som brukes for å drive FPGA-er er primært kodet i Hardware Description Languages (HDL), som SystemVerilog, Verilog og VHDL.

#1. Verilog

Verilog er et godt valg dersom du ønsker å programmere FPGA-er med et fåtall linjer med kode. Språket kan sammenlignes med C, selv om det er designet for maskinvarearkitektur. Verilog ble utviklet for å gjøre HDL mer fleksibelt og robust.

#2. SystemVerilog

SystemVerilog ble skapt som en utvidelse av Verilog. Det er både et maskinvareverifiserings- og maskinvarebeskrivelsesspråk. Med dette språket kan man beskrive maskinvaremønstre, konvertere dem til digital kode, og deretter laste dem opp til et FPGA-system for å utføre spesifikke oppgaver.

#3. VHDL

VHDL er en forkortelse for Very High-Speed Integrated Circuit Hardware Description Language. Med VHDL kan man beskrive maskinvaren i en FPGA, slik at brukerne kan modellere og simulere den før man koder den inn i selve maskinvaren.

Programmering med VHDL gjør det lettere å identifisere potensielle feil i kretsen, slik at de kan fikses før endelig koding. VHDL gir brukere muligheten til å skrive strukturert kode.

High-Level Synthesis (HLS), hvor designet gjøres i en undergruppe av C, og kompilatoren omdanner koden til Verilog-kode, er populært blant utviklere som ønsker å programmere FPGA-er.

Utviklere kan dermed benytte de språkene de er mest komfortable med for å designe FPGA-er, gjennom enhetlige programvareplattformer.

#4. Python

Dette flerbruksprogrammeringsspråket kan benyttes til å programmere FPGA-er. For å oppnå dette, bruker Python PYNQ, et åpen kildekode-prosjekt som forenkler arbeidet med AMD-plattformer.

#5. C og C++

C-baserte språk er ideelle for FPGA-design, takket være høynivåsyntesen (HLS). AMD Vivado™ HLS-kompilatoren tilbyr et programmeringsmiljø som deler sentral teknologi med spesialiserte og standard prosessorer, noe som optimerer C-baserte programmer.

#6. AI-plattformer som TensorFlow og PyTorch

Ingeniører benytter trente dyp læringsmodeller fra Pytorch eller Tensorflow for å kompilere for FPGA-akselerasjon. En slik tilnærming eliminerer behovet for maskinvareprogrammering på lavt nivå, samtidig som man oppnår svært rask kompilering.

Kode som er skrevet i vanlige programmeringsspråk, som Python, C eller C++, blir syntetisert og konvertert til proprietære sammenkoblingsbeskrivelser gjennom synteseverktøy.

Den resulterende filen som inneholder sammenkoblingsbeskrivelsen, er kjent som bitstrømmen. En bitstrøm beskriver hvordan man konfigurerer en FPGA (hvordan man kobler flip-flops, porter og forskjellige digitale kretselementer via sammenkoblingsmatrisen til FPGA-en).

FPGA-er har en innebygd konfigurasjon som leser bitstrømfilen og konfigurerer FPGA-en i henhold til denne. Konfigurasjonskretsen kan lese bitstrømfilen gjennom ulike metoder, som Parallell Flash Memory, JTAG og Serial Flash Memory.

Produsenter av FPGA-kort leverer programvare/instruksjoner som utviklere bruker for å konfigurere/programmere systemene.

De fleste FPGA-systemer kan omprogrammeres utallige ganger. Den eneste begrensningen er når slike systemer blir skadet av forhold som ikke er spesifisert, som slitasje, temperatur eller høy spenning.

Du kan lære mer om FPGA-programmering gjennom disse læringsressursene:

Læringsressurser

#1. FPGA-programmering for nybegynnere

Denne boken introduserer leseren for verdenen av FPGA-programmering ved hjelp av SystemVerilog. Undervisningsmetoden er prosjektbasert, hvor man utvikler reelle applikasjoner som et tastatur og en kalkulator.

Boken presenterer FPGA-arkitekturen før den utforsker hvordan man skriver SystemVerilog RTL. Boken introduserer også grunnleggende datamatematikk, pipelining og parallellisme. I tillegg går boken inn på avanserte emner som AXI og tastaturgrensesnitt med PS/2.

Boken er ideell for programmerere, ingeniører og utviklere av innebygde systemer som ønsker å lære FPGA- og SystemVerilog-programmering. Ressursen er også egnet for FPGA-designere som ønsker praktisk erfaring med å skape virkelige prosjekter.

#2. FPGA-er for programvareprogrammerere

Denne boken introduserer programvareingeniører for verdenen av FPGA-er og rekonfigurerbar teknologi. Boken starter med å presentere FPGA-en og dens programmeringsmodell. Dette er også boken man bør bruke dersom man ønsker å lære hvordan FPGA-er implementerer ulike applikasjoner uten lavnivå-maskinvaredesignprosesser.

Boken gir en realistisk forståelse av problemer som er egnet for FPGA-er, og hvordan man implementerer løsninger fra en programvareingeniørs perspektiv. Den brukerorienterte tilnærmingen gjør det enkelt å forstå hvor FPGA-teknologi er relevant og hvordan den kan anvendes. Målgruppen for denne boken er programvaredesignere og FPGA-designingeniører.

#3. Begynnende FPGA: Programmering av metall

Denne boken lærer leserne hvordan man bruker BeMicro MAX 10 for å bygge en temperatursensor, bevegelsessensor, og en KITT-bilskjerm fra Knight Rider. Boken er nybegynnervennlig og passer for de uten programmeringskunnskap eller elektronikkutdannelse.

Boken introduserer FPGA-er og forklarer forskjellene fra mikrokontrollere og ASIC-er. Den fungerer også som en ressurs for å introdusere deg for hvordan man setter opp et verktøysett og bruker VHDL for å programmere FPGA. Boken er ideell for elektronikk- og Raspberry Pi-entusiaster som ønsker en praktisk introduksjon til FPGA-verdenen.

#4. Programmering av FPGA-er: Komme i gang med Verilog

Denne boken er perfekt dersom du aldri har arbeidet med Verilog eller FPGA-er. Hvis FPGA-programmering er et nytt konsept for deg, er dette et godt sted å starte. De typiske eksemplene, som tellere og 7-segments skjermer, vil gi elevene en god start.

Boken introduserer elevene for Verilog og tilbyr ulike mellomnivåeksempler som VGA. Ressursen er kanskje ikke ideell hvis du allerede har kunnskap om Verilog og FPGA. Denne boken er tilgjengelig i Kindle- og Paperback-versjoner.

Konklusjon

FPGA-er kan til tider yte bedre enn GPU-er i dype læringsapplikasjoner med lav ventetid. FPGA-programmering er en viktig ferdighet ettersom FPGA-er kan benyttes i forbrukerelektronikk, industriell automasjon og militære applikasjoner, blant mange andre områder. FPGA-er er fortsatt under utvikling, og vi kan bare se frem til at de blir finjustert for flere bruksområder og bedre ytelse.