FPGA asignación de pines para fanout BGA

1

Estoy trabajando en un proyecto que involucra múltiples (muchos) paquetes BGA, a saber, convertidores de interfaz como Ethernet PHY conectados a un FPGA central.

Ya he elaborado una pila (provisional) de capas en términos de qué señales se ejecutarán sobre qué capas, pero necesito una buena estrategia para asignar pines. Obviamente, un PHY se desplegará en un orden bastante distinto, pero me gustaría tener una idea decente de cómo asignar los pines de una manera informada para que de esa manera no tenga que cambiar de lugar con los cambios para reorganizar el rastrear el orden durante el diseño.

Para ilustrar, la interfaz con la que estoy trabajando es GMII estándar, por lo que es un bus de 16 bits con señales de control. ¿Cuáles son algunas buenas metodologías para asignar pines de un FPGA que se correlacionan en el orden de despliegue más lógico para los rastros que salen del FPGA?

    
pregunta ecfedele

1 respuesta

3

Si el diseño aún no está arreglado (es decir, los pines se pueden cambiar gratis), entonces tienes cierta flexibilidad en lo que va a dónde.

El primer paso es determinar qué pines son absolutamente fijos. Por ejemplo, el FPGA solo puede tener ciertos recursos en algunos pines: las entradas de reloj dedicadas vienen a la mente, al igual que los transceptores de alta velocidad. Dependiendo de la red del reloj, algunas entradas de reloj solo pueden alimentar algunos PLL, por lo que es necesario decidir desde el principio a dónde van estos relojes.

El segundo paso, decida a dónde pueden ir las interfaces: desea que las interfaces paralelas usen pines cercanos entre sí, lo último que desea hacer es enrutar algunos pines solo para darse cuenta de que un bit de una interfaz está en el lado opuesto de la FPGA! Este paso también implica mirar los voltajes. Los FPGA tienden a tener diferentes 'bancos', cada uno con diferentes referencias de voltaje IO. No puede (*) tener una interfaz que se ejecute a 2.5V, y una que funcione a 1.8V. Lo ideal es que también desee que todos los pines de una interfaz paralela estén en el mismo banco, o adyacentes, preferiblemente unos en la misma esquina del FPGA (hay cuatro esquinas, arriba a la izquierda, arriba a la derecha, abajo a la izquierda, abajo a la derecha , y cada uno tiende a tener recursos dedicados a ese rincón).

Una vez que tenga un mapa de dónde pueden ir las cosas , , de modo que haya decidido que su interfaz de 16 bits puede usar los pines n-m o lo que sea, el orden exacto en realidad no importa. Puede reorganizar el grupo con bastante facilidad, porque si se selecciona correctamente, el FPGA puede simplemente volver a asignar los pines según sea necesario, siempre y cuando haya cuidado con sus agrupaciones.

El tercer paso es decidir qué capas de interfaces están pasando: intente minimizar la cantidad de veces que las señales de alta velocidad necesitan cambiar de capa, ya que las vías son desagradables en alta frecuencia.

Cuarto paso, elija cualquier orden en su agrupación y comience a enrutar desde los diversos dispositivos hacia el FPGA, preferiblemente haciendo primero los más importantes. Una vez que llega al FPGA, puede ver qué podrían hacer los pines con la reasignación; digamos que termina volviendo al FPGA con los pasadores de datos en un orden desconocido, simplemente reasigne los pasadores para desenredarlos (es más fácil remapearlos que comenzar) añadiendo vías para cruzarse una sobre la otra).

Una vez que tenga una buena idea del mapeo, tal vez haya enrutado algunos de los rastros y ahora esté seguro de que su elección de pines es enrutable. El quinto paso es hacer una compilación de prueba : ¡compile el FPGA y asegúrese de que pueda usar esa asignación de pines! Una vez me sucedió una vez que elegí asignaciones y accidentalmente usé un pin de programación dedicado para un bit en un bus de datos. Envié el diseño sin compilar la prueba solo para descubrir cuándo regresó la placa que un pin no puede ser utilizado La compilación de prueba garantizará que su asignación de pines sea compatible con el FPGA.

Nota (*) Bueno, a veces puedes, depende del FPGA.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas