Płyta pcie_ddr2_usb30_v5 evaluation board jest to rozwiązanie, które ze względu na charakter umowy zlecenia wykonania projektu może zostać tu opisane bardziej szczegółowo.
Parametry płyty
Projekt ten to 16-sto warstwowa płyta PCB która zawiera trzy układy FPGA firmy Xilinx oraz peryferia które razem tworzą system o następującej konfiguracji:
Interfejsy:
Przeznaczenie systemu
Ze względu na stopień zaawansowania przedstawiona tu płyta raczej nie nadaje się do użytku przez początkującego użytkownika. O ile średnio doświadczony projektant wirtualnych komponentów jest w stanie uruchomić niektóre z jej interfejsów, to w przypadku najbardziej wydajnej konfiguracji koszt tylko jednego układu FPGA to około 52.000 PLN. Na szczęście układ nadzorujący w wersji minimalnej to wydatek rzędu 6.000 PLN. Z takim układem, ale i z PCB oraz innymi zamontowanymi elementami można obsłużyć prawie wszystkie interfejsy znajdujące się na płycie. Pomijając kwestie finansowe i koncentrując się na projekcie płyty warto przedstawić ten projekt jako bardzo krótki raport z projektowania tego typu urządzeń.
Aby wykonać tego typu projekt potrzebne jest doświadczenie. Poza doświadczeniem bez którego trudno zaprojektować ta płytę potrzebny jest również odpowiedni komputer oraz oprogramowanie. Niestety nie zostanie tu dostarczony dowód na to, że aby zrealizować taki projekt trzeba wydać 10 tysięcy na sprzęt i 500 tyś na odpowiednie oprogramowanie. Owszem, jeżeli jest potrzeba zrobić to szybko oraz wymagane są dodatkowe analizy potrzebne do masowej produkcji projektu to koszt taki należy ponieść. W tym przypadku w projekcie najważniejsza była wydajność rozwiązania i jego niezawodność. Dlatego też nie koncentrowano się na okrojeniu ilości elementów do minimum, a starano się zapewnić pewien zapas, który powoduje, że wprawdzie koszt jednostkowy płyty wzrasta, jednak nie jest wymagane przeprowadzanie dodatkowych testów wymaganych przy projektowaniu płyt jak najtańszych.
Projekt został zrealizowany w oparciu o oprogramowanie Protel99SE z 1999 roku i na średniej klasie komputerze PC. Dosiadczonego projektanta może zdziwić ten wybór. Owszem. Dlaczego właśnie tak? Jest to spowodowane kilkoma czynnikami:
W wybranym oprogramowaniu nie korzystano z żadnych dostępnych funkcji symulacyjnych, autoplacer'a ani autorouter'a. Z tego to powodu projekt wymagał wykonania ponad 1.500.000 kliknięć na klawiaturze oraz myszy. W skład projektu weszły bowiem wielokrotne routowania tej samej ścieżki ale i dodatkowe prace związane z opracowaniem programów korygujących umożliwiająch zapewnienie Signal Integrity płyty.
Proces projektowania
Rozpoczęcie projektowania płyty sprowadza się do opracowania schematu blokowego z uwzględnieniem co jest niezbędne a co można pominąć. W tym przypadku schemat blokowy miał postać:
Na tej podstawie rozpoczęto równoczesne opracowywanie schematu ideowego oraz elementów biblioteki SCH i PCB. Równoczesność tego etapu wynika z faktu, że na tym etapie trzeba dokonać największej ilości analiz tego co ma być osiągnięte i jak to wykonać. Analizy te sprowadzają się do:
Następnie przystępuje się do tworzenia schematu szczegółowego z jednoczesnym tworzeniem elementów biblioteki PCB. W przypadku projektowania systemów opartych o układy FPGA głównym elementem projektowania schematów jest bilansowanie zasobów IO układu FPGA. Po tym etapie powstał zbiór 28 schematów z których jeden został przedstawiony w tym dokumencie:
Schematy nie posiadają jeszcze wszystkich kondensatorów blokujących i innych drobnych elementów. Spowodowane to jest tym, że nawet w mało zagęszczonym elementami projekcie wokół każdego interfejsu na PCB jest dostępna jedynie skończona przestrzeń do zagospodarownia przez elementy dodatkowe. Z tego to powodu dopiero w końcowej fazie prac nad PCB dobiera się odpowiednią ilość pojemności blokujących oraz innych elementów poprawiających parametry elektryczne płyty.
Po wstępnym zakończeniu prac nad schematami można wygenerować netlistę i wprowadzić wszystkie elementy na PCB. W tym projekcie użyto ponad 2000 elementów, których losowe upakowanie na arkuszu A4 ma postać:
Jak widać, ilość połączeń pomiędzy elementami jest ogromna. Dlatego też kolejnym etapem realizacji projektu jest rozmieszczenie pogrupowanie elementów w grupy interfejsowe. Jest to etap który rozpoczyna się od zgrubnego pogrupowania elementów, a kończy się na prawie docelowym położeniu większości elementów. Efekt końcowy tego etapu zależy od umiejętności uwzględnienia wszystkich połączeń które będą przebiegać przez analizowany obszar. Konieczne jest aby po tym procesie wszystkie złącza zewnętrzne i gabaryty płyty były ustalone. W porównaniu do losowego rozmieszczenia elementów w którym ilość połączeń wydaje się być nie do ogarnięcia, po końcowym ułożeniu ilość połączeń ulegną na ogół znacznemu usystematyzowaniu.
Poniżej znajduje się fragment tak przygotowanego PCB w obrębie głównego układu FPGA:
Przed przystąpieniem do routowania ścieżek pozostaje zapewnienie mechanizmu spełniającego wymagania czasowe projektu. W tym przypadku na podstawie czasu propagacji ścieżek, czasu przejścia pomiędzy warstwami, zmiennego czasu propagacji sygnału z pinu układu do jego wewnętrznej struktury i wielu innych przygotowano dla wszystkich krytycznych połączeń ścieżki kompensujące zapewniające stałą propagację sygnału dla danego interfejsu. Realizowane jest to w postaci automatycznie generowanych ścieżek widocznych na rysunku poniżej. W tym celu opracowano własny program który ingerował w plik projektu umieszczając w nim ścieżki o odpowiednich parametrach.
Jak widać wchodzą one w skład danego NETu jednak nigdy nie mogą zostać zroutowane. Dodatkowo w końcowym etapie projektowania muszą zostać usunięte z projektu.
W tak przygotowanym projekcie czas rozpocząć routowanie ścieżek. Po wielu kolejnych przybliżeniach otrzymuje kompletnie połączone elementy których widok dla tej płyty przedstawiono na kolejnych zdjęciach:
Routing głównego układu FPGA. Lewą część stanowi SuperSpeed'owy interfejs cyfrowy do układu USB3.0. Wyraźnie widać wyrównania ścieżek w celu zapewnienia zapewnienia właściwego czasu propagacji.
Całkowite połączenie USB3.0 do układu FPGA przedstawiono poniżej
Widać, że połączenie stanowi szereg spiralnych ścieżek. Ze względów konieczności zapewnienia właściwej impedancji charakterystycznej połączeń konieczne było przyjęcie stosu warstw:
Z tego to powodu doszło kolejne wymaganie polegające na konieczności redukcji przesłuchu pomiędzy sąsiadującymi warstwami. Jest to jeden z głównych powodów dla których w wszystkie ścieżki zostały poprowadzone ręcznie. Dla połączenia USB3.0 z układem FPGA dwie warstwy sygnałowe mają postać:
Podobnie problem wygląda w przypadku połączenia układu FPGA z pamięciami DDR2 SODIMM. Kompletnie zroutowany układ ma postać:
W tym przypadku dwie sąsiadujące warstwy posiadają następujący topologie połączeń:
W przypadku DDR2 wymagania co do jakości połączeń powodują, że pojedyncza przelotka na linii sygnałowej wprowadza offset na linii który dla najszybszych pamięci wykracza poza dopuszczalne wartości.
Ze względu na inny typ układów dodatkowych FPGA i inną ich obudowę nie było możliwe wykorzystanie wykonanego routowania dla układu podstawowego dla interfejsu DDR2. Konieczne było zaprojektowania topologii ścieżek od nowa. Osiągnięty efekt ma postać:
W przypadku wszystkich przedstawionych tu interfejsów DDR2 widać liczne kondensatory blokujące na napięciu zasilania, odniesienia i referencyjnym dla połączenia DDR2-FPGA
Kolejnym bardzo wymagającym interfejsem płyty jest 8-parowy PCIE. Jego topologia ma postać:
Pod układami wyrównania jitter'u i układami zasilania linii GTX układu FPGA widać połączenia różnicowe linii TX i RX interfejsu PCIE. Wyrównanie połaczenia osiągnięto na poziomie mniejszym niż 1mils
W przypadku interfejsu MAC1G, poza wyrównaniem ścieżek konieczne było wprowadzenie separacji galwanicznej linii sygnałowych interfejsu Ethernet. Na rysunku dodatkowo widać fragment zasilania +5V w postaci tzw polygon'u. W innych rysunkach w celu większej przejrzystości polygon'y zostały zamaskowane.
Wydawać się może że na tym etapie proces projektowy się kończy. Na ogół jednak projekt wymaga wykonania PCB i jego stopniowego uruchamiania. W przypadku prototypowego PCB koniecznie należy zmontować na płycie zasilania, wykonać niezbędne pomiary, a dopiero kolejnym krokiem jest montowanie czułych układów scalonych. W tym przypadku montaż rozpoczęto od zamontowania głównego układu FPGA.
Kolejnym krokiem było uruchomienie zasilań i montaż pozostałych składowych płyty. Po tym etapie w ręce użytkownika oddana została płyta do które w zależności od potrzeb wlutowane będą wymagane przez odbiorce dodatkowe układy FPGA.