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
Yo preferiría un reinicio asincrónico sobre un reinicio síncrono por algunas razones (sin ningún orden en particular):
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.
fuente
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.
fuente
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').
fuente
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.
fuente