Co to jest przekrzywienie zegara i dlaczego może być ujemne?

10

Mój kompilator HDL (Quartus II) generuje raporty czasowe. W nim węzły mają kolumnę „pochylenie zegara”. Jedyną definicją przesunięcia zegara, którą znalazłem, jest dokumentacja TimeQuest (patrz strona 7-24):

Aby ręcznie określić niepewność lub pochylenie zegara w przypadku transferów między zegarami, użyj set_clock_uncertaintypolecenia.

Więc jeśli pochylenie jest „niepewnością”, dlaczego niektóre z moich pochyleń zegara są ujemne (np. -0,048)? Czym dokładnie jest przekrzywienie zegara?

Randomblue
źródło

Odpowiedzi:

8

Z Wikipedii :

TSkewRiRjTCiTCj

TSkewi,j=TCiTCj

Pochylenie zegara może być dodatnie lub ujemne. Jeśli sygnały zegarowe są w pełni zsynchronizowane, wówczas skośność zegara obserwowana w tych rejestrach wynosi zero.

Zatem ilość przesunięcia zegara w jednym rejestrze jest względna w stosunku do innego rejestru. Ponieważ jest względny, może być dodatni lub ujemny.

Niektóre ilustracje:

dodatnie / ujemne pochylenie skośne wyprzedzanie / opóźnianie

Weźmy na przykład przelew intraclock zgodnie z definicją w dostarczonym dokumencie TimeQuest:

Przesyłanie między blokami ma miejsce, gdy przesyłanie rejestru do rejestru odbywa się w rdzeniu urządzenia, a zegary źródłowy i docelowy pochodzą z tego samego styku wyjściowego lub portu zegara PLL.

Więc jeśli rejestr docelowy jest fizycznie bliższy obwodowi generowania zegara, zegar prawdopodobnie dotrze do rejestru docelowego, zanim dotrze do rejestru źródłowego, co spowoduje wiodące przesunięcie zegara, które jest faktycznie dodatnie. Jeśli rejestr docelowy otrzyma krawędź zegara po rejestrze źródłowym, pochylenie zegara będzie opóźnione lub ujemne.

Mówiąc inaczej, pochylenie zegara to niepewność co do tego, jak blisko z czasem zbocze zegara osiągnie dwa oddzielne rejestry podane w jednostkach czasu w odniesieniu do rejestru źródłowego w transferze rejestr-rejestr.

Rozszerzenie tej różnicy o transfery między zegarami oraz czasy konfiguracji i wstrzymania stają się nieco nieporządne. Prawdopodobnie łatwiej jest więc myśleć o tym jako o „synchronizacji” czasu zbocza lub czasu zatrzymania między dwoma rejestrami. Mamy tendencję do myślenia o „synchronicznym” jako o „występującym w tym samym czasie”. Ale rzeczy rzadko zdarzają się absolutnie dokładnie w tym samym czasie. Musimy więc tolerować ten czas. Tolerancje są często podawane w kategoriach dodatnich i ujemnych (tj. ±).

embedded.kyle
źródło
10

Nowoczesne cyfrowe urządzenia logiczne są zwykle (*) projektowane zgodnie z „praktyką projektowania synchronicznego”: globalnie synchroniczny styl projektowania rejestrów z wyzwalaniem zboczem (RTL): Wszystkie sekwencyjne obwody są dzielone na rejestry wyzwalane zboczami połączone z globalnym sygnałem zegarowym CLK i czysta logika kombinacyjna.

Ten styl projektowania umożliwia szybkie projektowanie cyfrowych układów logicznych bez względu na czas. Ich system będzie „po prostu działał”, o ile będzie wystarczająca ilość czasu od jednej krawędzi zegara do drugiej, aby ustabilizować się stan wewnętrzny.

W tym stylu projektowania pochylenie zegara i inne problemy związane z taktowaniem są nieistotne, z wyjątkiem ustalenia „Jaka jest maksymalna częstotliwość taktowania dla tego systemu?”.

