Registros de desplazamiento de retroalimentación lineal en FPGA

0

Quiero poner 256 registros de cambio de realimentación lineal en un FPGA y cada LFSR tendrá solo dos posiciones de toque para la retroalimentación XNOR y cada registro es de 63 celdas. No me importa si los LFSR no son de longitud máxima. El problema es que quiero que las posiciones de toque para todos estos registros de desplazamiento sean fácilmente reconfigurables. ¿Qué tan difícil / fácil es hacer esto?

    
pregunta fred slattery

3 respuestas

1

Si está utilizando los FPGA de Xilinx, los LUT se pueden configurar como registros de desplazamiento de 32 bits (SRL32), cada uno con un toque ajustable. Lo que recomendaría es utilizar 6 de estos registros de desplazamiento de 32 bits como tres registros de 63 bits en paralelo, uno fijo a 63 bits y los otros dos para los taps variables. Con un poco de lógica adicional, debería ser posible implementar esto con menos registros, aunque podría haber alguna interrupción al cambiar la selección de tap en ciertas condiciones.

Si no está utilizando los FPGA de Xilinx, puede ser recomendable consultar los manuales de programación para averiguar qué tipo de funciones de registro de desplazamiento son compatibles. Es posible hacer registros de desplazamiento de longitud variable con MUX grandes, aunque esto podría consumir muchos recursos lógicos. Las RAM de doble puerto son otra opción, especialmente para los registros de turnos más largos o para los registros de múltiples turnos paralelos con toques idénticos. Dependiendo de las características arquitectónicas de los FPGA y sus restricciones de diseño, una opción puede tener más sentido que las otras.

Otra consideración es la restricción sobre cómo se cambian las pulsaciones del registro de desplazamiento. Si necesita cambiar los toques sobre la marcha sin alterar el contenido de los registros de turnos, esto podría limitar las arquitecturas que puede usar y algunas de las optimizaciones que puede realizar.

    
respondido por el alex.forencich
1

Su problema se puede resolver "fácilmente", es decir, de manera directa, pero absorberá recursos considerables y reducirá la frecuencia máxima. Lo que debe hacer es alimentar cada entrada a la compuerta XNOR desde un multiplexor de 256: 1, con cada etapa de registro alimentando una entrada a cada uno de los dos muxes. Un mux de 256 bits tendrá varios niveles de compuertas, por lo que la propagación total a través del mux será relativamente lenta. Como no conozco la velocidad de reloj deseada, no puedo predecir si esto será un problema.

Cada mux requerirá un byte de control de 8 bits, y esto se puede hacer de varias maneras, la más simple es un total de 16 entradas paralelas. O puede tener 8 entradas que alimentan 2 registros de 8 bits con 2 relojes (o un solo reloj y una dirección de habilitación). O puede tener un par de entradas en serie que alimentan registros de desplazamiento de 8 bits. O, o, o, etc. Depende de su gusto en las interfaces de control. Si realmente desea ser creativo, puede utilizar un enlace Ethernet / TCPIP. O una interfaz RS232.

    
respondido por el WhatRoughBeast
0

Supongo que te refieres al tiempo de ejecución configurable, porque el tiempo de compilación configurable sería trivial con los genéricos.

Para la configuración en tiempo de ejecución, tendrá que usar las LUT como ram de puerto dual. 64 bits de RAM te darán una tabla de consulta para 6 de tus 256 bits. (Utilice 6 grifos como la dirección). Programarías la tabla de búsqueda para alimentar uno de los 6 bits si ese es un toque que elegiste. (Cero si no hay taps en los 6 bits). Luego tendrás que combinar los resultados de todos los rams con XOR e invertir para obtener el XNOR deseado. La velocidad probablemente estará limitada por el árbol de combinación XOR de 256/6 búsquedas.

    
respondido por el IanJ

Lea otras preguntas en las etiquetas