Z tego, co rozumiem, proces programowania FPGA składa się z dwóch części:
- Zakoduj opis sprzętu do bitów, które FPGA może zrozumieć (tj. Napisz trochę HDL i skompiluj)
- Załaduj skompilowany HDL do FPGA.
Moje pytanie brzmi: „Co FPGA robi ze skompilowanym HDL?”. W tej chwili myślę o układach FPGA jako o „możliwym do formowania sprzęcie”, w którym przewody i bramki logiczne można formować w dowolny sposób. Jedną z fajnych rzeczy jest to, że łatwość formowania jest stała: FPGA można przeprogramować.
Jak FPGA interpretują skompilowane HDL? Jak osiąga się trwałą formowalność?
Odpowiedzi:
Sądząc po twoim drugim pytaniu, jesteś facetem Xilinx. Dlatego gorąco polecam pobranie karty danych dla Twojego układu Xilinx i przejście do rozdziału Opis funkcjonalny. Dla używanego przeze mnie układu Spartan 3 jest to 42 strony dobrej zabawy. Szczegółowo wyszczególnia, jakie elementy znajdują się w układzie FPGA - IOB, CLB, plasterki, LUT, blok RAM, mnożniki, Digital Clock Manager, sieć zegarowa, interkonekt i kilka bardzo podstawowych informacji konfiguracyjnych. Musisz zrozumieć tę informację, jeśli chcesz wiedzieć, jak wygląda „skompilowana HDL”.
Po zapoznaniu się z architekturą FPGA możesz zrozumieć ten proces. Po pierwsze, Twój projekt HDL jest uruchamiany przez silnik syntezy, który zamienia HDL w zasadniczo RTL. Następnie Mapper przetwarza wyniki z Syntezy, „mapując” je na dostępne elementy architektury FPGA. Następnie router wykonuje funkcję Place And Route (PAR), która określa, dokąd idą te elementy i jak je połączyć. Wreszcie wyniki z PAR są przekształcane w plik BIT. Zazwyczaj ten plik BIT jest następnie przekształcany w jakiś sposób, aby można go było załadować do układu Flash, aby FPGA mogła zostać automatycznie zaprogramowana po włączeniu.
Ten plik bitów opisuje cały program FPGA. Na przykład CLB w Spartan 3 składają się z wycinków, które składają się z LUT, które są zaledwie 16-adresowymi 1-bitowymi SRAM. Zatem jedną rzeczą, którą będzie zawierać plik BIT, jest dokładnie to, jakie dane trafiają do każdego adresu SRAM. Inną rzeczą, którą zawiera plik BIT, jest sposób podłączenia każdego wejścia LUT do macierzy połączeń. Plik BIT będzie także zawierał wartości początkowe, które wchodzą do pamięci RAM bloku. Opisuje, co jest podłączone do zestawu i resetuje szpilki każdego flip-flopa w każdym wycinku. Opisuje sposób połączenia łańcucha nośnego. Opisuje interfejs logiczny dla każdego IOB (LVTTL, LVCMOS, LVDS itp.). Opisze wszystkie zintegrowane rezystory podciągające lub podciągające. Zasadniczo wszystko.
W przypadku Xilinx pamięć FPGA jest czyszczona po zainicjowaniu konfiguracji (tzn. Potwierdzeniu jest PROG_B). Po wyczyszczeniu pamięci, INIT_B przechodzi w stan wysoki, wskazując, że faza jest zakończona. Plik BIT jest następnie ładowany przez interfejs JTAG lub Flash. Po załadowaniu programu pulsuje Global Set / Reset (GSR), resetując wszystkie klapki do ich stanu początkowego. Pin DONE następnie przechodzi w stan wysoki, co oznacza, że konfiguracja jest zakończona. Dokładnie jeden cykl zegara później wyzwalany jest globalny sygnał trójstanowy (GTS), umożliwiający sterowanie wyjściami. Dokładnie po jednym cyklu zegara zostaje zwolnione globalne zezwolenie na zapis (GWE), dzięki czemu przerzutniki zaczynają zmieniać stan w odpowiedzi na ich dane wejściowe. Zauważ, że nawet ten końcowy proces konfiguracji może być nieco zmieniony w zależności od flag ustawionych w pliku BIT.
EDYTOWAĆ:
Powinienem również dodać, że powodem, dla którego program FPGA nie jest trwały, jest fakt, że struktura logiczna składa się z pamięci ulotnej (np. SRAM). Gdy więc FPGA traci moc, program zostaje zapomniany. Dlatego potrzebują np. Układów Flash jako nieulotnej pamięci dla programu FPGA, aby można ją było ładować za każdym razem, gdy urządzenie jest włączone.
źródło
Kompilacja HDL daje w wyniku bitowy wzorzec, który wskazuje, które połączenia wewnątrz FPGA powinny zostać aktywowane. FPGA nie musi już interpretować HDL. Wzorzec bitów jest programowany w szeregowy moduł ładujący Flash / EEPROM, a po uruchomieniu ten wzór jest przenoszony do FPGA, tworząc niezbędne połączenia.
źródło
Wynikiem kompilacji jest strumień bitów (dosłownie strumień bitów), który jest ładowany po włączeniu zasilania. To przesuwa się przez FPGA przechowywane w niektórych komórkach pamięci (zatrzaski). Komórki te są połączone z różnymi jednostkami logicznymi, multiplekserami, tablicami przeglądowymi, blokami RAM, macierzami routingu i stanowią tak zwaną „konfigurację”. Po załadowaniu strumienia bitów FPGA zaczyna działać - bity w zatrzaskach konfiguracyjnych „informują” każdy mały kawałek FPGA, jak ma działać.
EDYCJA 24 kwietnia 2012: Wspomniane flip-flopy nie są przeznaczone do tabel przeglądowych ani ich konfiguracji. Jak powiedział @ ajs410, są one w pamięci RAM, która zawiera jeszcze mniej tranzystorów. Przerzutniki służą do przechowywania danych poza LUT, jeśli ta pamięć jest włączona.
źródło
Standardowym terminem jest „konfiguracja”, a nie „programowanie” dla FPGA. FPGA jest zwykle urządzeniem opartym na SRAM. SRAM przechowuje bity, które wskazują, które połączenia są tworzone i przerywane w „strukturze logicznej” urządzenia. Gdy zachodzi konfiguracja, strumień bitów jest wysyłany do FPGA, która zapisuje w tej pamięci SRAM. Po wyłączeniu układu FPGA opartego na pamięci SRAM dane SRAM są kasowane, a po włączeniu układu FPGA należy go ponownie skonfigurować.
Teraz o tym wiedzą, są to różne metody „konfigurowania” i FPGA, a zatem istnieją różne formaty plików zawierających ten „strumień bitów”. Ostatecznie struktura tych plików i szczegóły dotyczące tego, jak dokładnie skonfigurowano układ FPGA, są zastrzeżone dla producenta i informacje te nigdy nie są udostępniane. Ale ogólna zasada pozostaje taka sama w przypadku układów FPGA.
źródło