Restablecer: síncrono vs asíncrono

15

He estado trabajando con fpgas durante años, y siempre usé restablecimientos síncronos para cada parte (que lo necesita) de mis circuitos. Ayuda a que el circuito se reinicie globalmente en un ciclo de reloj dado.

Sin embargo, me dijeron que en los circuitos ASIC, las personas tienden a usar el reinicio asíncrono en todas partes. Me pregunto por qué, y si es el caso en algunos diseños de fpga también. Me encantaría escuchar opiniones profesionales.

Gracias

Aurelien Ribon
fuente

Respuestas:

11

Parece que hay muchos puntos de vista sobre este.
Aserción asincrónica, se dice que la desaserción sincrónica es una buena práctica. Esto evita el problema de que el reloj no se ejecute (o se ejecute demasiado lento para capturar la señal de reinicio) en la aserción síncrona y la posible metaestabilidad en la desaserción asíncrona.

Usaría un sincronizador de reinicio (dos FF) con la salida vinculada al resto de los reinicios de los diseños:

Reiniciar

Par de discusiones:
Restablecimiento asíncrono y sincronización
Letters On Sync vs. Async Resets

Oli Glaser
fuente
¿Cómo se comparan los requisitos de tiempo de configuración / retención entre la liberación de la señal de reinicio de un pestillo y su reloj con los de la entrada de datos? Me sentiría más cómodo si los pestillos del sistema vieran el final de la señal de reinicio en el borde del reloj inactivo. ¿Se garantizaría que la liberación de un reinicio asíncrono en un borde de reloj activo no afecte el ciclo donde ocurre?
supercat
No, no se garantiza que la liberación del reinicio de forma asincrónica esté limpia debido al tiempo de recuperación del reinicio necesario (como configurar / retener) Es por eso que soltaría el reinicio sincrónicamente.
Oli Glaser
Mi pregunta es si tener un latch1 libera la señal de reinicio que alimenta latch2 en el mismo borde de reloj que latch2 estaría usando es completamente kosher, es decir, si el tiempo mínimo de propagación desde el reloj de latch1 a su salida satisfaría el requisito de retención para la entrada de reinicio de latch2. Por cierto, ¿qué opinas de mi respuesta anterior? El circuito que dibujó ofrece poca inmunidad a los pulsos en ejecución en la línea de reinicio, cuando la inmunidad casi total debería ser posible.
Supercat
Tras una consideración adicional, se podría agregar protección contra los pulsos en tiempo real al agregar un tercer pestillo, y hacer que su señal de reinicio asíncrono sea una versión suprimida de la señal alimentada a los dos primeros, de modo que una señal que perturbe asincrónicamente el tercer pestillo sería garantizado para restablecer limpiamente los dos primeros. Un pulso de ejecución en la entrada de reinicio podría hacer que la línea de reinicio principal en el chip obtenga un pulso de ejecución, pero si ocurriera tal impulso, sería seguido por un pulso de reinicio síncrono.
supercat
Lo siento, creo que entiendo lo que quieres decir ahora. Si te refieres a la salida del segundo pestillo en el sincronizador para restablecer FF del sistema, entiendo que el tiempo de recuperación de restablecimiento es generalmente menor que el tiempo de configuración de datos para el mismo FF, por lo que debería estar bien. Estoy de acuerdo con los pulsos runt, no ofrece inmunidad a aquellos sin algo como lo que sugieres que se implemente.
Oli Glaser
7

Yo preferiría un reinicio asincrónico sobre un reinicio síncrono por algunas razones (sin ningún orden en particular):

  • Agregar un conjunto asincrónico o una función de reinicio a un flip-flop probablemente dará como resultado un diseño más pequeño debido a la integración de la lógica en una sola celda (frente a un flip-flop no reiniciable con una puerta AND en la entrada)
  • Menos puertas da como resultado un cableado / lugar y ruta menos congestionados
  • Es un proceso más simple / fácil restablecer el chip (más fácil de usar / prueba)
  • Hacer que la ruta de reinicio sea asincrónica simplifica la partición del análisis de temporización estática de la señal de reinicio
  • Un reinicio sincrónico agregaría lógica adicional a la ruta crítica del flujo de datos y dificultaría el cumplimiento de los requisitos de configuración y retención
  • Mientras que un FPGA tiene una función lógica arbitraria de 4-6 entradas en la entrada, usted "paga" por cada entrada en una puerta en un ASIC (más entradas = puerta más grande; funciones complejas = puertas múltiples)

En última instancia, no creo que ninguno de estos problemas sea un obstáculo, pero definitivamente contribuiría a una fuerte preferencia de reinicio asíncrono en los ASIC.

W5VO
fuente
2
Un peligro con el uso de reinicios asíncronos en la lógica interna es que un pulso de ejecución en la entrada de reinicio puede causar estragos. Si se va a permitir que los circuitos se reinicien de forma asincrónica, se debe diseñar el circuito de entrada de tal manera que se garantice que cualquier impulso de reinicio suficiente para que cualquier tipo de reinicio asíncrono llegue al circuito interno también se garantice un reinicio síncrono para que ocurra.
supercat
4

El reinicio asíncrono con desautorización síncrona funciona muy bien. Como se mencionó anteriormente, los flops de reinicio asíncrono son más pequeños y no requieren un reloj activo para garantizar el reinicio, por lo que puede forzar un reinicio de una parte (generalmente un estado conocido de baja potencia) con solo alimentación y un solo pin o cable de alimentación. en reinicio.

Si realmente quiere profundizar en esto, puede leer los documentos de Cumming sobre esto, en particular:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

Salud.

Mixed_signal_old
fuente
Una cuestión que creo que el señor Cummings echa de menos en su artículo es que, si bien los detectores de fallas pueden suprimir lo que de otro modo serían pulsos en tiempo real, también pueden convertir lo que serían pulsos de longitud legítima en pulsos en tiempo real. El efecto de esto es que un pulso que tiene la longitud correcta podría bloquear arbitrariamente el estado del sistema sin causar un reinicio adecuado. Ya que es muy difícil de evitar metaestabilidad en todos los casos sin doble sincronización, sugeriría que tiene dos circuitos asíncrono de captura, uno de los cuales tiene un criterio 'más estricta' glitch-detectar, y luego ...
supercat
... organice las cosas de modo que un pequeño fallo pueda o no provocar un reinicio uno o dos ciclos más tarde, pero un pulso lo suficientemente largo causará un reinicio inmediato. Además, si bien el uso de entradas de 'restablecimiento asíncrono' en flip flops puede ayudar a la síntesis en algunas topologías, eso no significa que se deban usar de forma asincrónica. Puede ser útil que la mayoría de las señales de reinicio internas se sincronicen con el reloj incluso cuando se activan las entradas de "reinicio asíncrono" en los pestillos.
supercat
Cummings dice que los filtros de fallas "son feos". Nunca he visto uno en los circuitos integrados en los que he trabajado. Tendemos a usar disparadores Schmitt en todas las celdas del panel de entrada para evitar estos problemas, y los reinicios de encendido que uso se limpian de manera similar. Por cierto, ¿en qué casos tendrías pulsos cortos en una línea de reinicio? He visto esto en algunos escenarios de prueba de escaneo, pero todavía están en el orden de un ciclo de reloj largo, no pulsos cortos intencionados. En su último comentario, la desaserción de reinicio debe sincronizarse con el reloj para evitar violaciones de s / h en el reinicio y garantizar que todos los flops salgan de reinicio en el mismo borde.
mixed_signal_old
Los filtros de falla a menudo son útiles para determinar qué tipos de entradas pueden causar metaestabilidad, pero no eliminan los estados metaestables. El objetivo con un filtro de falla debería ser asegurar que cualquier estado metaestable que pueda ocurrir se encuentre en situaciones de "no me importa". A veces es necesario que un dispositivo sea capaz de restablecer otro dispositivo que esté conectado a él. A menos que el cable de reinicio esté doblemente sincronizado, habrá un riesgo de pulsos de ejecución de eventos ESD cercanos y otras molestias similares.
supercat
En cuanto al último punto, solo estaba diciendo que incluso uno está sintetizando un diseño en hardware que proporciona entradas de reinicio asíncrono "gratis" en flip flops, eso no significa que uno no pueda sincronizar completamente la señal con el reloj principal en ambos aserción y liberación. Las señales orientadas hacia el exterior pueden tener que reaccionar de forma asincrónica a una entrada de reinicio, pero eso no significa que uno deba reiniciar asincrónicamente todos los pestillos. De hecho, para evitar estados inconsistentes, puede ser útil que todos los pestillos, excepto dos, estén sincronizados.
supercat
2

