Qu'est-ce que le décalage d'horloge et pourquoi peut-il être négatif?

10

Mon compilateur HDL (Quartus II) génère des rapports de synchronisation. Dans ce document, les nœuds ont une colonne "horloge asymétrique". La seule définition du décalage d'horloge que j'ai trouvée se trouve dans la documentation TimeQuest (voir page 7-24):

Pour spécifier manuellement l'incertitude d'horloge, ou l'inclinaison, pour les transferts d'horloge à horloge, utilisez la set_clock_uncertaintycommande.

Donc, si l'asymétrie est une "incertitude", pourquoi certaines de mes inclinaisons d'horloge sont-elles négatives (par exemple -0,048)? Qu'est-ce que le décalage d'horloge exactement?

Randomblue
la source

Réponses:

8

De Wikipédia :

Dans un circuit synchrone, le décalage d' horloge ( ) est la différence de temps d'arrivée entre deux registres adjacents séquentiellement. Étant donné deux registres adjacents séquentiellement et avec des heures d'arrivée d'horloge aux broches d'horloge de registre respectivement et , le d'horloge peut être défini comme:TSkewRjeRjTCjeTCj

TSkewje,j=TCje-TCj

Le décalage d'horloge peut être positif ou négatif. Si les signaux d'horloge sont en synchronicité complète, alors le décalage d'horloge observé à ces registres est nul.

Ainsi, la quantité de décalage d'horloge dans un registre est relative à un autre registre. Puisqu'il est relatif, il peut être positif ou négatif.

Quelques illustrations:

biais positif / négatif décalage avant / arrière

Prenons par exemple un transfert intraclock tel que défini dans le document TimeQuest que vous avez fourni:

Les transferts intra-verrouillage se produisent lorsque le transfert de registre à registre a lieu au cœur de l'appareil et que les horloges source et de destination proviennent de la même broche de sortie PLL ou du même port d'horloge.

Donc, si le registre de destination est physiquement plus proche des circuits de génération d'horloge, alors l'horloge arrivera probablement au registre de destination avant d'arriver au registre source, entraînant un décalage d'horloge de tête qui est en fait positif. Si le registre de destination recevait le front de l'horloge après le registre source, le décalage d'horloge serait en retard ou négatif.

Autrement dit, le décalage d'horloge est l'incertitude quant à la proximité dans le temps d'un front d'horloge pour atteindre deux registres distincts donnés en unités de temps par rapport à un registre source dans un transfert de registre à registre.

