fpga a SoC

0

Witam
Nie potrafię sobie wyobrazić jak układ fpga może zastąpić w początkowej fazie dewelopowania hardwaru SoC. Moje rozumienie FPGA jest takie, że to jest tylko programowalna macierz bramek, przerzutników, czyli np. mamy tam do dyspozycji bramki o 3 wejściach i 1 wyjściu i możemy sobie zrealizować dowolną funkcję logiczną w VHDLU. I nie bardzo rozumiem jak takie coś może nam zastąpić skomplikowane urządzenie jakim jest przetwornik ADC/procesor/kontroler UARTa gdzie jest mnóstwo tranzystorów, generator kwarcowy. Jak przecież my w FPDZe możemy tylko zrealizować zadanie w stylu - masz 10 wejść, 4 wyjścia i zrealizuj funkcję typu, że jak wejścia x,y,z są na 1, a,b,c na 0 to niech drugie wyjście będzie też na 1. Piszemy kod w VHDLu, następnie jest proces syntezy który spowoduje że da radę zrealizować taki układ kombinacyjny na bramkach o 3 wejściach i 1 wyjściu i wgrywamy to na fpgę.
Czy może fpga to nie tylko programowalna macierz bramek i przerzutników ale również tam jest generator kwarcowy, szereg przycisków itd?

0

No to może zwróć uwagę na www.opencores.org . Poczytaj sobie jakie tam są projekty, na czym polegają definicje szyn, jakie MCU/CPU są już zdefiniowane :-)
Ogólnie witamy w świecie FPGA :)

0

OK to może to jest tak, że tak naprawdę nie ma od razu jednego układu FPGA który zastępuje cały układ SoC bo ciężko by było od razu coś takiego napisać w VHDLu?
Tzn. chodzi mi o to, że załóżmy że w ASICu mamy kontroler I2C, urządzenia A i urządzenie B. I ktoś chce zrealizować to na fpdze.
To taki hardwarowiec najpierw bierze pod robotę kontroler I2C, pisze w VHDLu kod, robi syntezę i wgrywa to na układ FPGA np. taki jak w załączniku. Bloki I/O układu FPGA to są wejścia/wyjścia kontrolera I2C. Testuje za pomocą przycisków wejść FPGI czy symulowany kontroler UART poprawnie ustawia na wyjściach (diody) sygnały 1-0.
Następnie bierze pod robotę urządzenie A i pisze w VHDLu kod który opisuje to urządzenie, robi syntezę i wgrywa to na drugi układ FPGA. Bloki I/O układu FPGA to są wejścia/wyjścia tego urządzenia. Robi testy. Podobnie robi z urządzeniem B. Czyli taki hardwarowiec ma teraz 3 płytki FPGA, jedna z nich symuluje mu kontroler UARTa, druga urządzenie A, trzecia urządzenie B. Następnie dopiero w drugim etapie łączy kody VHDLa w jeden, robi syntezę i wgrywa to na układ FPGA.
Czy tak przebiega proces odwzorowania SoCa w fpdze? Że nie na raz się pisze wszystko w VHDLu dla całego SoCa tylko kawałkami? Wtedy rzeczywiście widzę możliwość, że można odwzorować wiele rzeczy w FPDZe.

1

Brakuje Ci znajomości podstaw i rysu historycznego, pozowól, że nakreślę.
Klasyczne układy cyfrowe realizowane były w oparciu o bramki logiczne, takie jak OR, AND, NOT, XOR itd.
W praktyce: stosowano najczęściej układy NAND oraz NOR z uwagi na fakt, iż są to systemy funkcjonalnie pełne (pozwalające zrealizować wszelkie możliwe operacje logiczne) a produkcja jednego typu bramki jest zwyczajnie ekonomiczne bardziej opłacalna (wyjątkiem jest tu często osobno spotykany XOR, jako że jest on często używaną operacją w optymalizacji funkcji logicznych).
Z tychże bramek konstruować można było różnego typu układy kombinacyjne, np. sumator:
https://upload.wikimedia.org/wikipedia/commons/5/55/Half_adder_using_NAND_gates_only.jpg
oraz. sekwencyjne asynchroniczne oraz synchroniczne. Dobrym przykładem prostego układu synchronicznego (asynchronicze pomijam celowo) jest przerzutnik D wyzwalany zboczem, symulacja tutaj:
http://www.falstad.com/circuit/e-edgedff.html
Zwróć uwagę, tam są jedynie bramki, nic więcej!

Z tychże klocków składano coraz to bardziej złożone struktury, często scalając je w jednym układzie, np. do zestawu przerzutników, bramek, liczników, rejestrów czy multiplekserów. Mikroprocesor to pewna "korona cyfrowego stworzenia", ale tak, dałoby się go teoretycznie odtworzyć z elementów dyskretnych. Z uwagi na nikłe scalenie takiej wersji pracowałby on pewnie zabójczo powoli, zajmował masę miejsca, pobierał ogromne ilości mocy podczas przełączania, był podatny na zakłócenia lub je generował z racji długości połączeń. Krótko mówiąc: w praktyce (z dzisiejszej perspektywy) byłby bezużyteczny, ale jako model dydaktyczny prezentujący mechanizmy działania byłby całkiem w porządku; podejrzewam też, że w starych komputerach procesory działające w oparciu o elementy dyskretne z powodzeniem (mniejszym lub większym) były używane.

Jaki jednak problem niosły ze sobą układy dyskretne? Najdrobniejsza zmiana funkcji logicznej to kosztowna zmiana dużej ilości hardware'u. W najprostszym przypadku - przelutowywanie połączeń, ale chcąc zrealizować zadanie zgodnie ze sztuką inżynierska często była to kwestia przeprojektowania płyty drukowanej, często z zastosowaniem innych układów scalonych. Koszty takiego przedsięwzięcia byłyby ogromne, stąd idea układów programowalnych, czy raczej konfigurowalnych.

Jak takowy układ wygląda? Tradycyjnie jest to matryca iloczyn/suma, vide https://en.wikipedia.org/wiki/Programmable_Array_Logic#/media/File:Programmable_Logic_Device.svg
czasami uzupełniona o przerzutnik na wyjściu oraz wejścia zegarowe.

Tego typu układów wyróżna się kilka rodzajów:
PLE (PROM): programowalna matryca sum. PROM, bo to w praktyce zachowuje się jak look-up table w pamięci adresowane wejściami.
PLA: programowalna matryca iloczynów. Dla dużej ilości wejść pozwala lepiej optymalizować funkcję logiczną.
PAL: programowalne sumy i iloczyny. Najbardziej elastycznie ale i najdrożej.

Pierwotnie te układy były konfigurowane jednorazowo przez przepalenie stosownych "bezpieczników". Technologia ta (z ang. "antifuse") - zdawać by się mogło, że wymarła - nadal jest z powodzeniem używana nawet w dużych układach stosowanych w aerospace vide: Actel. Zdawać by się mogło, że to niewielki zysk, ale nadal wymiana jednego "scalaka" była tańsza niż przeprojektowanie PCB.
Kolejnym etapem były wprowadzone przez Lattice'a układy GAL, czyli PAL z możliwością wielokrotnej konfiguracji.
Co ważne, wszystkie w/w układy były raczej dość nieskomplikowane, zawierały np. 8 wejść, tyleż wyjść, a ich schematy logiczne dawało się bezproblemowo zapisać na kartce.

Wzrost złożoności realizowanych cyfrowo zadań przyczynił się oczywiście do zwiększenia złożoności układów programowalnych.
Pojawiły się układy CPLD będące w praktyce rekonfigurowalnymi PLA o bardzo dużej złożoności wewnętrznej, zdolne do obsługi np. kilkudziesięciu wejść/wyjść.

Relatywnie najnowszym trendem (choć badania dowodzą, że z pktu widzenia optymalizacji funkcji często gorszym od CPLD, https://www.researchgate.net/publication/228661397_Synthesis_method_of_high_speed_finite_state_machines) są FPGA.
W praktyce FPGA jest układem PLE o dużej złożoności. Z uwagi na fakt, iż układy te są dość mocno lansowane przez producentów, z czasem dorobiły się dodatkowych submodułów, takich jak bloki DSP, PL, wbudowane kontrolery pamięci, czy wspomniany przez Ciebie blok analogowy (bez niego nie da się zaimplementować ADC... przynajmniej w prosty sposób).

Odpowiadając na pytanie postawione na początku: FPGA w podstawowej swej odsłonie to generalnie zestaw bramek o ogromnym stopnie scalenia, nic więcej. Tak jak procesor. Tyle, że ten drugi nie daje się w łatwy sposób rekonfigurować.

EDIT:
Tak, generalnie łączy się bloki, np. ALU, kontroler pamięci, UART, I2C itd.
Tyle tylko, że po drodze robi się naprawdę dużo ciężkich (obliczeniowo) symulacji tak czysto funkcjonalnych, jak i dotyczących czasów propagacji sygnałów przez układ. Dodatkowo przed skonfigurowaniem układu robi się tzw. routing, czyli ustala ścieżki łączące poszczególne funkcje logiczne wewnątrz układu w celu zoptymalizowania szybkości przepływu danych w układzie.
Jest to rzecz specyficzna dla FPGA, CPLD np. są deterministyczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1