Asignación de pines FPGA para fanout BGA

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 acumulación de capas (tentativa) 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 manera informada para no tener que volverme astuto con las vías 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 desde un FPGA que se correlacionan con el orden de despliegue más lógico para las trazas que salen del FPGA?

Respuestas (1)

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

El primer paso es determinar qué pines están absolutamente fijos. Por ejemplo, es posible que la FPGA solo tenga 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 de reloj, algunas entradas de reloj solo pueden alimentar algunos PLL, por ejemplo, por lo que debe decidir temprano a dónde van estos relojes.

El segundo paso, decidir dónde pueden ir las interfaces: desea que las interfaces paralelas usen pines cerca uno del otro, 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 del FPGA ! Este paso también implica mirar los voltajes. Los FPGA tienden a tener diferentes 'bancos', cada uno de los cuales tiene diferentes referencias de voltaje de E/S. No puede (*) tener una interfaz que funcione a 2,5 V compartiendo con una que funcione a 1,8 V. Idealmente, también desea que todos los pines de una interfaz paralela estén en el mismo banco o en bancos adyacentes, preferiblemente 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 suele 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 pines nm o lo que sea, el orden exacto en realidad no importa. Puede reorganizar en ese grupo con bastante facilidad, porque si se selecciona correctamente, el FPGA puede simplemente reasignar los pines según sea necesario, siempre que tenga cuidado con sus agrupaciones.

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

Cuarto paso, elija cualquier orden en su agrupación y comience a enrutar desde los diversos dispositivos hacia el FPGA, preferiblemente haciendo los más importantes primero. Una vez que llegue a la FPGA, puede ver qué pines podrían hacer con la reasignación; digamos que termina regresando a la FPGA con los pines de datos en un orden oscuro, simplemente reasigne los pines para desenredarlos (es más fácil reasignar que comenzar). añadiendo vías para que se crucen entre sí).

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! Me sucedió una vez antes 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 cuando la placa respondió que el un pin no se puede utilizar. La compilación de prueba garantizará que la asignación de pines sea compatible con la FPGA.


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

Gran respuesta, y ese párrafo final (sobre probar la configuración en el FPGA) es importante; Yo también me quemé en un par de tableros de gama baja al no verificar dos veces la compatibilidad de los pines. Debido a la integridad de la señal, planeo tener solo dos vías en la ruta de la señal de cada línea de datos, una en el extremo del terminal de cada terminal de BGA, en el lado FPGA y PHY. Solo estoy tratando de simplificar haciendo un juicio informado sobre qué va a dónde para que la cantidad de iteraciones de Esquema-> Diseño-> Esquema se pueda mantener al mínimo.