Jak funguje programování FPGA?

Hranice mezi hardwarem a softwarem je velice tenká. Při vývoji hardwaru pro různá zařízení, jako jsou například počítače, je nezbytné zajistit, aby byl schopen spouštět a vykonávat kód.

Field Programmable Gate Array (FPGA), neboli programovatelné hradlové pole, představuje specifický typ hardwarové architektury, která uživatelům umožňuje upravovat obvody prakticky odkudkoliv a kdykoliv.

Získání znalostí o programování FPGA může být velmi přínosné, pokud se chcete profesně věnovat oborům jako je informatika nebo technologie.

V tomto článku se budeme věnovat tomu, co přesně je programování FPGA, jak funguje, kde se využívá a také si představíme různé zdroje, které vám mohou pomoci se v této oblasti lépe orientovat.

Programování FPGA

FPGA je integrovaný obvod (IC), který se skládá z konfigurovatelných logických bloků a řady dalších funkcí, které může uživatel programovat a opakovaně přenastavovat.

Označení ‚field programmable‘ (programovatelné v terénu) naznačuje, že schopnosti FPGA nejsou pevně dané, ale jsou přizpůsobitelné. Uživatelé tak mohou flexibilně upravovat funkce obvodu tak, aby odpovídaly jejich konkrétním konstrukčním záměrům.

Programování FPGA lze chápat jako proces vytváření výpočetních řešení s využitím FPGA.

Programátor musí naplánovat, navrhnout a následně realizovat architekturu hradel tak, aby vznikl funkční obvod, který bude splňovat požadavky uživatelů. Zásadním cílem programování FPGA je tedy vytvoření hardwarového obvodu, který po spuštění generuje specifický výstup.

Obvodové desky založené na FPGA jsou navrženy tak, aby simulovaly chování reálných obvodů. Proto jsou tyto desky často využívány týmy pro kontrolu kvality při testování nových produktů. Systém FPGA obsahuje různé hardwarové komponenty.

Logická hradla jsou základními stavebními bloky FPGA. Provádějí booleovské operace se vstupními a výstupními daty. Dále jsou zde směrovací prvky, které přenášejí signály z jednoho bodu do druhého.

Případy využití programování FPGA

Programování FPGA se stává stále atraktivnějším pro vývojáře v moderním světě.

Níže uvádíme některé příklady jeho využití:

#1. Navrhování ASIC

Vývojáři nyní mají možnost navrhovat integrované obvody specifické pro danou aplikaci (ASIC). Obvody ASIC získaly velkou popularitu například v oblasti těžby bitcoinů.

Design FPGA usnadňuje opravu případných chyb. Výhodou FPGA je, že jej lze použít jako model pro další projekty, čímž se dlouhodobě ušetří čas a zdroje.

#2. Sektor obnovitelné energie

V souvislosti s problematikou globálního oteplování se stále více prosazuje energie z obnovitelných zdrojů, jako je vítr a slunce. Pro efektivní fungování chytrých sítí vyžadují přenosové a distribuční (T&D) rozvodny efektivní energetické sítě.

FPGA se ukázaly jako velmi užitečné při zlepšování škálovatelnosti a výkonu inteligentních sítí, a to při současném zachování nízké spotřeby energie.

#3. Letectví a obrana

Letadla se občas pohybují v náročných podmínkách. Proto se vyrábějí FPGA, které jsou odolné vůči radiaci a zároveň nabízejí vyšší spolehlivost, výkon a životnost v extrémních podmínkách než tradiční implementace ASIC.

#4. Serverové aplikace

Datová centra a servery jsou stále důležitější, protože nároky na rychlost zpracování dat neustále rostou. Je nezbytné zpracovávat data v reálném čase, a to i při omezeném prostoru a čase.

FPGA, díky BRAM (Block RAM), mohou nabízet připojení k externím paměťovým prvkům, což urychluje zpracování dat na čipech.

