Jak uzyskać projekt procesora na FPGA


20

Niedawno odbyłem długą podróż samouczącej się logiki. Końcowym produktem tego jest funkcjonalny 16-bitowy procesor, który działa dokładnie tak, jak został zaprojektowany w symulatorze . Teraz zacząłem zastanawiać się nad możliwością umieszczenia go w krzemie za pomocą FPGA. Wiem, że będę musiał wprowadzić wiele zmian na arenie wejścia / wyjścia (rzeczywisty świat różni się od środowiska symulacji) i odkryłem, że projekt wykonałem całkowicie w programie, który nie eksportuje list sieciowych ani kodu HDL więc wszystko, co naprawdę mam, to schemat.

Ale zakładając, że w jakiś sposób doszedłem do punktu, w którym mam netlistę lub kod HDL mojego projektu, jaki jest mój następny krok, aby wprowadzić go do krzemu? Na razie to, co przeczytałem, wygląda na to, że FPGA jest moim rozwiązaniem, ale patrząc na strony Xilinx i Altera, kręci mi się w głowie. Czy szczekam na niewłaściwym drzewie? Zasadniczo szukam prostego angielskiego opisu tego, co jest kolejnym krokiem dla faceta z funkcjonalnym schematem procesora. Gdy już wiem, w jakim kierunku pójść, mogę złamać książki i dowiedzieć się wszystkiego, co muszę wiedzieć o tym, jak się tam dostać. Również uwaga: korzystam z systemu Mac OS X, ale mam okno XP systemu Windows, które mogę podłączyć, jeśli to absolutnie konieczne.


Jaki program nie zrobić swój projekt w? Mogą istnieć zewnętrzne konwertery.
Connor Wolf,

Odpowiedzi:


17

Gratulacje na temat twojego procesora. Tak, FPGA jest zdecydowanie kolejnym krokiem. Ale nie bardzo wiesz, co powoduje, że kręci Ci się w głowie. Przypuszczam, że to duża liczba różnych urządzeń w ofercie. Nie mówisz też, jakiego symulatora używasz.
Podczas syntezy projektu syntezator powinien przekazać raport na temat wykorzystanych zasobów , takich jak liczba bramek i pamięci RAM. To powinno dać ci pojęcie, które części są odpowiednie dla twojego projektu. Upewnij się, że masz wystarczającą ilość miejsca . Wybierz część, która ma dodatkową pamięć RAM , której będziesz potrzebować do wykonywania programów na swoim CPU.

edytuj (ponownie komentarz)
Potrzebujesz systemu programistycznego dla konkretnego producenta. Altera i Xilinx są wielkimi graczami i obaj mają swoich wierzących. Który wybierzesz nie jest tak ważny, oba mają wystarczająco dużo różnych części, aby zaspokoić twoje potrzeby.
Jeśli zdecydujesz się na Xilinx, ma on swoje oprogramowanie ISE WebPACK Design , które jest bezpłatne (duże pobranie o 3,4 GB). Ograniczenia w porównaniu z bardziej zaawansowanymi wersjami oprogramowania nie powinny cię teraz niepokoić.
Następnie potrzebujesz tablicy rozwoju. Musisz mieć pojęcie o tym, jaki układ FPGA musisz wybrać. Jeśli wybierzesz Xilinx, wybrałbym Spartana, może Spartan-6, Virtex jest już zbyt wysokiej klasy IMO. Nadal jest bardzo wielu, głównie różniących się dodatkami na planszy. Potrzebujesz tablicy z nieco więcej niż kilkoma przełącznikami i diodami LED. Chciałbym poszukać złącza klawiatury i modułu wyświetlacza.
Xilinx ma wiele płyt, a dla FPGA Xilinx są też Digilent , Avnet , Xess i wiele innych.

Więc porównaj kilka płyt (cena też będzie odgrywać rolę, jak przypuszczam) i pobierz oprogramowanie dla FPGA, którego planujesz użyć. Zsyntetyzuj swój projekt, aby sprawdzić, czy będzie pasował do wybranego układu FPGA, a następnie będziesz gotowy do zakupu płyty wokół tego układu FPGA.

Zapomniałem powiedzieć trochę o FPGA. FPGA to w zasadzie duży zbiór bramek z programowalnymi połączeniami między nimi, dzięki czemu możesz stworzyć z nimi prawie każdą funkcję / system logiczny. Przez kilka pokoleń układy FPGA stały się bardziej zaawansowane i mają teraz zoptymalizowane bloki do wydajnego tworzenia funkcji takich jak RAM. Syntezator oprogramowania programistycznego tworzy schemat połączeń między bramkami. Nie jest to na stałe zapisane w FPGA, ale musi zostać załadowane po włączeniu zasilania z zewnętrznej pamięci Flash konfiguracji. Tam właśnie będzie przechowywany twój projekt. Jak każda inna pamięć Flash, można ją wymazać i przepisać wiele razy.


Użyłem Logisim, co jest fantastyczne dla schematów, ale brakuje mu metody wyprowadzania niczego poza obrazami (png, jpeg itp.). Jeśli chodzi o zamieszania związane z FPGA, to częściowo kwestia szerokiej gamy urządzeń, ale też nie znajduję zasobów, które wyjaśniłyby podstawy i podstawy. Jeśli umieszczę tam mój procesor, jak będzie on współdziałał ze światem zewnętrznym? Jakiego sprzętu potrzebuję? Czy mogę wielokrotnie programować FPGA? itd. itd. itd. To naprawdę tylko brak znajomości tematu. Chyba potrzebuję przewodnika dla początkujących, ale nigdzie go nie znajduję.
Rory O'Hare

2
Twoje pytania w kolejności: 1) Interfejsy FPGA ze światem zewnętrznym za pośrednictwem pinów I / O. Różnica polega na tym, że możesz wybrać piny, w przeciwieństwie do dedykowanych układów. 2) Możesz zacząć od zestawu startowego, zestawu rozwojowego lub podobnego. Będzie miał FPGA, niektóre złącza we / wy i zasilacze na pokładzie. Większość obejmuje również programistę; jeśli nie zapomni się go zdobyć. 3) Tak, możesz przeprogramować FPGA. Program jest przechowywany na chipie w zasadniczo gigantycznym rejestrze przesuwnym. Po uruchomieniu dedykowana maszyna stanu lub źródło zewnętrzne ładuje ją do układu.
Mike DeSimone,

9

Nie znam narzędzi Xilinx, ale znam narzędzia Altery, więc opowiem wam o ich narzędziach. Xilinx i inni nie powinni być zbyt różni.

Verilog

