¿Quién puede proporcionar un documento de traducción a un idioma extranjero sobre FIFO asíncrono?

FIFO asincrónico

El uso de FIFO para sincronizar datos de diferentes dominios de reloj es un método común en el diseño de circuitos integrados digitales. Hay muchas cuestiones involucradas en el diseño de un FIFO funcionalmente correcto. Este artículo analiza dos ideas de diseño FIFO asincrónicas diferentes. Ambas ideas pueden lograr FIFO funcionalmente correctos.

El FIFO estudiado en este artículo es un tipo de memoria de datos desde una perspectiva de hardware. Tiene dos puertos, uno se usa para escribir datos, es decir, almacenar datos en el FIFO; el otro se usa para leer datos, es decir, sacar datos del FIFO. Hay dos punteros relacionados con las operaciones FIFO: el puntero de escritura apunta a la parte de almacenamiento que se va a escribir y el puntero de lectura apunta a la parte de almacenamiento que se va a leer. El controlador FIFO controla el movimiento de estos dos punteros a través de señales externas de lectura y escritura, generando así una señal FIFO vacía o una señal llena.

Para FIFO asíncrono, los datos se escriben en el FIFO mediante la señal de control de un dominio de reloj y se leen mediante la señal de control de otro dominio de reloj. En otras palabras, las acciones cambiantes de los punteros de lectura y escritura son generadas por relojes diferentes. Por lo tanto, el juicio sobre FIFO vacío o lleno se realiza entre dominios de reloj. El objetivo de este artículo es cómo determinar correctamente si el FIFO está lleno o vacío en función de la señal del puntero asíncrono. Además, en este artículo también se tratarán algunos detalles del proceso de diseño.

1 La generación de punteros y señales completamente vacías

Para explicar mejor el problema, primero analizamos el proceso de movimiento síncrono del puntero FIFO y la generación de señales completamente vacías. . Para FIFO síncrono, los punteros de lectura y escritura apuntan a la ubicación inicial de la memoria. Cada vez que se realiza una operación de lectura o escritura, el puntero correspondiente se incrementará y apuntará a la siguiente ubicación de la memoria. Cuando el puntero se mueve a la última ubicación en la memoria, regresa a la ubicación inicial. Cuando el FIFO no está lleno o vacío, este proceso continuará con cambios en las señales de control de lectura y escritura. Si el FIFO está vacío, la siguiente operación de lectura provocará un desbordamiento insuficiente y un lector de datos no válidos; de manera similar, para un FIFO completo, una operación de escritura provocará un desbordamiento y los datos recién escritos sobrescribirán los datos útiles. Ambos casos son operaciones incorrectas y requieren una señal de lleno-vacío. Configurar la señal completa indica que el FIFO está lleno y restablecer la señal completa indica que el FIFO no está lleno y todavía hay espacio para escribir datos. Configurar la señal vacía significa que el FIFO está en un estado vacío, y restablecer la señal vacía significa que el FIFO no está vacío y todavía hay datos válidos para leer.

Cuando el puntero de lectura y el puntero de escritura son iguales, es decir, apuntan a la misma unidad de almacenamiento, el FIFO puede estar lleno o vacío. Se pueden utilizar diferentes métodos para determinar si el FIFO está lleno o vacío, es decir, el puntero de escritura alcanza al puntero de lectura desde atrás o el puntero de lectura alcanza al puntero de escritura desde atrás. El método utilizado en este artículo es establecer un bit de estado adicional y el puntero consta de su bit de dirección y su bit de estado. Los bits de dirección se incrementan con la operación correspondiente y los bits de estado se invierten cuando el puntero regresa de la última ubicación en la memoria a la ubicación inicial. Por lo tanto, cuando los bits de dirección y los bits de estado de los punteros de lectura y escritura coinciden, los punteros de lectura y escritura experimentan el mismo número de movimientos cíclicos, es decir, el FIFO está en un estado vacío (Figura 1 (a)); Los bits de dirección de los punteros de lectura y escritura son los mismos, pero el estado. Si el bit se invierte, el puntero de escritura realiza un ciclo más que el puntero de lectura, lo que indica que el FIFO está en estado completo (Figura 1 (b)). (2) Los punteros binarios se pueden usar para FIFO de cualquier tamaño; los punteros de código Gray solo se pueden usar para FIFO con un tamaño que sea una potencia de 2.

