¿Cómo funciona la reversión en un FIFO?

1

Después de leer el libro titulado "Ejemplos avanzados de diseño de chips por verilog", me enfrenté a algunas preguntas sobre cuándo se lee el paquete Ethernet del FIFO y cómo funciona la reversión para el paquete Ethernet FIFO.

El chaper 8.3.4 del libro explica la razón por la cual la reversión es necesaria en la FIFO en los aspectos de lectura de un paquete y procesamiento de su CRC; cuando el CRC calculado a partir del receptor no coincide con el CRC precalculado unido al paquete, debe revertir el puntero de escritura FIFO actual al puntero de escritura de rollback (rollback_wrptr). Aquí, rollback_wrptr es el puntero de escritura del FIFO guardado justo antes de que comience a recibir el paquete.

Y el libro dice ...

  

Al final del paquete, cuando encontramos que el CRC no coincide, afirmamos una señal de un reloj de ancho, rollback_wrptr que vuelve a cargar el valor de la instantánea al wrptr principal del FIFO.

Me pregunto por qué el libro solo menciona sobre write_ptr pero read_ptr y read_ptr_rollback. Para calcular el CRC, parece que los paquetes deben leerse de la cola; consumirá algunos elementos del FIFO, que mueve el read_ptr del FIFO. ¿La lógica del hardware impide que el receptor obtenga los datos de FIFO hasta que el cálculo de CRC se realice de forma habitual?

Parece que debería rebobinar no solo el write_ptr sino también el read_ptr. Si está disponible, ¿podría obtener algún código que implemente el FIFO con la reversión en verilog o VHDL?

    
pregunta JaeHyuk Lee

1 respuesta

4

No tengo el libro, pero suena como si esto ocurriera cuando un paquete entrante se está almacenando en el FIFO, y la especificación de diseño requiere que se descarten los paquetes con un CRC incorrecto, de modo que solo se ingresen los datos correctos el FIFO.

(Alguna otra parte del protocolo notará que el paquete ha desaparecido y solicitará la retransmisión)

Por lo tanto, los datos se escriben en FIFO a medida que entran, en paralelo con el cálculo de CRC (en el flujo entrante, mediante hardware dedicado, sin lecturas involucradas) pero no se sabe si es correcto hasta el CRC. En ese momento, revertir el puntero de Escritura es equivalente a eliminar el paquete simulando que no existía. Y los datos entrantes futuros sobrescribirán los valores descartados.

El proceso de lectura en un FIFO es completamente separado, y revertir una escritura no debería tener ningún efecto, siempre que el puntero de lectura no pase el puntero de escritura de retroceso. Presumiblemente existe algún mecanismo para evitar eso. Mire el mecanismo de señalización Vacío: esperaría que comparara el puntero de Lectura con la Escritura de reversión, no la Escritura de borde anterior, para garantizar esto.

(Y, presumiblemente, el puntero de escritura de retroceso se actualiza hasta el borde de escritura anterior si el CRC está bien).

Entonces, ¿para qué sería revertir una lectura? En este diseño, siempre que impida leer más allá de la reversión de escritura, tal vez no tenga ningún propósito.

Pero podría imaginar casos de uso para revertir una Lectura, donde, por ejemplo, un núcleo de la CPU tomó un paquete y luego lo abortó procesándolo (lo que indica la reversión de la señal), por lo que puede enviarlo a otra CPU.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas