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
Wolę reset asynchroniczny niż reset synchroniczny z kilku powodów (w określonej kolejności):
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.
źródło
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.
źródło
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”).
źródło
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.
źródło