La pregunta:
¿Cuándo es mejor usar pestillos que chanclas en un FPGA que admite ambos?
Fondo:
Es un principio bien conocido que los pestillos transparentes sensibles al nivel deben evitarse en los FPGA, y los flip-flops sensibles al borde deben usarse exclusivamente. La mayoría de las arquitecturas FPGA admiten de forma nativa tanto los pestillos como las chanclas.
El consejo general, incluso de los proveedores de FPGA, es tener cuidado con los pestillos, o nunca usar pestillos, etc. Hay muy buenas razones para este consejo, cuyos detalles son bien conocidos. Sin embargo, la mayoría de los consejos están redactados, "no use pestillos a menos que sepa que los necesita".
Soy un experimentado diseñador de FPGA, y con los años cada vez que creía saber que necesitaba un pestillo, me di cuenta rápidamente de que había una mejor manera de hacerlo con chanclas. Estoy interesado en escuchar ejemplos de cuando usar pestillos es inequívocamente mejor.
Nota IMPORTANTE:
Los pestillos frente a las chanclas a menudo enfurecen a la gente. Solo me interesa la respuesta a la pregunta. Las respuestas que explican la diferencia entre los pestillos y los flip-flops, explicando las razones para NO usarlos, detallan por qué los flip-flops son mejores que los pestillos, hablando de cómo los pestillos son mejores en objetivos que no son FPGA, etc., serían totalmente fuera de tema.
Respuestas:
Su pregunta es básicamente, "¿cuándo sabe que necesita pestillos?" Lo cual, como implicaste, es una pregunta subjetiva. Espere más opiniones que hechos como respuestas. Dicho esto, aquí está mi opinión:
Yo, como usted, a menudo encuentro mejores formas de usar chanclas para evitar los pestillos. La lógica resultante es a menudo más elegante y robusta. Pero hay momentos en que no tengo suficiente control sobre la lógica para evitar bloqueos. Por ejemplo, podría estar interactuando con un bus de procesador que requiere pestillos para cumplir con las especificaciones deseadas. Como no puedo rediseñar la CPU o el bus, estoy atascado con el pestillo.
En los últimos 13 años, esa es la única vez que he necesitado pestillos.
fuente
Las chanclas a menudo son preferibles a los pestillos porque solo tienen cuatro condiciones / restricciones de carrera:
Si se cumplen esas restricciones, el resultado de un flip flop será completamente "limpio" y libre de inestabilidad. Además, el tiempo de un flip flop es en cierto sentido "digital": siempre que se cumplan las restricciones de tiempo, la salida solo cambiará dentro de una ventana predecible después de un borde de reloj activo, independientemente del tiempo de entrada. El efecto de chanclas en cascada es, por lo tanto, predecible, independientemente de la profundidad. Por el contrario, la sincronización de una salida de enganche es mucho más "analógica". Un retraso en la señal que entra en un pestillo puede causar un retraso en la señal que sale. Incluso si se cumplen las propias restricciones del pestillo, este retraso puede causar problemas aguas abajo.
Recomendaría usar pestillos en los casos en que el comportamiento requerido de las salidas de un chip puede ser modelado de manera más razonable por uno. Por ejemplo, se supone que el hardware de uno se comporta como un convertidor de serie a paralelo donde, entre los bordes ascendente y descendente del primer reloj después de una sincronización de trama, la primera salida sigue la entrada; entre los bordes ascendente y descendente del segundo reloj, la segunda salida rastrea la entrada, etc. Se podría diseñar un circuito usando flip flops y lógica puramente combinatoria que produciría tal comportamiento siempre que se cumplan las restricciones de tiempo, pero dicho circuito sería más complicado que uno que usa pestillos, y sería más propenso a comportarse de manera extraña si no se cumplieran las restricciones de tiempo.
fuente
En mi trabajo a veces tenía que implementar pestillos en el FPGA, pero siempre era una solución de "último recurso". Las aplicaciones típicas incluían conexiones con interfaces asíncronas o buses, si no pudiera asegurar un reloj con la velocidad suficiente para garantizar un muestreo y sincronización adecuados del bus y las señales de control.
El principal problema es que el pestillo es un bloque asíncrono. Por lo tanto, debe asegurarse de que las funciones combinacionales que generan señales de entrada para el pestillo no tengan carrera . De lo contrario, pueden generar fallas , que pueden engancharse y causar riesgos en su sistema.
Para evitar las carreras, debes implementar estas funciones combinacionales de forma especial y redundante. Desafortunadamente (en este caso particular ;-), de lo contrario es una muy buena propiedad) las herramientas de síntesis FPGA optimizan su diseño eliminando toda redundancia. Por lo tanto, si desea implementar un pestillo en FPGA, debe implementarlo "a mano" y protegerse contra la optimización (por ejemplo, en VHDL puede que necesite establecer el atributo "keep" en "true" para las señales utilizadas internamente en su pestillo) .
fuente
En términos de tiempo:
Si estamos usando flip flops en un diseño, entonces el rendimiento depende de los retrasos más largos de la ruta combinacional.
Si usamos pestillos en lugar de chanclas, podemos compensar los retrasos más largos de la ruta combinada tomando prestado el tiempo de los retrasos más cortos de la ruta en las siguientes etapas. Con esto podemos reducir los retrasos y aumentar el rendimiento del diseño.
fuente