Hur fungerar FPGA-programmering?

By rik

Gränsen mellan hårdvara och mjukvara är ibland hårfin. När du skapar hårdvarukomponenter för till exempel datorer är det avgörande att dessa kan köra och utföra programkod.

En Field Programmable Gate Array (FPGA) representerar en flexibel maskinvaruarkitektur som tillåter användare att anpassa kretsarnas funktioner var som helst och när som helst.

Kunskap om FPGA-programmering är värdefull för den som vill arbeta inom datavetenskap eller teknik.

Denna artikel utforskar vad FPGA-programmering innebär, hur det fungerar, och var det används, samt erbjuder resurser för vidare studier.

FPGA-programmering

En FPGA är en integrerad krets (IC) som innehåller konfigurerbara logikblock och andra funktioner som användaren kan programmera och omprogrammera.

Termen ”fältprogrammerbar” antyder att FPGA:s kapacitet inte är fast utan anpassningsbar. Det betyder att användare kan ändra kretsens funktioner när som helst för att uppfylla specifika designkrav.

FPGA-programmering är processen att skapa datorlösningar med hjälp av FPGA:er.

Programmeraren måste planera, designa och implementera logikkretsarnas arkitektur för att skapa en funktionell krets som uppfyller användarens behov. Det slutliga målet med FPGA-programmering är att skapa en hårdvarukrets som genererar specifik data när den aktiveras.

FPGA-kretskort är utformade för att efterlikna beteendet hos fysiska kretsar och används ofta av kvalitetssäkringsteam för att testa nya produkter. Ett FPGA-system består av olika hårdvaruelement.

Logiska grindar utgör de grundläggande byggstenarna i en FPGA. Dessa grindar utför booleska operationer på in- och utdata. Dessutom finns det routingresurser som leder signaler mellan olika punkter.

Användningsområden för FPGA-programmering

FPGA-programmering har blivit mycket populär bland utvecklare i dagens samhälle.

Här följer några användningsområden:

#1. Design av ASIC:er

Utvecklare kan nu skapa applikationsspecifika integrerade kretsar (ASIC). ASIC:er har blivit mycket vanliga inom Bitcoin-mining.

FPGA-design underlättar korrigering av fel. En fördel med FPGA:er är möjligheten att använda dem som modeller för andra projekt, vilket sparar tid och resurser på lång sikt.

#2. Förnybar energi

Förnybar energi från vind och sol ökar i popularitet i takt med att världen söker lösningar på den globala uppvärmningen. Kraftöverförings- och distributionsstationer kräver effektiva kraftnät för optimal funktion av smarta nät.

FPGA:er är mycket användbara för att förbättra skalbarheten och prestandan hos smarta nätverk, samtidigt som de håller nere strömförbrukningen.

#3. Flyg och försvar

Flygplan opererar ibland i tuffa miljöer. Tillverkningsföretag producerar strålhärdade och stråltoleranta FPGA:er som erbjuder högre tillförlitlighet, prestanda och livscykler för extrema förhållanden än traditionella ASIC-implementeringar.

#4. Serverapplikationer

Datacenter/servrar har blivit allt viktigare då behovet av snabb databearbetning ökar dag för dag. Data måste bearbetas i realtid, även under begränsningar av utrymme och tid.

FPGA:er, genom BRAM (Block RAM), kan kopplas till externa datalagringsenheter, vilket påskyndar databearbetningen.

Fördelar med FPGA-programmering

  • FPGA:er är omkonfigurerbara. Det är viktigt att uppmärksamma hur användbar en FPGA är. Du kan konfigurera en och sedan omkonfigurera den för en annan användning.
  • FPGA:er kräver mindre manuell hantering. Programvaran hanterar uppgifter som routing, tidsinställning och placering i en FPGA-miljö. Dessa uppgifter kan vara tidskrävande och komplexa om de hanteras manuellt.
  • FPGA:er levereras som ”tomma dukar”. Till skillnad från traditionella ASIC:er med fördefinierade funktioner kan FPGA:er omprogrammeras för olika syften. En ingenjör kan programmera ett sådant system för olika användningsområden med hjälp av HDL (Hardware Design Language).
  • Prototypframställning. Att tillverka ASIC:er är kostsamt, och ett enkelt misstag kan bli mycket dyrt. Innan du lanserar en ASIC är det viktigt att se till att systemet fungerar och uppfyller målen. FPGA:er är omprogrammerbara, vilket innebär att du kan testköra tills du får rätt design.

Hur man programmerar en FPGA

Designen som används för att köra FPGA:er kodas primärt i hårdvarubeskrivningsspråk (HDL) som SystemVerilog, Verilog och VHDL.

#1. Verilog

Verilog är idealiskt om du vill programmera FPGA:er med relativt få kodrader. Detta språk liknar C, men det är utformat för hårdvaruarkitektur. Verilog skapades för att göra HDL mer flexibelt och robust.

#2. SystemVerilog

SystemVerilog utvecklades som ett tillägg till Verilog. Det är både ett språk för hårdvaruverifiering och hårdvarubeskrivning. Med det här språket kan du beskriva hårdvarumönster, konvertera dem till digital kod och sedan ladda upp dem till ett FPGA-system för att utföra specifika uppgifter.

#3. VHDL

VHDL är en förkortning av Very High-Speed Integrated Circuit Hardware Description Language. Med VHDL kan du beskriva en FPGA:s hårdvara, vilket gör det möjligt för användare att modellera och simulera den innan den faktiskt kodas in i hårdvaran.

Programmering med VHDL gör det lätt att upptäcka potentiella fel i kretsen som användare kan åtgärda innan den slutliga kodningen. VHDL ger användarna möjlighet att skriva strukturerad kod.

High-Level Synthesis (HLS), där designen görs i en delmängd av C, och kompilatorn konverterar koden till Verilog, är populärt bland utvecklare som vill programmera FPGA:er.

Utvecklare kan därmed använda språk de är bekanta med för att designa FPGA:er genom enhetliga mjukvaruplattformar.

#4. Python

Detta mångsidiga programmeringsspråk kan användas för att programmera FPGA:er. För att åstadkomma detta använder Python PYNQ, ett projekt med öppen källkod som underlättar arbete med AMD-plattformar.

#5. C och C++

C-baserade språk är idealiska för FPGA-design på grund av högnivåsyntes (HLS). AMD Vivado™ HLS-kompilatorn erbjuder en programmeringsmiljö som delar central teknologi med specialiserade och standardprocessorer, vilket optimerar C-baserad programvara.

#6. AI-plattformar som TensorFlow och PyTorch

Ingenjörer använder tränade djupinlärningsmodeller från Pytorch eller Tensorflow för att kompilera för FPGA-acceleration. Denna metod eliminerar behovet av hårdvaruprogrammering på låg nivå, samtidigt som den möjliggör snabb kompilering.

Kod skriven i vanliga programmeringsspråk som Python, C eller C++ syntetiseras och omvandlas till proprietära kopplingsbeskrivningar med hjälp av syntesverktyg.

Den resulterande filen som innehåller kopplingsbeskrivningen kallas bitström. En bitström definierar hur man konfigurerar en FPGA (hur man kopplar vippor, grindar och olika digitala kretselement via FPGA:s kopplingsmatris).

FPGA:er har en inbyggd konfiguration som läser bitströmsfilen och konfigurerar FPGA:n. Konfigurationskretsen kan läsa bitströmsfilen genom olika metoder, som parallellt flashminne, JTAG och seriellt flashminne.

Tillverkare av FPGA-kort tillhandahåller programvara/instruktioner som utvecklare använder för att konfigurera/programmera systemen.

De flesta FPGA-system kan programmeras om hur många gånger som helst. Den enda begränsningen är om sådana system skadas av ospecifika förhållanden som slitage, temperatur eller hög spänning.

Du kan lära dig mer om FPGA-programmering med hjälp av dessa resurser:

Lärresurser

#1. FPGA-programmering för nybörjare

Denna bok introducerar dig till FPGA-programmeringens värld med SystemVerilog. Undervisningsmetoden är projektbaserad, där du utvecklar verkliga applikationer som ett tangentbord och en miniräknare.

Boken introducerar FPGA-arkitekturen innan den går in på hur man skriver SystemVerilog RTL. Du får också lära dig grunderna i datormatte, pipelining och parallellism. Boken berör även avancerade ämnen som AXI och tangentbordsgränssnitt med PS/2.

Denna bok är idealisk för programmerare, ingenjörer och utvecklare av inbyggda system som vill lära sig FPGA- och SystemVerilog-programmering. Denna resurs är också lämplig för FPGA-designers som vill få praktisk erfarenhet av att skapa verkliga projekt.

#2. FPGA:er för programvaruprogrammerare

Denna bok introducerar mjukvaruingenjörer till FPGA:er och omkonfigurerbar teknik. Boken börjar med en introduktion till FPGA och dess programmeringsmodell. Detta är också rätt bok om du vill lära dig hur FPGA:er implementerar olika applikationer utan lågnivå hårdvarudesignprocesser.

Boken ger en realistisk bild av de problem som passar FPGA:er och hur man implementerar lösningar utifrån en mjukvaruingenjörs perspektiv. Det användarcentrerade tillvägagångssättet i den här boken gör det lätt att förstå var FPGA-tekniken är tillämpbar och hur. Målgruppen för boken är mjukvarudesigners och FPGA-designingenjörer.

#3. Börja med FPGA: Programmering Metal

Denna bok lär läsarna att använda BeMicro MAX 10 för att bygga en temperatursensor, rörelsesensor och KITT-bildskärm från Knight Rider. Boken är nybörjarvänlig och passar även de utan programmeringskunskaper eller examen i elektroteknik.

Boken introducerar FPGA:er och förklarar skillnaderna mellan dem och mikrokontroller eller ASIC:er. Det är också resursen som introducerar dig till hur du konfigurerar en verktygskedja och använder VHDL för att programmera FPGA:er. Boken är perfekt för elektronik- och Raspberry Pi-entusiaster som vill ha en praktisk introduktion till FPGA-världen.

#4. Programmering av FPGA:er: Kom igång med Verilog

Denna bok är idealisk om du aldrig har arbetat med Verilog och FPGA. Om FPGA-programmering är ett nytt koncept för dig är detta ett bra ställe att börja. De typiska exemplen, som räknare och 7-segmentsdisplayer, ger eleverna en bra start.

Boken introducerar eleverna till Verilog och erbjuder olika mer avancerade exempel som VGA. Denna resurs är kanske inte idealisk om du redan har kunskaper om Verilog och FPGA. Boken finns i både Kindle- och pappersversion.

Sammanfattning

FPGA:er kan ibland prestera bättre än GPU:er i djupinlärningsapplikationer med låg latens. FPGA-programmering är en viktig färdighet eftersom FPGA:er kan användas i konsumentelektronik, industriell automation och militära applikationer, bland många andra användningsområden. FPGA:er utvecklas ständigt, och det är spännande att följa utvecklingen mot fler användningsområden och högre prestanda.