CRC / Parity / Hamming Protect bus paralelo de 16 bits

2

Tengo un MCU basado en Cortex-M4 vinculado a un FPGA a través de una interfaz de bus de memoria paralela de 16 bits. En esencia, el FPGA se comporta como una memoria externa asignada al espacio de memoria de la MCU: la MCU presenta una dirección seguida de una palabra de datos (escritura) o leyendo la palabra presentada por la FPGA (lectura).

Quiero proteger tanto la lectura como la escritura contra los errores de transmisión durante el direccionamiento y la lectura / escritura de datos. Sin embargo, no espero muchos errores de bits, ya que la distancia entre ambas partes es corta.

Puedo implementar fácilmente la verificación y la generación de paridad, códigos Hamming o CRC dentro del FPGA. Sin embargo, hacer lo mismo (comprobar y generar) en la unidad de usuario parece comparativamente más difícil ya que no quiero paralizar el rendimiento. Sin detección de errores, la lectura y escritura de palabras de 16 bits toma alrededor de 4-6 ciclos de procesador y, por lo tanto, es bastante rápida. Por consiguiente, no quiero gastar cientos de ciclos en medidas de protección.

Al final, busco un método de detección de errores moderadamente eficiente para datos de 16 bits que se implementa en una unidad de control en la menor cantidad de ciclos posible.

He publicado lo mismo en Stackoverflow . Si sabe cómo vincular correctamente las dos preguntas, hágamelo saber.

    
pregunta Arne

1 respuesta

2

Si su tasa de error de bits es medible pero no tan alta que ningún nivel de lógica de corrección de errores ayudaría, debería reducir la velocidad de sus comunicaciones en un 1% aproximadamente, o usar los "mejores" 16 bits de su Bus y no molestarse con los demás.

La lógica de corrección de errores solo es útil en los casos en que la probabilidad de errores es relativamente baja y la probabilidad de que se produzcan dos errores es muy inferior a la probabilidad de uno, la probabilidad de que se produzcan tres errores es lejana debajo de eso, etc. Para una conexión entre una CPU y un FPGA, o bien se encontrará con restricciones de tiempo, en las que las causas más probables de los errores serán las fallas en la fuente de alimentación (que deberían abordarse mejor mediante la fuente de alimentación) mejoras), perderá de manera significativa las restricciones de tiempo (en cuyo caso al menos algunos bits del bus producirán datos incorrectos de manera rutinaria), o estará justo en el límite de cumplir con las restricciones de tiempo (en cuyo caso aumentará los márgenes de tiempo incluso poco puede ayudar enormemente).

Si estaba preocupado por la protección de un cable de datos paralelos que se colocaba entre las placas, entonces la información principal a proteger sería probablemente la de una comunicación interrumpida (p. ej., una que estaba ocurriendo mientras se desconectaba un conector) se percibía como legítimo. A menos que se requieran transacciones de muy corto plazo (como podría ser el caso aquí), estas cosas se protegen mejor al realizar un CRC u otro código de validación en todas las palabras de una transmisión más larga. Agregar una CRC de dos palabras (32 bits) a una transmisión de 64 palabras supondría una sobrecarga menor que agregar un bit de paridad a cada palabra, pero sería mucho más probable que detectara errores de transmisión.

    
respondido por el supercat

Lea otras preguntas en las etiquetas