Výhody programování FPGA

  • FPGA jsou rekonfigurovatelné. Je třeba zdůraznit jejich univerzálnost. Jedno zařízení lze nakonfigurovat a překonfigurovat pro použití v různých aplikacích.
  • FPGA vyžadují méně manuálních zásahů. Software v prostředí FGPA zajišťuje úlohy jako směrování, načasování a umísťování. Tyto úkoly by byly při manuálním zpracování časově náročné a složité.
  • FPGA jsou zpočátku prázdné. Na rozdíl od tradičních ASIC s předdefinovanými funkcemi lze FPGA přeprogramovat pro různé scénáře. Technik tak může pomocí HDL (Hardware Design Language) naprogramovat systém pro různé případy použití.
  • Prototypování. Výroba ASIC je nákladná a i malá chyba může znamenat značné finanční ztráty. Před uvedením ASIC na trh je tedy důležité ověřit, zda systém funguje správně a splňuje cíle, pro které byl navržen. FPGA jsou přeprogramovatelné, což umožňuje opakovaně testovat různé návrhy, dokud není dosaženo ideálního výsledku.

Jak programovat FPGA

Návrhy používané ke spouštění FPGA jsou primárně kódovány v jazycích pro popis hardwaru (HDL), jako jsou SystemVerilog, Verilog a VHDL.

#1. Verilog

Verilog je vhodný, pokud chcete programovat FPGA pomocí několika málo řádků kódu. Tento jazyk je srovnatelný s jazykem C, ačkoli je primárně určen pro hardwarovou architekturu. Verilog byl vyvinut s cílem vytvořit flexibilnější a robustnější HDL.

#2. SystemVerilog

SystemVerilog vznikl jako rozšíření jazyka Verilog. Používá se pro ověřování i popis hardwaru. S jeho pomocí můžete popsat hardwarové návrhy, převést je na digitální kód a následně nahrát do systému FPGA, aby mohl plnit zadané úkoly.

#3. VHDL

VHDL je zkratka pro jazyk popisu hardwaru velmi vysokorychlostních integrovaných obvodů (Very High Speed Integrated Circuit Hardware Description Language). Pomocí VHDL lze popsat hardware FPGA, což uživatelům umožňuje modelovat a simulovat jeho chování před samotným zakódováním do reálného hardwaru.

Programování s využitím VHDL usnadňuje identifikaci potenciálních chyb v obvodu, které je možné opravit ještě před finálním kódováním. VHDL umožňuje uživatelům psát strukturovaný kód.

High-Level Synthesis (HLS), kde se návrh provádí v podmnožině jazyka C a kompilátor transformuje kód do kódu Verilog, je oblíbená u vývojářů, kteří chtějí programovat FPGA.

Díky unifikovaným softwarovým platformám mohou vývojáři používat jazyky, které znají, pro navrhování FPGA.

#4. Python

Tento víceúčelový programovací jazyk lze také použít k programování FPGA. K tomuto účelu se používá PYNQ, open-source projekt, který zjednodušuje práci s platformami AMD.

#5. C a C++

Jazyky založené na C jsou ideální pro návrh FPGA díky vysokoúrovňové syntéze (HLS). Kompilátor AMD Vivado™ HLS nabízí programovací prostředí sdílející klíčové technologie se specializovanými i standardními procesory, které optimalizují programy napsané v jazyce C.

#6. AI platformy jako TensorFlow a PyTorch

Inženýři využívají trénované modely hlubokého učení z Pytorch nebo TensorFlow ke kompilaci pro akceleraci FPGA. Tento přístup eliminuje nutnost nízkoúrovňového hardwarového programování a přitom umožňuje dosáhnout rychlé kompilace.

Kód napsaný v běžných programovacích jazycích, jako je Python, C nebo C++, je syntetizován a převeden na proprietární popisy propojení pomocí nástrojů pro syntézu.

Výsledný soubor obsahující popis propojení se nazývá bitový tok (bitstream). Bitstream popisuje, jak nakonfigurovat FPGA (jak propojit klopné obvody, hradla a další prvky digitálního obvodu prostřednictvím propojovací matice FPGA).

