Sistemas Sincrónicos vs. Asincrónicos Las señales pueden cambiar en cualquier momento La sincronización y pasaje de datos se realiza mediante handshakes Hay un clock que rige el instante en que se pueden producir cambios Todos los bloques se comunican mediante el clock y señales sincrónicas http://en.wikipedia.org/wiki/Asynchronous_circuit
Flip-flops y Metaestabilidad Las señales deben permanecer “quietas” en las proximidades de los flancos de clock
Flip-flops y Metaestabilidad De no cumplirse esta premisa, se entra en un estado de metaestabilidad
Flip-flops y Metaestabilidad Especificaciones de la Cyclone (nosotros usamos speed grade -6)
Pautas para el diseño sincrónico Esquema general
Pautas para el diseño sincrónico Estructura de la Cyclone (LE)
Pautas para el diseño sincrónico Ejemplo:
Pautas para el diseño sincrónico No es buena idea colocar lógica en el camino del clock Ej: gated clock
Pautas para el diseño sincrónico Por más que el diseñador se asegure el comportamiento de la señal enable, se genera clock skew tCO – tDELAY < tHmin
Pautas para el diseño sincrónico Implementación más eficiente del FF con enable
Pautas para el diseño sincrónico Registered outputs Se eliminan glitches Se agrega un clock de latencia adicional
Pautas para el diseño sincrónico Maquinas de estado
Pautas para el diseño sincrónico Maquinas de estado: implementación El “state memory” son FF que almacenan el código del estado actual La LC calcula las salidas y el próximo estado
Sincronización entre dominios de clock Cualquier señal que ingrese del mundo exterior es asincrónica respecto al clock de la FPGA
Sincronización entre dominios de clock Solución: cadena de sincronización
Ejercicios Implementar usando VHDL: Contador up/down de N bits con clear asincrónico, load sincrónico programable y clock enable Maquina de estados para responder a un handshake asincrónico Tip: type state_type is (idle, … ); signal state : state_type := idle;