FPGA - Transferencia de datos a través de Ethernet

0

Tengo un módulo Verilog que puede hacer que mi FPGA parpadee sus LED en las frecuencias de acuerdo con ciertas variables / constantes que he establecido 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 averiguar cómo transferir datos a la placa FPGA tal vez a través del puerto Ethernet.

La placa de FPGA que tengo es la Digilent Nexys 3 con la Spartan-6 FPGA. Estoy usando la licencia Xilinx ISE con Webpack para hacer el diseño y la programación.

He leído algo de la documentación, pero mucha de ella es difícil de entender. Por lo que entiendo, necesito usar crear un núcleo IP de Ethernet. Lo hice en ISE agregando un IP Core como fuente y seleccionando "Ethernet 1000BASE-X PCS / PMA o SGMII". Al hacerlo, 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 listados en el manual de referencia de Nexys 3. La Ethernet en la placa Nexys 3 tiene el número de pieza SMCS LAN8710.

Otro método que he considerado es usar el software Digilent Adept para escribir datos en los registros en la pestaña Registro de 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 es posible).

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

    
pregunta user279043

2 respuestas

1

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 IP, crea un bloque de lógica dentro del FPGA con los puertos siendo las interfaces internas del FPGA. La mayoría de las interfaces, necesita conectarse a las lógicas internas que defina. Como parte de las interfaces, puede asignar a los pines de E / S externos reales. Para el controlador externo LAN8710 a bordo, duplica la función del núcleo IP con la interfaz de red física necesaria adicional. Tanto el LAN8710 como el núcleo IP solo le proporcionan las capas de hardware más bajas de las pilas de red (el núcleo IP probablemente no incluya la capa / interfaz física). El siguiente nivel sería la capa TCP / IP (Protocolo de Internet) (suponiendo que desea 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 huecos (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 externo de UART a Ethernet o Wifi.

    
respondido por el rioraxe
0

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

Has seleccionado un bloque de IP en el FPGA que es para Ethernet a 1000mbps, que usa varias interfaces diferentes para un PHY, ninguno de los cuales es MII / RMII ).

Debe comenzar por elegir un bloqueo de IP que admita redes 10/100, y luego asegúrese 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 han sugerido otras personas, obtener el MAC (el bit en el FPGA) hablando con el PHY (el LAN8710) es una pequeña parte de un gran esfuerzo de hablar con otras cosas en una red, y tal vez esté asumiendo más. lo que es sensato en esta etapa.

    
respondido por el user1844

Lea otras preguntas en las etiquetas