Sincronización de punteros binarios y punteros de código Gray

Los punteros binarios constan de un bit de estado y varios bits de dirección codificados en binario (por ejemplo, el cambio de puntero consta de tres direcciones y un bit de estado Composición: 0000→0001→001011→0100→065438+)38+01→100→65438+65438 Pueden surgir problemas si los punteros binarios se sincronizan directamente en diferentes dominios de reloj. Por ejemplo, cuando el puntero de lectura cambia de 0111 a 1000, todos los bits del puntero cambian. Si el reloj de escritura se muestrea en el momento en que cambia el puntero de lectura, el escritor puede obtener valores del puntero de lectura de 0000 a 1165438. Por lo tanto, los punteros binarios no deben sincronizarse directamente, sino que pueden sincronizarse mediante un par de señales de protocolo de enlace.

Por ejemplo, el lector emite una señal de listo cuando almacena el puntero leído en un registro. Cuando el escritor ve la señal de listo, lee el puntero de lectura y emite un acuse de recibo de los datos recibidos. Cuando el lector ve la señal de reconocimiento, retira la señal de listo y luego actualiza el registro con el valor actual del puntero de lectura (Figura 2).

Antes de recibir la señal de confirmación, el contenido del registro que almacena el puntero de lectura permanece sin cambios, lo que garantiza la exactitud del puntero de lectura.

Para sincronizar directamente el puntero en diferentes dominios de reloj, el puntero se puede codificar con código Gray, es decir, el puntero solo cambia un bit cada vez que se mueve, evitando que el puntero no pueda sincronizarse directamente. sincronizado debido a que varios bits cambian al mismo tiempo. La Figura 3 muestra una memoria de direcciones FIFO de tres bits para codificación de código Gray. Una memoria con una dirección de N bits requiere n+1 bits de código Gray. Utilice el bit más significativo (es decir, el bit n-1) como bit de estado y los bits n-2 a 0 como bits de dirección N-2 a 0; realice una operación XOR en el bit de estado (es decir, n-1 bit); y n-2 bits para obtener Generar n-2 bits de la dirección (es decir, el bit más alto de la dirección). A partir de la observación en la Figura 3, podemos saber que el puntero codificado en código Gray de cuatro dígitos y el puntero codificado en bits de estado más binario de tres dígitos tienen la misma función: la dirección generada por el puntero recorre ocho direcciones de memoria, y el bit de estado se invierte después de cada cambio. Vale la pena señalar que cuando el puntero cambia de 0100 a 1100, la dirección correspondiente cambia de 100 a 000, y el bit de estado y la dirección de un bit cambian al mismo tiempo, por lo que el bit de estado y el bit de dirección generados por el código Gray El puntero de otro dominio de reloj no se puede sincronizar. En este momento, debe sincronizar directamente con otro puntero de dominio de reloj.

3 Juicio conservador y suficiente

Para el diseño FIFO asíncrono, ya sea mediante un apretón de manos o obteniendo directamente sincrónicamente el puntero del dominio de reloj de la otra parte, el juicio de la señal completamente vacía es siempre "conservador"

p>

(1) El reinicio de la señal llena (el reinicio de la señal llena indica que la FIFO no está llena, y el reinicio de la señal vacía indica que la FIFO está no vacío) tiene un cierto retraso en comparación con el FIFO real. Por ejemplo, se genera una señal nula comparando el puntero de lectura del lector con el puntero de escritura obtenido después de la sincronización o el protocolo de enlace. Dado que la sincronización o el protocolo de enlace lleva una cierta cantidad de tiempo, durante este período, el escritor puede escribir nuevos datos en el FIFO y el puntero de escritura ha cambiado. En este momento, el FIFO no está vacío, pero la señal de vacío no se ha restablecido. Para el escritor, el restablecimiento de la señal completa también encontrará el mismo problema. Pero en general, siempre que FIFO garantice que no se desbordará ni se desbordará, el retraso en el reinicio no provocará un desbordamiento insuficiente o un desbordamiento, lo cual es aceptable.