Czym dokładnie jest przekrzywienie zegara?

Na przykład:

...
     R1 - register 1              R3
     +-+                  
   ->| |------>( combinational  )  +-+
...->| |------>(         logic  )->| |--...
   ->|^|------>(                )->|^|
     +-+       (                )  +-+
      |   +--->(                )   |
     CLK  | +->(                )  CLK
          | |
     R2:  | |
     +-+  | |               
...->| |->+ |
   ->|^|->--+
     +-+
      |
     CLK

W prawdziwym sprzęcie sygnał „CLK” nigdy tak naprawdę nie przełącza się dokładnie jednocześnie przy każdym rejestrze. Zegara skosu Tskew jest opóźnienie dalszego zegara w stosunku do górnej zegara ( )

Tskew (źródło, miejsce docelowe) = czas_ docelowy - czas_źródłowy

gdzie czas_źródłowy to czas aktywnego zbocza zegara w górnym rejestrze źródłowym (w tym przypadku R1 lub R2), a czas docelowy to czas „tego samego” aktywnego zbocza zegara w pewnym dalszym rejestrze docelowym (w tym przypadku R3) .

  • ujemne pochylenie zegara: CLK w R3 przełącza się przed zegarem w R1.
  • dodatnie pochylenie zegara: CLK w R3 przełącza się po zegarze w R1.

Jaki jest efekt przekrzywienia zegara?

(być może schemat czasu tutaj by to wyjaśnił)

Aby wszystko działało poprawnie, nawet w najgorszym przypadku, dane wejściowe R3 nie mogą się zmieniać w czasie ustawiania lub utrzymywania R3. Co gorsza, aby rzeczy działały poprawnie, musimy zaprojektować takie rzeczy, aby:

Tskew (R1, R3) <Tco - Th.

Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3).

gdzie:

  • Tcalc to maksymalny czas najgorszego rozstrzygnięcia dowolnego bloku logiki kombinacyjnej w dowolnym miejscu w systemie. (Czasami możemy przeprojektować blok logiki kombinacyjnej, który znajduje się na ścieżce krytycznej, przesuwając części w górę lub w dół, lub wstawiając inny etap rurociągów, więc nowy projekt ma mniejszy Tcalc, co pozwala nam zwiększyć częstotliwość taktowania) .
  • Tclk_min to minimalny okres od jednej aktywnej krawędzi zegara do następnej aktywnej krawędzi zegara. Obliczamy to na podstawie powyższego równania.
  • Tsu to czas konfiguracji rejestru. Producent rejestru oczekuje od nas użycia zegara wystarczająco wolnego, aby zawsze spełniać ten wymóg.
  • Jest to czas przechowywania rejestru. Producent rejestru oczekuje od nas wystarczającej kontroli odchylenia zegara, aby zawsze spełniać ten wymóg.
  • Tco to opóźnienie od zegara do wyjścia (czas propagacji). Po każdym aktywnym zboczu zegara R1 i R2 przez krótki czas kontynuują wprowadzanie starych wartości do logiki kombinowanej Tco przed przejściem do nowych wartości. Jest to ustalane przez sprzęt i gwarantowane przez producenta, ale tylko o ile spełniamy Tsu i Th oraz inne wymagania określone przez producenta dla normalnej pracy.

Zbyt dużo pozytywnego przekrzywienia to nieskalana katastrofa. Zbyt duże dodatnie pochylenie może (przy niektórych kombinacjach danych) powodować „ścieżki skradania się”, tak że zamiast zatrzasku R3 „poprawne dane” na zegarze N + 1 (funkcja deterministyczna danych uprzednio zablokowanych na R1 i R2 na zegarze N) , nowe dane zatrzaśnięte w R1 i R2 w zegarze N + 1 mogą przeciekać, zaburzać logikę kombinacyjną i powodować, że nieprawidłowe dane zostaną zatrzaśnięte w R3 na „tej samej” krawędzi zegara N + 1.

