Nauka programowania układów FPGA przy użyciu SystemVerilog. FPGA. Rozumiemy jak działają programowalne układy logiczne i dlaczego są dobre.Wykorzystanie PLS w nowoczesnych urządzeniach

FPGA (Programmable Logic Integrated Circuit) to układ scalony przeznaczony do budowy układów cyfrowych na podstawie opisu w specjalnym języku programowania. Innymi słowy, FPGA to układ, który wydaje się zawierać kilka elementów, takich jak 74HCxx. Czym dokładnie będą te elementy logiczne, jakie będą między nimi połączenia i jakie połączenia będzie miał powstały układ ze światem zewnętrznym, ustala się na etapie programowania FPGA.

Notatka: O ile się dowiedziałem, w języku rosyjskim terminy FPGA i FPGA (Field-Programmable Gate Array, User-Programmable Gate Array) są uważane za zamienne, co będzie używane w dalszej części tekstu. Warto jednak wiedzieć o istnieniu alternatywnego punktu widzenia, według którego FPGA (FPGA) jest jedną z odmian FPGA (PLD, Programmable Logic Device).

Podstawy FPGA

Do programowania układów FPGA wykorzystywane są języki opisu sprzętu (HDL, Hardware Opis Language). Wśród nich najpopularniejsze to Verilog (i jego dialekty, w szczególności SystemVerilog), a także VHDL. Języki są podobne pod wieloma względami, ale mają inną składnię i różnią się pewnymi szczegółami. Jeśli Verilog jest C w świecie opisu sprzętu, to VHDL jest odpowiednio Pascalem. O ile wiem, VHDL jest nieco mniej popularny, szczególnie ze względu na jego gadatliwość w porównaniu z Verilog. Wśród zalet VHDL (lub wad, w zależności od kogo) możemy wymienić ścisły pisanie statyczne. Verilog czasami pozwala na niejawne rzutowanie typów. Kontynuując analogię z C i Pascalem, języki nie są tak różne, aby nie można było nauczyć się ich obu.

NA ten moment Wiodącymi producentami układów FPGA są Altera (obecnie należąca do Intela) i Xilinx. Według informacji z różnych źródeł wspólnie kontrolują co najmniej 80% rynku. Inni gracze, na których warto zwrócić uwagę, to Actel (przejęty przez Microsemi), Lattice Semiconductor, Quicklogic i SiliconBlue. Ze sprzętem Xilinx można pracować wyłącznie ze środowiska programistycznego Xilinx (zwanego Vivado), a środowisko programistyczne Altra (zwanego Quartus) obsługuje tylko sprzęt Altera. Oznacza to pełną blokadę dostawcy, a wybierając konkretny FPGA dla swojego projektu, automatycznie wybierasz narzędzia programistyczne odpowiedniego producenta, ich pomoc techniczna, dokumentacja, warunki licencji na oprogramowanie, zasady dotyczące zaprzestania wsparcia technicznego dla sprzętu i tak dalej.

Układy FPGA są często używane w zadaniach, w których chcesz znacznie przyspieszyć niektóre obliczenia, wdrażając je bezpośrednio w sprzęcie. Na przykład układy FPGA znalazły szerokie zastosowanie w dziedzinie przetwarzania sygnałów, np. w oscyloskopach, analizatorach widma, analizatorach logicznych, generatorach sygnałów, radiu definiowanym programowo, a nawet niektórych monitorach. W szczególności LimeSDR wykorzystuje Altera Cyclone IV, a oscyloskop Rigol DS1054Z wykorzystuje Xilinx Spartan-6, a także ProASIC 3 firmy Actel. Inne zastosowania, o których słyszałem, to rozpoznawanie obrazu komputerowego, rozpoznawanie mowy i bioinformatyka. Istnieją inne projekty, w szczególności dotyczące rozwoju serwerów WWW i DBMS działających na FPGA. Ale o ile wiem, ten kierunek jest nadal bardzo eksperymentalny.

Xilinx czy Altera?

Jak to się mówi, najlepszego Linuksa ten, którego używa twój inny guru Linuksa.

Mój przyjaciel, guru FPGA w osobie Dmitrija Oleksyuka, poradził mi, abym zaczął od płytki rozwojowej Arty Artix-7 firmy Digilent. Zastosowany w nim układ FPGA to Artix-7 firmy Xilinx. Sam Digilent nie dostarcza do Rosji, ale urządzenie jest również dostępne na AliExpress, choć z zauważalną marżą (oficjalna cena to 99 dolarów). Jest również sprzedawany na eBayu. To dość potężna płyta, która jednak kosztuje całkiem rozsądne pieniądze.

Śmieszny fakt! Jeśli chcesz po prostu programować w Verilog lub VHDL, ściśle mówiąc, nie musisz kupować żadnej płytki FPGA. Na początku możesz ograniczyć się do symulatora, którego praca zostanie omówiona poniżej.

Ciekawostką płytki jest rozmieszczenie gniazd w sposób zgodny z nakładkami Arduino. W zestawie z płytką znajduje się także wkładka, dzięki której można uzyskać licencję na Vivado, co otwiera wszystkie jego możliwości. Licencja jest ważna przez rok od momentu aktywacji i jest również powiązana z jednym komputerem według typu systemu operacyjnego i adresu MAC.

Po dostawie. Słyszałem, że urządzenia z układami FPGA na pokładzie mają duże szanse, że nie przejdą przez odprawę celną. Sklep AliExpress, do którego link podałem powyżej, dostarcza deski do Rosji za pośrednictwem usługi kurierskie SPSR. Do odprawy celnej konieczne było wypełnienie formularza internetowego zawierającego dane paszportowe (tylko dane, bez zdjęcia) i numer telefonu kontaktowego, zgodnie z wymogami obowiązującego rosyjskiego ustawodawstwa. Następnie tablica została dostarczona kurierem bezpośrednio pod drzwi, bez żadnych pytań.

Instalacja Vivado

Środowisko programistyczne Vivado można pobrać ze strony internetowej Xilinx. Przygotuj się psychicznie na to, że przed pobraniem będziesz musiał się zarejestrować i wypełnić dość szczegółowy formularz o sobie. Pobierz archiwum o nazwie „Vivado HLx 2017.2: Pobieranie pojedynczego pliku instalatora wszystkich systemów operacyjnych”. Nie pomyl tego przypadkowo z niektórymi „rozwiązaniami laboratoryjnymi Vivado”, to absolutnie nie jest to, czego potrzebujesz. Archiwum waży ponad 20 GB, więc musimy uzbroić się w cierpliwość.

Rozpakuj archiwum i uruchom instalator. Zainstaluj Vivado HL System Edition. Jego pełna wersja zajmie 47 GB miejsca na dysku. Osobiście odznaczyłem Software Development Kit i pozostawiłem wsparcie tylko dla urządzeń z serii 7, co zmniejszyło rozmiar do 12 GB. Patrząc trochę w przyszłość, zauważę, że taka konfiguracja okazała się w zupełności wystarczająca.

Przed uruchomieniem Vivado musisz dodać do niego obsługę Arty Artix-7, ponieważ po wyjęciu z pudełka nie wie nic o tej płycie. Zrobiono coś takiego:

