Considere una interfaz FIFO asíncrona (por ejemplo, FT245, FT2232H o similar). Como no hay reloj, ¿cómo decides quién merece ser llamado maestro? ¿O lo llamas controlador en su lugar?
Considere una interfaz FIFO asíncrona (por ejemplo, FT245, FT2232H o similar). Como no hay reloj, ¿cómo decides quién merece ser llamado maestro? ¿O lo llamas controlador en su lugar?
No estoy familiarizado con los detalles de los dispositivos a los que hizo referencia, pero en un FIFO general asíncrono hay un lado "empujando" y un lado "haciendo estallar".
El lado que empuja dentro del FIFO generalmente se llama maestro, y el lado que aparece es un objetivo.
No entiendo por qué tiene dificultades para identificar el maestro sin reloj: el lado que inicia la transacción es un maestro. Espero no haber entendido mal tu pregunta ...
En un diseño típico FIFO asíncrono, ambos lados de la FIFO pueden actuar como esclavos del dispositivo externo que los conecta. Puede ser necesario que cualquiera de los dos lados espere al otro, pero tal espera no tiene que ser "precisa". Si el dispositivo que desea obtener datos sondea el FIFO y encuentra que no hay ninguno disponible, no es necesario volver a realizar el sondeo hasta que sea posible que el FIFO esté casi lleno. A la inversa, si el dispositivo que quiere poner datos en el FIFO lo encuentra lleno, incluso si es imperativo que el FIFO nunca se vacíe por completo, no es necesario volver a realizar una encuesta hasta que sea posible que el FIFO esté casi vacío.
Tenga en cuenta que al usar un FIFO asíncrono "verdadero", si uno solo tiene un indicador de que "al menos un byte está disponible para leer" [en lugar de algo que indica una cantidad mayor], el lado de lectura deberá tener algunos tipo de reloj que es al menos 2x / 3x la velocidad de lectura más rápida deseada. Este reloj no necesita alimentar el FIFO, sino el maestro, que en pasos separados debe determinar si los datos están disponibles y luego solicitarlos. Si el FIFO puede indicar cuándo hay disponibles múltiples bytes de datos, el maestro puede solicitar todos esos bytes en ciclos de reloj consecutivos sin tener que verificar la disponibilidad entre ellos. Existen problemas similares en el lado de transmisión del FIFO.
Un diseño más agradable es hacer que cada lado del FIFO sea un subsistema síncrono con su propio reloj. Este tipo de diseño hace posible que la interfaz entre cada lado del FIFO y su maestro incluya cables de datos junto con una señal que indique si los datos deben considerarse válidos, y luego emitir una señal que indique si los datos fueron aceptados. Un lado que tiene datos para enviar puede ponerlo en sus cables de datos e indicar que es válido, y luego seguir haciéndolo hasta que obtenga una indicación de que el cable de datos fue aceptado, lo que le permitirá hacer nuevos datos disponibles en el ciclo siguiente Cuando el FIFO se llene o se agote, se requerirá un retardo de sincronización antes de que se pueda reanudar la transferencia de datos, pero siempre que esté lleno, los datos vacíos pueden procesarse continuamente. Tenga en cuenta que al menos una forma bastante agradable de diseñar un sistema de este tipo puede estar cubierta por las patentes de Xilinx (no conozco los detalles de esas patentes), pero existen algunos otros diseños posibles que, aunque menos elegantes, no deben ser limitados.
Lea otras preguntas en las etiquetas digital-logic interface ftdi fifo