Programowalne bramy matrycowe, czyli FPGAs, stały się wszechobecne w systemach cyfrowych o dużej szybkości i czasie rzeczywistym. Mogą być wykorzystywane w aplikacjach o krytycznym czasie, przetwarzaniu sygnałów cyfrowych, a nawet kopaniu kryptowalut. Ich wydajność pod względem szybkości i zużycia energii sprawia, że są idealne do wielokrotnego użytku w aplikacjach o wysokiej szybkości. Szybkość, z jaką działają FPGAs, ciągle rośnie w zawrotnym tempie, ale ich adopcja w pipeline'ach Continuous Integration (CI) wydaje się nie postępować w tym samym tempie. W tym artykule omówimy koncepcję pipeline'ów CI, ich zastosowanie do FPGAs i spojrzymy na przykłady, jak to skonfigurować.
Jeśli jeszcze tego nie zauważyłeś, praktycznie żyję, śpię i oddycham integracją ciągłą. Niezależnie od tego, czy chodzi o CI dla projektowania PCB, czy CI dla systemów wbudowanych, zawsze szukam sposobów na ciągłe doskonalenie i automatyzację budowy dla każdego typu systemu. Ostatnio otrzymałem feedback od kilku osób, że nie poczyniono dużych postępów w zakresie FPGAs i systemów CI. Prawdziwa zasada stojąca za CI i FPGAs podąża tą samą logiką, co wszystkie inne systemy CI: stworzyć powtarzalne środowisko budowy, które może wykonać za nas wszystkie ciężkie prace. W systemie CI opartym na FPGA zazwyczaj widzimy trzy następujące etapy:
Rysunek 1: Etapy pipeline'u CI FPGA
Każdy etap jest ważny sam w sobie i wszystkie wymagają własnej konfiguracji. Przyjrzyjmy się każdemu etapowi, aby zrozumieć, co reprezentują i jak je wdrożyć.
Symulacja jest integralną częścią projektowania FPGA. Budowanie obrazu FPGA do załadowania na docelowe urządzenie może zająć dużo czasu. Zamiast pisać kod, budować go i testować na sprzęcie, symulacja daje możliwość szybkiego testowania naszego kodu lub poziomu rejestru transferu (RTL) w środowisku, które symuluje zachowanie FPGA. Zazwyczaj odbywa się to na poziomie użytkownika, ale staje się coraz bardziej popularne, aby integrować symulację FPGA z pipeline'ami CI. Oznacza to, że ktoś mógłby przesłać swój kod do swojego repozytorium, a pipeline uruchomiłby symulację (samosprawdzającą się) gdzieś w chmurze. Aby naprawdę zrobić to „gdzieś w chmurze”, należy stworzyć środowisko, które może być enkapsulowane lub konteneryzowane w samowystarczalne środowisko. Robimy to przy użyciu czegoś, co nazywa się kontenerami Docker. Działają one niemal jak maszyny wirtualne, które można uruchamiać wszędzie. Ten konkretny kontener Docker, na przykład, tworzy środowisko konteneryzowane, które umożliwia użytkownikowi uruchomienie Icarus Verilog w dowolnym systemie Linux. Następnie bierzemy ten kontener i używamy go do stworzenia naszego pipeline'u symulacji FPGA. W tym przykładzie możesz zobaczyć prosty pipeline „Hello World” działający w chmurze z użyciem Icarus Verilog. Zauważ, że można to zrobić z każdym narzędziem do symulacji FPGA.
Rysunek 2: Uruchomienie pipeline'u symulacji FPGA za pomocą Gitlab CI
Drugim, również bardzo ważnym, etapem w procesie FPGA jest etap budowania. Chcemy być w stanie zsyntetyzować, umieścić i poprowadzić oraz wygenerować bitstream dla naszego projektu FPGA. Zwykle dokonują tego użytkownicy w narzędziu dostarczonym przez dostawcę (np. Xilinx, Intel, Microchip itd.). Zamiast budować lokalnie, chcielibyśmy, aby budowa miała miejsce gdzie indziej. Może to być jednak nieco skomplikowane, ponieważ narzędzia FPGA są zazwyczaj bardzo duże. Jednym z podejść, które wielu użytkowników przyjmuje, jest posiadanie dedykowanej "maszyny budującej", która uruchamia wszystkie pipeline'y budowania. To podejście nie jest złe, ale także nie skaluje się i może stać się punktem awarii. Inni próbowali konteneryzować narzędzia FPGA, ale te obrazy mogą przekraczać 100 GB, co w zasadzie czyni je nieużytecznymi dla aplikacji w chmurze. Średnim rozwiązaniem, które znalazłem, które dobrze działa, jest metoda instalacji sieciowej. Na przykład stworzyłem kontener, który uruchamia Vivado 2019.1, ale samo narzędzie nie jest zainstalowane w obrazie (dlatego rozmiar obrazu jest mniejszy niż 300 MB). Zainstalowałem Vivado na dysku sieciowym (w tym przypadku EFS w AWS) i następnie zamontowałem go w moim kontenerze Docker. Ponieważ uruchamiam mój pipeline w AWS, opóźnienie między EFS a instancją EC2 (Węzeł Kubernetes) jest znikome.
W tym przykładzie używam urządzenia Arty A7 firmy Digilent do stworzenia cyfrowego filtru. Używam automatycznego skryptu budowania, aby wygenerować plik bitstream dla mojego urządzenia przy każdym przesyłaniu do mojego repozytorium. Jak widać w wynikach, udaje mi się wywołać Vivado, nawet jeśli nie istnieje w kontenerze Docker (tzn. jest zamontowane jako zewnętrzny dysk).
Rysunek 3: Wykonanie pipeline'a budowy FPGA za pomocą Gitlab CI
Faza testowania będzie naprawdę zależała od każdej osoby i projektu. Celem testowania w ramach pipeline'a CI jest zautomatyzowanie tak wiele, jak to możliwe. Tak samo jak zautomatyzowałem mój przykład DSP dla Arduino za pomocą Analog Discovery 2, mogę zrobić to samo tutaj. Pokrycie automatycznego rozwiązania testowego dla FPGA byłoby trochę poza zakresem tego artykułu. Główną zasadą jest zapewnienie, że może być to powtarzalne i uruchamiane w zamkniętym, lub skonteneryzowanym, środowisku. Ważne jest, aby pamiętać, że testowanie jest ważnym elementem pipeline'a CI i powinno być wdrażane na każdym poziomie, jaki użytkownik może obsłużyć.
W tym artykule omówiliśmy koncepcję pipeline'ów CI dla FPGA. Zrecenzowaliśmy trzy krytyczne etapy, które tworzą pipeline'y FPGA: symulację, budowanie i testowanie. Przyjrzeliśmy się przykładom pipeline'ów symulacyjnych i budowlanych oraz omówiliśmy znaczenie testowania. Po przestudiowaniu tego artykułu i przykładów użytkownik powinien być w stanie zrozumieć podstawowy składnik tego, co jest potrzebne do stworzenia pipeline'a CI opartego na FPGA.
Kiedy będziesz gotowy, aby zbudować swoją niestandardową płytkę FPGA wspierającą twój system wbudowany, skorzystaj z pełnego zestawu funkcji projektowania i układu PCB w Altium Designer®. Kiedy ukończysz swój projekt PCB i będziesz gotowy, aby podzielić się swoimi projektami z współpracownikami lub producentem, możesz udostępnić swoje ukończone projekty za pośrednictwem platformy Altium 365™. Wszystko, co potrzebne do zaprojektowania i produkcji zaawansowanej elektroniki, można znaleźć w jednym pakiecie oprogramowania.
Tylko zarysowaliśmy możliwości, jakie oferuje Altium Designer na Altium 365. Rozpocznij swoją darmową wersję próbną Altium Designer + Altium 365 już dziś.