cd ~/ opt/ xilinx/ Vivado/ 2017.2 / data/ deski/ board_files
wget https://github.com/ Digilent/vivado-boards/archive/master.zip
rozpakuj master.zip
mv vivado-boards-master/new/board_files/* ./
rm -r vivado-boards-master
rm master.zip

Pobieramy także i zapisujemy gdzieś plik Arty_Master.xdc. Będziemy go potrzebować później. Plik zawiera opis diod LED, przełączników itp. znajdujących się na płytce. Bez tego mruganie diodami LED na Verilogu nie będzie łatwe.

Pierwszy projekt na SystemVerilog

W Vivado mówimy Plik → Nowy projekt... Jako typ projektu wybierz Projekt RTL i zaznacz pole wyboru Nie określaj w tej chwili źródeł. W oknie wyboru rodzaju planszy znajdź na liście Arty'ego.

W pierwszej kolejności dodaj do projektu pobrany wcześniej plik XDC. Skopiuj go do katalogu z projektem. Następnie mówimy Plik → Dodaj źródła... → Dodaj lub utwórz ograniczenia → Dodaj pliki, znajdź kopię pliku i kliknij Zakończ. W drzewie plików projektu (Źródła) w grupie Constraints pojawi się plik Arty_Master.xdc, czy jakkolwiek nazwiesz kopię. Otwórz go i odkomentuj wszystkie linie w grupach Sygnał zegara, Przełączniki i Diody LED.

Następnie mówimy Plik → Dodaj źródła… → Dodaj lub utwórz źródła projektu → Utwórz plik. W typie pliku wybierz SystemVerilog, wpisz coś w rodzaju hello w nazwie pliku. Mówimy Zakończ. Następnie pojawi się okno dialogowe Definiuj moduł, w którym zostaniesz poproszony o kliknięcie interfejsu modułu. Okno dialogowe jest zupełnie bezużyteczne, ponieważ wygodniej jest zrobić to samo bezpośrednio w kodzie, więc kliknij Anuluj.

W drzewie źródłowym znajdujemy nowy plik hello.sv, będzie w grupie Źródła projektu. Otwórz i napisz następujący kod:

`skala czasu 1ns/1ps

moduł cześć(
logika wejściowa CLK100MHZ,
logika wejściowa [ 3 : 0 ] sw,
logika wyjściowa [3:0] dioda
) ;

zawsze @ (postawa CLK100MHZ)
zaczynać
if (sw[ 0 ] == 0 )
zaczynać
prowadzony<= 4"b0001 ;
koniec
w przeciwnym razie
zaczynać
prowadzony<= 4"b0000 ;
koniec
koniec

moduł końcowy

Jeżeli wszystko zostało wykonane poprawnie, na tym etapie Vivado będzie wyglądać mniej więcej tak (klikalne, PNG, 71 KB):

Kompilacja programu odbywa się w dwóch etapach – syntezy i wdrożenia. Na etapie syntezy program jest tłumaczony na abstrakcyjny obwód bramek logicznych i innych elementów. Na etapie wdrożenia podejmowana jest decyzja, w jaki sposób wgrać ten obwód do konkretnego elementu sprzętu.

Rozpocznijmy syntezę mówiąc Flow → Run Synthesis lub po prostu naciskając F11. W prawym górnym rogu zobaczysz informację, że proces jest w toku. Może to zająć dość dużo czasu, w zależności od komputera i złożoności programu. Na moim laptopie synteza powyższego programu została zakończona w około 10 sekund.Jeśli teraz powiesz Flow → Open Synthesized Design, zobaczysz piękny obraz taki jak ten:

Czas sflashować naszą tablicę. Mówimy Przepływ → Uruchom implementację, a następnie Przepływ → Wygeneruj strumień bitów. Podłączamy płytkę do komputera przez USB, w Vivado mówimy Flow → Otwórz Menedżera Sprzętu → Otwórz cel → Auto Connect → Programuj urządzenie. Będziesz musiał określić ścieżkę do pliku bitowego. U mnie było to następująco:

./first-project.runs/impl_1/hello.bit

Mówimy Program. Teraz dioda LD4 na płytce świeci się, jeśli przełącznik SW0 jest opuszczony (patrz zdjęcie płytki powyżej). Jeśli przełącznik zostanie podniesiony, dioda LED nie zaświeci się. Proste, oczywiście, ale „witaj, świecie”. Czego się spodziewałeś? :)

Symulacja

Symulacja to wirtualne wykonanie kodu Verilog lub VHDL bezpośrednio na komputerze, bez żadnych układów FPGA. Jest to zarówno narzędzie do debugowania, jak i swego rodzaju framework do pokrywania kodu testami.

Kiedy wypróbowałem symulację, pierwszą rzeczą, którą odkryłem, było to, że w moim przypadku to nie zadziałało. Logi były proste:

BŁĄD: Nie udało się skompilować wygenerowanego pliku C [...]xsim_1.c.

W przypadku tego błędu Google znalazł tylko najróżniejsze bzdury w stylu „spróbuj wyłączyć program antywirusowy”. W rezultacie dodanie flagi -v 2 do skryptu ~/opt/xilinx/Vivado/2017.2/bin/xelab pomogło rozwiązać problem. Z jego pomocą dowiedziałem się, że Clang, którego plik binarny nosi ze sobą Vivado, zawiesza się z następującym błędem:

/a/long/path/to/clang: błąd podczas ładowania bibliotek współdzielonych:
libncurses.so.5: nie można otworzyć pliku obiektu współdzielonego: Nie ma takiego pliku lub
informator

Ten błąd i jego rozwiązanie opisano już na Arch Wiki. Osobiście właśnie skopiowałem już istniejący plik z katalogu Vivado_HLS:

cp ~/opt/xilinx/Vivado_HLS/2017.2/lnx64/tools/gdb_v7_2/libncurses.so.5\
~/opt/xilinx/Vivado/2017.2/lib/lnx64.o/libncurses.so.5

... po czym wszystko zadziałało. A teraz właściwie przykład symulacji.

Analogicznie jak wcześniej tworzyliśmy hello.sv, tworzymy nowy plik hello_sim.sv w grupie Simulation Sources. W pliku piszemy następujący kod:

`skala czasu 1ns/1ps

moduł hello_sim() ;
logika clck_t;
logika [3: 0] sw_t;
logika [3: 0] led_t;

Witaj hello_t(clck_t, sw_t, led_t) ;

początkowy początek
clck_t<= 0 ;
sw_t<= 4"b0000 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
asercja (led_t === 4"b0001 ) ;

SW_t<= 4"b0001 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
asercja (led_t === 4"b0000 ) ;
koniec

moduł końcowy

W drzewie źródłowym kliknij plik prawym przyciskiem myszy i wybierz Właściwości węzła źródłowego. W sekcji Używane w odznacz pola Synteza i Implementacja. Nie chcemy, żeby jakiekolwiek testy zatykały nasz daleki od gumowatego układ FPGA, prawda?

Teraz mówimy Przepływ → Uruchom symulację → Uruchom symulację behawioralną. W rezultacie zobaczysz coś takiego:

Można zauważyć, że gdy sw wynosi zero, dioda ma wartość jeden i odwrotnie. W tym przypadku wszelkie zmiany zachodzą na zboczu sygnału zegarowego. Wygląda na to, że program działa poprawnie. Cóż, nic nie padło na twierdzeniach, co zdaje się sugerować.

Wniosek

Archiwum z projektem opisanym powyżej można pobrać. Jako dodatkowe źródła informacji polecam:

  • Jeśli interesują Cię szczegóły dotyczące sprzętu, zwróć uwagę na

Wyobraź sobie, że procesor zamiast wykonywać określony zestaw instrukcji, zostanie przebudowany dla każdego programu i zamieni algorytm bezpośrednio na sprzęt. Dokładnie tak działają FPG. W dzisiejszym artykule opowiem jak to w ogóle jest możliwe i przedstawię różne metody projektowania układów FPGA.

Na początek trzeba trochę zrozumieć logikę cyfrową układów ASIC, ale rozpoczęcie od nich jest bardzo trudne i kosztowne, dlatego lepiej zacząć od układów FPGA.

Co to jest FPGA?

FPGA oznacza programowalną przez użytkownika tablicę bramek (programowalne przez użytkownika tablice bramek, FPGA). Mówiąc bardziej ogólnie, nazywane są one FPGA – programowalnymi układami scalonymi logicznymi.

Korzystając z FPGA, możesz dosłownie projektować cyfrowe mikroukłady, siedząc w domu z dostępną płytą debugującą na stole i oprogramowaniem programistycznym za kilka tysięcy zielonych rubli. Ale są też opcje bezpłatne. Uwaga: chodzi o projektowanie, a nie programowanie, ponieważ na wyjściu otrzymamy fizyczny układ cyfrowy, który na poziomie sprzętowym realizuje określony algorytm, a nie program dla procesora.

Działa to w następujący sposób. Istnieje gotowa płytka drukowana z zestawem interfejsów, które są podłączone do zainstalowanego na płytce układu FPGA, coś w rodzaju tej fajnej płytki do centrum danych lub tej płytki debugowania do treningu.

Dopóki nie skonfigurujemy FPGA, w chipie po prostu nie ma logiki przetwarzającej dane z interfejsów i dlatego oczywiście nic nie będzie działać. Ale w wyniku projektu powstanie firmware, który po wgraniu do FPGA stworzy potrzebny nam układ cyfrowy. W ten sposób można stworzyć kontroler Ethernet 100G, który będzie odbierał i przetwarzał pakiety sieciowe.

Ważną cechą FPGA jest jej rekonfigurowalność. Załóżmy, że teraz potrzebujemy kontrolera Ethernet 100G, a za tydzień na tej samej płycie będziemy mogli zaimplementować cztery niezależne interfejsy Ethernet 25G.

Na rynku działa dwóch wiodących producentów układów FPGA: dobrze znani Intel i Xilinx. Kontrolują 58 i 42% rynku. Założyciele Xilinx wynaleźli swój pierwszy układ FPGA w 1985 roku. Intel wszedł na rynek całkiem niedawno – w 2015 roku, po wchłonięciu Altery, która powstała w tym samym czasie co Xilinx. Technologie Altera i Xilinx są podobne pod wieloma względami, podobnie jak środowiska programistyczne. Częściej pracowałem z produktami Xilinx, więc nie dziw się, że w artykule jest o tym stale wspominana.

Układy FPGA są szeroko stosowane w różnych dziedzinach: elektronice użytkowej, sprzęcie telekomunikacyjnym, płytkach akceleratorów do użytku w centrach danych, robotyce, prototypowaniu układów ASIC. Przyjrzę się kilku przykładom poniżej.

Przyjrzymy się także technologii zapewniającej rekonfigurację sprzętu, zapoznamy się z procesem projektowania i przyjrzymy się prostemu przykładowi implementacji licznika sprzętowego w Verilog. Jeśli masz dowolną płytkę rozwojową FPGA, powinieneś być w stanie samodzielnie to odtworzyć. Jeśli nie ma płytki, nadal możesz zapoznać się z Verilog, symulując działanie obwodu na swoim komputerze.

Zasada działania FPGA

Układ FPGA to ten sam, niestandardowy układ ASIC, składający się z tych samych tranzystorów, z których montowane są przerzutniki, rejestry, multipleksery i inne elementy logiczne dla konwencjonalnych obwodów. Oczywiście nie da się zmienić kolejności łączenia tych tranzystorów. Ale architektonicznie mikroukład jest zbudowany w tak sprytny sposób, że możliwa jest zmiana przełączania sygnałów pomiędzy większymi blokami: nazywane są one CLB – programowalnymi blokami logicznymi.

Możliwa jest także zmiana funkcji logicznej, jaką pełni CLB. Osiąga się to dzięki temu, że cały układ jest przesiąknięty komórkami pamięci statycznej konfiguracji RAM. Każdy bit tej pamięci albo steruje jakimś kluczem przełączającym sygnał, albo jest częścią tabeli prawdy funkcji logicznej implementowanej przez CLB.

Ponieważ pamięć konfiguracyjna zbudowana jest w technologii Static RAM, po pierwsze, gdy układ FPGA jest włączony, układ musi zostać skonfigurowany, a po drugie, układ można rekonfigurować niemal nieskończoną liczbę razy.

Bardzo uproszczona struktura chipa 2D bez pamięci konfiguracyjnej

Elementy CLB znajdują się w strukturze przełączników, która definiuje połączenia między wejściami i wyjściami elementów CLB.

Schemat matrycy przełączającej

Na każdym skrzyżowaniu przewodów znajduje się sześć przełączników sterowanych przez własne komórki pamięci konfiguracyjnej. Otwierając niektóre i zamykając inne, można zapewnić różne przełączanie sygnałów pomiędzy CLB.

CLB

CLB składa się po prostu z bloku, który definiuje funkcję boolowską na podstawie kilku argumentów (nazywa się to tabelą przeglądową, LUT) i wyzwalacza (przerzutnik, FF). We współczesnych układach FPGA tablica LUT ma sześć wejść, ale dla uproszczenia na rysunku pokazano trzy. Wyjście LUT jest podawane na wyjście CLB albo asynchronicznie (bezpośrednio), albo synchronicznie (poprzez przerzutnik FF działający na zegarze systemowym).

Zasada implementacji LUT

Interesujące jest przyjrzenie się zasadzie implementacji LUT. Załóżmy, że mamy jakąś funkcję boolowską y = (a i b) | ~ ok. Jego schemat obwodu i tabelę prawdy pokazano na rysunku. Funkcja ma trzy argumenty, więc przyjmuje 2^3 = 8 wartości. Każdy z nich odpowiada własnej kombinacji sygnałów wejściowych. Wartości te są obliczane przez program do tworzenia oprogramowania układowego FPGA i zapisywane w specjalnych komórkach pamięci konfiguracyjnej.

Wartość każdej komórki jest podawana na wejście wyjściowego multipleksera LUT, a argumenty wejściowe funkcji logicznej służą do wyboru jednej lub drugiej wartości funkcji. CLB jest najważniejszym zasobem sprzętowym FPGA. Liczba modułów CLB w nowoczesnych układach FPGA może się różnić i zależy od typu i pojemności układu. Xilinx umiera, a liczba CLB waha się od około czterech tysięcy do trzech milionów.

Oprócz CLB, w FPGA znajduje się wiele innych ważnych zasobów sprzętowych. Na przykład sprzętowe jednostki mnożąco-akumulujące lub jednostki DSP. Każdy z nich może w każdym cyklu zegara wykonywać operacje mnożenia i dodawania na liczbach 18-bitowych. W najwyższej klasy kryształach liczba bloków DSP może przekraczać 6000.

Kolejnym zasobem są bloki pamięci wewnętrznej (Block RAM, BRAM). Każdy blok może przechowywać 2 KB. Całkowita pojemność takiej pamięci, w zależności od kryształu, może wynosić od 20 KB do 20 MB. Podobnie jak CLB, BRAM i bloki DSP są połączone tkaniną przełącznikową i rozciągają się na całej matrycy. Łącząc ze sobą bloki CLB, DSP i BRAM, można uzyskać bardzo wydajne obwody przetwarzania danych.

Zalety FPGA

Pierwszy układ FPGA stworzony przez firmę Xilinx w 1985 roku zawierał tylko 64 moduły CLB. W tamtym czasie integracja tranzystorów w chipach była znacznie mniejsza niż obecnie, a urządzenia cyfrowe często korzystały z chipów „logiki rozproszonej”. Były oddzielne mikroukłady dla rejestrów, liczników, multiplekserów i mnożników. Dla konkretnego urządzenia stworzono specjalną płytkę drukowaną, na której zamontowano te mikroukłady o niskiej integracji.

Zastosowanie FPGA umożliwiło rezygnację z tego podejścia. Nawet FPGA z 64 CLB znacznie oszczędza miejsce na płytce drukowanej, a dostępność rekonfiguracji dodała możliwość aktualizacji funkcjonalności urządzeń po wyprodukowaniu w trakcie pracy, jak to się mówi „w terenie” (stąd nazwa - pole -programowalny układ bramek).

Ze względu na fakt, że wewnątrz układu FPGA można zbudować dowolny sprzętowy układ cyfrowy (najważniejsze, że jest wystarczająca ilość zasobów), jednym z ważnych zastosowań układów FPGA jest prototypowanie układów ASIC.

Rozwój układów ASIC jest bardzo złożony i kosztowny, koszt błędu jest bardzo wysoki, a kwestia testowania logiki ma kluczowe znaczenie. Dlatego jednym z etapów rozwoju, jeszcze przed rozpoczęciem prac nad fizyczną topologią układu, było jego prototypowanie na jednym lub większej liczbie układów FPGA.

Do rozwoju ASIC produkowane są specjalne płytki zawierające wiele połączonych ze sobą układów FPGA. Prototypowy mikroukład działa na znacznie niższych częstotliwościach (może kilkudziesięciu megaherców), ale pozwala zaoszczędzić na identyfikowaniu problemów i błędów.

Jednak moim zdaniem jest więcej interesujących zastosowań układów FPGA. Elastyczna struktura FPGA pozwala na realizację układów sprzętowych do szybkiego i równoległego przetwarzania danych z możliwością zmiany algorytmu.


Porównanie platform sprzętowych

Zastanówmy się, jak zasadniczo różnią się procesory, karty graficzne, FPGA i ASIC. Procesor jest uniwersalny, można na nim uruchomić dowolny algorytm, jest najbardziej elastyczny i najłatwiejszy w obsłudze dzięki ogromnej liczbie języków programowania i środowisk programistycznych.

Jednocześnie, ze względu na wszechstronność i sekwencyjne wykonywanie instrukcji procesora, wydajność spada, a zużycie energii przez obwód wzrasta. Dzieje się tak, ponieważ przy każdej użytecznej operacji arytmetycznej procesor wykonuje wiele dodatkowych operacji związanych z odczytywaniem instrukcji, przenoszeniem danych pomiędzy rejestrami i pamięcią podręczną oraz innymi ruchami.

Po drugiej stronie jest ASIC. Na tej platformie wymagany algorytm jest realizowany sprzętowo poprzez bezpośrednie połączenie tranzystorów, wszystkie operacje dotyczą jedynie wykonania algorytmu i nie ma możliwości jego zmiany. Stąd maksymalna wydajność i najniższe zużycie energii przez platformę. Ale przeprogramowanie ASIC jest niemożliwe.

Na prawo od procesora znajduje się procesor graficzny. Chipy te zostały pierwotnie zaprojektowane do przetwarzania grafiki, ale obecnie są używane również do eksploracji obliczeń ogólnego przeznaczenia. Składają się z tysięcy małych rdzeni obliczeniowych i wykonują równoległe operacje na tablicy danych.

Jeśli algorytm może być zrównoleglony, wówczas procesor graficzny może osiągnąć znaczne przyspieszenie w porównaniu do procesora. Z drugiej strony algorytmy sekwencyjne będą zaimplementowane gorzej, więc platforma okaże się mniej elastyczna niż procesor. Ponadto, aby programować na GPU, musisz mieć specjalne umiejętności, znać OpenCL lub CUDA.

Wreszcie FPGA. Platforma ta łączy w sobie wydajność układów ASIC z możliwością zmiany programu. Układy FPGA nie są uniwersalne, ale istnieje klasa algorytmów i zadań, które wykażą na nich lepszą wydajność niż na procesorze czy nawet GPU. Złożoność programowania dla układów FPGA jest większa, ale nowe narzędzia programistyczne zmniejszają tę lukę.

Zdecydowaną zaletą układów FPGA jest możliwość przetwarzania danych w momencie ich otrzymania przy minimalnym opóźnieniu reakcji. Jako przykład możesz sobie wyobrazić inteligentny router sieciowy z dużą liczbą portów: kiedy pakiet Ethernet dociera do jednego z jego portów, przed wybraniem portu wyjściowego należy sprawdzić wiele reguł. Być może zajdzie potrzeba zmiany niektórych pól w pakiecie lub dodania nowych.

Użycie FPGA pozwala na natychmiastowe rozwiązanie tego problemu: bajty pakietu właśnie zaczęły docierać do chipa z interfejsu sieciowego, a jego nagłówek jest już analizowany. Zastosowanie tutaj procesorów może znacznie spowolnić prędkość przetwarzania ruchu sieciowego. Oczywiste jest, że routery mogą mieć niestandardowy układ ASIC, który działa najskuteczniej, ale co, jeśli zasady przetwarzania pakietów będą musiały się zmienić? Tylko układy FPGA mogą osiągnąć wymaganą elastyczność połączoną z wysoką wydajnością.

Dlatego układy FPGA są stosowane tam, gdzie wymagana jest wysoka wydajność przetwarzania danych, najkrótszy czas reakcji i niskie zużycie energii.

FPGA w chmurze

W chmurze obliczeniowej układy FPGA wykorzystywane są do szybkich obliczeń, przyspieszania ruchu sieciowego i dostępu do macierzy danych. Obejmuje to również wykorzystanie układów FPGA do transakcji o wysokiej częstotliwości na giełdach. Do serwerów montowane są karty FPGA z PCI Express i optycznym interfejsem sieciowym firm Intel (Altera) lub Xilinx.

Układy FPGA doskonale nadają się do algorytmów kryptograficznych, porównywania sekwencji DNA i zadań naukowych, takich jak dynamika molekularna. Firma Microsoft od dawna wykorzystuje układy FPGA do przyspieszania usługi wyszukiwania Bing, a także do organizowania sieci definiowanej programowo w chmurze Azure.

Boom na uczenie maszynowe nie oszczędził również układów FPGA. Xilinx i Intel oferują narzędzia oparte na FPGA do pracy z głębokimi sieciami neuronowymi. Umożliwiają uzyskanie oprogramowania układowego FPGA implementującego konkretną sieć bezpośrednio z frameworków takich jak Caffe i TensorFlow.

Co więcej, możesz tego wszystkiego spróbować bez wychodzenia z domu i korzystania z usług w chmurze. Przykładowo od Amazonu można wypożyczyć maszynę wirtualną z dostępem do płytki FPGA i wszelkich narzędzi programistycznych, w tym uczenia maszynowego.

FPGA na krawędzi

Jakie jeszcze ciekawe rzeczy robią układy FPGA? Dlaczego nic nie robią! Robotyka, samochody autonomiczne, drony, instrumenty naukowe, sprzęt medyczny, konsumenckie urządzenia mobilne, inteligentne kamery CCTV i tak dalej.

Tradycyjnie układy FPGA były wykorzystywane do cyfrowego przetwarzania sygnałów jednowymiarowych (i konkurowały z procesorami DSP) w urządzeniach radarowych, nadajnikach-odbiornikach radiowych. Wraz ze wzrostem integracji i wydajności układów scalonych platformy FPGA są coraz częściej wykorzystywane do obliczeń o wysokiej wydajności, takich jak przetwarzanie sygnałów 2D na krawędzi chmury.

Koncepcję tę najłatwiej zrozumieć na przykładzie kamery drogowej z funkcją rozpoznawania tablic rejestracyjnych. Możesz wziąć kamerę z możliwością przesyłania wideo przez Ethernet i przetwarzać strumień na zdalnym serwerze. Wraz ze wzrostem liczby kamer wzrośnie również obciążenie sieci, co może prowadzić do awarii systemu.

Zamiast tego lepiej wdrożyć rozpoznawanie tablic rejestracyjnych na komputerze zainstalowanym bezpośrednio w korpusie kamery i przesyłać numery tablic rejestracyjnych do chmury w formacie tekstowym. Aby to zrobić, można nawet zastosować stosunkowo niedrogie układy FPGA o niskim zużyciu energii, aby zadowolić się baterią. Jednocześnie możliwa jest zmiana logiki działania FPGA, na przykład przy zmianie standardu tablicy rejestracyjnej.

Jeśli chodzi o robotykę i drony, w tym obszarze szczególnie ważne jest spełnienie dwóch warunków – wysokiej wydajności i niskiego zużycia energii. Platforma FPGA jest idealna i można ją wykorzystać w szczególności do tworzenia kontrolerów lotu dla dronów. Już produkują UAV, które mogą podejmować decyzje w locie.

Rozwój projektu na FPGA

Istnieją różne poziomy projektowania: niski, blokowy i wysoki. Poziom niski wiąże się z używaniem języków takich jak Verilog czy VHDL, w których kontrolujesz rozwój na poziomie transferu rejestru (RTL). W tym przypadku tworzysz rejestry, jak w procesorze, i definiujesz funkcje logiczne, które zmieniają dane między nimi.

Układy FPGA zawsze działają z określonymi częstotliwościami zegara (zwykle 100-300 MHz), a na poziomie RTL definiujesz zachowanie układu aż do częstotliwości zegara systemowego. Wynikiem tej żmudnej pracy są projekty, które są tak wydajne, jak to tylko możliwe pod względem wydajności, zużycia zasobów układu FPGA i zużycia energii. Wymaga to jednak poważnych umiejętności w projektowaniu obwodów, a nawet przy nich proces jest powolny.

Na poziomie bloków zajmujesz się głównie łączeniem gotowych dużych bloków, które wykonują określone funkcje, aby uzyskać potrzebną funkcjonalność systemu na chipie.

Na wysokim poziomie projektowania nie kontrolujesz już danych w każdym cyklu zegara, ale zamiast tego skupiasz się na algorytmie. Istnieją kompilatory lub tłumacze z C i C++ na poziom RTL, na przykład Vivado HLS. Jest dość inteligentny i pozwala przełożyć szeroką klasę algorytmów na poziom sprzętowy.

Główną zaletą tego podejścia w porównaniu z językami RTL jest przyspieszenie rozwoju, a zwłaszcza testowania algorytmu: kod C++ można uruchomić i zweryfikować na komputerze, a to będzie znacznie szybsze niż testowanie zmian algorytmu na poziomie RTL. Oczywiście za wygodę trzeba zapłacić - schemat może nie być tak szybki i zajmie więcej zasobów sprzętowych.

Często jesteśmy skłonni zapłacić tę cenę: jeśli prawidłowo skorzystamy z tłumacza, wydajność nie ucierpi zbytnio, a nowoczesne układy FPGA mają wystarczające zasoby. W naszym świecie, w którym krytyczny jest wskaźnik time to market, okazuje się to uzasadnione.

Często trzeba połączyć wszystkie trzy style rozwoju w jednym projekcie. Załóżmy, że musimy stworzyć urządzenie, które można wbudować w robota i umożliwić mu rozpoznawanie obiektów w strumieniu wideo – na przykład znaków drogowych. Weźmy chip czujnika wideo i podłączmy go bezpośrednio do FPGA. Do debugowania możemy wykorzystać monitor HDMI, również podłączony do FPGA.

Ramki z kamery będą przesyłane do FPGA poprzez interfejs jasno zdefiniowany przez producenta czujnika (USB tutaj nie działa), przetwarzane i wyświetlane na monitorze. Do przetwarzania ramek potrzebny będzie bufor ramki, który zwykle znajduje się w zewnętrznej pamięci DDR zainstalowanej na płytce drukowanej obok układu FPGA.


Typowy schemat blokowy konstrukcji FPGA

Jeśli producent czujnika wideo nie zapewni adresu IP interfejsu dla naszego układu FPGA, wówczas będziemy musieli sami napisać go w RTL, zliczając cykle zegara, bity i bajty zgodnie ze specyfikacją protokołu przesyłania danych. Najprawdopodobniej weźmiemy gotowe bloki Preprocess, DDR Controller i HDMI IP i po prostu połączymy ich interfejsy. Możemy także napisać blok HLS, który wyszukuje i przetwarza przychodzące dane, w C++ i transmituje go za pomocą Vivado HLS.

Najprawdopodobniej nadal będziemy potrzebować jakiejś gotowej biblioteki detektora i klasyfikatora znaków drogowych, przystosowanej do wykorzystania w układzie FPGA. W tym przykładzie przedstawiam oczywiście mocno uproszczony schemat projektowy, jednak poprawnie oddaje on logikę działania.

Przyjrzyjmy się ścieżce projektowej od napisania kodu RTL do pobrania pliku konfiguracyjnego do załadowania do FPGA.

Ścieżka projektowa

Piszesz więc kod RTL, który implementuje żądany obwód. Przed przetestowaniem go na prawdziwym sprzęcie należy upewnić się, że jest on poprawny i poprawnie rozwiązuje wymagany problem. W tym celu wykorzystuje się modelowanie RTL w symulatorze na komputerze.

Bierzesz swój obwód, na razie prezentowany tylko w kodzie RTL, i kładziesz go na wirtualnym stole, gdzie przykładasz sekwencje sygnałów cyfrowych do wejść układu, rejestrujesz wykresy wyjściowe, zależności czasowe sygnałów wyjściowych i porównujesz je z oczekiwanymi rezultatami. Zwykle znajdujesz błędy i wracasz do pisania RTL.

Następnie logicznie zweryfikowany kod jest wprowadzany do programu syntezatora. Konwertuje tekstowy opis obwodu na powiązaną listę elementów cyfrowych z biblioteki dostępnej dla danej kości FPGA. Na tej liście będą wyświetlane elementy, takie jak LUT, wyzwalacze i połączenia między nimi. Na tym etapie elementy nie są jeszcze powiązane z konkretnymi zasobami sprzętowymi. Aby to zrobić, musisz nałożyć ograniczenia na obwód - w szczególności określić, do których fizycznych pinów I/O układu FPGA podłączone są logiczne wejścia i wyjścia twojego obwodu.

Ograniczenia te wymagają również określenia, przy jakich częstotliwościach zegara obwód musi działać. Dane wyjściowe syntezatora i plik ograniczeń są wysyłane do procesora implementacji, który między innymi obsługuje lokalizację i trasę.

Proces Place wiąże każdy wciąż anonimowy element listy sieci z określonym elementem wewnątrz układu FPGA. Następnie swoją pracę rozpoczyna proces Route, który stara się znaleźć optymalne połączenie tych elementów dla odpowiedniej konfiguracji macierzy przełączającej FPGA.

Place i Route działają w oparciu o ograniczenia, które nałożyliśmy na obwód: piny we/wy i prędkość zegara. Okres zegara ma bardzo duży wpływ na wdrożenie: nie powinien być mniejszy niż opóźnienie czasowe bramek logicznych w obwodzie krytycznym pomiędzy dwoma kolejnymi przerzutnikami.

Często nie da się od razu spełnić tego wymagania i wtedy trzeba wrócić do etapu początkowego i zmienić kod RTL: np. spróbować zmniejszyć logikę w łańcuchu krytycznym. Po pomyślnym zakończeniu wdrożenia wiemy, które elementy trafiają gdzie i jak są połączone.

Dopiero potem rozpoczyna się proces tworzenia binarnego pliku oprogramowania układowego FPGA. Pozostaje tylko załadować go na prawdziwy sprzęt i sprawdzić, czy działa zgodnie z oczekiwaniami. Jeśli na tym etapie pojawiają się problemy, oznacza to, że modelowanie było niekompletne i nie wyeliminowano na tym etapie wszystkich błędów i niedociągnięć.

Można wrócić do etapu symulacji i zasymulować sytuację awaryjną, a jeśli to nie zadziała, w ostateczności mechanizm debugowania udostępniany jest bezpośrednio w działającym sprzęcie. Możesz określić, które sygnały chcesz śledzić w czasie, a środowisko projektowe wygeneruje dodatkowy obwód analizatora stanów logicznych, który umieszczony na chipie obok Twojego projektu, łączy się z interesującymi Cię sygnałami i przechowuje ich wartości w czasie . Zapisane wykresy czasowe żądanych sygnałów można pobrać do komputera i poddać analizie.

W artykule podjęto próbę określenia składu dokumentacji towarzyszącej opracowanym modułom cyfrowym programowalnych układów scalonych logicznych (FPGA). Programiści muszą dostarczyć tę towarzyszącą dokumentację konsumentowi/klientowi w celu pomyślnego dalszego wykorzystania opracowanego modułu cyfrowego w swoich projektach na etapie projektowania urządzeń cyfrowych na FPGA.

Wstęp

O jaką dokumentację projektową należy zatem zapytać dewelopera, jeśli firma klienta, przedsiębiorstwo lub inny deweloper będzie później wykorzystywać w swoich projektach „zagraniczne” urządzenie opracowane? Artykuł ten może służyć jako „ściągawka”, aby najpierw poprawnie wydać specyfikacje techniczne dotyczące opracowania urządzenia cyfrowego dla układów FPGA, a następnie poprosić programistę o dokumentację projektową dla już opracowanego urządzenia cyfrowego. W oparciu o wcześniejsze doświadczenia w pracy z dokumentacją projektową przedsiębiorstwo lub firma zwykle korzysta z następujących standardów i dokumentów regulacyjnych:

  • GOST 2.102-68 ESKD. Rodzaje i kompletność dokumentów projektowych.
  • GOST 15.101-98. System opracowywania i wdrażania produktów do produkcji. Tryb prowadzenia prac badawczych.
  • GOST R 15.201-20-00. System opracowywania i wdrażania produktów do produkcji. Produkty do celów przemysłowych i technicznych. Procedura opracowywania i wdrażania wyrobów do produkcji.

Z reguły były to pliki oprogramowania sprzętowego oraz program (opis urządzenia cyfrowego w VHDL/Verilog lub zestaw układów cyfrowych opracowany w edytorze układów z wykorzystaniem elementów bibliotecznych logiki cyfrowej, takich jak przerzutniki, rejestry, liczniki, dekodery itp.) na płycie CD lub DVD oraz instrukcjami programowania. To wszystko.

Autor na przykład stanął przed następującym problemem. Jeden z pracowników opracował złożone, wielomodułowe urządzenie cyfrowe. Wszystkie moduły opisałem w VHDL, a także przyjrzałem się cyklogramom działania tych modułów i urządzenia cyfrowego jako całości na dobrym i drogim oscyloskopie. Nie wiedział o plikach Test Bench i możliwości przeprowadzenia symulacji lub nie wiedział jak je napisać, przy okazji nie było też żadnych uwag do projektu i opisów modułów. Sytuacja może być jeszcze gorsza, jeśli moduły są reprezentowane przez układy cyfrowe zaprojektowane w edytorze obwodów z wykorzystaniem elementów biblioteki. Tutaj leży jedna z głównych wad: oprócz samego programisty jest mało prawdopodobne, aby ktokolwiek inny zrozumiał to urządzenie cyfrowe, zwłaszcza jeśli projekt jest wielomodułowy, a opis każdego modułu obejmuje więcej niż 100 linii lub więcej niż jeden monitor ekran. Oznacza to, że jeśli inny programista chce wprowadzić tak opracowane już urządzenie cyfrowe dla FPGA do nowego opracowania lub projektu, ponownie musi poświęcić czas na rozwój tego urządzenia cyfrowego.

Historia zagadnień projektowych układów FPGA

Obecnie rynek FPGA jest jednym z najdynamiczniej rozwijających się. Układy FPGA są wykorzystywane w wielu gałęziach przemysłu. W chwili obecnej nie ma jednoznacznej metodologii, która zadowalałaby wszystkich twórców sprzętu w zakresie uzyskiwania konfiguracji FPGA w oparciu o model funkcjonalny urządzenia na poziomie systemu. Najpopularniejszym podejściem do rozwiązania tego problemu jest wykorzystanie technologii IP core (Intellectual Property Cores). Rdzenie IP to gotowe komponenty, które ułatwiają włączenie ich do własnego projektu w celu stworzenia bardziej złożonego systemu. Podejście to ma jedną istotną wadę - przyłączenie jąder IP do podstawy elementarnej. Każdy rdzeń IP jest zoptymalizowany pod konkretną serię chipów konkretnego producenta, co znacznie utrudnia możliwość przenoszenia już stworzonych urządzeń z jednej bazy elementów na drugą. Zamknięty charakter komercyjnych architektur CAD uniemożliwia dodawanie własnych funkcjonalnych modeli urządzeń na poziomie systemu w celu wyprowadzenia na ich podstawie modeli urządzeń na poziomie transferu rejestru (RTL). Opracowanie modułu cyfrowego odbywa się w postaci obwodu cyfrowego narysowanego w edytorze obwodów z wykorzystaniem wbudowanej przez producenta biblioteki CAD podstawowych elementów układu, takich jak przerzutniki, dekodery, liczniki, sumatory itp.

Innym popularnym podejściem umożliwiającym przejście od modelu funkcjonalnego na poziomie systemu do modelu urządzenia na poziomie transferu rejestrów jest wykorzystanie języków projektowania na poziomie systemu (SLDL). Do takich języków należą SystemC, Handel-C, VHDL, Verilog, System Verilog. Główną zaletą jest niezależność od bazy sprzętowej, w której urządzenie będzie realizowane.

Zatem z jednej strony, korzystając z technologii IP core, twórca sprzętu otrzymuje rozwiązanie wysokiej jakości, ale ściśle powiązane z bazą sprzętową, w której zaimplementowane jest urządzenie. Z drugiej strony, w przypadku korzystania z języków opisu sprzętu na poziomie systemu, implementacja urządzenia jest niezależna sprzętowo. Z powyższego wynika, że ​​obecnie ważne jest wspólne wykorzystanie języka opisu sprzętu i rdzeni IP producenta (Xilinx, Altera, Actel itp.) i zewnętrznych firm deweloperskich w celu przyspieszenia procesu projektowania modułów cyfrowych. W przypadku korzystania z modułów cyfrowych zewnętrznych producentów czasami w dołączonej dokumentacji brakuje informacji.

Udzielenie informacji na temat opracowanego modułu cyfrowego dla FPGA

W zależności od metodologii uzyskania konfiguracji FPGA w oparciu o model funkcjonalny urządzenia na poziomie systemu, projektant może wyróżnić następujące typy modułów cyfrowych dla FPGA:

  • Oprogramowanie - opracowany moduł cyfrowy, przekazywany konsumentowi w formie opisu w języku opisu sprzętu (VHDL, Verilog) i/lub opracowany w Edytorze Schematów do dalszego wykorzystania w programach do automatycznej syntezy obwodów logicznych i zoptymalizowany pod kątem parametrów funkcjonalnych .
  • Oprogramowanie sprzętowe - moduł cyfrowy opracowany przez zewnętrznego programistę, zwany rdzeniem IP, przesyłany do konsumenta w postaci obwodu logicznego (listy sieci) w oparciu o bibliotekę elementów logicznych producenta FPGA i zoptymalizowany pod kątem parametrów funkcjonalnych i elektrycznych.

Na etapie opracowywania dokumentacji, w oparciu o własne doświadczenia, konieczne jest sporządzenie, oprócz zwykłej dokumentacji projektowej i specyfikacji przeprowadzonych zgodnie z GOST 15.101, GOST 15.201, GOST 2.102, GOST 2.114, dokumentację dla wszystkich typów modele (systemowe, logiczne, inżynieria obwodów) tworzone na etapach projektowania urządzeń cyfrowych na układach FPGA.

Innymi słowy, zestaw dokumentacji projektowej urządzenia cyfrowego dla układów FPGA, oprócz pliku oprogramowania sprzętowego, instrukcji programowania i nagranego projektu na płycie CD/DVD, musi zawierać także dokumentację towarzyszącą.

Tabela. Wykaz sekcji dołączonej dokumentacji

Tytuł sekcji Pogląd
Oprogramowanie Oprogramowanie sprzętowe
Informacje ogólne
Cel i zakres O R
Dane techniczne O O
Opis sygnałów resetujących O O
Opis sygnałów synchronizacji O O
Opis interfejsów O R
Diagramy czasowe R O
Opis rejestrów kontrolnych O O
Schemat strukturalny (funkcjonalny). R R
Przewodnik programowania O O
model lub rodzina FPGA,
producent firmy
R O
Prezentacja modułu cyfrowego
do projektowania logiki na FPGA
modelu RTL O NIE
Model logiczny NIE O
Ograniczenia projektowe O O

Oto lista sekcji (tabela), które należy uwzględnić w dokumentacji towarzyszącej projektowi modułu cyfrowego dla układów FPGA. Dla każdej sekcji wskazano oznaki konieczności włączenia sekcji do zbioru dokumentów:

  • „O” jest sekcją wymaganą;
  • „P” to sekcja zalecana do dostawy.

Zalecane formaty plików do przesłania dokumentacji pomocniczej to MS Word, PDF (najlepszy format), HTML. Pliki opisowe w języku opisu sprzętu (VHDL, Verilog) i/lub opracowane w Edytorze Schematów są dostarczane w formie wymaganej przez oprogramowanie CAD do programowania. Wyjątkiem może być dodatkowe udostępnienie w formacie graficznym (JPEG, BMP) plików obwodów cyfrowych opracowanych w Edytorze Schematów.

Informacje ogólne

W tej części znajdują się ogólne informacje o opracowanym module cyfrowym w formie opisu:

  • schemat funkcjonalny i jego bloki/części składowe;
  • resetowanie sygnałów, synchronizacja;
  • stosowane interfejsy;
  • rejestry kontrolne;
  • diagram czasowy;
  • programowanie.

Cel i zakres

Określono cel modułu cyfrowego i obszary jego zastosowania.

Dane techniczne

Podano opis jego głównych parametrów technicznych, takich jak wydajność, pobór mocy dla konkretnego układu FPGA, liczba zajętych bramek i typ zastosowanego układu FPGA. Dodatkowo wskazano oprogramowanie CAD producenta FPGA zastosowane przy opracowaniu modułu cyfrowego oraz oprogramowanie użyte do modelowania i weryfikacji. W przypadku wszystkich używanych programów wskazana jest wersja i zainstalowane aktualizacje. Przedstawiona jest graficzna reprezentacja modułu cyfrowego w postaci „czarnej skrzynki” z oznaczeniem zewnętrznych wejść/wyjść oraz krótkim opisem ich przeznaczenia.

Opis sygnałów resetujących

Szczegóły sygnałów resetowania podano poniżej:

  • Lista zewnętrznych i wewnętrznych sygnałów resetujących.
  • Parametry czasowe i wykresy czasowe sygnałów kasujących.
  • Obwody generujące wewnętrzne sygnały resetowania, jeśli występują, stanowią część modułu cyfrowego.
  • Powiązania z innymi sygnałami (zwłaszcza sygnałami synchronizacyjnymi).

Opis sygnałów synchronizacji

Oto szczegóły dotyczące sygnałów synchronizacji:

  • opis zewnętrznych sygnałów synchronizacji;
  • parametry czasowe sygnałów synchronizacji;
  • opis sygnałów synchronizacji wewnętrznej i schemat ich generowania;
  • zależności czasowe pomiędzy sygnałami synchronizacyjnymi z różnych źródeł;

Opis interfejsów

Podano cechy wykorzystania wszystkich interfejsów wchodzących w skład opracowanego modułu cyfrowego, najlepiej ujednoliconych w celu organizowania interakcji z innymi węzłami systemu na chipie. Dodatkowo udostępniane jest łącze internetowe do pełnego opisu standardowego interfejsu lub opisu samego interfejsu. Obecnie interfejsy magistrali AMBA, PLB i Wishbone są akceptowane jako ujednolicone interfejsy dla modułów cyfrowych.

Diagramy czasowe

Podano niezbędne informacje do organizacji wymiany danych poprzez interfejsy i inne wejścia/wyjścia modułu cyfrowego: graficzne przedstawienie diagramów czasowych, opis protokołów przesyłania danych, wymagania dotyczące sygnałów zewnętrznych dostarczanych do modułu cyfrowego (czas trwania, częstotliwość itp.) i inne informacje.

Opis rejestrów kontrolnych

Zamieszczono opis wszystkich rejestrów sterujących modułu cyfrowego. Typowy opis rejestru sterującego zawiera nazwę rejestru, adres rejestru w wewnętrznej przestrzeni adresowej, wartość początkową po usunięciu sygnału resetującego, rodzaj dostępu (odczyt/zapis) oraz opis pól wewnętrznych.

Schemat strukturalny (funkcjonalny).

Podano obraz wewnętrznej struktury połączeń głównych wewnętrznych węzłów/bloków modułu cyfrowego, a także ich krótki opis tekstowy. Dodatkowo podano opis głównych wewnętrznych bloków modułu cyfrowego. Celem niniejszego dokumentu jest dostarczenie konsumentowi informacji niezbędnych do zrozumienia zasad działania modułu cyfrowego.

Liczbę opisywanych bloków i zakres opisu określa twórca modułu cyfrowego. Zaleca się, aby minimalna liczba opisanych modułów odpowiadała liczbie elementów schematu strukturalnego (funkcjonalnego) modułu cyfrowego.

Typowy opis jednostki wewnętrznej zawiera:

  • cel bloku;
  • schemat strukturalny (funkcjonalny) bloku (jeśli to konieczne);
  • tryby pracy i algorytmy;
  • diagramy czasu pracy;
  • organizacja zarządzania blokiem;
  • organizacja komunikacji z innymi blokami;
  • Wszelkie inne informacje.

Przewodnik programowania

Zawiera wszystkie niezbędne informacje dotyczące procesu programowania z wykorzystaniem oprogramowania CAD producenta modułu cyfrowego w układzie FPGA, niezbędnych narzędzi do tworzenia i debugowania oprogramowania oraz bibliotek oprogramowania.

Model lub rodzina FPGA, producent

W przypadku oprogramowania sprzętowego modułu cyfrowego wskazany jest producent FPGA, model lub rodzina FPGA oraz jego charakterystyka prędkości. Dla modułu cyfrowego Software podana jest informacja o ilości zajętych zasobów oraz wymaganiach dla zastosowanego FPGA.

Reprezentacja modułu cyfrowego do projektowania logiki

W artykule omówiono trudności w wykorzystaniu „obcego” projektu w języku VHDL – brak odpowiednich wytycznych dotyczących nazewnictwa i zasad pisania programów. Podano także ogólne wytyczne dotyczące nazw, dobrych manier w pisaniu programów i wskazówki dotyczące syntezy. Kwestie te należy jak najbardziej szczegółowo omówić z programistą, jeśli w przyszłości planujesz kontynuować rozwój lub aktualizację we własnym zakresie, zanim zacznie on opracowywać model RTL modułu cyfrowego na FPGA. Dotyczy to szczególnie typu modułu cyfrowego oprogramowania na FPGA. W tej części artykułu opisano ogólne wymagania dla całego projektu opracowanego modułu cyfrowego na FPGA. Oto kwestie, na które należy zwrócić uwagę podczas opracowywania specyfikacji technicznych opracowania modułu cyfrowego na FPGA, a dotyczy to zwłaszcza transferu wyników pracy.

modelu RTL

Moduł cyfrowy, opisany w zsyntetyzowanym podzbiorze języka Verilog lub VHDL i/lub opracowany w Edytorze Schematów, przeznaczony jest do wykorzystania na etapie syntezy logiki FPGA. Dostarczony do Software w postaci zmontowanego projektu modułu cyfrowego w oprogramowaniu CAD producenta FPGA. W przypadku cyfrowego modułu Firmware model RTL objęty jest odrębną umową.

Oprócz plików modelu RTL przesyłane są:

  • Instrukcja korzystania z modelu.
  • Opis bloków pamięci zawartych w modelu, w tym typ pamięci, rozmiar, liczba bloków pamięci, hierarchiczna nazwa bloku pamięci.
  • Opis procesu tworzenia gotowych jąder z wykorzystaniem programów do ich tworzenia (np. CoreGenerator dla Xilinx ISE). W przypadku braku opisów mogą wystąpić ograniczenia w zakresie przeprojektowania i zastosowania ze względu na zależność od technologii i producenta.
  • W przypadku korzystania z mikroprocesora producenta (np. Altera - procesor Nios; firmy Xilinx - Microblaze, mikroprocesory PowerPC) wymagany jest opis procesu konfiguracji rdzenia procesora i jego urządzeń peryferyjnych.
  • Zestaw testów (pliki Test Bench) do weryfikacji i symulacji modułu cyfrowego, napisany w Verilog i/lub VHDL i/lub System Verilog.
  • Wszelkie inne dodatkowe informacje.

Model logiczny

Model stanowi listę obwodów opisanych przy użyciu języków Verilog lub VHDL na podstawie biblioteki producenta FPGA i jest dostarczany wraz z Firmwarem modułu cyfrowego.

Oprócz plików modeli logicznych przesyłane są:

  • Instrukcja obsługi tego modelu.
  • Zestaw testów (pliki Test Bench) do weryfikacji i symulacji modułu cyfrowego, napisany w Verilog i/lub VHDL i/lub System Verilog.
  • Poradnik pracy z zestawem testów do modelowania i weryfikacji modułu cyfrowego.
  • Wszelkie inne dodatkowe informacje.

Ograniczenia projektowe

Ograniczenia projektowe są dostarczane w postaci pliku opisującego zestaw ograniczeń nałożonych na moduł cyfrowy, gdy jest on uwzględniony w modelu logicznym typu system-on-chip. Zestaw ten obejmuje ograniczenia zegara, ograniczenia taktowania, ograniczenia interakcji modułu cyfrowego z innymi modułami oraz warunki pracy modułu cyfrowego. Preferowany jest format Synopsis Design Constraints (SDC) lub format CAD producenta FPGA.

Przykładowa lista ograniczeń dla sygnałów synchronizacji:

  • wykres czasowy (przebieg zegarowy);
  • niestabilność częstotliwości zegara (Jitter);
  • zmiana fazy częstotliwości zegara;
  • czas trwania czasów przełączania (Czasy przejścia);
  • diagramy czasowe pochodnych przebiegów zegarowych;
  • wszelkie inne dodatkowe informacje.

Dla modułów cyfrowych Software i Firmware wymagany jest zestaw ograniczeń dla sygnałów synchronizacji.

Przykładowa lista ograniczeń czasowych:

  • Godziny przybycia na wejścia;
  • czas pojawienia się sygnałów na wyjściach (Wymagane czasy na wyjściach);
  • Ścieżki wielorowerowe;
  • fałszywe ścieżki;
  • czas trwania czasów przełączania sygnału danych (Czasy przejścia sygnału danych);
  • wszelkie inne dodatkowe informacje.

Wniosek

Poniższy zestaw dokumentacji towarzyszącej opracowanym modułom cyfrowym dla układów FPGA jest zapewniany na podstawie umowy między konsumentem a programistą. Najczęściej programista po prostu dostarcza moduł cyfrowy opisany w VHDL, Verilog, System Verilog i/lub opracowany w edytorze obwodów. Jeśli chodzi o dodatkową dokumentację, odpowiedź dewelopera jest najczęściej następująca: „Moduł cyfrowy działa, więc bierz go i używaj. Opisanie obwodu w języku sprzętowym nie jest niczym skomplikowanym: możesz to rozgryźć samodzielnie.

Zdaniem autora wszystko można wymyślić, wszystko zależy od chęci i poświęconego czasu, a czas poświęcony na zrozumienie „cudzego” projektu dla już opracowanego modułu cyfrowego jest wprost proporcjonalny do doświadczenia w opisywaniu sprzętu w VHDL, Verilog i wiedza o obwodach cyfrowych i mikroprocesorowych. Można tego uniknąć, jeśli początkowo uzgodnisz z programistą skład dołączonej dokumentacji, wówczas wykorzystanie modułu cyfrowego w Twoim projekcie stanie się łatwiejsze, a jego wdrożenie nastąpi szybciej.

Podsumowując, autor pragnie zauważyć, że formułując zadanie opracowania urządzenia cyfrowego na układzie FPGA, należy kierować się zaleceniami podanymi w artykule, wówczas nie pojawią się problemy przy ponownym użyciu lub modernizacji opracowanego wcześniej urządzenia cyfrowego.

Literatura

  1. Denisov A. Kilka wskazówek dotyczących projektowania urządzeń cyfrowych w VHDL dla układów FPGA // Komponenty i technologie. 2009. Nr 12.
  2. GOST 2.102-68 ESKD. Rodzaje i kompletność dokumentów projektowych.
  3. GOST 2.114-95 ESKD. Warunki techniczne.
  4. GOST 15.101-98. System opracowywania i wdrażania produktów do produkcji. Tryb prowadzenia prac naukowo-badawczych.
  5. GOST R 15.201-20-00. System opracowywania i wdrażania produktów do produkcji. Produkty do celów przemysłowych i technicznych. Procedura opracowywania i wdrażania wyrobów do produkcji.

WYKORZYSTANIE FPGA W NOWOCZESNYCH URZĄDZENIACH

Tupikow Paweł Andriejewicz

Student V roku Wydziału Sztuki Państwowego Uniwersytetu Technicznego w Omsku, Federacja Rosyjska, Omsk

Obecnie w różnych nowoczesnych urządzeniach coraz częściej stosuje się programowalne układy logiczne logiczne (FPGA), wynika to z faktu, że układy FPGA mają znaczną przewagę nad konwencjonalnymi układami cyfrowymi. Te zalety obejmują:

· Poprawiono tymczasowe właściwości produktu.

· Cena produktu spada.

· Wymiary produktu są zmniejszone.

· Zwiększa się niezawodność produktu (zmniejsza się liczba dyskretnych chipów)

Zwiększa elastyczność produktu (FPGA zawsze można przeprogramować)

Architektura FPGA ma złożoną strukturę (rys. 1)

Rysunek 1. Wewnętrzna struktura FPGA

Jak widać na rysunku 1, główna część FPGA składa się z programowalnych bloków logicznych i programowalnych połączeń wewnętrznych.

Proces programowania (firmware) układu FPGA polega na utworzeniu niezbędnych połączeń pomiędzy wejściami i wyjściami urządzenia.

Obecnie istnieje dwóch światowych liderów w produkcji układów FPGA. Są to amerykańskie firmy Xilinx i Altera.

Każda firma oferuje własne oprogramowanie CAD do pracy z układami FPGA. Xilinx oferuje zestaw programistyczny Xilinx Software Development Kit (SDK). Altera oferuje Max+Plus II i Quartus II, a także system modelowania ModelSim.

Do tworzenia oprogramowania sprzętowego zwykle używa się języków opisujących działanie sprzętu, obecnie najpopularniejszymi językami są:

Verilog HDL.

Język VHDL jest najtrudniejszy do nauczenia, ale jednocześnie ma największe możliwości na funkcjonalnym i behawioralnym poziomie abstrakcji, ale ma mniej możliwości na strukturalnym poziomie abstrakcji w porównaniu z Verilog HDL; biblioteka VITAL została stworzona do rozszerzyć możliwości języka VHDL (rys. 2).


Rysunek 2. Poziomy abstrakcji Verilog I VHDL

Przykładem pracy języka Verilog HDL jest program zaimplementowany na układzie FPGA CYCLONE III EP3C5E1444C8N stanowiska Mini-DiLab, którego ogólny widok pokazano na rys. 3.


Rysunek 3. Widok ogólny tablicy Mini - DiLab

Program ten realizuje sekwencyjne przełączanie diod led0-led7, z możliwością zwiększania ruchu „światła” za pomocą przycisków pba i pbb, a także kontrolowania prędkości przełączania za pomocą przełączników sw0, sw1.

//Tekst programu

moduł projekt( wyjście prowadzony, wejście clk_25 MHz, wejście pba wejście pbb

wejście południowy zachód);

// Cel wewnętrznych połączeń projektu

drut s1;

drut s2;

drut s3;

// Wywołaj inne pliki (podprogramy) powiązane z projektem

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Licznik licznik_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.out(led), .in(s3));

moduł końcowy// koniec programu

Podprogram tr

moduł tr(wyjście, ustawienie, res); // Utwórz program

// Przypisanie wejść/wyjść

wyjścierej na zewnątrz;

wejście ustawić;

wejście res;

// Inicjalizacja

wstępny

zaczynać

Na zewnątrz<= 1"d0;

// Główny kod programu

zawsze @(negacja ustawić lub negacja res)

zaczynać

Jeśli(~(zestaw))

Na zewnątrz<= 1"d1;

w przeciwnym razie

Na zewnątrz<= 1"d0;

moduł końcowy // Koniec programu

Licznik podprogramów

moduł licznik(con, q, clk, up); // Uruchomienie programu

wyjścierej kon;

wyjście q = przeciw;

wejście w górę, klk;

// Główny kod programu

zawsze @(pozycja trzask)

zaczynać

Jeśli(klik)

Jeśli(w górę)

Kon<= con - 1"d1;

w przeciwnym razie

Kon<= con + 1"d1;

moduł końcowy//Koniec programu

Podprogram mx(multiplekser)

moduł mx ( rej. wyjściowa A, wejście W, wejście obciążenie);

// Główny kod programu

zawsze @*

zaczynać

sprawa(obciążenie)

2"b00: a = in;

2"b01: a = in;

2"b10: a = in;

2"b11: a = in;

obudowa końcowa

moduł końcowy // Koniec programu

Podprogram dc3_8 (multiplekser)

moduł dc3_8(wyjście, wejście); // Uruchomienie programu

// Przypisanie wejść/wyjść

rej. wyjściowa na zewnątrz;

przewód wejściowy W;

// Główny kod programu

zawsze @*

zaczynać

sprawa(W)

3"d0: wyjście = 8"b11111110;

3"d1: wyjście = 8"b11111101;

3"d2: wyjście = 8"b11111011;

3"d3: wyjście = 8"b11110111;

3"d4: wyjście = 8"b11101111;

3"d5: wyjście = 8"b11011111;

3"d6: wyjście = 8"b10111111;

3"d7: wyjście = 8"b01111111;

obudowa końcowa

moduł końcowy // Koniec programu

Program zaimplementowano w oprogramowaniu CAD Quartus II.

Po skompilowaniu programu kompilator nie generował w programie błędów ani komentarzy związanych z analizą i składnią programu (rys. 4).


Rysunek 4. Okno komunikatu projektu

Z komentarzy kompilatora wynika, że ​​nie ma licencji na Quartus II (do szkolenia wykorzystano darmową wersję programu) oraz brak plików niezbędnych do zamodelowania projektu.

RTL Strukturę tego projektu pokazano na ryc. 5.


Rysunek 5. Realizacja projektu ( RTL Struktura)

Jak pokazano na ryc. 6 w tym programie wykorzystywana jest tylko niewielka część możliwości tego FPGA.

Rysunek 6. Część FPGA zaangażowana w projekt

Wnioski: Programowalne układy logiczne logiczne mogą być stosowane w wielu urządzeniach. Aby nauczyć się z nimi pracować, należy wprowadzić do programu kształcenia specjalności związanych z projektowaniem i konstrukcją sprzętu elektronicznego znajomość języków opisu sprzętu (Verilog HDL i VHDL).

Bibliografia:

1. Grushevitsky R.I. Projektowanie układów na układach logicznych programu / R.I. Grushevitsky, A.X. Mursajew, E.P. Ponury. Petersburg: BHV Petersburg, 2002. - 608 s.

2. Kołomow D.A. Systemy komputerowego wspomagania projektowania Altra MAX+plus II i Quartus II. Krótki opis i poradnik / D.A. Kołomow, R.A. Myalk, AA Zobenko, A.S. Filippow. M.: IP RadioSoft, 2002. - 126 s.

3. Maxfield K. Projekt na FPGA. Kurs na młodego zawodnika./ K. Maxfield. M.: Wydawnictwo „Dodeka-XXI”, 2007. - 408 s. (tłumaczenie z języka angielskiego).