calcular (y validar) ethernet FCS (crc32) en vhdl

Estoy usando elSpartan 3E Starter Kit y estoy tratando de recibir marcos de Ethernet en él a través de un enlace de 100MBit.

Para aquellos que no lo saben, la placa cuenta con un chip PHY, exponiendo el reloj receptor a 25MHz. He (bastante) verificado que la recepción funciona bien al almacenar en búfer los marcos recibidos y reenviarlos a través de un enlace serial.

Además, estoy usando unGenerador CRC32 de outputlogic.com. Agrego los nybbles recibidos a los bytes y los reenvío al CRC. Al final del marco, engancho el CRC generado y lo muestro en la pantalla LCD, junto con el CRC que encontré en el marco de Ethernet.

Sin embargo, (como habrás adivinado) los dos números no coinciden.

527edb0d  -- FCS extracted from the frame
43a4d833  -- calculated using the CRC32 generator

El primero también se puede verificar ejecutando el paquete a través de la función crth32 de pythons, tanto con el marco capturado por Wirehark como con el marco capturado y recuperado a través del puerto serie del FPGA.

Supongo que debe ser algo más o menos trivial.Pegué el proceso de recepción aquí. Me quité todo lo que no era necesario. Al capturar la salida a través de la serie, agregué un fifo (unidad fácil de Xilinx) que se enganchó al mismo tiempo que el generador CRC para obtener exactamente los mismos bytes.

¿Alguien tiene una idea de lo que está mal con eso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta