Programowanie FPGA, od czego zacząć

29

Jestem programistą (C, C ++, Object-C, Java ...) i jestem zainteresowany nauką programowania układów FPGA. Teraz pytanie może wydawać się dla ciebie proste, ale proszę, poświęć trochę czasu, aby mi pomóc w tym, ponieważ utknąłem w tej chwili. Moja firma poprosiła mnie o zapoznanie się z technologią i pracę nad produktem kratowym. Moje pytanie brzmi: od czego zacząć? Po kilku badaniach odkryłem, że mogę wybierać między VHDL i Verilog, nigdy nie korzystałem z żadnego z nich. Czy jest jakiś specjalista, który mógłby mi zasugerować od czego zacząć? Naucz się języka, poznaj elementy sprzętowe, a następnie produkt sieciowy? Lub bezpośrednio zacznij od produktu Lattice (kiedy czytam, że metody programowania są bardzo różne u różnych dostawców FPGA)?

Anila
źródło
3
Jeśli znasz programowanie w C / C ++, powinieneś wybrać Verilog zamiast VHDL. Składnia
Veriloga
1
@ m.Alin Właśnie zaczynam i odkryłem, że to nie ma znaczenia, jeśli wygląda jak C, ponieważ odkryłem, że najtrudniejszą częścią nie była składnia, ale różnica pojęć. Semantyka nie jest nawet zbliżona do semantyki C.
Edgar Klerks
Największa zmiana, którą znalazłem w C / C ++ / Java / itp. to, że moduły, które piszesz (przypuszczam, że są to jednostki tłumaczące) są oparte wyłącznie na zdarzeniach. W języku C, uproszczonym do podstawowej zasady, skompilowany program przeprowadzi pierwszą linię kodu, następnie drugą linię, następnie 3, następnie 4 itd. W Verilog / VHDL nie ma czegoś takiego, przypomina to rysowanie obrazu : ten pin wejściowy łączy się z module1_input, moduł1_output przełącza stan za każdym razem, gdy moduł1_input osiągnie stan wysoki. Zamiast if(condition)tego when(condition). Większość IDE FPGA ma nawet elementy graficzne, tak jakbyś rysował je na papierze.
CharlieHanson

Odpowiedzi:

40

Projektowanie cyfrowe nie ma wiele wspólnego z tworzeniem oprogramowania (może poza tym, że składnia Verilog wygląda trochę jak język C, ale po prostu wygląda). Dlatego bardzo trudno jest odpowiednio odpowiedzieć na tego rodzaju pytania. Ale jako facet, który przeszedł ścieżkę od rozwoju oprogramowania do projektowania sprzętu, spróbuję. Patrząc na siebie, oto jak doradziłbym sobie wtedy, gdybym wiedział, co teraz wiem:

Zaczynać od początku

Zapomnij o rozwoju oprogramowania. Zwłaszcza języki programowania. Zasady te nie mają zastosowania w projektowaniu cyfrowym. Prawdopodobnie byłoby to łatwe dla faceta, który zaprojektował procesor, aby zaprogramować go w asemblerze, a nawet w C, ale programista asemblera nie będzie w stanie zaprojektować procesora.

Na ścieżce uczenia się nie staraj się rozwiązywać problemu, który wydaje się być łatwym problemem z istniejącą wiedzą z oprogramowania. Jednym z klasycznych przykładów jest „pętla for”. Chociaż możesz napisać pętlę for w powiedzmy verilog - służy ona innym celom. Jest używany głównie do generowania kodu. Może to być również pętla for, jak widzą to twórcy oprogramowania, ale nie przydaje się do niczego poza symulacją (tzn. Nie będziesz w stanie zaprogramować FPGA w ten sposób).

Więc dla każdego zadania, które chcesz wykonać, nie myśl, że wiesz, jak to zrobić, zamiast tego przeprowadź badania - sprawdź książki, przykłady, zapytaj bardziej doświadczonych ludzi itp.

Naucz się sprzętu i języka HDL

Najpopularniejsze języki HDL to Verilog i VHDL. Istnieją również specyficzne dla dostawców, takie jak AHDL (Altera HDL). Ponieważ te języki są używane do opisywania komponentów sprzętowych, wszystkie są używane do wyrażenia tego samego w podobny sposób, ale z inną składnią.

Niektórzy ludzie zalecają naukę Verilog, ponieważ wygląda jak C. Tak, jego składnia jest mieszanką C i Ady, ale nie ułatwia to programistom odchylenia się. Myślę, że może nawet pogorszyć sytuację, ponieważ pojawi się pokusa, aby napisać C w Verilog. To dobry przepis na bardzo zły czas.

Mając to na uwadze, polecam wpatrywać się w VHDL. Chociaż Verilog jest również OK, o ile uwzględniono powyższe.

Należy pamiętać, że musisz zrozumieć, co wyrażasz w tym języku. Jaki rodzaj sprzętu jest „opisywany” i jak działa.

Z tego powodu polecam zaopatrzyć się w ogólnie książkę o elektronice i dobrą książkę taką jak ta - HDL Chip Design (inaczej niebieska książka).

Zdobądź symulator

Zanim zaczniesz cokolwiek robić w sprzęcie i korzystać z funkcji specyficznych dla Dostawcy itp., Zdobądź symulator. Zaczynałem od Verilog i użyłem Icarus Verilog wraz z GTK Wave. To są bezpłatne projekty typu open source. Prześledź przykłady, które widzisz w książkach, ćwicz, projektując własne obwody, aby poczuć smak tego.

Zdobądź tablicę programistyczną

Jeśli masz ochotę iść naprzód, zdobądź tablicę rozwoju. Jeśli wiesz, że twój pracodawca chce iść z Kratownicą, zdobądź tablicę Kratownic.

Metody programowania są bardzo podobne, ale istnieją różne szczegóły. Na przykład różne narzędzia, różne opcje, różne interfejsy. Zazwyczaj, jeśli masz doświadczenie z jednym dostawcą, zmiana nie jest trudna. Ale prawdopodobnie chcesz uniknąć tej dodatkowej krzywej uczenia się.

Dopilnuję również, aby płyta zawierała elementy, których planujesz użyć lub które można rozszerzyć. Na przykład, jeśli chcesz zaprojektować urządzenie sieciowe, takie jak router, upewnij się, że płyta ma Ethernet PHY lub że można ją przedłużyć, powiedzmy, złącze HSMC itp.

Tablice zwykle zawierają dobre odniesienia, instrukcję obsługi i przykłady projektowania. Przestudiuj je.

Czytać książki

Będziesz musiał czytać książki. W moim przypadku nie miałem przyjaciół, którzy znaliby projektowanie cyfrowe, a ta strona nie była zbyt pomocna z powodu jednej prostej rzeczy - nawet nie wiedziałam, jak sformułować moje pytanie. Wszystko, co mogłem wymyślić, to „Uhm, chłopaki, jest coś dcfifo i słyszałem coś o wyzwaniach przekraczania domen zegarowych, co to jest i dlaczego mój projekt nie działa?”.

Osobiście zacząłem od tych:

Dostawcy FPGA mają wiele książek kucharskich z najlepszymi praktykami. Przestudiuj je wraz z projektami referencyjnymi. Tutaj przykład z Altera.

Wróć z bardziej szczegółowymi pytaniami

Przeglądając książki, symulując projekt, mrugając diodami LED na tablicy programistycznej, najprawdopodobniej będziesz mieć wiele pytań. Upewnij się, że nie widzisz odpowiedzi na te na następnej stronie książki lub w Internecie (tj. Na forum poświęconym konkretnej sieci) przed zapytaniem ich tutaj.

użytkownik8459
źródło
Bardzo dziękuję za tę szczegółową odpowiedź, naprawdę pomogło mi zobaczyć, jak mogę postępować. Niestety nie mam też przyjaciół, którzy mogliby mi pomóc. Ale właśnie uratowałeś mnie od wielu kłopotów i jeszcze raz wielkie dzięki !!!!
Anila
5
Doskonała odpowiedź.
Assad Ebrahim
W szkole nauczyliśmy się C ++, zanim nauczyliśmy się VHDL. Miałem wiele problemów ze zrozumieniem, ale momentem, kiedy wszystko kliknęło, było zrozumienie, że wszystko dzieje się w czasie rzeczywistym i równolegle (równolegle, nie asynchronicznie jak nodejs). Rozwój oprogramowania przebiega sekwencyjnie, ale w HDL wszystko dzieje się naraz (przez większość czasu). Jeśli masz coś takiego jak „x = 1; y = 2; y = x; x = y”, w SW, na końcu y będzie równe 1, w HDL, masz warunki wyścigu, ponieważ zarówno x jak i y spróbują zamieniają się w siebie w tym samym czasie. Pamiętaj o tym, a życie może być dla Ciebie łatwiejsze.
PGT
@PGT Oczekujesz, że wartość y będzie inna niż 1, jeśli „y” jest dostępne dla wielu procesów działających na jednym rdzeniu lub wielu rdzeniach, co może narzucić swoje uprawnienia słabszemu procesowi.
Adithya
1

Alternatywnie możesz użyć technik syntezy wysokiego poziomu, takich jak Vivado HLS Xilinx i rozwiązanie OpenCL firmy Altera. Może to zmniejszy twoją krzywą uczenia się języków opisu sprzętu, biorąc pod uwagę twoje oprogramowanie.

wojsko
źródło
-1

Najpierw naucz się podstaw projektowania cyfrowego. Maszyna Mealy / Moore, logika kombinatoryczna, tablica prawdy, mapa karnaugh i tak dalej. Rozpocznij tworzenie prostego projektu na schematach (licznik 7-segmentowy), a następnie naucz się HDL. W Europie VHDL jest używany, w amerykańskim Verilog. Wreszcie ważna jest synchronizacja, należy pamiętać, że sygnały mają opóźnienia, które są składowe natychmiastowe i zależą od temperatury, a każdy sygnał ma inne opóźnienie.

Książka do przeczytania: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

Znajomość składni języka Perfect jest na później, najpierw zrozumienie projektowania cyfrowego i problemów.

Rudzik
źródło
W Europie VHDL jest używany, w amerykańskim Verilog. W ogóle nieprawda ...
Matt Young
Rzeczywiście nauczyłem się Verilog i jestem z Wielkiej Brytanii. Jest to również język nauczany w jednym z modułów, które zrobiłem na uniwersytecie (również w Wielkiej Brytanii).
Tom Carpenter