¿Qué opciones tengo al sintetizar los registros de control?

5

Cuando su diseño incluye registros de control que se configuran / leen en un dominio de reloj dedicado (SPI o I2C, etc.), ¿cómo los trata generalmente?

Por ejemplo:

  • ¿Los mantiene en su propio dominio de reloj y false_path los lleva a donde sea que vayan, sin preocuparse demasiado por la metastabilidad?

  • ¿O quizás tenga mucho cuidado para asegurarse de que haya fracasos metaestables en cada cruce de dominio, aumentando el área en el caso de grandes mapas de reg? Y si se extienden a múltiples dominios de reloj, bueno, ¿simplemente cuelga varios sincronizadores de la línea de control?

¿Alguna otra sugerencia que me falte?

    
pregunta Marty

3 respuestas

4

Debes prestar atención CADA cada vez que cruces dominios de reloj. Para cada señal, debe analizarla para ver si se requiere una lógica especial o no. Si no lo haces, eventualmente te quemarás, y probablemente te quemes gravemente. Es posible que gran parte de tu lógica no necesite una sincronización especial, pero no puedes asumir que no se necesita nada.

Una cosa que es muy importante, pero que incluso los expertos incluso pasan por alto, es que no puede simplemente registrar dos veces (o hacer doble reloj) los buses (std_logic_vector en VHDL). Si lo hace, eliminaría los problemas de metastabilidad, pero no los errores de datos debidos al sesgo entre los bits en el bus. Se requiere una lógica especial para estos casos.

    
respondido por el user3624
2

El único caso en el que "no preocuparse demasiado por la metastabilidad" es una opción es con señales cuasiestáticas, señales que no cambian cuando se usan activamente. Los ajustes de configuración que se aplican una vez antes de comenzar a usar la función lógica primaria y luego se dejan solos, generalmente cumplen con esta descripción. Esta es una práctica de diseño arriesgada. Si lo haces el tiempo suficiente, eventualmente te quemarás, pero tal vez sea un riesgo que estés dispuesto a correr. También tenga en cuenta que cualquier ruta intencional entre dominios que agregue hará que sea más difícil identificar rutas no intencionales si ejecuta un verificador automatizado de rutas entre dominios.

Si eso lo aleja del uso no sincronizado de los datos de registro, puede considerar:

  • Si la mayoría de los usos de los bits de registro están en un solo reloj de mayor velocidad, puede implementar la interfaz I2C / SPI en el dominio de reloj rápido. Sincronice inmediatamente las entradas de baja velocidad con el reloj rápido.

  • Agregue la lógica de sincronización a la interfaz de lectura / escritura del registro en lugar de la corriente descendente de los bits de registro individuales. Para múltiples relojes de destino, puede implementar un repetidor de uno a muchos. No estoy seguro de qué tan bien este enfoque encaja con los protocolos I2C / SPI.

respondido por el Andy
1

Obtenga sus señales I2C y SPI en su dominio de reloj principal de una manera muy controlada, preocupándose todo el tiempo por la metastabilidad. Clave hacia abajo: restringe las herramientas para que tus flip-flops de resolución de metastabilidad no se coloquen en lados opuestos del chip y no se repliquen (por lo general, es esto lo que te permite cruzar dominios de reloj, en lugar de metastabilidad como tal)

Una vez que hayas hecho eso, tus registros de control y estado pueden existir en tu dominio de reloj principal y no debes preocuparte más.

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas