Czy układ FPGA może być w większości (lub całkowicie) asynchroniczny?

39

Mieliśmy bardzo krótki kurs FPGA / Verilog na uniwersytecie (5 lat temu) i zawsze używaliśmy zegarów wszędzie.

Zaczynam ponownie od FPGA jako hobby i nie mogę przestać się zastanawiać nad tymi zegarami. Czy są absolutnie wymagane, czy też konstrukcja oparta na FPGA może być całkowicie asynchroniczna? Czy można zbudować złożoną wiązkę logiki i sprawić, by rzeczy przebiegały przez nią tak szybko, jak to możliwe?

Zdaję sobie sprawę, że jest z tym wiele problemów, takich jak wiedza, kiedy sygnał rozprzestrzenia się przez wszystkie części obwodu, a wyjście ustabilizowało się. Nie w tym rzecz. Nie chodzi o to, że chcę zbudować projekt całkowicie asynchroniczny, ale tylko po to, by lepiej zrozumieć moje możliwości.

Moim początkującym okiem wydaje się, że jedyną konstrukcją, która absolutnie wymaga zegara, jest reg, i rozumiem, że typowa FPGA (powiedzmy, Cyclone II) będzie miała przerzutniki wstępnie podłączone do określonych sygnałów zegara. Czy to jest poprawne? Czy istnieją inne niejawne zegary takie jak ten i czy zazwyczaj mogą być ręcznie sterowane przez projekt?

Roman Starkov
źródło
3
Wiem, że Simon Moore z uniwersytetu w Cambridge przeprowadził wiele badań dotyczących projektowania asynchronicznego, w tym wyprodukował chip testowy. Wymaga zupełnie nowego zestawu narzędzi projektowych i ma dziwne skutki uboczne: na przykład szybkość wykonania odwrotnie proporcjonalna do temperatury.
pjc50,

Odpowiedzi:

27

Krótka odpowiedź brzmiałaby: tak; dłuższa odpowiedź brzmiałaby: nie warto poświęcać czasu.

Sam układ FPGA może działać całkowicie asynchronicznie bez problemu. Rezultat jest problemem, ponieważ czas przez FPGA nie jest bardzo przewidywalny. Większy problem polega na tym, że Twoje wyczucie czasu i wynikowy projekt prawie na pewno będą się różnić w różnych sesjach miejsca i trasy. Możesz nakładać ograniczenia na poszczególne ścieżki asynchroniczne, upewniając się, że nie trwają one zbyt długo, ale nie jestem pewien, czy możesz określić minimalne opóźnienie.

W końcu oznacza to, że Twój projekt będzie nieprzewidywalny i potencjalnie całkowicie zmienny, nawet przy niewielkiej zmianie projektu. Będziesz musiał przejrzeć cały raport czasowy za każdym razem, gdy cokolwiek zmienisz, aby upewnić się, że nadal będzie działał. Z drugiej strony, jeśli projekt jest zsynchronizowany, po prostu szukasz podania lub niepowodzenia na końcu miejsca i trasy (przy założeniu, że twoje ograniczenia są ustawione poprawnie, co wcale nie zajmuje dużo czasu).

W praktyce ludzie dążą do całkowicie zsynchronizowanych projektów, ale jeśli potrzebujesz po prostu buforować lub odwracać sygnał, nie musisz przechodzić przez flip-flop, o ile odpowiednio go ograniczasz.

Mam nadzieję, że to trochę wyjaśni.

Andrey
źródło
3
Musiałem użyć niektórych urządzeń z asynchronicznymi układami FPGA. Ciężko było z nimi pracować. Proszę przynajmniej użyć ograniczeń czasowych
Tim Williscroft,
1
Chociaż prawdą jest, że możliwe jest implementowanie projektów asynchronicznych z układem FPGA, większość układów FPGA jest zbudowana tak, aby obsługiwać projekty szczególnie synchroniczne. Mają mnóstwo zasobów (PLL, obwody dystrybucji zegara i ogromną liczbę przerzutników), które zostaną zmarnowane w asynchronicznej konstrukcji.
Dmitrij Grigoryev,
2
Ta odpowiedź nie zapewnia szczególnie dobrych porad. Możesz stworzyć FPGA bez zegara, który faktycznie upraszcza miejsce i trasę, usuwa mnóstwo problemów związanych z wymaganiami dotyczącymi czasu, a ze względu na drobnoziarnisty rurociąg może mieć znacznie większą przepustowość. Prawdziwy problem pojawia się, gdy próbujesz odwzorować taktowany obwód na bezigłowy układ FPGA, ponieważ mają one bardzo różne charakterystyki czasowe. Można to zrobić, po prostu wymaga nieco więcej przetwarzania front-end, aby wykonać konwersję. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Ned Bingham
20

„Czy można zbudować złożoną logikę i sprawić, by rzeczy przebiegały przez nią tak szybko, jak to możliwe?” Tak. Zbudowano całe procesory, które są całkowicie asynchroniczne - przynajmniej jeden z nich był najszybszym procesorem na świecie. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

Denerwuje mnie, że ludzie odrzucają techniki projektowania asynchronicznego, chociaż teoretycznie mają kilka zalet w stosunku do technik projektowania synchronicznego, tylko dlatego, że (jak powiedzieli inni tutaj) projekty asynchroniczne nie są tak dobrze obsługiwane przez dostępne narzędzia.

Dla mnie to jak zalecenie, aby wszystkie mosty były wykonane z drewna, ponieważ więcej osób ma narzędzia do obróbki drewna niż narzędzia do obróbki stali.

Na szczęście niektóre zalety projektowania asynchronicznego można uzyskać, stosując nadal głównie techniki projektowania synchronicznego, stosując globalny projekt asynchronicznej synchronizacji lokalnej (GALS) .

Davidcary
źródło
Tak samo myślę o nowoczesnej tendencji do kierowania obwodów drukowanych na kwadratowej siatce , chociaż korzyści płynące z migracji są znacznie mniej znaczące.
Roman Starkov
@romkyns - Jest to bardziej związane z faktem, że pisanie oprogramowania PCB, które wykorzystuje nieprostoliniowe siatki, jest trudne .
Connor Wolf,
1
@supercat: Podejrzewam, że jesteś nawiązując do logiki cztery fazy . Jest to jeden z sygnałów zegara wielofazowego , który wydaje się być zapomniany.
davidcary,
1
@davidcary: W pewnym sensie, z wyjątkiem obu „faz” na jednym przewodzie - jedna faza jest kontrolowana przez zbocze narastające, a druga przez zbocze opadające. Zasadniczo podzieliłem zegary zatrzaskowe na cztery kategorie: czysty wzrost, czysty spadek, późny wzrost, późny opad. Zatrzaski taktowane przez (L / CB) czyste zbocze narastające lub opadające może pobierać dane z każdego zbocza narastającego lub opadającego. L / CB późny zbocze narastające może pobierać dane z L / CB czystego zbocza narastającego każdego zbocza opadającego. L / CB przez późne opadanie krawędzi może pobierać dane z L / CB czystego spadku lub jakiegokolwiek wzrostu.
supercat
1
@davidcary: Pod warunkiem, że najszybszy czas propagacji dla dowolnego zatrzasku przekracza najdłuższy czas wstrzymania i pod warunkiem, że najdłuższa ścieżka sygnału od krawędzi zegara, przez logikę bramkowania zegara i „późne” zatrzaski wywołane przez tę krawędź, do dowolnego zatrzasku wywołanego przez po zboczu nie przekracza minimalnego czasu między zboczami zegara, uważam, że taki projekt powinien być całkowicie niezawodny i wolny od generowanej wewnętrznie metastabilności w dowolnej kombinacji opóźnień propagacji.
supercat
5

Jednym z niewymienionych jeszcze czynników jest metastabilność. Jeżeli obwód zatrzaskowy zostanie uderzony sekwencją wejścia / przejścia, tak że stan wynikowy będzie zależał od opóźnień propagacji lub innych nieprzewidzianych czynników, nie ma gwarancji, że stan wynikowy będzie czysty „wysoki” lub „niski”. Rozważmy na przykład przerzutnik uruchamiany zboczem, który obecnie generuje „niski”, a jego wejście zmienia się z niskiego na wysoki prawie w tym samym czasie, gdy pojawia się zbocze zegara. Jeśli krawędź zegara wydarzy się wystarczająco długo przed zmianą wejścia, wyjście po prostu pozostanie niskie do następnej krawędzi zegara. Jeśli krawędź zegara wydarzy się wystarczająco długo po zmianie wejścia, wyjście szybko przełączy się raz z niskiej na wysoką i pozostanie tam do następnej krawędzi zegara. Jeśli żaden z tych warunków nie ma zastosowania,. Może pozostać na niskim poziomie lub szybko przełączyć raz i pozostać na wysokim poziomie, ale może pozostać na niskim poziomie przez pewien czas, a następnie przełączyć się lub przełączyć, a następnie jakiś czas później przełączyć się z powrotem lub kilka razy w przód iw tył itp.

Jeśli konstrukcja jest w pełni zsynchronizowana, a wszystkie wejścia są podwójnie zsynchronizowane, jest bardzo mało prawdopodobne, aby impuls taktowania uderzył w pierwszą zatrzask synchronizatora w taki sposób, że spowodowałby przełączenie w idealnym momencie w celu pomylenia drugiego zatrzask. Ogólnie rzecz biorąc, takie rzeczy można uznać za „po prostu się nie wydarzy”. Jednak w przypadku projektowania asynchronicznego często znacznie trudniej jest uzasadnić takie rzeczy. Jeśli zostanie naruszone ograniczenie czasowe w obwodzie zatrzaskowym (nie tylko klapki, ale dowolna kombinacja logiki, która działałaby jak zatrzask), nie wiadomo, co zrobi wyjście, dopóki następnym razem nie będzie prawidłowego warunku wejściowego, który wymusi zatrzask do znanego stanu. Jest całkowicie możliwe, że opóźnione wyjścia spowodują naruszenie ograniczeń czasowych wejściowych danych wyjściowych, co prowadzi do nieoczekiwanych sytuacji,

Najbezpieczniejszym sposobem na modelowanie obwodu asynchronicznego byłoby, aby prawie każdy obwód wyjściowy wytwarzał wyjście „X” przez chwilę, gdy przełącza się między „0” a „1”. Niestety takie podejście często powoduje, że prawie wszystkie węzły pokazują „X”, nawet w przypadkach, które w rzeczywistości prawie na pewno doprowadziłyby do stabilnego zachowania. Jeśli system może działać, gdy symulowane jest, że wszystkie wyjścia stają się „X” natychmiast po zmianie danych wejściowych i pozostają „X”, dopóki sygnały wejściowe nie będą stabilne, to dobry znak, że obwód będzie działał, ale doprowadzi obwody asynchroniczne do pracy z takimi ograniczeniami jest często trudne.

supercat
źródło
4

Oczywiście, jeśli twoje wymagania projektowe są na tyle powolne, że wiele wewnętrznych opóźnień wciąż jest o rząd wielkości dłuższych niż czasy, na których ci zależy, to nie jest to problem, i możesz spojrzeć na raport czasowy, aby mieć to na uwadze, ale istnieje ograniczenie tego, co możesz zrobić bez informacji o stanie wewnętrznym. Jeśli chcesz zrobić coś w rodzaju multipleksera 100 wejściowego, to dobrze, pamiętaj tylko, że każde wejście będzie miało inne opóźnienie propagacji. W rzeczywistości możesz uzyskać ciekawe i chaotyczne efekty z dużą liczbą nieprzewidywalnych opóźnień oscylujących pętli sprzężenia zwrotnego - być może w pełni asynchroniczny syntezator oparty na FPGA może być następnym „analogiem”.

mikeselectricstuff
źródło
4

Tak, możesz. Możesz całkowicie zignorować klapki i zbudować je z LUT. I / lub możesz użyć elementów stanu większości układów FPGA Xilinx jako zatrzasków (wyzwalanych przez poziom) zamiast przerzutników (wyzwalanych przez krawędź).

