Xilinx IP para retrasar datos

1

Estoy trabajando en un diseño de bloque para calcular la coordenada en el conjunto complejo representado por un píxel. Dado un valor de píxel de x e y, el tamaño del paso y el inicio de x y el inicio de y necesito calcular una coordenada en el plano complejo. Por ejemplo, x' = start_x + step * x

Dado que x es un número entero, primero lo paso a través de un módulo de conversión de punto flotante y luego a través de un punto flotante fusionado sumar multiplicado. Esto tiene una latencia total de 24 ciclos. El problema es que también necesito proporcionar una dirección de memoria al principio y sacarla 24 ciclos más tarde antes de pasarla al módulo que obtiene x 'y' y la dirección. Estoy buscando una IP que pueda ayudar con esto. Lo más cercano que he encontrado es un registro de turnos, pero necesitaría 24 de ellos. Estaba pensando en usar un FIFO. ¿Hay algo que solo actúe como un retardo de latencia para los datos mientras se realizan otros cálculos?

PS: no estoy seguro de por qué llamé a mi Fused-Mul-Add fmax

    
pregunta chasep255

2 respuestas

4

Sólo escribe uno. Es sólo unas pocas líneas de VHDL. La profundidad puede ser un genérico natural y puede tomar su ancho desde los puertos. Realice la síntesis de forma independiente y verifique que ISE / Vivado use el modo de registro de desplazamiento esperado en las LUT.

Si no puede envolverlo fácilmente como un bloque, eso cuestiona la utilidad de todo el enfoque del diagrama de bloques. La mayoría de estas cosas se remontan a la herramienta "Renoir" de Mentor Graphics, en la que envolver VHDL como un bloque fue fácil.

    
respondido por el Brian Drummond
2

Parece que necesitas un registro de desplazamiento.

Afortunadamente, los registros de desplazamiento pueden implementarse de manera bastante eficiente en los FPGA de Xilinx.

De la documentación de Kintex-7.

  

Un generador de funciones SLICEM también se puede configurar como un registro de desplazamiento de 32 bits sin utilizar los flip-flops disponibles en una división. Usado de esta manera, cada LUT puede retrasar los datos en serie de 1 a 32 ciclos de reloj

Por lo tanto, se podría implementar un retraso de 24 ciclos para una dirección de 24 bits en solo 6 CLB (porque hay 4 LUT en cada SLICEM CLB). Los dispositivos espartanos también deben tener capacidades similares.

En familias anteriores, SRL fue la macro utilizada para instanciar esta funcionalidad. No estoy seguro de si eso sigue siendo cierto para los productos actuales (Artix / Kintex / Virtex-7 o Spartan-6).

    
respondido por el The Photon

Lea otras preguntas en las etiquetas