Ventaja de la habilitación del reloj sobre la división del reloj

Tengo un diseño FPGA que usa diferentes relojes. Hay un reloj de referencia de 100 MHz proporcionado por un oscilador. El reloj de referencia se utiliza en un DCM (Xilinx FPGA) para generar 3 relojes relacionados, 100 MHz, 50 MHz y 10 MHz (sin desplazamiento de fase).
En situaciones como esta, el consejo de los proveedores de herramientas y colegas es usar solo un reloj, el de 100 MHz, y en lugar de los otros relojes, crear habilitaciones de reloj que solo estén activas cada 5 o 10 ciclos de reloj.
¿Cuál es la ventaja de hacer esto? Sí, solo habrá un reloj y el análisis de tiempo será más fácil, pero eso es un problema de herramientas y no debe dictar decisiones de diseño fundamentales.
Especialmente para un diseño con una alta utilización de dispositivos, puedo ver ventajas para los relojes divididos, ya que, por ejemplo, el dominio de reloj de 10 MHz tendrá un tiempo mucho más fácil para lograr el cierre de tiempo y "dejará más espacio" para la ubicación y enrutamiento de la lógica en el dominio de reloj de 100 MHz. Con el reloj habilitado, descuidadamente regalaría esta ventaja.

Tu último párrafo no es realmente cierto. Le diría al análisis de tiempo que es un reloj de varios ciclos (es decir, en relojes uno cada n ciclos) y siempre que no use bordes ascendentes y descendentes (mala idea de todos modos) en el diseño, entonces no pierde nada por funcionando a 100 MHz+CE: tiene en cuenta la habilitación del reloj al calcular los retrasos permitidos.
@Tom: si solo tengo un reloj de 100 MHz, ¿cómo defino fácilmente rutas de varios ciclos para, por ejemplo, toda la lógica que se ejecuta a 10 MHz? ¿Está pensando en restringir todas las instancias de módulos que deberían ejecutarse a la frecuencia de reloj más baja? Si hay un CDC dentro de uno o más módulos, las restricciones aumentarán rápidamente en número y se volverán desordenadas (y, por lo tanto, serán una carga al migrar a una plataforma diferente o cambiar la jerarquía de diseño).
Depende de la herramienta de sincronización. TimeQuest le permite especificar rutas de ciclos múltiples basadas en cualquier cosa impulsada por un registro de habilitación de reloj específico (no cada registro individualmente). Tendría que encontrar la documentación de su herramienta para ver qué es compatible.

Respuestas (1)

