„Zatrzask” różni się od „Flip-Flop” tym, że FF zmienia swoją moc wyjściową tylko w odpowiedzi na zbocze zegara. Zatrzask może zmienić swoją moc wyjściową w reakcji na coś innego niż zegar. Na przykład SR-Latch ma zestaw i wejście resetowania, a jeśli jedno z nich jest aktywne, wyjście może się zmienić. Gdzie jako SR-FF reaguje na zestaw lub resetuje tylko wtedy, gdy występuje również zbocze zegara.
W FPGA chcesz, aby logika była w pełni synchroniczna. Oznacza to, że wszystkie elementy pamięci (takie jak FF) są taktowane z jednego źródła zegara. Wszystko, co jest asynchroniczne z tym zegarem, musi być traktowane bardzo ostrożnie, w przeciwnym razie wystąpią błędy synchronizacji.
Zatrzask jest w zasadzie asynchronicznym elementem pamięci. Nie ma wejścia zegara, dlatego nie można go zsynchronizować z żadnym zegarem. Powinienem zauważyć, że istnieją FF z asynchronicznym resetowaniem i resetowaniem danych wejściowych, które należy traktować z taką samą ostrożnością jak normalne zatrzaski.
Omówienie wszystkich problemów z synchronizacją, które mogą powodować zatrzaski, wykracza daleko poza to, co można tutaj omówić, ale dam wam jeden przykład:
Powiedzmy, że masz zatrzask SR i chcesz, aby był ustawiany za każdym razem, gdy 8-bitowy licznik osiągnie określoną wartość. Nie jestem pewien, jaki byłby kod Verilog, ale w VHDL kod to: ustaw <= '1', gdy count = "11010010" else '0'; Ten ustawiony sygnał trafia do ustawionego wejścia w naszej zatrzasku SR.
Generowana logika jest czysto kombinatoryczna; mieszanka bramek, bramek i falowników (lub LUT). Ale ścieżki sygnału przez tę kombinatoryczną logikę nie zawsze są idealne i „ustalony” sygnał może mieć na nim usterki. Ścieżka sygnału przez określoną grupę bramek może potrwać dłużej niż inna grupa, powodując, że ustawione wyjście uaktywni się na chwilę, zanim wyjście ustabilizuje się do stanu końcowego.
Ta usterka wyjściowa może spowodować ustawienie naszego SR-Latch, nawet jeśli nie było to konieczne. Jeśli przełączymy się z SR-Latch na SR-FF, wyzerujemy ten sam zegar, co licznik, wtedy SR-FF będzie czekał na jeden cały cykl zegara przed zmianą stanu. Zasadniczo poczeka, aż ustawiony sygnał ustabilizuje się, zanim na niego spojrzy.
Jeśli ścieżki przez kombinatoryczną logikę dla ustawionego sygnału są po prostu inaczej prowadzone (powodując różne opóźnienia), wówczas zachowanie usterki również się zmieni. Logika może działać dobrze, ale ponieważ zmieniłeś coś całkowicie niezwiązanego, logika jest kierowana inaczej, więc pojawia się błąd. Temperatura i napięcie również zmienią przebieg sygnału, a tym samym mogą zmienić zachowanie usterki.
To niepewne w czasie, dlatego powinieneś unikać zatrzasków w logice. FF są znacznie bezpieczniejsze w użyciu. Właśnie dlatego twój kompilator ostrzega cię o zatrzaskach, ponieważ łatwo jest przez pomyłkę zrobić zatrzask i prawdopodobnie i tak go nie chcesz.
Oczywiście czasami wymagane są zatrzaski. Musisz ich używać bardzo rzadko, tylko gdy jest to absolutnie wymagane, a następnie musisz odpowiednio zaprojektować logikę, aby nie było żadnych problemów.