Otro enfoque, que parecería incluso más seguro que el enfoque de 'aserción asincrónica / liberación de sincronización', sería tener un detector de reinicio asíncrono (como se describe en otra parte, con 'aserción' asincrónica y 'liberación' síncrona), pero tener la salida de esa puerta cualquier dispositivo de E / S orientado hacia afuera sin restablecer nada asincrónicamente (que no sea el pestillo en el detector). Si uno usa dos detectores de reinicio asíncrono, uno para las líneas de E / S y otro para alimentar el detector de reinicio síncrono, y si uno diseña el uno para las líneas de E / S de modo que solo se dispare mediante pulsos de reinicio que son lo suficientemente fuertes como para ser confiables desconecte el detector principal, uno puede evitar incluso que las salidas fallen en casos que no van a reiniciar la CPU. Tenga en cuenta que si uno hace esto, un pulso de restablecimiento de longitud legítima restablecerá las salidas de forma asincrónica,

Otra cosa a tener en cuenta es que los sistemas a menudo tienen algunos registros que no deberían verse afectados por un reinicio. Si un reinicio asincrónico pudiera golpear los circuitos que escriben en esos registros, sería posible que un pulso de reinicio que llegue en el momento incorrecto golpee esos registros, incluso si es un pulso limpio (no en tiempo de ejecución). Por ejemplo, si el código intenta escribir en la dirección 1111 y un restablecimiento asíncrono que llega justo antes de que un pulso de reloj fuerce a uno de los pestillos de dirección a cero justo cuando llega el pulso de reloj, eso podría causar una escritura errónea en la dirección 1110. Mientras uno podría usar múltiples líneas de reinicio interno con retrasos combinatorios para garantizar que las escrituras de registro se deshabilitaron antes de que la dirección se bloqueara, el uso de lógica de reinicio interno síncrono evita el problema por completo.

Por cierto, aquí hay un circuito que ilustra el concepto. Cerca de la esquina inferior izquierda hay dos entradas lógicas para restablecer. Uno generará un pulso de reinicio "limpio", y el otro generará uno realmente desagradable. El LED amarillo indica reinicio del sistema principal; el LED cian indica habilitación de E / S. Pulsar un reinicio limpio provocará un "reinicio" inmediato de las salidas; presionar un reinicio repulsivo provocará un reinicio retrasado de las salidas o las dejará sin afectar (en el simulador, no hay forma de causar el caso de 'no afectarlas').

Super gato
fuente
Creo que esto suena como una buena idea. tantos tonos de gris con cosas aparentemente simples como restablecer.
Oli Glaser
0

Como ingeniero experimentado ( 3 años con diseño FPGA y sistemas integrados ), le digo que debe consultar la hoja de datos y la guía del usuario de FPGA. No es una respuesta simple.

Tienes que hacer que tus FIT de diseño sean del tipo FPGA que elijas . Algunos FPGA tienen FlipFlops que fueron diseñados para restablecer Async, algunos están diseñados para restablecer Sync.

Debe consultar la guía de usuario de FPGA para saber qué tipo de FlipFlops tiene.

El Implementador / Mapeador elegirá rutas dedicadas para su reinicio (el código puede ejecutarse a una frecuencia más alta y ocupa menos espacio ) si hace coincidir su código con el tipo de primitivas FPGA.

Su diseño funcionará en CUALQUIER caso , pero a veces el Implementador de FPGA hará todo lo posible para que su lógica funcione ( agrega más lógica ), pero eso causará una frecuencia máxima más baja y / o más recursos de FPGA.

Ejemplo: probado con ZYNQ de Xilinx ( FPGA está diseñado para reinicio sincronizado; consulte la guía del usuario de primitivas ). Cambiando restablecimiento de asíncrono a sincronización , la frecuencia estable máxima pasó de 220MHz a 258MHz y, por lo tanto, pasé mi margen de frecuencia.

También podría agregar que el Implementador no sabe qué es un reloj y una señal de reinicio. Asigna pines flipflop a las señales por ORDEN, no por nombre. Entonces, en algunos FPGA, el implementador elige la primera señal después de "process () begin" en VHDL como el reloj, en algunos como el reinicio, dependiendo de qué FPGA esté configurado el implementador.

Achex
fuente
No estoy de acuerdo con su afirmación de que "el Implementador no sabe qué es un reloj y una señal de reinicio". Las herramientas de síntesis deducen cuál es el reloj y cuál se restablece por cómo se usan. La señal de reloj se usa con una especificación de borde, el restablecimiento no. Además, cualquier flip-flop se puede usar con una especificación de reinicio síncrono y, como observó, esto a menudo conduce a rutas críticas más rápidas.
Joe Hass