Dowolną wartość ujemnego pochylenia można „naprawić”, spowalniając częstotliwość taktowania. Jest tylko „zły” w tym sensie, że zmusza nas do uruchomienia systemu z mniejszą częstotliwością taktowania, aby dać czasom R3 czas na ustabilizowanie się po tym, jak R1 i R2 zatrzasną nowe dane na krawędzi zegara N, a następnie R3 blokuje wynik na „następnej” krawędzi zegara N + 1.

Wiele systemów korzysta z sieci dystrybucji zegara, która próbuje zredukować pochylenie do zera. Przeciwnie intuicyjnie, ostrożnie dodając opóźnienia na ścieżce zegara - ścieżce od generatora zegara do wejścia CLK każdego rejestru - możliwe jest zwiększenie pozornej prędkości, w której czoło fali fizycznie przemieszcza się z wejścia CLK jednego rejestru do następny rejestr CLK wprowadza wartość większą niż prędkość światła.

Dokumentacja Altera wspomina

„Unikaj stosowania logiki kombinacyjnej w ścieżkach zegara, ponieważ przyczynia się to do pochylenia zegara”.

Odnosi się to do faktu, że wiele osób pisze HDL, które są kompilowane na FPGA w sposób, który w jakiś sposób powoduje, że coś innego niż globalny sygnał CLK napędza lokalne wejście CLK niektórych rejestrów. (Może to być logika „bramkowania zegara”, tak że nowe wartości są ładowane do rejestru tylko wtedy, gdy spełnione są określone warunki; lub logika „dzielnika zegara”, która przepuszcza tylko 1 z N zegarów itp.). Ten lokalny CLK zwykle pochodzi w jakiś sposób z globalnego CLK - globalny CLK tyka, a następnie albo lokalny CLK się nie zmienia, lub (krótkie opóźnienie po globalnym CLK, aby sygnał rozchodził się przez to „coś innego”) lokalny CLK zmienia się raz.

Kiedy to „coś innego” napędza CLK rejestru podrzędnego (R3), sprawia, że ​​pochylenie jest bardziej pozytywne. Kiedy to „coś innego” napędza CLK rejestru nadrzędnego (R1 lub R2), powoduje to, że pochylenie jest bardziej ujemne. Czasami cokolwiek napędza CLK rejestru nadrzędnego i cokolwiek napędza CLK rejestru nadrzędnego ma praktycznie takie samo opóźnienie, co powoduje, że pochylenie między nimi jest praktycznie zerowe.

Sieć dystrybucji zegara w niektórych układach ASIC jest celowo zaprojektowana z niewielkimi ilościami dodatniego przesunięcia zegara w niektórych rejestrach, co daje logice kombinacyjnej nieco więcej czasu na ustalenie, dzięki czemu cały system może działać z większą częstotliwością zegara. Nazywa się to „optymalizacją przesunięcia zegara” lub „harmonogramem przesunięcia zegara” i jest związane z „ ponownym ustawieniem ”.

Nadal jestem zaskoczony tym set_clock_uncertaintypoleceniem - dlaczego miałbym kiedykolwiek chcieć „ręcznie określać” pochylenie?

(*) Jeden wyjątek: systemy asynchroniczne .

Davidcary
źródło
Uważam, że pomysł dodania opóźnienia w celu zminimalizowania przesunięcia zegara może czasami obejmować opóźnienie zegara o prawie pełny cykl. Gdy zegar jest gotowy do pracy, możesz go ustawić tak, aby klapka A widziała krawędź zegara 1 w tym samym czasie, gdy klapka B widziała krawędź zegara 2. Z zewnętrznego widoku są różne krawędzie, ale obwód nie działa nie przejmuj się tak długo, jak krawędzie są idealnie wyrównane.
ajs410
1

odchylenie zegara występuje, gdy zegar dociera do różnych punktów obwodu w różnym czasie z powodu odległości, pojemności itp., które mogą powodować jego nieprawidłowe działanie. Myślę, że negatywne musi być, gdy zegar dotrze do tego punktu, zanim dojdzie do odniesienia

użytkownik12108
źródło