Un "pestillo" es diferente de un "Flip-Flop" en que un FF solo cambia su salida en respuesta a un borde de reloj. Un pestillo puede cambiar su salida en respuesta a algo que no sea un reloj. Por ejemplo, un SR-Latch tiene un conjunto y una entrada de reinicio y, si alguno de ellos está activo, la salida puede cambiar. Donde como un SR-FF solo responde a un conjunto o reinicio cuando también hay un borde de reloj.
En un FPGA, desea que su lógica sea totalmente sincrónica. Lo que significa que todos los elementos de almacenamiento (como los FF) se sincronizan desde una sola fuente de reloj. Cualquier cosa que sea asíncrona a ese reloj debe tratarse con mucho cuidado; de lo contrario, se producirán errores de sincronización.
Un pestillo es básicamente un elemento de almacenamiento asíncrono. No tiene entrada de reloj y, por lo tanto, no se puede sincronizar con ningún reloj. Debo señalar que hay FF con reinicio asincrónico y entradas de reinicio, y estos deben tratarse con el mismo cuidado que los pestillos normales.
Entrar en todos los problemas de tiempo que pueden causar los pestillos va mucho más allá de lo que se puede cubrir aquí, pero déjenme darles un ejemplo:
Supongamos que tiene un SR-Latch y desea que se configure cada vez que un contador de 8 bits alcanza un cierto valor. No estoy seguro de cuál sería el código Verilog, pero en VHDL el código es: set <= '1' when count = "11010010" else '0'; Esa señal establecida va a la entrada establecida en nuestro SR-Latch.
La lógica que se genera es puramente combinatoria; Una combinación de compuertas y compuertas, o compuertas e inversores (o LUT). Pero las rutas de señal a través de esa lógica combinatoria no siempre son perfectas y la señal "establecida" podría tener problemas técnicos. La ruta de la señal a través de un grupo particular de puertas podría tomar más tiempo que otro grupo, haciendo que la salida establecida se active por un breve momento antes de que la salida se establezca en el estado final.
Esta falla de salida podría causar que se establezca nuestro SR-Latch, aunque no se suponía que lo hiciera. Si cambiamos de un SR-Latch a un SR-FF, con el mismo reloj que el contador, el SR-FF esperará un ciclo completo antes de cambiar de estado. En esencia, esperará a que se establezca la señal establecida antes de mirarla.
Si las rutas a través de la lógica combinatoria para la señal establecida se enrutan de manera diferente (causando diferentes retrasos), entonces el comportamiento de falla también cambiará. La lógica podría funcionar bien, pero debido a que usted cambió algo completamente no relacionado, esta lógica se enruta de manera diferente, por lo que aparece el error. La temperatura y el voltaje también cambiarán el tiempo de la señal y, por lo tanto, pueden cambiar el comportamiento de falla.
Esta incertidumbre en el tiempo es la razón por la que debe evitar bloqueos en su lógica. Los FF son mucho más seguros de usar. Esta es la razón por la cual su compilador le está advirtiendo acerca de los pestillos, ya que es fácil hacer un pestillo por error y probablemente no lo quiera allí de todos modos.
Por supuesto, a veces se requieren pestillos. Solo tiene que usarlos muy raramente, solo cuando sea absolutamente necesario, y luego debe diseñar la lógica correctamente para que no haya fallas posibles.