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_uncertainty
poleceniem - dlaczego miałbym kiedykolwiek chcieć „ręcznie określać” pochylenie?
(*) Jeden wyjątek:
systemy asynchroniczne .