Recientemente me fascinaron las CPU asíncronas , que no tienen un reloj central y cada módulo envía una señal cuando sus datos han sido procesados. Sin embargo, me he estado preguntando cómo esos módulos realmente saben cuándo su salida está lista y estable.
En el siguiente ejemplo de un circuito secuencial asíncrono, algunos módulos se comunican mediante un protocolo de negociación simple de la siguiente manera:
simular este circuito : esquema creado con CircuitLab
¿Es posible enviar una señal LISTO cuando la salida de un módulo es estable, sin sincronizar específicamente el retardo de propagación del circuito del módulo?
No.
Si no, ¿cuál sería la forma más sencilla de retrasar una señal READY en función del retraso de propagación del peor caso de un circuito?
Para cada módulo, tiene una línea de retardo combinada compuesta por una serie de puertas AND configuradas como búferes.
Vea las imágenes a continuación:
Sin reloj central no significa que no haya reloj en absoluto. M1 y M2 no necesitan saber a qué velocidad corre cada uno; deben saber lo que están haciendo los demás y tener un protocolo definido entre ellos . Lo que ambos deben hacer es asegurarse de que se transmiten los datos correctamente, y debe ocurrir de manera sincronizada para una transferencia de datos consistente.
En su diagrama, describió un sistema de transferencia de solicitud / reconocimiento de muy alto nivel; en la implementación real, puede ser más complejo que eso y puede incluir relojes entre los dispositivos.