FPGA - Transferencia de datos a través de Ethernet

Tengo un módulo Verilog que puede hacer que mi FPGA parpadee sus LED a frecuencias de acuerdo con ciertas variables/constantes que configuré dentro del código. Sin embargo, me gustaría cambiar estas variables externamente, para poder alterar el patrón de parpadeo sobre la marcha sin tener que reprogramar el FPGA cada vez. Es por eso que he considerado tratar de descubrir cómo transferir datos a la placa FPGA, quizás a través del puerto Ethernet.

La placa FPGA que tengo es Digilent Nexys 3 con Spartan-6 FPGA. Estoy usando Xilinx ISE con licencia Webpack para diseñar y programar.

He leído parte de la documentación, pero gran parte de ella es difícil de entender. Por lo que entiendo, necesito usar crear un núcleo de IP de Ethernet. Lo hice en ISE agregando un IP Core como fuente y seleccionando "Ethernet 1000BASE-X PCS/PMA o SGMII". Al hacerlo, se creó un archivo .xco en la jerarquía de diseño. Hice clic en "Ver modelo funcional HDL" y vi que hay un módulo definido junto con muchos puertos. Sin embargo, los puertos no parecen coincidir con los pines enumerados en el manual de referencia de Nexys 3. La Ethernet de la placa Nexys 3 tiene el número de pieza SMCS LAN8710.

Otro método que he considerado es utilizar el software Digilent Adept para escribir datos en los registros de la pestaña Registrar E/S. Aparentemente, el rango de valores que se pueden ingresar para las direcciones es de 0 a 255 (8 bits). El problema es que no sé cómo asignar estos registros a las variables dentro del módulo (si eso es posible).

Esta es la primera vez que trabajo con FPGA (hace aproximadamente un mes que lo hago), con poca o ninguna experiencia en electrónica digital (soy estudiante de licenciatura en física), aunque tengo algo de experiencia en programación y en informática. experiencia en hardware y redes (certificación CompTIA N+). Cualquier información que pueda dar para ayudar a un novato será apreciada.

Un núcleo IP de Ethernet tendrá puertos que puede usar mediante programación que corresponden a las entradas y salidas funcionales que se usarían para leer y escribir. No se corresponden con los pines físicos RJ45 (si eso es lo que esperabas).
Si eres nuevo en esto, comenzaría con algo mucho más simple que Ethernet. Para que Ethernet funcione, se requerirá mucho más que solo el controlador de Ethernet. La placa que tiene tiene un adaptador USB-UART que está conectado a la FPGA, por lo que comenzaría escribiendo una interfaz de receptor UART simple (no son demasiado difíciles y sería una buena experiencia de aprendizaje).
@Tom Carpintero +1. Simplemente cablear un núcleo Ethernet definitivamente cuenta como un proyecto de nivel avanzado.

Respuestas (2)

No estoy familiarizado con su entorno (Nexys 3, etc.), pero creo que lo siguiente debería ser correcto en general. Cuando agrega el núcleo de IP, crea un bloque de lógica dentro de la FPGA con los puertos siendo las interfaces internas de la FPGA. La mayoría de las interfaces necesita conectarse a las lógicas internas que defina. Partes de las interfaces, puede asignarlas a pines de E/S externos reales. Para el controlador externo LAN8710 integrado, duplica la función del núcleo IP con la interfaz de red física adicional necesaria. Tanto el LAN8710 como el núcleo IP solo le brindan las capas inferiores de hardware de las pilas de red (el núcleo IP probablemente no incluye la capa/interfaz física). El siguiente nivel sería la capa TCP/IP (Protocolo de Internet) (suponiendo que desee una pila estándar), que generalmente se implementa en el software de un procesador.

Por lo tanto, el núcleo IP o LAN8710 después de integrarse con su lógica (no trivial) aún lo deja con grandes lagunas (por ejemplo, TCP/IP y capas superiores) con lo que desea hacer. En su lugar, pruebe la idea de USB-UART. O pruebe un módulo convertidor UART a Ethernet o Wifi externo.

El LAN8710 es un PHY de 10/100 mbps, al que se conecta mediante una interfaz estándar conocida como MII (o una variante de la llamada RMII).

Ha seleccionado un bloque de IP en la FPGA que es para Ethernet de 1000 Mbps, que utiliza varias interfaces diferentes para un PHY, ninguna de las cuales es MII/RMII ).

Debe comenzar eligiendo un bloque de IP que admita redes 10/100 y luego asegurarse de seleccionar una interfaz MII o RMII, la que sea adecuada para su hardware. Si su hardware tiene cuatro líneas de datos en cada dirección, está usando MII, si tiene dos en cada dirección, entonces está usando RMII.

Como otras personas han insinuado, lograr que el MAC (el bit en el FPGA) se comunique con el PHY (el LAN8710) es una pequeña parte de un gran esfuerzo de comunicarse con otras cosas en una red, y tal vez esté asumiendo más de lo sensato. En este punto.