Intentando entender FIFO en el contexto de hardware

5

Wikipedia define el FIFO en electrónica como en:

  

Los FIFO se utilizan comúnmente en circuitos electrónicos para almacenamiento en búfer y flujo   control que es del hardware al software. En su forma hardware, una   FIFO consiste principalmente en un conjunto de punteros de lectura y escritura, almacenamiento   y controlar la lógica.

Entiendo en hardware qué es almacenamiento y qué es lógica de control. Pero en esta definición no entiendo el significado de read and write pointers
¿Es esto simplemente un tipo de Program Counter ?

    
pregunta gpuguy

3 respuestas

15

Un FIFO es una memoria de Primero en entrar, primero en salir . Puede pensar que los datos se desplazan en un extremo y se desplazan por el otro, y se permite que la cantidad de datos en el FIFO crezca hasta un límite máximo.

Sin embargo, el hecho de cambiar datos en la memoria es costoso en hardware. Una mejor manera es usar una memoria más normalmente, pero hacer que se vea como un búfer circular mediante la manipulación de la siguiente dirección para escribir y leer. Estas direcciones viven en registros separados y, a menudo, se denominan indicador de lectura y indicador de escritura .

Aquí hay una ilustración del estado de un FIFO simple usando una memoria de 8 palabras:

La siguiente palabra entrante se escribirá en la palabra vacía en la dirección 1 (el valor del puntero de escritura), luego el puntero de escritura se incrementará a 2. La siguiente solicitud de lectura buscará la palabra en 5 (el valor de la lectura). puntero), entonces el puntero de lectura se incrementa en 1. En este ejemplo, las direcciones son automáticamente circulares si los punteros tienen 3 bits de ancho. Al agregar de 1 a 7 se obtiene 0 en matemáticas sin firmar de 3 bits.

Los sistemas FIFO completos necesitan formas de identificar las condiciones completas y vacías. Hay varios esquemas para esto. Se podría usar un registro separado para realizar un seguimiento de cuántas palabras hay en la FIFO, que es 4 en la instantánea que se muestra arriba.

Un esquema útil para una implementación de firmware es comparar los punteros de lectura y escritura. Podría, por ejemplo, decidir que ambos punteros iguales están FIFO vacíos, y escribir uno detrás de lectura (después del ajuste) está FIFO lleno. Tenga en cuenta que dichos esquemas dejarán sin uso una palabra del FIFO. Usted termina gastando una parte del estado en algún lugar para permitir la detección de contenido completo y vacío, ya sea un registro separado o una palabra inutilizable en el FIFO. La ventaja de este esquema es que las lecturas y escrituras pueden ocurrir independientemente sin conflicto, por lo que tal FIFO no necesita una exclusión mutua entre la lectura y la escritura. Por ejemplo, no tiene que deshabilitar las interrupciones al leer porque no se hace ningún daño si una rutina de interrupción inserta una palabra en el FIFO mientras el código en primer plano está intentando leer.

    
respondido por el Olin Lathrop
6

La respuesta de Olin lo cubre completamente.

Solo quiero agregar que en HW digital, los FIFO se usan a menudo para transferir datos de múltiples bits entre dominios de reloj asíncronos ( Cruce de dominio del reloj - CDC). Puede que este tema no te interese en este momento (es un tipo avanzado), pero creo que debería estar cubierto para completar.

Estos FIFO especiales se denominan FIFO asíncronos (asíncronos), y aunque tienen una estructura similar a los FIFO básicos, hay dos adiciones clave:

  • Los ungüentos de lectura / escritura se convierten en Código gris antes de ser transferidos entre dominios de reloj asíncrono
  • Los valores convertidos se sincronizan con el reloj del dominio de destino mediante sincronizadores

Este esquema garantiza que los datos de múltiples bits se transferirán sin metastability problemas y evitar la corrupción de datos debido a la sincronización independiente de bits.

Una estructura lógica de FIFO asíncrono:

    
respondido por el Vasiliy
0

Un contador de programa rastrea la última instrucción ejecutada en un programa. En un FIFO, los punteros de lectura y escritura rastrean el último bit o último byte leído o escrito. Por lo tanto, son conceptos similares, pero para cosas diferentes.

El concepto no es tan difícil si eliminas la jerga. Si alguien le dio una larga lista de números y le pidió que los leyera en orden, puede poner su dedo en la página para ayudar a rastrear su lugar. Tu dedo es un contador de lectura.

    
respondido por el Phil Frost

Lea otras preguntas en las etiquetas