W jaki sposób synchronizator 2-ff zapewnia właściwą synchronizację?


9

Używanie synchronizatorów 2-ff było standardem dla sygnału przekraczającego granice zegara. Istnieje wiele papierowych / rycin ilustrujących mechanizm, takich jak ten:wprowadź opis zdjęcia tutaj

Wydaje się bclk można tylko próbki impuls ADAT raz (na drugim zboczu narastającym bclk ), co powoduje, że na wyjściu metastabilności bq1_dat . Jak można próbkować bq1_dat „high” na następnym aktywnym zboczu zegara?


Oprócz mojego pytania chciałbym dodać, co myślę, aby sygnał bezpiecznie przechodził do innej domeny zegarowej (załóżmy, że 2-FF wystarcza, aby spełnić wymagania MTBF). Popraw mnie, jeśli wystąpią jakiekolwiek błędy.

wprowadź opis zdjęcia tutaj

ps: Stan metastabilny nie wyświetla fali „błąkania się”, ale poziom, który nie jest ani „1”, ani „0”. Poniższy rysunek pokazuje przykład danych wyjściowych metastabilnych.wprowadź opis zdjęcia tutaj

Oryginalna postać pochodzi z notatek z wykładu dla EE108A, wykład 13: Metastabilność i awaria synchronizacji (ow, gdy dobre flip-flops ulegają awarii) WJ Dally.


4
Chcę tylko powiedzieć, że diagramy przedstawiające metastabilne wyjście „błąkające się” są wyjątkowo mylące. Nie tak w ogóle wygląda metastabilność. Kiedy FF przechodzi w metastabilność, jego moc wyjściowa przechodzi do pojedynczego, określonego napięcia pośredniego (wartość zależy od technologii implementacji) i pozostaje tam. Po pewnym nieprzewidywalnym czasie napięcie będzie wahać się albo wysoko, albo nisko, i to, w którą stronę idzie, jest również nieprzewidywalne.
Dave Tweed

@Dave Tweed ♦ Dziękujemy za komentarz. W prawie wszystkich dokumentach, które przeczytałem o metastabilności, widziałem przebiegi „błąkające się”. Rozejrzałem się i znalazłem post ( jeśli flip-flop ma naruszenie konfiguracji i staje się metastabilny, czy na pewno osiągnie wartość wejściową, gdy zakończy oscylację? ) Zawierający strzał z zakresu O z przechwyconym stanem metastabilnym. Link do oryginalnego odniesienia do rysunku znajduje się w tym poście.
fiedel

Tak, to doskonale ilustruje mój punkt widzenia, a prezentacja Powerpoint, z której pochodzi, zawiera wiele dobrych informacji.
Dave Tweed,

Odpowiedzi:


8

Prosta odpowiedź jest taka, że ​​nie są sami. Synchronizator nie zapewnia transferu danych, ale zapewnia, że ​​nie dostaniesz metastabilnych sygnałów zasilających wiele innych sygnałów i powodujących problemy. Drugi FF, jak pokazuje schemat, łapie metastabilne pierwsze wyjście FF i zapobiega dalszemu rozprzestrzenianiu się przez projekt.

Istnieją różne rodzaje sygnałów, a sposób uwzględnienia synchronizatorów zależy od sygnału, o którym mówisz. Ale spójrzmy na kilka typowych typów:

  1. Sygnały wyzwalające - lub jakikolwiek sygnał będący w zasadzie impulsem, który musi uruchomić coś innego. Na ogół nie niosą żadnych danych, a jedyne, co cię interesuje, to, powiedzmy, rosnąca przewaga, aby rozpocząć coś w innej dziedzinie zegara. Aby je połączyć, potrzebujesz synchronizatora (zasadniczo wykonującego to, co pokazano na schemacie), ale potrzebujesz trochę więcej.

    Najprostszą opcją jest przedłużenie impulsu - zasadniczo upewniasz się, że impuls wejściowy jest dłuższy niż 1 okres zegara docelowego zegara (powinien on być dłuższy niż 1 cykl co najmniej większy z czasów ustawiania i utrzymywania rejestru docelowego) . Na przykład, jeśli przechodzisz z zegara 20 MHz na zegar 15 MHz, upewnij się, że twój puls ma dwa cykle zegarowe na wejściu, co zapewni, że zostanie on przedstawiony zegarowi docelowemu i nie zostanie utracony. To również odpowiada na twoje pytanie, w jaki sposób gwarantuje się przejście sygnału. Jeśli puls jest szerszy niż jeden docelowy okres zegara, oznacza to, że jeśli będzie on metastabilny na pierwszej krawędzi zegara i ostatecznie zostanie wyświetlony jako 0, to na drugiej krawędzi zegara na pewno złapie puls.

    Ponieważ przy tym typie sygnału interesuje Cię tylko to, że impuls przeszedł, nie ma znaczenia, czy sygnał wyjściowy kończy się dwoma cyklami taktowania przez większość czasu, a tylko jednym cyklem przez resztę. Jeśli chcesz upewnić się, że jest to impuls o jednym cyklu, możesz utworzyć prosty obwód detektora krawędzi.

  2. Kontrolne magistrale - lub ewentualnie typy magistral danych. Są one prawdopodobnie trudniejsze, ponieważ w przypadku wielobitowego strumienia danych, który musi być zsynchronizowany. W tym przypadku powinieneś zaimplementować coś, co nazywa się „handshaking”. Zasadniczo ładujesz swoje dane do zegara źródłowego i trzymasz je. Następnie wysyłasz sygnał żądania (jak w 1) poprzez synchronizator. Gdy sygnał żądania zostanie przesłany, wiesz, że szyna danych zostanie również ustabilizowana w domenie docelowej. Następnie możesz ustawić zegar w banku rejestru w miejscu docelowym. Odbiorca następnie ponownie wysyła impuls potwierdzający, aby poinformować źródło, że może załadować następne słowo.

    Użyłbyś tego rodzaju magistrali, gdybyś musiał wysłać słowo kontrolne do zegara docelowego, dla którego musisz wiedzieć, że dotarł tam przed wysłaniem innego (np. Jeśli wysyłasz polecenie, aby coś zrobić).

  3. Magistrale danych - w przypadku danych, w których masz źródło, które wyrzuca dane w sposób ciągły lub seryjny, prawdopodobnie lepiej jest używać FIFO niż synchronizatorów. FIFO wykorzystuje pamięć z dwoma zegarami do przechowywania danych, a także liczniki do śledzenia ilości danych w FIFO. Zapisujesz dane w FIFO, gdy jest miejsce, a następnie zwiększasz adres zapisu. Adres ten jest zwykle kodowany w schemacie „Gray Coding”, który zapewnia, że ​​każdy przyrost adresu powoduje tylko jedenbit w magistrali adresowej, aby zmienić (co oznacza, że ​​nie trzeba synchronizować wielu bitów). Adres ten jest następnie przenoszony do domeny docelowej (przez jeden z łańcuchów synchronizatora), gdzie jest porównywany z adresem odczytu. Jeśli w FIFO znajdują się dane, można je odczytać z pamięci za pomocą docelowego portu zegara. Adres odczytu jest podobnie kodowany w kolorze szarym i wysyłany z powrotem do źródła przez inny synchronizator, aby port zapisu mógł obliczyć, czy w FIFO jest miejsce.

  4. Resetuj sygnały - zwykle używają zmodyfikowanej wersji synchronizatora, znanej jako „Asynchronous Assert, Synchronous Deassert”. W tej zmodyfikowanej wersji dane wprowadzane do pierwszego przerzutnika są powiązane z GND, a zamiast tego przychodzący sygnał resetowania jest połączony z asynchronicznymi wstępnie ustawionymi sygnałami każdego przerzutnika w synchronizatorze. Powoduje to, że sygnał wyjściowy jest całkowicie asynchroniczny, gdy osiąga stan wysoki, ale łańcuch synchronizatora zapewnia, że ​​przechodzi on nisko synchronicznie z zegarem docelowym, taktując przez zera w łańcuchu rejestrów.

    Ten typ synchronizatora jest straszny dla danych i kontroli, ale doskonale nadaje się do resetowania sygnałów. Jeśli cała logika docelowa przekazuje dane wyjściowe tego łańcucha do asynchronicznego resetu danych wejściowych dowolnego rejestru w domenie, wówczas nie ma obaw o metastabilność podczas potwierdzenia (nawet jeśli jest ona asynchroniczna), ponieważ wszystkie rejestry są zmuszone do znanego stanu. Następnie, gdy sygnał resetowania jest dezasserowany w domenie źródłowej, synchronicznie deasseruje się w domenie docelowej, co oznacza, że ​​wszystkie rejestry wychodzą z resetowania w tym samym cyklu zegarowym (zamiast cyklu +/- 1, jeśli był to asynchroniczny deassert).


Jak widać z powyższego, przejście o domenę zegarową jest o wiele bardziej skomplikowane niż po prostu naklejenie synchronizatora 2 przerzutów na sygnał. Dokładna zastosowana metoda zależy od zastosowania.


Oprócz odpowiedzi Toma chciałbym dodać odniesienie do PoC , które ma implementacje dla tych przypadków. Dokumenty synchronizatora są dostępne na RTD. Oprócz teorii łączenia 2 przerzutników dla podstawowego synchronizatora 2-FF, PoC zapewnia dedykowane implementacje ( sync_Bits) dla układów FPGA Xilinx i Altera w celu poprawy zachowania metastabilności. Synchronizator 2-FF służy na przykład sync_Strobedo budowania bardziej złożonych synchronizatorów impulsów.
Paebbels,

Dziękujemy za wypracowane wprowadzenie do strategii synchronizacji. To zdjęcie pochodzi z „Techniki projektowania i weryfikacji zegara domeny (CDC) przy użyciu systemverilog” Clifforda E. Cummingsa. Rozumiem, że dla sygnału jednobitowego szerokość musi wynosić co najmniej 1 cykl zegara + czas konfiguracji + czas podtrzymania strony odbierającej, aby mógł bezpiecznie przejść. Na tym zdjęciu kryteria te nie są spełnione, ponieważ próbka adat jest próbkowana przez próbki bclk tylko raz na zboczu opadającym, co powoduje, że bq1_dat jest metastabilny.
fiedel

... W rezultacie odczyt bq1_dat na następnym rosnącym zboczu bclk może wynosić „0” lub „1”. Synchronizacja na zdjęciu wydaje się więc nieudana. Czy mam rację?
fiedel

@Paebbels Dziękujemy za odniesienie. Spójrz =)
fiedel

Powinieneś edytować to w swoim pytaniu, a nie publikować jako odpowiedź, ale w zasadzie tak, możesz otrzymać 1 na wyjściu w tym przykładzie.
Tom Carpenter

1

1) Używając rysunku jako przykładu, aclk i bclk są względem siebie asynchroniczne. Innymi słowy, mają różne źródła zegara. Pokazują adat jako prawidłowe dane, ale zsynchronizowane tylko z aclk. Tutaj zaczyna się gra synchronizator bclk.

2) Ten rysunek zakłada najgorszy scenariusz, w którym bq1_dat jest nieporządnym wyjściem, ponieważ Fq bq1 przechwycił tylko część końca danych, tworząc stan metastabilny, w którym dane wyjściowe są zwykle śmieciami. Oto sztuczka. Bq2 ma to samo bclk co bq1, ale potrzeba 2 cykli zegara bclk, aby dane zostały przesłane i pojawiały się na bq2_dat.

3) Pierwszy bclk przechwycił część danych, co powoduje bałagan na wyjściu, ale drugi bclk ma jeden cykl zegara później, wystarczająco dużo czasu, aby niejednoznaczne dane z bq1_dat ustabilizowały się w stanie wysokim lub niskim. Brudny puls bq1_dat trwał wystarczająco długo, aby bq2 przechwycił prawidłową logikę „1” (wysoki poziom logiczny) i przekazał ją do bq2_dat jako prawidłowe i teraz zsynchronizowane dane (wysoki poziom logiczny).

4) Poniżej, każdy zegar korzystający z bclk będzie miał zsynchronizowane dane do pracy. Zauważ, że tylko pierwszy bclk FF miał do czynienia ze stanem metastabilnym . Wydajność mogłaby być logicznie niska, gdyby adat był tylko piko lub nano sekund za późno. Pamiętaj, że te japonki próbkują dane wejściowe tylko na rosnącym zboczu zegara. To, co dzieje się przed lub po zboczu narastającym, jest ignorowane.


Należy jednak pamiętać, że opóźnienie bclk zapewnia jedynie probabilistyczną miarę bezpieczeństwa, a dokładna kwota zależy zarówno od technologii FF, jak i okresu bclk. W niektórych przypadkach hi-rel mogą być wymagane 3 lub więcej etapów, aby obniżyć poziom błędu do akceptowalnego poziomu.
WhatRoughBeast

@WhatRoughBeast. Wiem, że w najgorszym przypadku potrzebnych jest wiele etapów synchronizacji plus cyfrowe filtrowanie. Oczywiście moja odpowiedź była zbyt prosta.
Sparky256

@ Sparky256 To, co mnie zastanawia, to 3) w twoim komentarzu. W jaki sposób bq2 może przechwycić „1”, gdy bq1_dat jest w stanie metastabilnym?
fiedel

@ fiedel, dwie rzeczy przyczyniają się do tego, że bq2 jest w stanie uchwycić czyste wejście (przynajmniej). Najpierw stan metastabilny musi się utrzymywać przez pełny cykl zegara. Po drugie, wartość metastabilna (pseudo-środkowa szyna) z bq1 może nie być (lub zoptymalizowana, aby uniknąć) być w oknie, co również powoduje, że bq2 jest metastabilny - ale jest to głównie pierwsza z nich. Powiedzmy, że technologia daje 5% szansy na utrzymywanie się metastabilności wystarczająco długo. etap synchronizacji 3-FF zmniejszyłby to do 0,25%, ponieważ obie komórki musiały ulec awarii. Messy jest w praktyce dobrze określonym wykładniczym odchyleniem od stanu prawie stabilnego.
Sean Houlihane

@SeanHoulihane. Dziękuję za wyjaśnienie. Określenie „zbocze narastające” wprowadza w błąd, ponieważ okno akceptacji danych (metastabilne lub stabilne) znajduje się w połowie wysokości zbocza i trwa tylko kilka piko lub nano sekund. Tylko w tym momencie dane wejściowe są na poziomie logicznym „1” lub „0”, bez względu na to, czy są metastabilne, czy stabilne, w zależności od jego poziomu napięcia w porównaniu z progiem układu scalonego dla logiki 1 lub 0.
Sparky256
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.