Hay varias ventajas de esta metodología que se me ocurren:

  1. Red de reloj : en primer lugar, solo tiene un reloj en lugar de tres. Esto significa que hay menos competencia por los recursos de enrutamiento de relojes globales y locales. Por lo general, solo hay una pequeña cantidad de árboles de reloj de baja desviación, por lo que minimizar los requisitos de uso puede ayudar al enrutamiento.

  2. Restricciones de ALM : según la estructura de sus ALM/bloques lógicos, es posible que solo pueda registrar cada bloque desde un solo reloj; es decir, no puede tener dos registros en dos dominios de reloj diferentes en el mismo bloque. Si este es el caso de su FPGA, el uso de un solo dominio de reloj habilitado para reloj podría permitir que la lógica esté más compacta en un diseño que tiene un alto porcentaje de bloques utilizados. Un empaque más ajustado puede conducir a una mayor probabilidad de cumplir con el tiempo ya que todo está más cerca.

  3. Transferencia de dominio de reloj : otra consideración importante es ir entre relojes. Si necesita transferir datos entre los dominios del reloj, hay dos opciones.

    Si no tiene referencia entre los relojes como sería el caso si divide el reloj completo (no sabe qué borde del reloj rápido corresponde al reloj lento), entonces su transferencia debe ser asíncrona, lo que implica el dolor de cabeza adicional de FIFOs para datos y cadenas sincronizadoras para señales de control.

    Por otro lado, si usa una habilitación de reloj para ralentizar las cosas, sabe exactamente cuándo se cruzarán el reloj lento y el reloj rápido; lo sabe al monitorear la señal de habilitación del reloj. Por ejemplo, si desea transferir datos de su dominio /10 a su dominio /1, entonces no necesita FIFO para hacerlo, simplemente diga que la señal de activación del reloj también es una señal válida. Debido a que son el mismo reloj, no se necesita transferencia de dominio de reloj.

    Es posible realizar transferencias de dominio desde relojes PLL si puede realizar un seguimiento de los bordes del reloj; por ejemplo, pasar de un /1 a un /2 y viceversa es fácil porque puede comparar potencialmente los relojes rápidos y lentos directamente para sincronizar . Sin embargo, esto depende de la estructura del FPGA; algunos no permitirán que los relojes se alimenten fácilmente para buscar tablas como entradas de datos.

  4. Recursos valiosos : en los FPGA más pequeños, los PLL son pocos y distantes entre sí. Por ejemplo, los FPGA Spartan-6 LX9, si no recuerdo mal, ¡solo tienen dos sitios PLL! Idealmente, desea guardarlos para cosas como interfaces externas (LVDS, memoria, etc.) y no usarlos para la división general del reloj. ¿Por qué usar un PLL valioso para nada más que la división de reloj de enteros cuando es posible hacerlo en lógica general?

    Además, al usar las habilitaciones de reloj, su división es simplemente un contador que puede implementarse en cualquier parte de la FPGA. Los PLL, por otro lado, están ubicados en áreas específicas. Digamos que necesita un reloj local en un lado del chip, pero el único PLL libre está en el otro lado. Debe usar no solo un PLL remoto, sino también un enrutamiento de reloj global valioso para llevar el reloj hasta el otro lado del chip donde se usa localmente. Si, en cambio, crea un contador para habilitar el reloj, puede colocarlo justo al lado de la lógica, lo que reduce el uso de recursos valiosos.

Esas son solo las razones que se me vienen a la cabeza. Intentaré pensar un poco más, y también agregaré algunos argumentos de "por qué PLL es favorable a CE".


En respuesta a su punto final sobre el tiempo. En la práctica, el uso de un reloj lento o un reloj rápido habilitado para reloj no afecta demasiado al enrutamiento. Realmente sus diseños deberían tener todos los registros usando el flanco ascendente de un reloj (o todos usan el flanco descendente) pero no mezclar y combinar (excepto tal vez en los búferes de E/S DDR). Como resultado, ambos relojes aún tienen sus bordes sensibles al mismo tiempo. El reloj rápido tiene n veces más, pero el reloj no está habilitado, por lo que estos se ignoran.

Esto significa que puede decirle a su herramienta de análisis de tiempo que el reloj es multiciclo, es decir, solo uno de n ciclos es válido, o que es un reloj más lento con un ciclo de trabajo estrecho. Ambas formas le permiten a la herramienta saber que puede permitir múltiples períodos de configuración de reloj rápido y tiempo de espera en sus cálculos (porque los valores de registro no van a cambiar cuando el reloj no está habilitado).

De acuerdo, tal como lo veo, se reduce a una compensación entre el uso de más recursos de enrutamiento y sincronización global en caso de que un reloj de referencia esté realmente dividido, o el uso de una lógica más general y recursos de enrutamiento para generar y distribuir el reloj. habilita. Dependiendo de la arquitectura y de qué recursos son escasos/abundantes, ambas técnicas pueden ser soluciones viables. Gracias por arrojar algo de luz sobre un aspecto de diseño del reloj FPGA que muchas personas repiten como un mantra sin dar ningún argumento objetivo.
Una cosa que creo que sería útil, pero que no he visto hacer a menudo, sería hacer que todo lo que se ejecuta fuera del reloj principal se encienda, por ejemplo, el borde ascendente del reloj principal, y hacer que todos los relojes divididos cambien en el reloj principal descendente. borde. A menos que uno esté presionando los límites de la velocidad del dispositivo, eso permitiría que las señales crucen los dominios del reloj sin demora (las señales que pasan entre dominios divididos podrían limpiarse sin demora usando un solo registro activado por el borde ascendente del reloj maestro). ¿Se utilizan mucho estas técnicas?