Verilog CRC paralelo con polinomio arbitrario

1

para mi próximo proyecto necesito implementar un núcleo CRC IP en Verilog HDL. Debe utilizar un registro de resultados polinomial de 16 bits y de 16 bits CRC. Los datos se están introduciendo en él en 8bit chuncks / bytes. Ya he implementado la versión en serie de CRC Core, usando un registro de desplazamiento y xor gates, pero estoy completamente perdido en cómo hacerlo en paralelo, de modo que el resultado esté disponible en el próximo ciclo de reloj.

Saludos cordiales

    
pregunta Matej Gomboc

1 respuesta

1

Hay algunas maneras de hacer esto. En esencia, lo que debe hacer es "desenrollar" la parte cambiante de calcular el CRC para que se evalúe de manera combinatoria dentro de un ciclo de reloj. Una forma de hacer esto es con un bucle for dentro de un bloque combinatorio. Si el polinomio proviene de un registro (es decir, puede cambiar en el tiempo de ejecución), esta es realmente la única forma de hacerlo. Sin embargo, si el polinomio proviene de un parámetro (es decir, determinado y fijo en el momento de la síntesis), puede calcular qué equivale a una transformación de matriz que convierte el estado de CRC anterior y los datos de entrada a un nuevo estado de CRC y datos de salida modificados.

Aquí hay un ejemplo de código verilog que implementa el segundo estilo, tomando un polinomio arbitrario a través de un parámetro: enlace . Ese código forma el núcleo combinatorio de un módulo CRC: enlace .

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas