Reset: synchroniczny vs asynchroniczny


15

Od lat pracuję z fpgas i zawsze używałem resetu synchronicznego dla każdej części (która tego potrzebuje) moich obwodów. Pomaga globalnie zresetować obwód w danym cyklu zegara.

Powiedziano mi jednak, że w obwodach ASIC ludzie wszędzie używają resetowania asynchronicznego. Zastanawiam się, dlaczego i jeśli tak jest również w niektórych projektach FPGA. Bardzo chciałbym usłyszeć profesjonalne opinie.

Dzięki

Odpowiedzi:


11

Wydaje się, że jest wiele poglądów na ten temat.
Twierdzenie asynchroniczne uważa się za dobrą praktykę. Pozwala to uniknąć problemu, że zegar nie działa (lub działa zbyt wolno, aby przechwycić sygnał resetowania) przy synchronicznym potwierdzaniu i możliwej metastabilności przy asynchronicznym odwracaniu.

Można użyć synchronizatora resetowania (dwa FF) z wyjściem powiązanym z resztą projektów resetujących:

Resetowanie

Kilka dyskusji:
Asynchronizacja i zerowanie synchronizacji
Letters On Sync vs. Async Resets


W jaki sposób wymagania dotyczące czasu ustawiania / wstrzymania między wydaniem sygnału resetowania zatrzasku a jego zegarem różnią się od tych dla danych wejściowych? Czułbym się bardziej komfortowo, gdyby zatrzaski w systemie widziały koniec sygnału resetowania na nieaktywnym zboczu zegara. Czy zwolnienie resetu asynchronicznego na aktywnym zboczu zegara nie wpłynie na cykl, w którym ma miejsce?
supercat,

Nie, zwolnienie resetowania asynchronicznie nie jest gwarantowane ze względu na potrzebny czas przywracania resetowania (np. Setup / hold) Dlatego zrezygnowałeś z resetowania synchronicznego.
Oli Glaser,

Moje pytanie brzmi, czy posiadanie zatrzasku 1 zwalniającego sygnał zerowania karmienia zatrzasku 2 na tej samej krawędzi zegara, którego używałby zatrzask 2, jest całkowicie koszerne, tj. Czy minimalny czas propagacji od zegara zatrzasku 1 do jego wyjścia spełniłby wymaganie wstrzymania dla wejścia resetu zatrzasku 2. BTW, co sądzisz o mojej odpowiedzi powyżej? Narysowany obwód oferuje niewielką odporność na impulsy impulsowe na linii zerowania, kiedy prawie całkowita odporność powinna być możliwa.
supercat,

Po dalszym rozważeniu można dodać ochronę przed impulsami wykonawczymi przez dodanie trzeciego zatrzasku, a jego asynchroniczny sygnał resetujący będzie wersją sygnału z tłumieniem usterki podawaną do pierwszych dwóch, tak że sygnał, który asynchronicznie zakłóca trzeci zatrzask, będzie gwarantowane czyste zresetowanie pierwszych dwóch. Impuls runt na wejściu resetowania może spowodować, że główna linia resetu w układzie otrzyma impuls runt, ale jeśli taki impuls wystąpi, nastąpi synchroniczny impuls reset.
supercat,

Przepraszam, myślę, że rozumiem, co masz na myśli. Jeśli chodzi o wyjście z drugiego zatrzasku synchronizatora do resetowania FF systemu, rozumiem, że czas odzyskiwania resetowania jest zwykle krótszy niż czas konfiguracji danych dla tego samego FF, więc powinno być w porządku. Zgadzam się co do impulsów runtowania, nie zapewnia ono odporności osobom bez czegoś takiego, jak sugerujesz, aby zostać wdrożonym.
Oli Glaser

7

Wolę reset asynchroniczny niż reset synchroniczny z kilku powodów (w określonej kolejności):

  • Dodanie funkcji asynchronicznego zestawu lub resetu do przerzutnika prawdopodobnie spowoduje mniejszą konstrukcję ze względu na integrację logiki w pojedynczej komórce (w porównaniu z niemożliwym do zresetowania przerzutnikiem z bramką AND na wejściu)
  • Mniej bramek powoduje mniej zatłoczone okablowanie / miejsce i trasę
  • Jest to prostszy / łatwiejszy proces resetowania układu (bardziej przyjazny dla użytkownika / testu)
  • Ustawienie asynchronicznej ścieżki resetowania upraszcza podział statycznej analizy synchronizacji sygnału resetowania
  • Synchroniczne resetowanie dodałoby dodatkową logikę do ścieżki krytycznej przepływu danych i utrudniło spełnienie wymagań dotyczących konfiguracji i utrzymania
  • Podczas gdy układ FPGA ma na wejściu funkcję arbitralnej logiki 4-6, „płacisz” za każde wejście do bramki w układzie ASIC (więcej wejść = większa bramka; złożone funkcje = wiele bramek)

Ostatecznie nie sądzę, aby którykolwiek z tych problemów powodował zatrzymanie programu, ale z pewnością przyczyniłyby się do silnej preferencji asynchronicznego resetowania ASIC.


2
Jednym z niebezpieczeństw związanych z wprowadzaniem asynchronicznych resetów do wewnętrznej logiki jest to, że impuls runt na wejściu resetowania może siać wszelkie spustoszenia. Jeśli ktoś chce asynchronicznie zresetować swój obwód, należy zaprojektować obwód wejściowy w taki sposób, aby zagwarantować, że jakikolwiek impuls resetujący wystarczający do ewentualnego spowodowania dowolnego rodzaju asynchronicznego resetu w celu dotarcia do obwodu wewnętrznego będzie również gwarantował nastąpi synchroniczny reset.
supercat,

4

Asynchroniczny reset z synchronicznym anulowaniem asercji działa bardzo dobrze. Jak wspomniano powyżej, asynchroniczne klapy resetowania są mniejsze i nie wymagają aktywnego zegara, aby zapewnić reset, więc możesz zmusić część do resetu (zwykle znany stan niskiego poboru mocy) za pomocą samej mocy i pojedynczego przewodowego styku lub zasilania po resecie.

Jeśli naprawdę chcesz się w to zagłębić, możesz przeczytać o tym artykuły Cumminga, w szczególności:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

Twoje zdrowie.


Jedną kwestią, którą, moim zdaniem, pan Cummings omija w swojej pracy, jest to, że chociaż detektory usterki mogą tłumić to, co w innym przypadku byłoby impulsami runtowymi, mogą one również przekształcić impulsy o uzasadnionej długości w impulsy runtowe. Skutkuje to tym, że impuls o odpowiedniej długości może arbitralnie zablokować stan systemu bez powodowania odpowiedniego resetu. Ponieważ bardzo trudno jest uniknąć metastabilności we wszystkich przypadkach bez podwójnej synchronizacji, sugerowałbym posiadanie dwóch obwodów asynchronicznych, z których jeden ma „bardziej rygorystyczne” kryterium wykrywania usterki, a następnie ...
supercat,

... ułóż rzeczy w taki sposób, aby krótka usterka mogła spowodować reset lub wystąpi jeden lub dwa cykle później, ale wystarczająco długi impuls spowoduje natychmiastowe zresetowanie. Ponadto, chociaż użycie wejść „resetowania asynchronicznego” na klapkach może pomóc w syntezie w niektórych topologiach, nie oznacza to, że muszą być używane asynchronicznie. Pomocne może być zsynchronizowanie większości wewnętrznych sygnałów resetowania z zegarem, nawet podczas sterowania wejściami „resetowania asynchronicznego” na zatrzaskach.
supercat

Cummings twierdzi, że filtry usterki „są brzydkie”. Nigdy nie widziałem takiego w układach scalonych, nad którymi pracowałem. Zwykle używamy wyzwalaczy Schmitta we wszystkich komórkach padu wejściowego, aby uniknąć tych problemów, a używane przeze mnie resety zasilania są podobnie oczyszczone. Nawiasem mówiąc, w jakich przypadkach miałbyś krótkie impulsy na linii resetowania? Widziałem to w niektórych scenariuszach skanowania, ale wciąż są one rzędu długiego cyklu zegara, a nie celowych krótkich pulsów. W ostatnim komentarzu deasemblacja resetu musi być zsynchronizowana z zegarem, aby uniknąć naruszeń s / h podczas resetowania i upewnić się, że wszystkie klapy wychodzą z resetowania na tej samej krawędzi.
mixed_signal_old

Filtry usterki są często przydatne do określania, które typy danych wejściowych mogą powodować metastabilność, ale nie eliminują stanów metastabilnych. Celem filtru usterki powinno być zapewnienie, że wszelkie stany metastabilne, które mogą wystąpić, znajdują się w sytuacjach „nieistotnych”. Czasami konieczne jest, aby jedno urządzenie mogło zresetować inne urządzenie, które jest do niego podłączone. O ile drut resetowania nie jest podwójnie zsynchronizowany, istnieje ryzyko impulsów impulsowych z pobliskich zdarzeń ESD i innych podobnych problemów.
supercat

Co do ostatniego punktu, mówiłem tylko, że nawet jeden syntetyzuje na sprzęcie projekt, który zapewnia „bezpłatne” asynchroniczne wejścia resetowania na klapkach, co nie znaczy, że nie można w pełni zsynchronizować sygnału z zegarem głównym na obu twierdzenie i zwolnienie. Zewnętrzne sygnały mogą musieć reagować asynchronicznie na wejście resetujące, ale to nie znaczy, że trzeba asynchronicznie zresetować wszystkie zatrzaski. Rzeczywiście, aby uniknąć niespójnych stanów, przydatne może być, aby wszystkie oprócz dwóch zatrzasków w projekcie były zsynchronizowane.
supercat,

2

Innym podejściem, które wydawałoby się jeszcze bezpieczniejsze niż podejście asynchroniczne assert / sync release, byłoby posiadanie detektora asynchronicznego resetowania (podobnie jak opisano w innym miejscu, z asynchronicznym „assert” i synchronicznym „release”), ale posiadanie danych wyjściowych z które zamykają wszelkie skierowane na zewnątrz urządzenia I / O bez asynchronicznego resetowania czegokolwiek (oprócz zatrzasku w samej czujce). Jeśli używa się dwóch asynchronicznych detektorów resetu, jednego dla linii we / wy i jednego do zasilania synchronicznego detektora resetu, i jeśli jeden projektuje jeden dla linii we / wy, tak że zostanie on wyzwolony tylko przez impulsy resetujące, które są wystarczająco mocne, aby niezawodnie wyzwolić główny detektor, można uniknąć nawet usterki wyjść w przypadkach, w których procesor nie zostanie zresetowany. Zauważ, że jeśli to zrobisz, impuls zerujący o prawidłowej długości zresetuje wyjścia asynchronicznie,

Inną rzeczą do rozważenia jest to, że systemy często mają pewne rejestry, na które reset nie powinien mieć wpływu. Jeśli asynchroniczny reset mógłby uderzyć w obwód, który zapisuje do tych rejestrów, puls zerowania, który dociera w niewłaściwym czasie, mógłby zablokować te rejestry, nawet jeśli jest to czysty impuls (bez uruchamiania). Na przykład, jeśli kod próbuje zapisać adres 1111, a reset asynchroniczny pojawia się tuż przed impulsem zegarowym, który zmusza jeden z adresów do zatrzaśnięcia się na zero w chwili nadejścia impulsu zegarowego, może to spowodować błędny zapis adresu 1110. Podczas gdy można użyć wielu wewnętrznych linii resetowania z opóźnieniami kombinatorycznymi, aby upewnić się, że zapisy rejestru zostały wyłączone przed zablokowaniem adresu, użycie synchronicznej logiki wewnętrznego resetu całkowicie eliminuje problem.

BTW, oto obwód ilustrujący tę koncepcję. W pobliżu lewego dolnego rogu znajdują się dwa wejścia logiczne do resetowania. Jeden wygeneruje „czysty” impuls zerowania, a drugi wygeneruje naprawdę obrzydliwy. Żółta dioda LED wskazuje reset systemu głównego; niebieska dioda LED wskazuje włączenie I / O. Naciśnięcie czystego resetu spowoduje natychmiastowe „zresetowanie” wyjść; naciśnięcie trudnego resetu spowoduje albo opóźnione zresetowanie wyjść, albo pozostawi je niezmienione (w symulatorze nie ma sposobu, aby spowodować przypadek „pozostaw je niezmienione”).


Myślę, że to brzmi jak dobry pomysł. tak wiele odcieni szarości z pozornie prostymi rzeczami, takimi jak reset.
Oli Glaser,

0

Jako doświadczony inżynier ( 3 lata z projektowaniem FPGA i systemami wbudowanymi ) mówię wam, że musicie sprawdzić arkusz danych i podręcznik użytkownika FPGA. To nie jest prosta odpowiedź.

Musisz dopasować swój projekt do typu FPGA, który wybrałeś. Niektóre układy FPGA mają FlipFlops, które zostały zaprojektowane do resetowania Async, niektóre są zaprojektowane do resetowania Sync.

Musisz sprawdzić podręcznik użytkownika FPGA, jaki typ FlipFlops masz.

Implementator / Mapper wybierze dedykowane trasy do zresetowania ( kod może działać z wyższą częstotliwością i zajmuje mniej miejsca ), jeśli dopasujesz kod do typu operacji podstawowych FPGA.

Twój projekt będzie działał w KAŻDYM przypadku , ale czasami implementator FPGA robi wszystko, aby logika działała ( dodaje więcej logiki ), ale spowoduje to obniżenie maksymalnej częstotliwości i / lub zwiększenie zasobów FPGA.

Przykład: testowane z ZYNQ Xilinx ( FPGA jest przeznaczony do synchronicznego resetowania - patrz instrukcja użytkownika prymitywów ). Zmieniając reset z asynchronizacji na synchronizację , maksymalna stabilna częstotliwość wzrosła z 220 MHz do 258 MHz, więc przekroczyłem swój margines częstotliwości.

Mogę również dodać, że implementator nie wie, co to jest zegar i sygnał resetowania. Przypisuje szpilki flipflop sygnałom według ZAMÓWIENIA, a nie według nazwy. Tak więc w niektórych układach FPGA implementator wybiera pierwszy sygnał po „rozpoczęciu procesu” w VHDL jako zegar, w niektórych jako reset, w zależności od ustawienia FPGA dla implementatora.


Nie zgadzam się z twoim stwierdzeniem, że „implementator nie wie, co to jest zegar i sygnał resetowania”. Narzędzia syntezy wnioskują, który jest zegar, a który jest resetowany według sposobu ich użycia. Sygnał zegara jest używany ze specyfikacją zbocza, reset nie jest. Co więcej, każdy flip-flop może być używany ze specyfikacją synchronicznego resetowania i, jak zauważyłeś, często prowadzi to do szybszych ścieżek krytycznych.
Joe Hass
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.