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?