Istnieje bardzo cienka granica między sprzętem a oprogramowaniem. Podczas tworzenia sprzętu dla gadżetów, takich jak komputery, należy upewnić się, że działa i wykonuje kod.
Field Programmable Gate Array (FPGA) to forma architektury sprzętowej, która pozwala użytkownikom dostosowywać obwody z dowolnego miejsca iw dowolnym czasie.
Nauka o tym, jak działa programowanie FPGA, będzie cenna, jeśli chcesz kontynuować karierę w informatyce lub technologii.
W tym artykule opiszemy, czym jest programowanie FPGA, jak to działa i gdzie jest stosowane, a także udostępnimy różne zasoby, aby rzucić na to więcej światła.
Programowanie FPGA
FPGA to układ scalony (IC) z konfigurowalnymi blokami logicznymi i zestawem innych funkcji, które mogą być programowane i przeprogramowywane przez użytkownika.
Wyrażenie „programowalne w terenie” wskazuje, że możliwości FPGA nie są okablowane, ale regulowane. Użytkownicy mogą w ten sposób modyfikować funkcje obwodu w dowolnym momencie, aby spełnić swoje specyficzne intencje projektowe.
Programowanie FPGA można opisać jako proces tworzenia rozwiązań obliczeniowych z wykorzystaniem FPGA.
Programista musi zaplanować, zaprojektować i wykonać architekturę bramek, aby stworzyć funkcjonalny obwód spełniający potrzeby użytkowników. Ostatecznym celem programowania FPGA jest stworzenie obwodu sprzętowego, który generuje określone wyjście po włączeniu zasilania.
Płytki drukowane w FPGA są zaprojektowane tak, aby naśladować zachowanie obwodów w świecie rzeczywistym. Takie płytki drukowane są zatem najczęściej używane przez zespół ds. zapewniania jakości do testowania nowych produktów. System FPGA będzie miał różne elementy sprzętowe.
Bramki logiczne działają jako elementy składowe FPGA na poziomie podstawowym. Bramki logiczne wykonują operacje logiczne na danych wejściowych i wyjściowych. Istnieją również zasoby routingu, które kierują sygnały z jednego punktu do drugiego.
Przypadki użycia programowania FPGA
Programowanie FPGA stało się we współczesnym świecie bardzo atrakcyjne dla programistów.
Poniżej przedstawiono niektóre przypadki użycia;
# 1. Projektowanie układów ASIC
Programiści mogą teraz projektować układy scalone specyficzne dla aplikacji (ASIC). Układy ASIC stały się bardzo popularne w świecie wydobywania bitcoinów.
Konstrukcja układu FPGA ułatwia korygowanie błędów. Piękno układu FPGA polega na tym, że można go wykorzystać jako model dla innych projektów, oszczędzając w ten sposób czas i zasoby na dłuższą metę.
#2. Sektor energii odnawialnej
Odnawialne źródła energii z wiatru i słońca stają się coraz bardziej popularne w świecie, który stoi w obliczu wyzwania związanego z globalnym ociepleniem. Podstacje przesyłowe i dystrybucyjne (T&D) wymagają wydajnych sieci elektroenergetycznych, aby inteligentne sieci działały optymalnie.
Układy FPGA są bardzo przydatne w poprawie skalowalności i wydajności inteligentnych sieci przy jednoczesnym utrzymaniu niskiego zużycia energii.
#3. Lotnictwo i obrona
Samoloty czasami latają w trudnych warunkach. W ten sposób firmy produkcyjne produkują układy FPGA odporne na promieniowanie i tolerujące promieniowanie, które oferują większą niezawodność, wydajność i wymagania dotyczące cyklu życia w ekstremalnych środowiskach niż tradycyjne implementacje ASIC.
#4. Aplikacje serwerowe
Centra danych/serwery stały się czymś powszechnym, ponieważ zapotrzebowanie na szybkość przetwarzania danych rośnie z każdym dniem. Dane muszą być przetwarzane w czasie rzeczywistym, nawet przy ograniczonej przestrzeni i czasie.
FPGA, poprzez BRAM, może oferować łączność z zewnętrznymi elementami przechowywania danych, przyspieszając przetwarzanie danych na chipach.
Korzyści z programowania FPGA
- FPGA są rekonfigurowalne. Należy wziąć pod uwagę użyteczność umów FGPA. Możesz skonfigurować jeden i ponownie skonfigurować go do użycia w innej aplikacji.
- FGPA wymaga mniej ręcznej interwencji. Oprogramowanie obsługuje zadania związane z trasowaniem, synchronizacją i rozmieszczaniem w środowisku FGPA. Takie zadania mogą być czasochłonne i skomplikowane, jeśli są wykonywane ręcznie.
- Układy FPGA są jak puste płótna. W przeciwieństwie do tradycyjnych układów ASIC z predefiniowanymi funkcjami, układy FPGA można przeprogramować do różnych zastosowań. Inżynier może zatem zaprogramować taki system do różnych przypadków użycia przy użyciu języka HDL (Hardware Design Language).
- Prototypowanie. Układy ASIC są drogie w produkcji, a prosty błąd może być bardzo kosztowny. Zanim wypuścisz układ ASIC na rynek, ważne jest, aby upewnić się, że system jest funkcjonalny i spełnia cele, dla których został zaprojektowany. Układy FPGA można przeprogramować, co oznacza, że można testować przebiegi, dopóki nie uzyska się właściwego projektu.
Jak zaprogramować układ FPGA
Projekty używane do uruchamiania układów FPGA są kodowane głównie w językach opisu sprzętu (HDL), takich jak SystemVerilog, Verilog i VHDL.
# 1. Verilog
Verilog jest idealny, jeśli chcesz zaprogramować układy FPGA w kilku liniach kodu. Ten język jest porównywalny z C, mimo że jest przeznaczony dla architektury sprzętowej. Verilog został stworzony, aby uczynić HDL bardziej elastycznym i niezawodnym.
#2. System Verilog
SystemVerilog został stworzony jako rozszerzenie Verilog. Jest to zarówno język weryfikacji sprzętu, jak i język opisu sprzętu. Za pomocą tego języka można opisywać wzorce sprzętowe, konwertować je na kod cyfrowy, a następnie przesyłać do systemu FPGA w celu wykonania określonych zadań.
#3. VHDL
VHDL to skrót od Very High-Speed Integrated Circuit Hardware Description Language. Dzięki VHDL możesz opisać sprzęt FPGA, umożliwiając użytkownikom modelowanie i symulowanie go przed zakodowaniem go w rzeczywistym sprzęcie.
Programowanie za pomocą VHDL ułatwia określenie potencjalnych błędów w obwodzie, które użytkownicy mogą naprawić przed ostatecznym kodowaniem. VHDL umożliwia użytkownikom pisanie kodu strukturalnego.
Synteza wysokiego poziomu (HLS), w której projekt jest wykonywany w podzbiorze C, a kompilator przekształca kod na kod Verilog, jest popularna wśród programistów, którzy chcą programować układy FPGA.
Programiści mogą zatem używać języków, którymi się posługują, do projektowania układów FPGA za pośrednictwem ujednoliconych platform oprogramowania.
#4. Pyton
Ten uniwersalny język programowania może być używany do programowania układów FPGA. Aby to osiągnąć, Python wykorzystuje PYNQ, projekt typu open source, który ułatwia pracę z platformami AMD.
#5. C i C++
Języki oparte na C są idealne do projektowania FPGA ze względu na syntezę wysokiego poziomu (HLS). Kompilator AMD Vivado™ HLS oferuje środowisko programistyczne współdzielące kluczowe technologie z wyspecjalizowanymi i standardowymi procesorami, co optymalizuje programy oparte na języku C.
#6. Platformy sztucznej inteligencji, takie jak TensorFlow i PyTorch
Inżynierowie używają wyszkolonych modeli głębokiego uczenia się z Pytorch lub Tensorflow do kompilacji pod kątem akceleracji FPGA. Takie podejście eliminuje potrzebę niskopoziomowego programowania sprzętowego, a jednocześnie zapewnia błyskawiczną kompilację.
Kod napisany w normalnych językach programowania, takich jak Python, C lub C++, jest syntetyzowany i konwertowany na zastrzeżone opisy połączeń za pomocą narzędzi do syntezy.
Wynikowy plik zawierający opis połączenia jest nazywany strumieniem bitów. Strumień bitów opisuje, jak skonfigurować FPGA (jak połączyć przerzutniki, bramki i różne elementy obwodu cyfrowego za pośrednictwem macierzy połączeń FPGA).
FPGA mają wbudowaną konfigurację, która odczytuje plik strumienia bitów i odpowiednio konfiguruje FPGA. Obwód konfiguracyjny może odczytywać plik strumienia bitów na różne sposoby, takie jak równoległa pamięć Flash, JTAG i szeregowa pamięć Flash.
Producenci płytek FPGA dostarczają oprogramowanie/instrukcje używane przez programistów do konfigurowania/programowania systemów.
Większość systemów FPGA można przeprogramować tyle razy, ile to możliwe. Jedynym ograniczeniem jest sytuacja, gdy takie systemy zostaną uszkodzone w warunkach niezgodnych ze specyfikacją, takich jak zużycie eksploatacyjne, temperatura lub wysokie napięcie.
Możesz dowiedzieć się więcej o programowaniu FPGA z tych zasobów edukacyjnych
Zasoby edukacyjne
# 1. Programowanie FPGA dla początkujących
Ta książka wprowadza Cię w świat programowania FPGA przy użyciu SystemVerilog. Podejście do nauczania opiera się na projektach, w których tworzysz aplikacje w świecie rzeczywistym, takie jak klawiatura i kalkulator.
Książka przedstawia architekturę FPGA przed zbadaniem, jak napisać SystemVerilog RTL. Ta książka zawiera również wprowadzenie do podstaw matematyki komputerowej, przetwarzania potokowego i równoległości. Książka porusza również zaawansowane tematy, takie jak interfejs AXI i klawiatury z PS/2.
Ta książka jest idealna dla programistów, inżynierów i programistów systemów wbudowanych, którzy chcą nauczyć się programowania FPGA i SystemVerilog. Ten zasób jest również odpowiedni dla projektantów FPGA, którzy pragną praktycznego doświadczenia w tworzeniu rzeczywistych projektów.
#2. Układy FPGA dla programistów
Ta książka wprowadza inżynierów oprogramowania w świat układów FPGA i technologii rekonfigurowalnych. Książka rozpoczyna się od wprowadzenia FPGA i jego modelu programowania. Jest to również książka do wykorzystania, jeśli chcesz dowiedzieć się, w jaki sposób układy FPGA implementują różne aplikacje bez niskopoziomowych procesów projektowania sprzętu.
Książka daje realistyczne poczucie problemów, które pasują do FPGA i jak wdrażać rozwiązania z punktu widzenia inżyniera oprogramowania. Podejście zorientowane na użytkownika w tej książce ułatwia zrozumienie, gdzie technologia FPGA ma zastosowanie i jak. Docelowymi czytelnikami tej książki są projektanci oprogramowania i inżynierowie projektujący układy FPGA.
#3. Począwszy od FPGA: programowanie w metalu
Ta książka uczy czytelników, jak używać BeMicro MAX 10 do budowy czujnika temperatury, czujnika ruchu, czujnika temperatury i wyświetlacza samochodowego KITT firmy Knight Rider. Książka jest przyjazna dla początkujących i odpowiednia dla osób bez umiejętności programowania lub stopnia inżyniera elektronicznego.
Książka przedstawia układy FPGA i wyjaśnia różnice między nimi a mikrokontrolerami lub układami ASIC. Jest to również źródło informacji o tym, jak skonfigurować zestaw narzędzi i używać języka VHDL do programowania układu FPGA. Książka jest idealna dla entuzjastów elektroniki i Raspberry Pi, którzy chcą praktycznego wprowadzenia do świata układów FPGA.
#4. Programowanie FPGA: Pierwsze kroki z Verilog
Ta książka jest idealna, jeśli nigdy nie miałeś do czynienia z Verilogiem i układami FPGA. Jeśli programowanie FPGA jest dla Ciebie nowym terminem, jest to dobre miejsce, aby zacząć. Typowe próbki, takie jak liczniki i 7-segmentowe wyświetlacze, sprawią, że uczniowie staną na właściwej stopie.
Książka wprowadza uczniów w Verilog i oferuje różne pośrednie przykłady, takie jak VGA. Ten zasób może nie być idealny, jeśli masz już wiedzę na temat Verilog i FPGA. Ta książka jest dostępna w wersjach Kindle i Paperback.
Wniosek
Układy FPGA mogą czasami działać lepiej niż układy GPU w aplikacjach głębokiego uczenia się z niskimi opóźnieniami. Programowanie FPGA jest podstawową umiejętnością, ponieważ FPGA może być wykorzystywane między innymi w elektronice użytkowej, automatyce przemysłowej i zastosowaniach wojskowych. Układy FPGA wciąż ewoluują i możemy tylko czekać, aż zostaną dopracowane pod kątem większej liczby zastosowań i lepszej wydajności.