L' expansion que difintion pour inclure , entre transferts -Horloge et les temps d'installation et de maintien devient un désordre de peu. Il est donc probablement plus facile de le considérer comme "la synchronisation" d'un front ou d'un temps de maintien entre deux registres. Nous avons tendance à penser que "synchrone" se produit "en même temps". Mais les choses se produisent rarement exactement en même temps. Nous devons donc mettre une tolérance sur ce moment. Et les tolérances sont souvent exprimées en termes positifs et négatifs (c'est-à-dire ±).

embedded.kyle
la source
10

Les dispositifs logiques numériques modernes sont généralement (*) conçus avec une «pratique de conception synchrone»: un style de conception de transfert de registre (RTL) déclenché par front globalement synchrone: tous les circuits séquentiels sont divisés en registres déclenchés par front connectés au signal d'horloge global CLK et pure logique combinatoire.

Ce style de conception permet aux gens de concevoir rapidement des systèmes logiques numériques sans égard au calendrier. Leur système "fonctionnera" aussi longtemps qu'il y aura suffisamment de temps d'un front d'horloge à l'autre pour que l'état interne se stabilise.

Avec ce style de conception, le décalage d'horloge et d'autres problèmes liés au timing ne sont pas pertinents, sauf pour déterminer "Quelle est la fréquence d'horloge maximale pour ce système?".

Qu'est-ce que le décalage d'horloge exactement?

Par exemple:

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

Dans le matériel réel, le signal "CLK" ne change jamais vraiment exactement simultanément à chaque registre. Le décalage d' horloge Tskew est le retard de l'horloge aval par rapport à l'horloge amont ( a ):

Tskew (source, destination) = destination_time - source_time

où source_time est le temps d'un front d'horloge actif au registre source en amont (dans ce cas, R1 ou R2), et destination_time est le temps du "même" front d'horloge actif à un registre de destination en aval (dans ce cas, R3) .

  • décalage d'horloge négatif: le CLK à R3 commute avant l'horloge à R1.
  • décalage d'horloge positif: le CLK à R3 commute après l'horloge à R1.

Quel est l'effet du décalage d'horloge?

(peut-être qu'un chronogramme ici rendrait cela plus clair)

Pour que les choses fonctionnent correctement, même dans le pire des cas, les entrées de R3 ne doivent pas changer pendant le temps de configuration ou de maintien de R3. Dans d'autres pires, pour que les choses fonctionnent correctement, nous devons concevoir des choses telles que:

Tskew (R1, R3) <Tco - Th.

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

où:

  • Tcalc est le temps de stabilisation maximal dans le pire des cas de tout bloc de logique combinatoire n'importe où dans le système. (Parfois, nous pouvons repenser le bloc de logique combinatoire qui se trouve sur le chemin critique, en poussant les pièces en amont ou en aval, ou en insérant une autre étape de pipelining, de sorte que la nouvelle conception a un Tcalc plus petit, ce qui nous permet d'augmenter la fréquence d'horloge) .
  • Tclk_min est la période de temps minimale d'un front d'horloge actif au front d'horloge actif suivant. Nous le calculons à partir de l'équation ci-dessus.
  • Tsu est l'heure de configuration du registre. Le fabricant de registres s'attend à ce que nous utilisions une horloge suffisamment lente pour toujours répondre à cette exigence.
  • C'est le temps de maintien du registre. Le fabricant de registres s'attend à ce que nous contrôlions suffisamment le décalage d'horloge pour toujours répondre à cette exigence.
  • Tco est le retard de l'horloge à la sortie (temps de propagation). Après chaque front d'horloge actif, R1 et R2 continuent de diriger les anciennes valeurs vers la logique combinatoire pendant un court instant Tco avant de passer aux nouvelles valeurs. Ceci est défini par le matériel et garanti par le fabricant, mais uniquement tant que nous répondons aux exigences Tsu et Th et aux autres exigences spécifiées par le fabricant pour un fonctionnement normal.

Un biais trop positif est un désastre absolu. Un biais trop positif peut (avec certaines combinaisons de données) provoquer des "chemins sournois" tels qu'au lieu de R3 verrouiller les "données correctes" à l'horloge N + 1 (une fonction déterministe des données précédemment verrouillées dans R1 et R2 à l'horloge N) , les nouvelles données verrouillées dans R1 et R2 à l'horloge N + 1 peuvent s'infiltrer, bouleverser la logique combinatoire et provoquer le verrouillage de données erronées dans R3 au "même" front d'horloge N + 1.

N'importe quelle quantité de biais négatif peut être "corrigée" en ralentissant la fréquence d'horloge. C'est seulement "mauvais" dans le sens où cela nous oblige à faire fonctionner le système à une fréquence d'horloge plus lente, afin de donner aux entrées de R3 le temps de s'installer après que R1 et R2 aient verrouillé de nouvelles données au bord de l'horloge N, puis plus tard R3 verrouille le résultat au "prochain" front d'horloge N + 1.

De nombreux systèmes utilisent un réseau de distribution d'horloge qui tente de réduire le décalage à zéro. Contre-intuitivement, en ajoutant soigneusement des retards le long du chemin d'horloge - le chemin du générateur d'horloge à l'entrée CLK de chaque registre - il est possible d'augmenter la vitesse apparente que le front d'onde du front d'horloge parcourt physiquement de l'entrée CLK d'un registre à l'entrée entrée CLK du registre suivant à une vitesse supérieure à la vitesse de la lumière.

La documentation d'Altera mentionne

"Évitez d'utiliser la logique combinatoire dans les trajets d'horloge car cela contribue à un décalage d'horloge."

Cela fait référence au fait que de nombreuses personnes écrivent des HDL qui sont compilés sur un FPGA d'une manière qui provoque d'une manière ou d'une autre autre que le signal CLK global à piloter l'entrée CLK locale de certains registres. (Il peut s'agir d'une logique de "synchronisation d'horloge" de sorte que les nouvelles valeurs ne sont chargées dans un registre que lorsque certaines conditions sont remplies; ou de logique de "diviseur d'horloge" qui ne laisse passer que 1 horloge N sur, ou etc.). Ce CLK local est généralement dérivé du CLK global d'une manière ou d'une autre - le CLK global coche, puis soit le CLK local ne change pas, soit (un court délai après le CLK global pour que le signal se propage à travers "quelque chose d'autre") le CLK local change une fois.

Lorsque "quelque chose d'autre" entraîne le CLK du registre aval (R3), cela rend le biais plus positif. Lorsque "quelque chose d'autre" entraîne le CLK du registre amont (R1 ou R2), cela rend le biais plus négatif. Parfois, tout ce qui entraîne le CLK du registre amont et tout ce qui entraîne le CLK du registre aval ont pratiquement le même retard, ce qui rend le décalage entre eux pratiquement nul.

Le réseau de distribution d'horloge à l'intérieur de certains ASIC est délibérément conçu avec de petites quantités de décalage d'horloge positif sur certains registres, ce qui donne à la logique combinatoire en amont un peu plus de temps pour s'installer et ainsi le système entier peut être exécuté à une fréquence d'horloge plus rapide. Ceci est appelé "optimisation du décalage d'horloge" ou "planification du décalage d'horloge" et est lié à la " resynchronisation ".

Je suis toujours mystifié par la set_clock_uncertaintycommande - pourquoi voudrais-je jamais "spécifier manuellement" l'inclinaison?

(*) Une exception: les systèmes asynchrones .

davidcary
la source
Je crois que l'idée derrière l'ajout de retard pour minimiser le décalage d'horloge peut parfois impliquer de retarder l'horloge de presque un cycle complet. Une fois que l'horloge est en marche, vous pouvez la configurer de sorte que la bascule A voit le bord d'horloge 1 en même temps que la bascule B voit le bord d'horloge 2. D'un point de vue externe, ce sont des bords différents, mais le circuit ne fonctionne pas s'en fiche tant que les bords sont parfaitement alignés.
ajs410
1

le décalage d'horloge est lorsque l'horloge arrive à différents points du circuit à des moments différents en raison de la distance, de la capacité, etc., ce qui peut entraîner un dysfonctionnement. Je pense que le négatif doit être quand l'horloge arrive à ce point avant d'arriver à la référence

user12108
la source