¿Qué es la inclinación del reloj y por qué puede ser negativo?

10

Mi compilador HDL (Quartus II) genera informes de tiempo. En él, los nodos tienen una columna de "sesgo de reloj". La única definición de sesgo de reloj que encontré está en la documentación de TimeQuest (consulte la página 7-24):

Para especificar manualmente la incertidumbre del reloj, o sesgo, para las transferencias de reloj a reloj, use el set_clock_uncertaintycomando

Entonces, si el sesgo es "incertidumbre", ¿por qué algunos de mis sesgos del reloj son negativos (por ejemplo, -0.048)? ¿Qué es exactamente la inclinación del reloj?

Randomblue
fuente

Respuestas:

8

De Wikipedia :

En un circuito síncrono, la desviación ( ) es la diferencia en el tiempo de llegada entre dos registros adyacentes secuencialmente. Dados dos registros secuencialmente adyacentes y con tiempos de llegada del reloj en los pines del reloj de registro como y respectivamente, entonces la desviación del reloj se puede definir como: R i R j T C i T C jTSkmiwRyoRjTCyoTCj

TSkmiwyo,j=TCyo-TCj

La inclinación del reloj puede ser positiva o negativa. Si las señales del reloj están en completa sincronía, entonces la inclinación del reloj observada en estos registros es cero.

Entonces, la cantidad de desviación del reloj en un registro es relativa a otro registro. Como es relativo, puede ser positivo o negativo.

Algunas ilustraciones:

sesgo positivo / negativo sesgo principal / rezagado

Tome, por ejemplo, una transferencia dentro del reloj como se define en el documento de TimeQuest que proporcionó:

Las transferencias dentro del reloj ocurren cuando la transferencia de registro a registro se lleva a cabo en el núcleo del dispositivo y los relojes de origen y destino provienen del mismo pin de salida PLL o puerto de reloj.

Entonces, si el registro de destino está físicamente más cerca de los circuitos de generación de reloj, entonces el reloj probablemente llegará al registro de destino antes de llegar al registro de origen, lo que dará como resultado un sesgo de reloj inicial que en realidad es positivo. Si el registro de destino recibió el borde del reloj después del registro de origen, la inclinación del reloj sería retrasada o negativa.

Dicho de otra manera, el sesgo del reloj es la incertidumbre acerca de cuán juntos en el tiempo un borde del reloj alcanzará dos registros separados dados en unidades de tiempo con respecto a un registro fuente en una transferencia de registro a registro.

Ampliar esa diferencia para incluir transferencias entre horas y tiempos de configuración y espera se vuelve un poco complicado. Por lo tanto, probablemente sea más fácil pensarlo como "cuán sincrónico" es un límite o un tiempo de retención entre dos registros. Tendemos a pensar en "sincrónico" como "que ocurre al mismo tiempo". Pero las cosas rara vez ocurren exactamente al mismo tiempo. Entonces, debemos ponerle tolerancia a ese tiempo. Y las tolerancias a menudo se expresan en términos de positivo y negativo (es decir, ±).

Embedded.kyle
fuente
10

Los dispositivos lógicos digitales modernos generalmente están diseñados (*) con "práctica de diseño sincrónico": un estilo de diseño de transferencia de registro (RTL) activado por borde globalmente sincrónico: todos los circuitos secuenciales se dividen en registros activados por borde conectados a la señal de reloj global CLK y pura lógica combinacional.

Ese estilo de diseño permite a las personas diseñar rápidamente sistemas de lógica digital sin tener en cuenta el tiempo. Su sistema "simplemente funcionará" siempre que haya suficiente tiempo de un borde del reloj al siguiente para que el estado interno se estabilice.

Con este estilo de diseño, la asimetría del reloj y otros problemas relacionados con el tiempo son irrelevantes, excepto para determinar "¿Cuál es la frecuencia de reloj máxima para este sistema?".

¿Qué es exactamente la inclinación del reloj?

Por ejemplo:

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

En hardware real, la señal "CLK" nunca cambia exactamente simultáneamente en cada registro. El sesgo del reloj Tskew es el retraso del reloj aguas abajo en relación con el reloj aguas arriba ( a ):

Tskew (source, destination) = destination_time - source_time

donde source_time es el tiempo de un flanco de reloj activo en el registro de origen aguas arriba (en este caso, R1 o R2), y destination_time es el tiempo del "mismo" flanco de reloj activo en algún registro de destino aguas abajo (en este caso, R3) .

  • inclinación negativa del reloj: el CLK en R3 cambia antes que el reloj en R1.
  • inclinación positiva del reloj: el CLK en R3 cambia después del reloj en R1.

¿Cuál es el efecto de la inclinación del reloj?

(tal vez un diagrama de tiempo aquí aclararía esto)

Para que las cosas funcionen correctamente, incluso en el peor de los casos, las entradas de R3 no deben cambiar durante el tiempo de configuración o el tiempo de espera de R3. En otro peor, para que las cosas funcionen correctamente, debemos diseñar cosas que:

Tskew (R1, R3) <Tco - Th.

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

dónde:

  • Tcalc es el tiempo máximo de ajuste en el peor de los casos de cualquier bloque de lógica combinacional en cualquier parte del sistema. (A veces podemos rediseñar el bloque de lógica combinacional que se encuentra en la ruta crítica, empujando las piezas hacia arriba o hacia abajo, o insertando otra etapa de tubería, por lo que el nuevo diseño tiene un Tcalc más pequeño, lo que nos permite aumentar la velocidad del reloj) .
  • Tclk_min es el período de tiempo mínimo desde un borde de reloj activo hasta el siguiente borde de reloj activo. Lo calculamos a partir de la ecuación anterior.
  • Tsu es el tiempo de configuración del registro. El fabricante del registro espera que usemos un reloj lo suficientemente lento como para cumplir siempre con este requisito.
  • Este es el tiempo de espera de registro. El fabricante del registro espera que controlemos el sesgo del reloj lo suficiente como para cumplir siempre con este requisito.
  • Tco es el retardo de reloj a salida (tiempo de propagación). Después de cada flanco de reloj activo, R1 y R2 continúan manejando los valores antiguos a la lógica combinacional por un corto tiempo Tco antes de cambiar a los nuevos valores. Esto lo establece el hardware y lo garantiza el fabricante, pero solo mientras cumplamos con los requisitos Tsu y Th y otros requisitos que el fabricante especifique para el funcionamiento normal.

Un sesgo demasiado positivo es un desastre no mitigado. Demasiada asimetría positiva puede (con algunas combinaciones de datos) causar "caminos furtivos" de tal manera que, en lugar de que R3 bloquee los "datos correctos" en el reloj N + 1 (una función determinista de los datos previamente bloqueados en R1 y R2 en el reloj N) , los nuevos datos enclavados en R1 y R2 en el reloj N + 1 pueden filtrarse, alterar la lógica combinacional y hacer que los datos incorrectos se enganchen en R3 en el "mismo" borde del reloj N + 1.

Cualquier cantidad de sesgo negativo puede "repararse" disminuyendo la velocidad del reloj. Solo es "malo" en el sentido de que nos obliga a ejecutar el sistema a una velocidad de reloj más lenta, a fin de dar a las entradas de tiempo R3 para que se asienten después de que R1 y R2 bloqueen los nuevos datos en el borde del reloj N, y luego R3 bloquea el resultado en "el próximo" borde del reloj N + 1.

Muchos sistemas usan una red de distribución de reloj que intenta reducir la inclinación a cero. Contra-intuitivamente, agregando cuidadosamente retrasos a lo largo de la ruta del reloj, la ruta desde el generador del reloj hasta la entrada CLK de cada registro, es posible aumentar la velocidad aparente que el frente de onda del borde del reloj viaja físicamente desde la entrada CLK de un registro hasta el La siguiente entrada CLK del registro es más rápida que la velocidad de la luz.

La documentación de Altera menciona

"Evite usar la lógica combinacional en las rutas del reloj porque contribuye a la distorsión del reloj".

Esto se refiere al hecho de que muchas personas escriben HDL que se compila en un FPGA de una manera que de alguna manera hace que algo más que la señal CLK global controle la entrada CLK local de algunos registros. (Esto puede ser una lógica de "activación de reloj" para que los nuevos valores se carguen en un registro solo cuando se cumplen ciertas condiciones; o lógica de "divisor de reloj" que solo deja pasar 1 de N relojes, etc.). Esa CLK local generalmente se deriva de la CLK global de alguna manera: la CLK global marca, y luego la CLK local no cambia o (un breve retraso después de la CLK global para que la señal se propague a través de ese "algo más") el CLK local cambia una vez.

Cuando ese "algo más" impulsa el CLK del registro descendente (R3), hace que la inclinación sea más positiva. Cuando ese "algo más" impulsa el CLK del registro ascendente (R1 o R2), hace que la inclinación sea más negativa. Ocasionalmente, lo que impulsa el CLK del registro ascendente y lo que impulsa el CLK del registro descendente tienen prácticamente el mismo retraso, lo que hace que la diferencia entre ellos sea prácticamente cero.

La red de distribución de reloj dentro de algunos ASIC está diseñada deliberadamente con pequeñas cantidades de sesgo de reloj positivo en algunos registros, lo que le da a la lógica combinacional un poco más de tiempo para establecerse y, por lo tanto, todo el sistema puede ejecutarse a una velocidad de reloj más rápida. Esto se llama "optimización de inclinación de reloj" o "programación de inclinación de reloj", y está relacionado con " reajuste ".

Todavía estoy desconcertado por el set_clock_uncertaintycomando: ¿por qué querría "especificar manualmente" sesgo?

(*) Una excepción: sistemas asincrónicos .

davidcary
fuente
Creo que la idea detrás de agregar demora para minimizar el sesgo del reloj a veces puede involucrar retrasar el reloj en casi un ciclo completo. Una vez que el reloj está en funcionamiento, puede configurarlo para que el flip flop A vea el borde del reloj 1 al mismo tiempo que el flip flop B ve el borde del reloj 2. Desde una vista externa, son bordes diferentes, pero el circuito no No importa mientras los bordes estén perfectamente alineados.
ajs410
1

La inclinación del reloj es cuando el reloj llega a diferentes puntos del circuito en diferentes momentos debido a la distancia, la capacitancia, etc., lo que puede causar un mal funcionamiento. Creo que lo negativo debe ser cuando el reloj llega a ese punto antes de llegar a la referencia

usuario12108
fuente