Postoji vrlo tanka granica između hardvera i softvera. Prilikom kreiranja hardvera za uređaje kao što su računari, neophodno je osigurati da on funkcioniše i izvršava kod kako treba.
Field Programmable Gate Array (FPGA), ili programabilna logička polja, predstavljaju posebnu arhitekturu hardvera koja korisnicima omogućava da prilagođavaju kola sa bilo kog mesta i u bilo koje vreme.
Učenje o tome kako funkcioniše programiranje FPGA čipova može biti dragoceno ukoliko planirate karijeru u računarskoj nauci ili tehnologiji.
U ovom tekstu ćemo objasniti šta je FPGA programiranje, kako ono funkcioniše, gde se primenjuje i podelićemo razne izvore kako bismo detaljnije osvetlili ovu temu.
FPGA Programiranje
FPGA je integrisano kolo (IC) koje sadrži konfigurabilne logičke blokove i razne druge karakteristike koje korisnik može programirati i reprogramirati.
Izraz ‘programabilno na terenu’ ukazuje na to da sposobnosti FPGA nisu fiksirane već prilagodljive. Na taj način, korisnici mogu modifikovati funkcije kola u bilo kom momentu, kako bi ispunili svoje specifične dizajnerske zahteve.
FPGA programiranje se može definisati kao proces kreiranja računarskih rešenja korišćenjem FPGA čipova.
Programer mora planirati, dizajnirati i implementirati arhitekturu kola kako bi kreirao funkcionalno kolo koje zadovoljava potrebe korisnika. Krajnji cilj FPGA programiranja jeste stvaranje hardverskog kola koje generiše specifičan izlaz kada se uključi.
Ploče zasnovane na FPGA su dizajnirane da imitiraju ponašanje kola u realnom okruženju. Zbog toga, timovi za osiguranje kvaliteta najčešće koriste ovakve ploče za testiranje novih proizvoda. FPGA sistem će se sastojati od različitih hardverskih komponenti.
Logička kola predstavljaju osnovne gradivne elemente FPGA. Logička kola izvršavaju Bulove operacije nad ulaznim i izlaznim podacima. Tu su i resursi za rutiranje koji usmeravaju signale od jedne tačke do druge.
Primene FPGA Programiranja
FPGA programiranje je postalo veoma primamljivo programerima u savremenom svetu.
Slede neke od tipičnih primena:
#1. Dizajniranje ASIC-ova
Programeri sada mogu dizajnirati integrisana kola za specifične aplikacije (ASIC). ASIC-ovi su stekli veliku popularnost u svetu Bitcoin rudarstva.
Dizajn FPGA olakšava ispravljanje grešaka. Prednost FPGA čipova je što se mogu koristiti kao model za druge projekte i tako uštedeti vreme i resurse na duže staze.
#2. Sektor obnovljive energije
Obnovljiva energija vetra i sunca postaje sve popularnija u svetu koji se suočava sa izazovima globalnog zagrevanja. Prenosne i distributivne (T&D) podstanice zahtevaju efikasne energetske mreže kako bi pametne mreže funkcionisale optimalno.
FPGA su veoma korisni u poboljšanju skalabilnosti i performansi pametnih mreža, istovremeno održavajući nisku potrošnju energije.
#3. Vazduhoplovstvo i odbrana
Avioni ponekad lete kroz ekstremne uslove. Proizvođačke kompanije proizvode otporne FPGA čipove koji nude veću pouzdanost, performanse i dugovečnost za ekstremna okruženja, za razliku od tradicionalnih ASIC implementacija.
#4. Serverske aplikacije
Data centri/serveri postaju sve važniji kako se svakodnevno povećava potreba za brzinom obrade podataka. Podaci se moraju obrađivati u realnom vremenu, čak i pod ograničenim prostornim i vremenskim ograničenjima.
FPGA, pomoću BRAM-a, mogu da obezbede konekciju sa eksternim elementima za skladištenje podataka, ubrzavajući obradu podataka na samim čipovima.
Prednosti FPGA Programiranja
- FPGA se mogu rekonfigurisati. Treba uzeti u obzir mogućnost korišćenja FPGA čipova. Možete da konfigurišete jedan, a zatim ga ponovo konfigurišete za drugu aplikaciju.
- FPGA zahtevaju manje ručne intervencije. Softver se bavi zadacima rutiranja, vremenskog usklađivanja i postavljanja u FPGA okruženju. Takvi zadaci mogu biti dugotrajni i složeni ako se obavljaju ručno.
- FPGA dolaze kao prazna platna. Za razliku od tradicionalnih ASIC-ova sa unapred definisanim funkcionalnostima, FPGA se mogu reprogramirati za različite primene. Inženjer može programirati takav sistem za razne potrebe koristeći HDL (Hardware Design Language).
- Izrada prototipa. ASIC-ovi su skupi za proizvodnju, a i najmanja greška može biti veoma skupa. Pre nego što pustite svoj ASIC na tržište, važno je da se uverite da je vaš sistem funkcionalan i da ispunjava ciljeve za koje je dizajniran. FPGA se mogu reprogramirati, što znači da možete testirati rad dok ne dobijete ispravan dizajn.
Kako Programirati FPGA
Dizajni koji se koriste za upravljanje FPGA čipovima primarno su kodirani u jezicima za opis hardvera (HDL), kao što su SystemVerilog, Verilog i VHDL.
#1. Verilog
Verilog je idealan ako želite da programirate FPGA sa malo linija koda. Ovaj jezik je uporediv sa C, iako je namenjen hardverskoj arhitekturi. Verilog je kreiran kako bi HDL bio fleksibilniji i robustniji.
#2. SystemVerilog
SystemVerilog je nastao kao proširenje Veriloga. On služi i za verifikaciju hardvera i za opis hardvera. Ovim jezikom možete opisati hardverske šeme, prevesti ih u digitalni kod, a zatim ih postaviti na FPGA sistem kako biste izvršili određene zadatke.
#3. VHDL
VHDL je skraćenica za jezik za opis hardvera za integrisana kola veoma velike brzine. Pomoću VHDL-a možete opisati FPGA hardver, omogućavajući korisnicima da ga modeliraju i simuliraju pre nego što ga iskodiraju u stvarni hardver.
Programiranje sa VHDL-om olakšava pronalaženje potencijalnih grešaka u kolu, koje korisnici mogu popraviti pre konačnog kodiranja. VHDL omogućava korisnicima da pišu svoj strukturirani kod.
Sinteza visokog nivoa (HLS), gde se dizajn radi u podskupu C, a kompajler transformiše kod u Verilog kod, popularna je među programerima koji žele da programiraju FPGA.
Na taj način, programeri mogu da koriste jezike sa kojima su upoznati kako bi dizajnirali FPGA preko objedinjenih softverskih platformi.
#4. Python
Ovaj višenamenski programski jezik se može koristiti za programiranje FPGA čipova. Da bi to postigao, Python koristi PYNQ, projekat otvorenog koda koji olakšava rad sa AMD platformama.
#5. C i C++
Jezici zasnovani na C su idealni za FPGA dizajn zbog sinteze visokog nivoa (HLS). AMD Vivado™ HLS kompajler nudi programsko okruženje koje deli ključne tehnologije sa specijalizovanim i standardnim procesorima, što optimizuje programe zasnovane na C.
#6. AI platforme kao što su TensorFlow i PyTorch
Inženjeri koriste obučene modele dubokog učenja iz PyTorch-a ili TensorFlow-a za kompilaciju za FPGA ubrzanje. Takav pristup eliminiše potrebu za programiranjem hardvera niskog nivoa, a i dalje se postiže izuzetno brza kompilacija.
Kod napisan u normalnim programskim jezicima, kao što su Python, C ili C++, se sintetiše i konvertuje u vlasničke opise međusobnog povezivanja pomoću alata za sintezu.
Dobijena datoteka koja sadrži opis interkonekcije poznata je kao bitstream. Bitstream opisuje kako konfigurisati FPGA (kako povezati flip-flop, kola i različite elemente digitalnog kola preko interkonekcione matrice FPGA).
FPGA imaju ugrađenu konfiguraciju koja čita bitstream datoteku i shodno tome konfiguriše FPGA. Konfiguraciono kolo može da čita bitstream datoteku na razne načine, kao što su paralelna fleš memorija, JTAG i serijska fleš memorija.
Proizvođači FPGA ploča obezbeđuju softver/uputstva koje programeri koriste za konfiguraciju/programiranje sistema.
Većina FPGA sistema se može reprogramirati neograničen broj puta. Jedino ograničenje je kada su takvi sistemi oštećeni uslovima van specifikacija, kao što su habanje, temperatura ili visoki napon.
Više o FPGA programiranju možete saznati kroz ove izvore za učenje
Resursi za Učenje
#1. FPGA programiranje za početnike
Ova knjiga vas uvodi u svet FPGA programiranja koristeći SystemVerilog. Metod učenja je zasnovan na projektima, gde razvijate aplikacije iz stvarnog sveta, kao što su tastatura i kalkulator.
Knjiga predstavlja FPGA arhitekturu pre nego što istražite kako napisati SystemVerilog RTL. Ova knjiga vas takođe upoznaje sa osnovama računarske matematike, cevovodom i paralelizmom. Knjiga se bavi i naprednijim temama kao što su AXI i povezivanje tastature sa PS/2.
Ova knjiga je idealna za programere, inženjere i programere ugrađenih sistema koji žele da nauče FPGA i SystemVerilog programiranje. Ovaj resurs je takođe pogodan za FPGA dizajnere koji žele praktično iskustvo u kreiranju projekata iz stvarnog sveta.
#2. FPGA za softverske programere
Ova knjiga uvodi softverske inženjere u svet FPGA i rekonfigurabilne tehnologije. Knjiga počinje predstavljanjem FPGA i njegovog modela programiranja. Ovo je takođe knjiga koju možete koristiti ako želite da naučite kako FPGA implementiraju različite aplikacije bez procesa projektovanja hardvera niskog nivoa.
Knjiga daje realan uvid u probleme koji odgovaraju FPGA i kako implementirati rešenja iz perspektive softverskog inženjera. Pristup orijentisan na korisnika u ovoj knjizi olakšava razumevanje gde je FPGA tehnologija primenljiva i kako. Ciljni čitaoci ove knjige su dizajneri softvera i FPGA dizajneri.
#3. Početak FPGA: Programiranje metala
Ova knjiga uči čitaoce kako da koriste BeMicro MAX 10 za pravljenje senzora temperature, senzora pokreta, temperaturnog senzora i KITT displeja automobila kompanije Knight Rider. Knjiga je prilagođena početnicima i pogodna je za one koji nemaju programerske veštine ili diplomu inženjera elektronike.
Knjiga predstavlja FPGA i objašnjava njihove razlike od mikrokontrolera ili ASIC-a. Ovo je i resurs koji će vas upoznati sa načinom postavljanja lanca alata i korišćenja VHDL-a za programiranje FPGA. Knjiga je idealna za entuzijaste elektronike i Raspberry Pi koji žele praktičan uvod u svet FPGA.
#4. Programiranje FPGA: Početak rada sa Verilog-om
Ova knjiga je savršena ako nikada niste imali interakciju sa Verilogom i FPGA. Ako vam je FPGA programiranje nov termin, ovo je dobro mesto za početak. Tipični primeri, kao što su brojači i 7-segmentni displeji, uputiće učenike u pravom smeru.
Knjiga uvodi učenike u Verilog i nudi razne primere srednjeg nivoa, kao što je VGA. Ovaj resurs možda nije idealan ako već imate znanje o Verilogu i FPGA. Ova knjiga je dostupna u Kindle i Paperbac verzijama.
Zaključak
FPGA ponekad mogu da rade bolje od GPU-a u aplikacijama dubokog učenja sa malim kašnjenjem. FPGA programiranje je od suštinskog značaja jer se FPGA mogu koristiti u potrošačkoj elektronici, industrijskoj automatizaciji i vojnim aplikacijama, između mnogih drugih. FPGA se još uvek razvijaju, tako da možemo očekivati da budu još bolji za veći broj primena i bolje performanse.