Martin Thompson
źródło
3
Niebezpieczeństwo polega na tym, że jeśli nie ograniczy się kompilatora logiki, może on wygenerować logikę, która ma ujemny czas propagacji dla niektórych bramek. Na przykład, jeśli ktoś określi X=(someComplexFormula)i Y=X & Doraz jeśli kompilator podstawi tę formułę na X i stwierdzi, że X & Djest ona równoważna A & D, kompilator może zastąpić obliczenia Y pod względem A i D, a nie pod względem X, umożliwiając w ten sposób obliczenie Y postępować szybciej niż X. Takie podstawienia są ważne w logice kombinatorycznej, ale sieją spustoszenie w asynchronicznej logice sekwencyjnej.
supercat
@ supercat - Nigdy nie pracowałem z narzędziami Xilinx, ale kiedy pracowałem z układami FPGA Altera, zawsze miałeś możliwość określenia dowolnych ścieżek krytycznych jako podłączone moduły bramkowe zamiast w RTL, w którym to momencie wszelkie takie optymalizacje są wyłączone.
Jules
@Jules: Wszystkie moje projekty logiki programowalnej używały Abla, który jest nieco głupim językiem, ale umożliwia określenie rzeczy w sposób, w jaki niektóre CPLD mogą zaimplementować, ale które mogą stwarzać trudności dla narzędzia do syntezy VHDL lub Verilog. Na przykład w jednym z moich projektów wykorzystałem fakt, że części Xilinx mają zegar, zestaw asynchroniczny i reset asynchroniczny, aby zaimplementować rejestr przesuwny ładowany asynchronicznie. Jeśli muszę robić takie rzeczy w FPGA, ponieważ nigdy nie korzystałem z Verilog lub VHDL, jak mam się dowiedzieć, co jest potrzebne do tego? BTW, jeśli pamięć służy, użyłem
klap
... taktowanie było takie, że zapis asynchroniczny mógł wystąpić tylko wtedy, gdy sygnał wejściowy T byłby niski, przy założeniu, że jeśli w pobliżu początku impulsu zapisu pojawiłby się zegar zerowy, zapis asynchroniczny byłby wystarczająco daleko poza nim, ponieważ aby zapewnić stabilną wartość, a jeśli zegar zerowy wystąpi pod koniec, po prostu zatrzaskuje się nadal stabilną wartość. Nie jestem pewien, jak można skutecznie poradzić sobie z takimi przypadkami w VHDL lub Verilog.
supercat
@ supercat - biorąc podobny problem, patrząc na Podręcznik urządzenia Cyclone IV Widzę, że najlepszym podejściem do tego samego problemu byłoby użycie opcji „Obciążenie synchroniczne dla całego LAB” („LAB” to grupa 16 elementów logicznych , więc jeśli rozmiar takiego rejestru nie będzie wielokrotnością 16 bitów, wówczas niektóre bity zostaną zmarnowane, ale i tak wydaje się to najbardziej użyteczną opcją). Mam teraz dwie opcje: mogę napisać funkcjonalny verilog, który będzie wymagał narzędzia do syntezy, aby wybrać sposób implementacji wymaganego rejestru (który byłby zwykle najlepszą opcją) lub, jeśli mam ścisłe wyczucie czasu ...
Jules
3

Jak zauważył @Andrey, nie warto poświęcać czasu. W szczególności narzędzia tego nie robią, więc byłbyś całkowicie sam. Ponadto, ponieważ mają one wbudowane rejestry, nie uratujesz niczego, nie używając ich.

Brian Carlton
źródło
3

Naprawdę istnieją TRZY rodzaje wzorów.

  1. Kombinatoryczny. Nie ma zegarów ani ścieżek sprzężenia zwrotnego, a system nie ma „pamięci”. Gdy jedno lub więcej danych wejściowych się zmienia, zmiany falują w logice. Po pewnym czasie wyjście ustala się w nowym stanie, w którym pozostaje, dopóki dane wejściowe nie ulegną zmianie.
  2. Synchroniczny sekwencyjny. System zbudowany jest z rejestrów i bloków logiki kombinatorycznej, rejestry są taktowane niewielką liczbą (często 1) zegarów. Jeśli istnieje wiele zegarów, mogą być potrzebne specjalne środki ostrożności w przypadku sygnałów przechodzących z jednej dziedziny zegarowej do drugiej.
  3. Sekwencja asynchroniczna. Istnieją ścieżki sprzężenia zwrotnego, zatrzaski, rejestry lub inne elementy, które dają pamięć projektową przeszłych zdarzeń i które nie są taktowane przez łatwo analizowane linie zegarowe.

Ogólnie rzecz biorąc, podczas syntezy / optymalizacji logiki kombinatorycznej narzędzia przyjmą, że najważniejsze jest to, jaki jest ostateczny wynik i maksymalny czas potrzebny do osiągnięcia tego wyniku.

Możesz zbudować projekt, który będzie czysto kombinatoryczny i uzyska właściwy wynik. Wyjścia mogą się zmieniać w dowolnej kolejności i mogą zmieniać się kilka razy przed osiągnięciem ostatecznych wartości. Takie projekty są bardzo marnotrawstwem zasobów logicznych. Większość elementów logicznych spędza większość czasu bezczynnie, podczas gdy w systemie sekwencyjnym można było ponownie wykorzystać te elementy do przetwarzania wielu elementów danych.

W sekwencyjnym systemie synchronicznym liczy się tylko to, że wyjścia bloku kombinatorycznego ustabilizowały się do prawidłowego stanu, gdy są taktowane do następnego przerzutnika. Nie ma znaczenia, w jakiej kolejności się zmieniają, czy też są usterkami po drodze. Ponownie narzędzia mogą łatwo przekształcić to w logikę, która pod warunkiem, że zegar jest wystarczająco wolny, daje właściwą odpowiedź (i może powiedzieć, czy zegar, którego chcesz użyć, jest wystarczająco wolny).

W asynchronicznym systemie sekwencyjnym założenia te wychodzą z okna. Usterki mogą mieć znaczenie, kolejność zmian danych wyjściowych może mieć znaczenie. Zarówno narzędzia, jak i same układy FPGA zostały zaprojektowane do projektów synchronicznych. Odbyło się wiele dyskusji (Google asynchroniczny projekt FPGA, jeśli chcesz dowiedzieć się więcej) na temat możliwości implementacji systemów asynchrnalnych na standardowych FPGA lub specjalnie zaprojektowanych, ale wciąż nie jest to akceptowane przez główny nurt praktyki projektowej

Peter Green
źródło
2

Tak. Jeśli nie masz konstrukcji typu procesu, nie powinno to robić takich rzeczy jak wnioskowanie rejestrów. Będą takie rzeczy, jak pamięć wbudowana, która wymaga zegarów, chociaż jeśli naprawdę chcesz, prawdopodobnie możesz wygenerować je asynchronicznie.

mikeselectricstuff
źródło
1
Czy chciałeś zrobić z tego jedną odpowiedź?
Kevin Vermeer,
1

FWIW Pomyślałem, że powinienem dodać, że jednym oczywistym celem w rozwiązaniach logiki asynchronicznej byłoby globalne zmniejszenie zużycia energii.

Te globalne zegary / PLL / bufory palą dużo dżuli.

Ponieważ rozwiązania FPGA wkraczają w areny zasilane bateryjnie (np. Lattice Icestick), ten aspekt zyska znacznie więcej uwagi.

Harrygoz
źródło
To dobra uwaga, chociaż warto wziąć pod uwagę, że źle zaprojektowany obwód kombinatoryczny wykonujący tę samą operację, co obwód sekwencyjny, może w niektórych przypadkach powodować wiele przejściowych przejść, gdy obliczane są częściowe wyniki, a końcowa moc wyjściowa jest aktualizowana, aby uwzględnić je, aw obwodach CMOS (jak większość układów FPGA) zużycie energii jest w przybliżeniu proporcjonalne do liczby przejść. Zegary mogą powodować niepotrzebne przejścia, ale można również znacznie obniżyć moc, wyłączając zegary w częściach obwodu, które w tej chwili nie są potrzebne.
Jules