(2) En comparación con la situación FIFO real, no hay retraso en la configuración de la señal completa (la configuración de la señal completa significa que la FIFO está llena y la configuración de la señal vacía significa que la FIFO está vacía). Por ejemplo, si el FIFO está vacío, el lector comparará el puntero de lectura y el puntero de escritura después de la sincronización o el protocolo de enlace. Debido a que el FIFO está vacío, la operación de escritura no ocurrirá y el puntero de escritura correspondiente permanecerá sin cambios, por lo que el lector obtendrá el valor del puntero de escritura en ese momento. Esto permite establecer la señal cero inmediatamente. De manera similar, cuando el FIFO está lleno, dado que el puntero de lectura no cambia, el escritor obtiene el valor actual del puntero de lectura y puede determinar inmediatamente que el FIFO está lleno.

De la discusión de los dos puntos anteriores, se puede concluir que el juicio de que el FIFO está lleno es conservador. El escritor puede dejar de escribir datos cuando el FIFO todavía tiene una cierta cantidad de espacio, pero es así. no lo hará cuando el FIFO esté lleno. Los lectores pueden dejar de leer datos cuando todavía hay algunos datos válidos en el FIFO, pero no continuarán leyendo datos cuando el FIFO esté vacío. El juicio conservador totalmente vacío puede cumplir con los requisitos funcionales de FIFO.

4 Comparación de punteros binarios y punteros de código Gray

Los punteros binarios y los punteros de código Gray tienen cada uno sus propias ventajas y desventajas:

(1) Dado que la sincronización se logra mediante el protocolo de enlace, varios bits del puntero pueden cambiar al mismo tiempo y el puntero binario puede omitir cualquier longitud cada vez que se mueve, lo que brinda comodidad a la implementación de algunos funciones de FIFO (como el hardware controla directamente el FIFO para descartar un paquete erróneo del flujo de datos almacenados en el búfer, en términos generales, el puntero del código Gray solo se puede mover de forma incremental o incremental);

(3) En comparación con la sincronización directa, la sincronización mediante protocolo de enlace requiere múltiples ciclos de reloj, por lo que el juicio de todo vacío del puntero binario es más "conservador" que el puntero de código Gray para el diseño de gran capacidad; FIFO compuesto por memoria, El espacio perdido debido al juicio conservador es insignificante, pero para un FIFO pequeño, este "conservadurismo" puede ser inaceptable.

Por ejemplo, un FIFO compuesto por 8 registros. Para los punteros codificados en código Gray, en el peor de los casos, cuando el escritor determina que el FIFO está lleno, en realidad solo contiene 5 datos (usando un sincronizador de dos niveles, 3 pueden). ser necesario Sincronización de ciclos, hay operaciones de lectura en 3 ciclos); para punteros codificados en binario, cuando se considera que el FIFO está lleno, puede haber solo tres o menos datos en el FIFO (usando un sincronizador de dos niveles, en el En el mejor de los casos, apretón de manos. Se necesitan cinco ciclos y hay acciones de lectura en estos cinco ciclos).

Los diseñadores deben considerar los puntos anteriores al comparar y elegir entre estos dos métodos.

Los dos métodos de diseño diferentes de FIFO asíncrono presentados en este artículo pueden lograr un FIFO asíncrono funcionalmente correcto. Un breve análisis de las ventajas y desventajas de estos dos métodos para diseñar FIFO tiene una importancia rectora para el diseño FIFO.

Lectura ampliada:

1

/app/control/201108/89953 _ 2. htm