FPGA mají vestavěnou konfiguraci, která načítá soubor bitového toku a podle něj konfiguruje FPGA. Konfigurační obvod může načítat soubor bitového toku pomocí různých přístupů, například paralelní flash paměti, JTAG a sériové flash paměti.

Výrobci desek FPGA poskytují vývojářům software a instrukce, které slouží ke konfiguraci a programování systémů.

Většinu systémů FPGA lze přeprogramovat opakovaně. Jediným omezením je poškození systému v důsledku nevhodných podmínek, jako je opotřebení, teplota nebo vysoké napětí.

Pro více informací o programování FPGA můžete využít následující výukové zdroje.

Výukové zdroje

#1. Programování FPGA pro začátečníky

Tato kniha vás uvede do problematiky programování FPGA s využitím jazyka SystemVerilog. Výuka probíhá formou projektů, kde vyvíjíte reálné aplikace, jako je klávesnice nebo kalkulačka.

Kniha nejprve představuje architekturu FPGA a poté se věnuje psaní kódu v SystemVerilog RTL. Dále se seznámíte se základy počítačové matematiky, zřetězením a paralelismem. Kniha se také dotýká pokročilejších témat, jako je AXI a klávesnice s rozhraním PS/2.

Tato kniha je vhodná pro programátory, inženýry a vývojáře vestavěných systémů, kteří se chtějí naučit programovat FPGA a jazyk SystemVerilog. Je také přínosná pro návrháře FPGA, kteří touží po praktických zkušenostech s vývojem reálných projektů.

#2. FPGA pro softwarové programátory

Tato kniha uvádí softwarové inženýry do světa FPGA a rekonfigurovatelných technologií. Začíná představením FPGA a jeho programovacího modelu. Je vhodná i pro ty, kteří chtějí porozumět tomu, jak FPGA implementují různé aplikace bez nutnosti znalosti nízkoúrovňových procesů návrhu hardwaru.

Kniha nabízí realistický pohled na problémy řešené pomocí FPGA a popisuje, jak implementovat řešení z pohledu softwarového inženýra. Uživatelky orientace knihy usnadňuje pochopení toho, kde a jak lze technologii FPGA využít. Cílovou skupinou jsou softwaroví návrháři a konstruktéři FPGA.

#3. Začínáme s FPGA: Programování na úrovni hardwaru

Tato kniha učí čtenáře, jak používat BeMicro MAX 10 k sestavení různých projektů, včetně teplotního senzoru, pohybového senzoru, a KITT displeje z Knight Rider. Kniha je vhodná pro začátečníky a ty, kteří nemají žádné programovací znalosti nebo vysokoškolské vzdělání v oboru elektroniky.

Kniha představuje FPGA a vysvětluje rozdíly oproti mikrokontrolérům nebo ASIC. Představí vám také, jak nastavit sadu nástrojů a používat VHDL k programování FPGA. Je ideální pro nadšence do elektroniky a uživatele Raspberry Pi, kteří chtějí praktický úvod do problematiky FPGA.

#4. Programování FPGA: Začínáme s Verilogem

Tato kniha je ideální, pokud nemáte žádné zkušenosti s jazykem Verilog a FPGA. Pokud je pro vás programování FPGA zcela novým tématem, je to dobré místo pro začátek. Na typických příkladech, jako jsou čítače a sedmisegmentové displeje, se studenti rychle zorientují.

Kniha seznamuje studenty s jazykem Verilog a nabízí i složitější příklady, jako je VGA. Tento zdroj však nemusí být ideální pro ty, kteří již mají znalosti o jazyce Verilog a FPGA. Kniha je dostupná ve verzích Kindle a Paperback.

Závěr

FPGA mohou v některých případech fungovat lépe než GPU v aplikacích hlubokého učení s nízkou latencí. Programování FPGA je klíčová dovednost, protože FPGA se používají v mnoha oblastech, včetně spotřební elektroniky, průmyslové automatizace a vojenských aplikací. FPGA se neustále vyvíjejí a můžeme se těšit na další vylepšení a nové možnosti jejich využití.