Pierwszą rzeczą, którą musisz zrobić, to nauczyć się Verilog . Spowoduje to ból głowy, ponieważ Verilog (i nieco podobny VHDL) został po raz pierwszy zaprojektowany jako język symulacji i wiele konstrukcji (jak #5co oznacza „poczekaj 5 kroków czasowych”, przy czym krok czasowy to zwykle nanosekunda). Istnieje więc wiele ograniczeń, o których należy pamiętać, aby kod Verilog mógł zostać zsyntetyzowany , tj. Skompilowany do strumienia bitów dla układu FPGA.

Największym szokiem jest to, że to, co piszesz w Verilog (i VHDL), to zachowanie, którego oczekujesz od systemu , a kompilator wyprowadza właściwą logikę z twojego opisu. Jeśli nie jesteś ostrożny, możesz uzyskać wiele nieprzyjemnych błędów.

Na przykład przerzutnik D wygląda następująco:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Opisuje to, w jaki sposób działa DFF, a kompilator musi go przeanalizować i ustalić, czy chcesz mieć DFF. @(...)Nazywa się listę czułość , która jest listą sygnałów, które wywołują ponowną ocenę bloku kodu; dlatego w tym bloku Qzmienia się tylko wtedy, gdy występuje zbocze narastające na RESETlub CLK(dotyczy to resetu z aktywnym wysokim). Jeśli zapomnisz coś na liście czułości (który powinien zawierać wszystkie zmienne prawo do rąk bez żadnych ubocznych posedgelub negedgemodyfikatory dla kombinowanych bloku logicznego) kompilator syntezy zatrzaski, ile potrzeba, a nie wywołanie błędu. Szalony, ale tak właśnie jest, ponieważ Verilog był pierwotnie językiem symulacji, który ukrywał (a zatem nie wymagał) szczegółów implementacji. VHDL jest taki sam, ale o wiele bardziej szczegółowy.

W końcu nowa wersja Verilog o nazwie SystemVerilog została wydana kilka lat temu, co znacznie ułatwia pisanie kodu syntezowalnego . Jeśli to w ogóle możliwe, naucz się tego języka, ponieważ Xilinx ISE i Altera Quartus II go obsługują. Głównym problemem jest całkowity brak dobrego materiału referencyjnego.

Wersja DFF SystemVerilog usuwa kilka drobnych rzeczy:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Zauważ, że sygnały na liście czułości są oddzielone przecinkami. Jest tak, ponieważ orbyło mylące, ponieważ andnie mogło tam pracować. Zwróć także uwagę na zastąpienie 1'b0(pojedynczego 0bitu) '0znakiem (symbol, który rozwija się do 0wymaganej liczby bitów w zależności od tego, do czego jest przypisany; znacznie bardziej elastyczny dzięki parametryzowanym modułom). Na koniec zwróć uwagę na zastąpienie always(które może być użyte do czegokolwiek; kombinacja logiki, zatrzasków i klapek), always_ffktóre wymaga syntezy zawartości do klapek. Istnieje również opcja, always_combktóra eliminuje listę czułości, ponieważ po prostu opracowuje ona czułości od wejść do bloku.

Oprogramowanie do projektowania Altera nazywa się Quartus II i będziesz szukał Web Edition . (Wersje subskrypcyjne są dość drogie i potrzebne tylko w przypadku najszybszych lub najnowszych modeli FPGA).

Smutne jest to, że nie znalazłem dobrej książki na ten temat. Czego się nauczyłem, składając rzeczy z wielu źródeł, takich jak książki Verilog, które nie radzą sobie z mówieniem, co można syntetyzować, a co nie, i przykładowy kod. Quartus II ma polecenie „wstaw szablon”, które wstawia kod szablonu dla kilku popularnych struktur, od D przerzutników do maszyn stanu.

Sprzęt demonstracyjny

Po zaimplementowaniu procesora w Verilog musisz go zbudować. Na razie pozwól, aby Quartus wybrał układ (musisz wybrać rodzinę; polecam Cyclone IV) i pinouty. Gdy to się stanie, będziesz wiedział, ile potrzebujesz chipa. Powie ci ile elementów logicznych, przerzutników, bitów RAM itp. Użyłeś. Upewnij się, że nie masz ponad 50% na żadnym z nich; jeśli tak, spójrz na układ wybrany przez kompilator i ręcznie wybierz następny większy układ (w elementach logicznych), który ma co najmniej tyle pinów, i powtarzaj, aż do wykorzystania poniżej 50%.

Następnie wybierz płytę demonstracyjną, która ma układ co najmniej tak duży, jak ten, który w końcu zbudowałeś. Sprawdź, czy ma potrzebne urządzenia peryferyjne i / lub złącza we / wy. Często zdarza się, że budowana jest karta dodatkowa, która podłącza się do złącza rozszerzającego, aby zapewnić brakujący sprzęt.

Teraz, gdy wybrałeś sprzęt, znajdź prawdziwe wyprowadzenia i użyj narzędzia Pin Planner, aby umieścić odpowiednie sygnały na odpowiednich wyprowadzeniach. Płytka demonstracyjna będzie zawierała instrukcję użytkownika, która informuje, które piny są podłączone do poszczególnych urządzeń lub styków złącza na płycie demo.

Po ustawieniu pinoutów zbuduj go ponownie, aby używał pinów, które chcesz. Należy pamiętać, że niektóre sygnały, takie jak zegary systemowe, będą wymagały dedykowanych pinów wejściowych (więc kierują bezpośrednio do wewnętrznych PLL).

Skorzystaj z programatora, aby pobrać swój projekt bezpośrednio do FPGA (tego rejestru przesuwnego, o którym wspominałem jakiś czas temu). Teraz jesteś w znanym cyklu debugowania edycji i kompilacji. Pobijaj, aż zadziała.

Gdy to zadziała, możesz użyć programatora do pobrania kodu do wbudowanego urządzenia konfiguracyjnego, aby Twój program załadował się i uruchomił po włączeniu.

To było dość długie i mam nadzieję, że trochę pomogło. Jest wiele do nauczenia się; to nie jest tak, jak nauka nowego języka programowania, tak jak nauka nowego paradygmatu programowania, np. przejście z języków proceduralnych na funkcjonalne. Verilog to język symultaniczny; większość kodu jest zawsze wykonywana.

Powodzenia!


Świetnie, to bardzo pomocne. Żeby to sprawdzić, słyszałem o przechwytywaniu schematów. Czy to wykonalna alternatywa dla nauki verilog? Nauczę się tego, jeśli będę musiał, ale jeśli nie będzie to w 100% konieczne, wolałbym nie dodawać go do ogromnej listy rzeczy, które już muszę wymyślić. Dzięki wielkie.
Rory O'Hare,

Szczerze mówiąc, nie bardzo. Jednym wielkim problemem jest to, że jesteś na łasce programu do przechwytywania schematów: jeśli zajmie się twoim schematem i wygeneruje niepoprawny Verilog, co możesz zrobić? Podczas gdy pisanie Verilog da ci niezbędne uprawnienia do naprawienia wszystkich błędów. Głównym powodem jest jednak to, że istnieją rzeczy, których nie można zrobić przy pomocy schematu, tak jak Verilog: sparametryzowane moduły oraz dzielenie i łączenie szyn to te, które natychmiast przychodzą na myśl.
Mike DeSimone

1
Czy są jakieś narzędzia, które mogą zmienić nieco bardziej „opisowy” język w Verilog lub VHDL (np. Jeśli chcę, aby net Z był flip-flopem, którego dane wejściowe są kombinacją A, B i C, które są asynchronicznie resetowane podczas C i D są prawdziwe, fajnie byłoby móc powiedzieć coś takiego, Z:= A & (B # C); Z.ar = C & D;nie martwiąc się o listy wrażliwości itp .).
supercat

Altera Quartus pozwala wprowadzić projekt jako schemat lub AHDL (wersja VHDL Altera), lub dowolną ich kombinację, prawdopodobnie łącznie z innymi HDL. (będąc staroświeckim, użyłem głównie schematu dla moich projektów CPLD i FPGA, z niewielkim AHDL.)
Peter Bennett

Żeby było jasne, AHDL nie jest wersją VHDL. Zarówno VHDL, jak i Verilog są językami wnioskowania , w których kod opisuje zachowanie pożądanego obwodu, a kompilator musi wnioskować o implementacji na podstawie tego opisu zachowania. Jest to spuścizna po tym, że oba zaczęły jako języki symulacji i zostały ponownie wykorzystane do syntezy. AHDL jest językiem deklaratywnym , w którym deklarujesz prymitywy (np. Przerzutniki, tabele prawdy) i sposób ich połączenia, więc kompilator nie musi zgadywać. AHDL pochodzi z lat 80. i jest znacznie bliżej ABEL.
Mike DeSimone

5

Tak, FPGA są prawie na pewno Twoim rozwiązaniem!

Prawie na pewno będziesz musiał użyć jednego z języków opisu sprzętu lub ponownie wprowadzić schematy do innego narzędzia. Odradzałbym schematyczne podejście jako

  1. dostawcy narzędzi FPGA tak naprawdę nie wspierają ich dobrze
  2. Nie jest przenośny

Po napisaniu HDL, o ile nie wstawisz bezpośrednio z biblioteki dostawców za pomocą ich różnych „kreatorów IP” lub bezpośrednio wklejając komponenty z ich bibliotek, będziesz mieć kod, który możesz uczciwie przenieść na inne układy łatwo (o wiele bardziej niż na przykład przenoszenie wbudowanego edytora IM IM)

Ponadto masz znacznie lepsze środowisko testowania i sprawdzania poprawności, ponieważ możesz pisać testy, które „rozumieją” twoją funkcjonalność i mogą sprawdzać wyniki za Ciebie, zamiast patrzeć na przebiegi, aby sprawdzić, czy wszystko wygląda dobrze.

Duże 2 HDL to VHDL i Verilog. Możesz przeczytać tę odpowiedź na temat różnic między nimi ...

VHDL czy Verilog?

Powiedziałbym również, że MyHDL jest również warte obejrzenia, jeśli już znasz Python - daje ogromną możliwość weryfikacji, ale nadal większość kontroli niskiego poziomu, którą daje „normalna” HDL.

Po wybraniu HDL, a następnie uruchomieniu go (ponownie, przepraszam!) W symulacji, będziesz w stanie, w którym możesz przepchnąć go przez narzędzia dostawcy i nauczyć się następnego dużego fragmentu zadania - po symulacji poprawnie, zawsze jest więcej wysiłku, niż myślisz, aby go zsyntetyzować :)

Jeśli jesteś przywiązany do schematów i możesz uzyskać licencję, LabviewFPGA może ci odpowiadać.


3

Uzyskaj kopię Rapid Prototyping of Digital Systems autorstwa Hamblen i in .:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

Wykorzystuje głównie VHDL, który wolę od Verilog.

Zawiera bardzo prosty 8-bitowy procesor, uP3, który zaimplementowałem na własnym sprzęcie Altera FLEX 10K kilka lat temu, korzystając z wcześniejszego wydania książki. Przeniesię go na płytę Cyclone II o wartości 25 USD, kiedy wykonam płytkę drukowaną „na przednim panelu”. Zawiera także procesor MIPS i Altera NIOS II. Możesz przećwiczyć ćwiczenia uP3 w książce za pomocą bezpłatnych narzędzi Altera Quartus II, przepisać kod procesora w VHDL i uruchomić go na płycie Cyclone II. Alternatywnie, Quartus II ma wejście do schematu i powinieneś być w stanie bezpośrednio wprowadzić swój schemat, symulować go i uruchomić na Cyklonie II.


1

Jeśli trudność stanowi stroma krzywa uczenia się z umiejętnościami w zakresie narzędzi, wybierz najłatwiejszą ścieżkę. Actel (obecnie Microsemi) ma Libero , pakiet narzędzi FPGA, które wymagają zerowego odczytu i są łatwe do uruchomienia: natychmiast po zainstalowaniu. Możesz ręcznie stworzyć tam schematy i po kilku kliknięciach załadować go do fizycznej FPGA, ekrany na drodze do zrobienia tego są bardzo zrozumiałe.


0

Jeśli zdecydujesz się na naukę języka HDL, możesz wpływać na to, który język jest lepszy. W Europie VHDL jest bardziej popularny. W USA Verilog jest bardziej popularny, z wyjątkiem przemysłu obronnego, którym jest VHDL. (Departament Obrony USA pierwotnie stworzył VHDL) To oznacza tylko, że ludzie w pobliżu mogą lepiej pomagać w jednym lub drugim języku. Ale jeśli szukasz pomocy online, może to być nieistotne.

Inne książki do rozważenia to Rapid Prototyping of Digital Systems: SOPC Edition, który odnosi się do płyt Altera DE1 i DE2. Istnieje już wiele różnych komputerów przeniesionych do DE1 i DE2, aby dać ci wyobrażenie o tym, jak działają. Minimigtg68 (Amiga), FpgaGen (Sega Genesis) itp. Są przeniesione na tę tablicę, aby zobaczyć przykłady.

Jeśli pójdziesz na Xilinx, to teraz zajmuję się dwiema książkami. Prototypowanie FPGA według Verilog Przykłady: wersja Xilinx Spartan-3 Prototypowanie FPGA przez VHDL Przykłady: wersja Xilinx Spartan-3 Chociaż nie znam żadnej konkretnej płyty, którą byśmy polecili. Jestem podekscytowany planowaną wkrótce płytą FPGA Arcade, ale zapominam, czy będzie miała Xilinx czy coś innego.


0

Znalazłem ten wariant, który dalej rozwija Logisim, teraz nazywany Logisim Evolution. Zaimplementowali funkcję eksportu do VHDL ze schematów obwodu logicznego wbudowanego w logisim.

Można go znaleźć tutaj: https://github.com/reds-heig/logisim-evolution

Wiem, że to pytanie jest stare, ale pomogło mi to i mam nadzieję, że pomoże komuś innemu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.