netfpga 1g

83
César D. Guerrero, Manuel F. Jaimes y Diana T. Parra NetFPGA 1G Una plataforma abierta para docencia, investigación e innovación en redes de computadoras

Upload: jguerrero97094

Post on 13-Apr-2018

291 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 1/83

César D. Guerrero, Manuel F. Jaimes y Diana T. Parra

NetFPGA 1G

Una plataforma abierta para docencia, investigación einnovación en redes de computadoras

Page 2: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 2/83

Page 3: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 3/83

Prefacio

La idea de escribir un libro en español sobre la plataforma NetFPGA surge de participación en uno delos campamentos de verano que la Universidad de Stanford ha venido realizando en torno a esta plataformade prototipado en redes de computadoras.

Esta plataforma abierta de desarrollo de dispositivos de red, representa una oportunidad para transformarla educación para el uso de la tecnología por una educación para la generación de tecnología .

Aunque existe información en la web que la comunidad mundial de NetFPGA ha desarrollado, es cla-ro que muchas universidades aun no han sacado provecho de la plataforma por la barrera del idioma demuchos estudiantes de habla hispana. Este libro se ha escrito como un apoyo para que esta comunidadpueda rápidamente avanzar en el conocimiento de la plataforma NetFPGA y de esta manera se potencienlas acciones de docencia e investigación en el desarrollo de nuevos dispositivos de red que se conviertan enfuturas innovaciones.

Bucaramanga, Cesar D. GuerreroMarzo de 2015 Cesar D. Guerrero

V

Page 4: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 4/83

Page 5: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 5/83

Page 6: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 6/83

VIII Índice general

A.4.1. Instalación de ISE Xilinx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.2. Instalación de ModelSim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

A.5. Post Inatalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.6. Instalación de módulos de memoria para simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

A.6.1. Micron DDR2 SDRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A.6.2. Cypress SDRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

A.7. Vericación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.1. Vericacion de las interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.2. Re-programar el CPCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A.7.3. Ejecutar el Selftest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.4. Conectar el cable loopback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.5. Ejecutar los test de regresion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.6. Conectar los cables Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.7. Descargar el bitle del reference router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.8. Correr la suite de los test de regresion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A.7.9. Ejecutar el Selftest en un nuevo bitle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A.7.10.Sintetizar el reference router desde los archivos fuente . . . . . . . . . . . . . . . . . . . . . . . . A.7.11.Descargar el bitle del reference router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.12.Ejecutar la suite de regresión desde su nuevo bitle. . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 7: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 7/83

Capítulo 1Introducción a la NetFPGA

Este capítulo presenta una breve reseña histórica de la Plataforma NetFPGA, así como su denición des-de los puntos de vista tecnológico y académico. De igual modo, se presentan los tipos de tarjetas NetFPGAque existen en la actualidad, y se exponen detalladamente las especicaciones técnicas de cada una de lastarjetas, haciendo especial énfasis en la Tarjeta NetFPGA 1G.

1.1. OrígenesLa plataforma NetFPGA fue concebida por el profesor Nick McKeown de la Universidad de Stanford

en California (USA). La primera versión de la NetFPGA fue iniciada a nales del año 2001, y los primerosprototipos fueron usados en una clase de proyectos en nivel de posgrado en Stanford en 2003.

1.2. Denición

Desde el punto de vista tecnológico, la NetFPGA es una tarjeta de red que contiene un FPGA 1 (por sussiglas en Inglés Field-Programmable Gate Array ) programable para el procesamiento de paquetes a travésde cuatro puertos Gigabit Ethernet necesarias para construir NIC de cuatro puertos, un switch, un router 2 ocualquier otro dispositivo de red con funcionalidades especícas programadas en la tarjeta.

Una de las ventajas de la NetFPGA es su capacidad de procesar y enviar paquetes a la red a la velocidaddel medio de transmisión. Esto posibilita la generación de tráco a la tasa real del hardware de red.

Desde el punto de vista académico, NetFPGA es una plataforma de hardware y software abierto quepermite a estudiantes, docentes e investigadores, explorar y probar con la tecnología que hay detrás de undispositivo de red, como por ejemplo, un router; así como experimentar con nuevas ideas en hardware dered de alta velocidad.

Tal como lo han denido sus creadores, NetFPGA es más que una tarjeta de circuitos electrónicos.NetFPGA está formada por cuatro elementos:

1. La tarjeta física (board)2. Herramientas y diseños de referencia3. Proyectos desarrollados por otros investigadores4. Una comunidad académica en torno a NetFPGA

1 Un dispositivo FPGA es un hardware genérico en el cual su estructura interna se puede recongurar dinámicamente pararealizar funciones lógicas arbitrarias. De esta manera, se pueden realizar implementaciones de hardware ecientes con laexibilidad de programar software de código abierto.2 Estos y otros términos técnicos se mantendrán con sus nombres en Inglés a lo largo del libro.

1

Page 8: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 8/83

2 1 Introducción a la NetFPGA

La NetFPGA es mas que un dispositivo de hardware. Es la tarjeta física, software abierto (herra-mientas, diseños de referencia y proyectos) y una comunidad alrededor del mundo que genera nuevosproyectos y participa activamente en los foros.

En cuanto a herramientas y diseños de referencia, la NetFPGA tiene herramientas de compilación, vericación de diseños, de interacción con el hardware, entre otras, que facilitan la labor de programacide la tarjeta. Existen diseños de referencia que se pueden utilizar como punto de partida. Algunos de ellson el router de referencia, el switch de referencia, la tarjeta (NIC), el router kit y SCONE (que se describmas adelante).

Existen además proyectos desarrollados por muchas universidades, centros de investigación y particlares que estan disponibles en código abierto para la comunidad NetFPGA. Entre elos estan OpenFlo(Stanford), Generador de paquetes (Stanford), NetFlow (Brno University), NetThreads (U. de TotontoMonitor de tráco (U. de Catania), entre otros.

El componente mas importante de la NetFPGA es la comunidad de desarrolladores y usuarios que matienen la información actualizada en la web y que a través de los foros participan activamente en la solucde inquietudes de la misma comunidad.

1.3. Tipos de tarjetas NetFPGA

Actualmente existen tres tipos de tarjeta NetFPGA. Una que opera con cuatro puertos de 1 Gigabit psegundo (Figura 1.1), otra queopera concuatro puertos de 10 Gigabit porsegundo (Figura 1.2) y nalmentela tarjeta NetFPGA SUME(Figura 1.3)que opera en las velocidades de10 y 100 Gbps. El cuadro1.1 resumlas características principales de las tarjetas de 1 Gbps y 10 Gbps.

Cuadro 1.1 Comparación entre las tarjetas NetFPGA de 1 y 10 Gbps.

Item NetFPGA 1G NetFPGA 10G

Puertos Ethernet 4 x 1Gbps. 4 x 10 Gbps.Memoria RAM 4.5 MB ZBT SRAM 27 MB QDRII-SRAM

64 MB DDR2 SDRAM 288 MB RLDRAM-II

Interfaz PCI PCI Expresss x8Procesador Virtex II-Pro 50 Virtex 5 TX240T

1.3.1. Tarjeta NetFPGA 1G

La tarjeta NetFPGA 1G tiene cuatro puertos 1 Gigabit Ethernet. Se conecta al computador a través de uinterfaz PCI estándar. Posee un chip FPGA Xilinx Virtex-II Pro 50. Esta tarjeta cuenta con 4.5 MBytes memoria SRAM adecuada para almacenar tablas de enrutamiento y 64 MBytes de memoria DDR2 DRAcon un throughput de 25.6 Gbps para almacenamiento de paquetes de datos.

Mayores especicaciones de la tarjeta son las siguientes:1. Field Programmable Gate Array (FPGA) Logic

Xilinx Virtex-II Pro 50 3

53.136 celdas lógicas4.176 Kbit de bloque RAM2 x PowerPC cores

3 http://www.xilinx.com/support.html

Page 9: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 9/83

1.3 Tipos de tarjetas NetFPGA 3

Figura 1.1 Tarjeta NetFPGA de 1 Gps. Tomada de http://netfpga.org

Totalmente programable por el usuario

2. Puertos de red Gigabit Ethernet

Caja de derivación a la izquierda de las interfaces de PCB (Printed Circuit Board) a 4 conectoresRJ-45 externos.Interfaces con cables de red de cobre con estándar Cat5E o Cat6 utilizando Broadcom Physical Layer Transceiver of the OSI Model - PHY 4

Procesamiento a la velocidad del cable en todos los puertos en todo momento utilizando lógica FPGA:1 Gbits * 2 (bi-direccional) * 4 (puertos) = 8 Gbps

3. Static Random Access Memory (SRAM) 5

Adecuado para el almacenamiento de datos de la tabla de reenvío.Retorno de bus cero ( Zero-bus turnaround - ZBT ), sincronizado con la lógica.Dos bancos paralelos de 18 Mbit (2.25 MByte) memoria ZBT.Capacidad total: 4.5 MBytesCypress: CY7C1370D-167AXC6

4. Double-Date Rate Random Access Memory (DDR2 DRAM 7)

400 MHz Reloj Asíncrono.Adecuado para el almacenamiento de paquetes.25.6 Gbps de rendimiento de memoria.Capacidad Total: 64 MBytes.Micron: MT47H16M16BG-5E

5. Multi-gigabit I/O

Dos conectores SATA Multi-Gigabit I/O en el lado derecho del PCB.Permite la conexión de múltiples tarjetas NetFPGA en una CPU estandar.Tarjeta PCI estándar.Puede ser usado en una ranura PCI-X.Habilita la rápida conguración de la FPGA sobre el bus PCI sin usar el cable Joint Test Action Group

(JTAG).Proporciona accesoa losregistros de memoria asignadosy la memoria en el hardware de la NetFPGA.

4 Los transceptores de capa física son los que permiten enviar y recibir paquetes desde una conexión de cable de red hacia laNetFPGA5 Memoria estática de acceso aleatorio donde los datos se mantienen constante mientras se suministra energía eléctrica al chipde memoria.6 http://www.chipcatalog.com/Cypress/CY7C1370D-167AXC.htm7 Memoria dinámica de acceso aleatorio, que tiene una manera eciente de almacenar datos en la memoria, ya que requieremenos espacio físico para almacenar la misma cantidad de datos que si se almacena estáticamente.

Page 10: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 10/83

4 1 Introducción a la NetFPGA

6. Puertos de depuración del Hardware

Conector del cable JTAG se puede utilizar para ejecutar el Xilinx ChipScope Pro.

1.3.2. Tarjeta NetFPGA 10G

Figura 1.2 Tarjeta NetFPGA de 10 Gigabits por segundo. Fuente: Tomada de https://www.digilentinc.com/

Desde marzo de 2012 se encuentra disponible la plataforma NetFPGA de 10GB. La tarjeta tiene cuatpuertos de 10 Gigabit Ethernet con interfaces SFP+ que le permiten conectar tanto cobre como bra óptiEs conectada al computador a través de una interfaz PCI Express Gen2 x8 . Posee un chip FPGA XilinxVirtex-5 TX240T con un número mucho mayor de compuertas lógicas con respecto a la NetFGPA de 1Esta tarjeta cuenta con 27 MBytes de memoria QDRII SRAM y 288 MBytes de memoria RLDRAM-II. Figura 1.2. Especicaciones mas detalladas tomadas del fabricante son las siguientes:

FPGA Xilinx Virtex-5 XC5VTX240T-2FFG1759CCuatro interfaces SFP+ (usando 16 RocketIO GTX transceivers y 4 puertos Broadcom EDC) que soptan modos de operación de 10Gbps o de 1GbpsConector X8 PCI Express Gen 2Veinte Transceivers GTX seriales congurablesTres x36 Cypress QDR II (CY7C1515JV18)Cuatro x36 Micron RLDRAM II (MT49H16M36HT-25)Dos Xilinx Platform XL Flash (128mb each)Un Xilinx XC2C256 CPLDUn puerto DB9 (RS232)Dimensiones: 9.5"x 4.25"

1.3.3. Tarjeta NetFPGA SUME

La NetFPGA SUME es una tarjeta PCI Express basada en FPGA con capacidades de E/S para operar avelocidades de 10 y 100 Gbps. Contiene un adaptador de tarjeta x8 Gen3 PCIe que incorpora una FPGVirtex-7 690T de Xilinx. Puede ser usada como una Tarjeta de Interfaz de Red (NIC), switch multipuerrewall, entorno de prueba/mediciones y muchas más aplicaciones.

Mayores especicaciones de la tarjeta son las siguientes:

Page 11: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 11/83

1.3 Tipos de tarjetas NetFPGA 5

Figura 1.3 Tarjeta NetFPGA SUME. Fuente: Tomada de https://www.digilentinc.com/

1. Field Programmable Gate Array (FPGA) lógica

Xilinx Virtex-7 690T693.120 células de lógica52.920 Kbit bloque RAMhasta Kbit 10.888 distribuido RAM30 emisoras GTH (hasta 13.1Gbps)Totalmente programable por el usuario

2. Puerto de red 10-gigabit Ethernet

Bloque conector de PCB izquierda interfaces para 4 puertos externos SFP +Conectado directamente a la FPGA.Procesamiento de velocidad de cable en todos los puertos en todo momento mediante lógica FPGA.

3. Memoria de acceso aleatorio estática de tasa datos cuádruple (QDRII + SRAM)

Conveniente para el almacenamiento y reenvío de datos de la tablaTarifa de datos 500MHz Quad (2 Giga transacciones cada segundo), sincrónico con la lógicaTres bancos paralelos de 72 QDRII MBit + recuerdosCapacidad total: 27 MBytesCiprés: CY7C25652KV18-500BZC

4. Memoria de acceso aleatorio de una cita doble tasa (DDR3 DRAM)

Conveniente para los búferes de paqueteDos módulos SoDIMM DDR3 reemplazablesReloj de 933MHz (1866MT/s)238.8 rendimiento de memoria de pico GbpsCapacidad total: 8 GB (soporta hasta 32 GB)Micrón: MT8KTF51264HZ-1G9E5

5. PCI Express gen 3

Tercera generación de la interfaz de PCI Express, 8Gbps/carril8 carriles (x 8)IP duroProporciona acceso de CPU a registros mapeados en memoria y memoria en el hardware de NetFPGA

6. Interfaces de expansión

Page 12: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 12/83

6 1 Introducción a la NetFPGA

Totalmente compatible con conector de VITA-57 FMC HPC, incluyendo 10 enlaces serie de altvelocidadConector SAMTEC QTH-DP, conectado a 8 enlaces serie de alta velocidadPermite para conectar adicional 18 transceptores GTHConector de expansión Digilent PMOD

7. Almacenamiento de información

2 conectores SATARanura para micro SD2 dispositivos FLASH, cada 512Mbit (1Gbit total)

8. Características adicionales

Circuito de recuperación del relojSensores de voltajeSensores de corrienteLEDs de usuario & los botones

9. Factor de forma estándar PCIe

Tarjeta PCIe estándarLongitud total, altura completa

10. Flexible, código de fuente abiertaEn el documento siguiente se proporciona una descripción completa de la Junta y sus posibles casos

uso: Noa Zilberman, Yury Audzevich, G. Adam Covington, Andrew W. Moore, ’ NetFPGA SUME: ha100 Gbps como materia de investigación,’ IEEE Micro, vol.34, no.5, pp.32,41, septiembre-octubre de 20(versión ocial) (pdf)

1.3.4. Arquitectura

En lo que queda de este libro, se hará referencia a la implementación NetFPGA de 1G. A nivel bloques, se puede considerar la implementación de la NetFPGA según se observa en la Figura 1.4. En earquitectura se empiezan a diferenciar dos componentes en la implementación. El primero hace referencilos recursos de hardware y software del computador que contiene la tarjeta y el otro a la tarjeta en si mism

Figura 1.4 Arquitectura de alto nivel de la NetFPGA.

En el caso de un enrutador, los componentes que están en el host corresponden al Control Plane ylos que están en la tarjeta NetFPGA corresponden al Data Plane . Lo que se tiene por una parte es una

Page 13: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 13/83

1.3 Tipos de tarjetas NetFPGA 7

computadora de propósito general que ejecuta tareas de alta demanda en términos de procesamiento perono de velocidad de ejecución (control plane). Por otra parte, se tiene un hardware de alta velocidad detransmisión de paquetes a través de la administración de puertos de red por parte de una FPGA (data plane).

La computadora que contiene la tarjeta puede ser un PC de escritorio o un servidor de red. Actualmente,se ofrecen a traves de la página del proyecto, dos tipos de implementación vericados y aprobados por laUniversidad de Stanford:

Cube Computadora de propósito general con procesador AMD Dual Core o Quad Core (Figura 1.5(a))

Servidor Un servidor 1U para montaje en rack con procesador Intel Dual Core o Quad Core (Figu-ra 1.5(b))

(a) Cube (b) 1U

Figura 1.5 Implementaciones de NetFPGA en computador de escritorio o servidor Fuente: Tomada de netfpga.org

Page 14: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 14/83

Page 15: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 15/83

Capítulo 2Estructura del Software y Hardware de la NetFPGA

La estructura a nivel software y hardware de la Plataforma NetFPGA son estudiados en este capitulo.Para tal n, la biblioteca base de la NetFPGA es presentada de modo detallado en la Sección 2.1. y, en laSección 2.2. es explicado el pipeline de referencia correspondiente al diseño de referencia Reference NIC (ver Sección 3.1.)

2.1. Estructura del SoftwareLa estructura de directorios para proyectos contribuidos se rige a la organización de los proyectos de

referencia.La biblioteca base de la NetFPGA contiene las siguientes carpetas:netfpga/

bin/........... Contiene scripts para simulaciones/síntesis/registros y conguración del entorno.bitfiles/....... Contiene los bitles (hardware compilado) de todos lo proyectos que han sidosintetizados.lib/................................................... Librerías y herramientas de software

C/. ............................... Software común y código para los diseños de referencia.Java/......................... Librerías y software para la interfaz gráca de usuario - GUI

Makefiles/. .................................... Makeles para la simulación y síntesis.Perl5/. Bibliotecas para interactuar con los diseños de referencia y archivos de ayuda para elproceso de simulación y tests de regresión.Python/.............................. Librerías comunes de ayuda en los test de regresión.Scripts/......................... Scripts útiles - Menos usados que los del directorio bin/ Verilog/..................... Módulos Verilog que pueden ser reutilizados en los diseños.

core/........ Módulos usados por los diseños de referencia, desarrollados como parte delproceso del diseño de la NetFPGA.contrib/. ..................... Módulos contribuidos por los usuarios de la NetFPGA.

projects. ....................................................... Carpeta de los proyectos<project>/...................................................... Proyecto contribuido

doc/............................................... Documentación sobre el proyecto.include/. Archivos que denen macros y otros que especican qué módulos Verilog de la

biblioteca base son incluidos en el proyecto.lib/........................................................ Perl/Python y C headersregress/. ....................................................... Test de regresión.src/........................................... Código Verilog especíco del proyectosw/................................. Contiene todas las piezas de software del proyecto.synth/. Archivos .XCO especícos del proyecto para generar el Xilinx core y un Makelepara implementar el diseño.verif/.................................. Contiene archivos para los test de simulación.

9

Page 16: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 16/83

10 2 Estructura del Software y Hardware de la NetFPGA

La documentación de cada proyecto está localizada en el directorio doc/ de la carpeta del proyecto. Eldirectorio include/ contiene un archivo XML (project.xml) el cual nombra y describe el proyecto, lista lomódulos Verilog usados, y dene la localización de todos los registros en los módulos dentro del proyecEste también contiene todos los archivos XML necesarios para módulos especícos del proyecto. Todos módulos especícos de un proyecto (por ejemplo, módulos nuevos o modicados de la librería base) estlocalizados en el directorio src/ . Los Makeles de la plataforma NetFPGA aseguran que módulos dentro deldirectorio src/ de un proyecto sobreescribirán cualquier modulo con el mismo nombre dentro de la librerbase de módulos.

El directorio de librerías lib/ es usado por los scripts de la NetFPGA para almacenar el registro delgenerador de paquetes tanto para C como para Perl. Este directorio y los archivos de registro son automcamente generados cuando se corren simulaciones o síntesis. Los archivos de registro permiten al softwllamar a los registros mediante su nombre en lugar de direcciones. Esto brinda la posibilidad de modidirecciones de registros sin tener que preocuparse de cambiar los valores de las direcciones codicadas.

El directorio de síntesis synth/ es donde todos los archivos .xco de Xilinx están localizados. Estos archi-vos son usados para crear los cores necesarios del Xilinx Core Generator. También es donde el proyecto essintetizado. Después de ejecutar la síntesis y de haberse generado el bitle del proyecto (Correr make en eldirectorio synth/ ) los test de regresión pueden ser ejecutados sobre el bitle recientemente generado.

El directorio de vericación verif/ contiene tests de simulación que permiten comprobar el correctofuncionamiento del gateware . Cada test es alojado en una carpeta diferente dentro del directorio verif/ . Elesquema de nombres del directorio test es <test>_<major>_<minor> , donde las etiquetas <major>y <minor> pueden ser nombradas como el diseñador del proyecto desee. Los script de simulaciónutilizan el <major> y <minor> para poder determinar cual test ejecutar. Si el script de simulación esejecutado sólo con la opción <major> , entonces todos los tests que tengan un <major> igual al especi-cado serán ejecutados secuencialmente. En caso de que el <major> y el <minor> sean especicados,sólo será ejecutado el test que corresponda a estos dos parámetros. Cada test contiene un archivo llamamakepackets.pl , el cual usa librerías Perl incluidas en el NFP (por sus siglas en inglés, NetFPGA Package ),para crear paquetes y para la lectura/escritura de registros en la simulación.

El directorio de software sw/ incluye todo el software (funcional y de diagnostico) para ese proyecto enespecíco.

2.2. Estructura del Hardware

La división del hardware se ha hecho mediante módulos. La comprensión de estos módulos es esencpara el entendimiento de la mayoría de los diseños de referencia. Todos los proyectos distribuidos en el NFPsiguen esta misma estructura modular. Este diseño es un pipeline donde cada etapa es un módulo separado.Un diagrama del pipeline es mostrado en la Figura 2.1.

Pipeline de referencia

La primera etapa, consta de varias colas que se denominan colas Rx (Rx Queues). Estas colas recibenpaquetes desde los puertos de E/S (tales como los puertos Ethernet y PCI ) y proporcionan una interfazunicada para el resto del sistema. Estos puertos están conectados al User Data Path , el cual contiene las

etapas de procesamiento. Para el Router de referencia el diseño actual consta de 4 colas Rx Ethernet y 4colas CPU DMA. Las colas Ethernet y DMA se encuentra intercaladas de manera que para el User DataPath , la cola Rx 0 es el puerto Ethernet 0, la cola Rx 1 es el puerto DMA 0, la cola Rx 2 es el puerto Ethernet 1, y así sucesivamente. Los paquetes que llegan a la cola CPU DMA Rx X son paquetes que hansido enviados por software a través de la interfaz nf2cX .

Dentro del User Data Path , el primer módulo que un paquete atraviesa es el Input Arbiter . Este módulodecide a cual cola Rx atiende, saca el paquete de esa cola y se lo entrega al siguiente módulo en el pipeline :el módulo Output Port Lookup . El Output Port Lookup se encarga de decidir por cuál puerto un paquetedebe salir. Después de que se ha hecho esta decisión, el paquete es entregado al siguiente módulo: el mod

Page 17: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 17/83

2.2 Estructura del Hardware 11

Figura 2.1 Pipeline del Refe-rence Router . Fuente: Tomadade http://www.netfpga.org/

Output Queues , el cual almacena el paquete en las colas correspondientes al puerto de salida, hasta que lacola Tx acepte el paquete para su transmisión.

Las colas Tx son análogas a las colas Rx, sólo que envían paquetes desde los puertos E/S en lugar derecibirlos. Las colas Tx también se encuentran intercaladas, de modo que los paquetes enviados fuera delUser Data Path por el puerto 0 son enviados a la cola Ethernet Tx 0 , y los paquetes enviados fuera del User Data Path por el puerto 1 son enviados a la cola CPU DMA Tx 0, y así sucesivamente. Los paquetes que setransmiten a la cola DMA Tx X salen por la interfaz nf2cX .

Para cada uno de estos módulos, hay un conjunto de registros que proveen información del estado, accesoy las señales de control de ajuste.

Page 18: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 18/83

Page 19: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 19/83

Capítulo 3Diseños de referencia

En el capítulo 3, se describen cuatro de los diseños de referencia que permiten comprender como fun-ciona la plataforma NetFPGA, a partir del análisis del código fuente distribuido en el NFP. Los diseños dereferencia que serán estudiados en detalle, son:

1. Reference NIC: Introducción a la interfaz Software/Hardware.2. SCONE: Ejemplo más complejo del proceso de comunicación del usuario con el Hardware.3. Router Kit: Instalación y utilidades del Router Kit.

4. Reference Router: Presenta a detalle el Hardware y cómo modicarlo.

3.1. Reference NIC

La sección 3.1 expone aspectos de la Reference NIC y la utilización de algunas de las herramientasque se distribuyen con los NFP , adicionalmente se detalla mediante un ejemplo cómo escribir un sencilloprograma en C para interactuar con el hardware.

3.1.1. Usando counterdump

Suponiendo que las pruebas de regresión 1 han sido completadas con éxito y que se ha instalado correcta-mente el NFP , se procede a utilizar uno de los proyectos distribuidos: La NIC. En el resto de los ejercicios,se asumirá que el NFP está alojado en el directorio home del usuario. Reemplace ’~’ con la ruta completa ala ubicación de la instalación. Para ejecutar las herramientas, una direccion IP debe ser asignada a cada unade las interfaces nf2cX . Ejecute para cada una de las interfaces, el siguiente comando reemplazando todaslas x por una dirección valida:ifconfig nf2cX x.x.x.x

Luego, se descargar el bitle de la Reference NIC a la NetFPGA. Para ello, ejecute el siguiente comando:nf_download ~/netfpga/bitfiles/reference_nic.bit

La salida obtenida, debe ser similar a la siguiente:Found net device: nf2c0Bit file built from: nf2_top_par.ncdPart: 2vp50ff1152Date: 2007/11/21Time: 11: 0: 3Error Registers: 1000000Good, after resetting programming interface the FIFO is empty

1 Ver Sección ??

13

Page 20: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 20/83

14 3 Diseños de referencia

Download completed - 2377668 bytes. (expected 2377668).DONE went high - chip has been successfully programmed.

Para compilar las utilidades ejecute:

cd ~/netfpga/projects/reference_nic/sw && make

Una de las herramientas construidas se llama counterdump . Esta sencilla herramienta lee varios conta-dores del hardware y despliega estos datos en la terminal. Para utilizarla, ejecute:

./counterdump

Se debería obtener una salida similar a la siguiente:

Found net device: nf2c0Num pkts received on port 0: 0Num pkts dropped (rx queue 0 full): 0Num pkts dropped (bad fcs q 0): 0Num bytes received on port 0: 0Num pkts sent from port 0: 0Num bytes sent from port 0: 0

Num pkts received on port 1: 0Num pkts dropped (rx queue 1 full): 0Num pkts dropped (bad fcs q 1): 0Num bytes received on port 1: 0Num pkts sent from port 1: 0Num bytes sent from port 1: 0

Num pkts received on port 2: 0Num pkts dropped (rx queue 2 full): 0Num pkts dropped (bad fcs q 2): 0Num bytes received on port 2: 0Num pkts sent from port 2: 0Num bytes sent from port 2: 0

Num pkts received on port 3: 0Num pkts dropped (rx queue 3 full): 0Num pkts dropped (bad fcs q 3): 0Num bytes received on port 3: 0Num pkts sent from port 3: 0Num bytes sent from port 3: 0

3.1.2. Usando send_pkts

Ahora se procede a enviar y recibir algunos paquetes y posteriormente vericar la salida de nuevo. Ude las herramientas que se incluyen en el NFP se denomina send_pkts . Esta herramienta permite enviararbitrariamente paquetes Ethernet desde cualquier puerto. Para utilizar esta herramienta ejecute:cd ~/netfpga/lib/C/tools/send_pkts && make

Si el proceso fue exitoso, se debería ver una salida similar a la siguiente:

gcc ‘libnet-config --defines --cflags‘ -O2 -o send_pkts send_pkts.c ‘libnet-config

A continuación se envían algunos paquetes a uno de los puertos. Para ello, ejecute el siguiente coman

sudo ./send_pkts -i nf2c0 -s 10 -l 100

Page 21: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 21/83

3.1 Reference NIC 15

Este comando envía 10 paquetes de 100 bytes por el puerto 0 de la NetFPGA (el puerto 0 es el puertomás cercano al conector PCI de su máquina). Si usted tiene una máquina conectada a la misma sección LAN del puerto, usted podría capturar los paquetes utilizando Wireshark . 2

Ahora, se procede nuevamente a revisar los contadores. Ejecute:~/netfpga/projects/reference_nic/sw/counterdump

Se debería generar una salida similar a la siguiente :Found net device: nf2c0Num pkts received on port 0: 0Num pkts dropped (rx queue 0 full): 0Num pkts dropped (bad fcs q 0): 0Num bytes received on port 0: 0Num pkts sent from port 0: 10Num bytes sent from port 0: 1000

Num pkts received on port 1: 0Num pkts dropped (rx queue 1 full): 0Num pkts dropped (bad fcs q 1): 0Num bytes received on port 1: 0Num pkts sent from port 1: 0Num bytes sent from port 1: 0

Num pkts received on port 2: 0Num pkts dropped (rx queue 2 full): 0Num pkts dropped (bad fcs q 2): 0Num bytes received on port 2: 0Num pkts sent from port 2: 0Num bytes sent from port 2: 0

Num pkts received on port 3: 0Num pkts dropped (rx queue 3 full): 0Num pkts dropped (bad fcs q 3): 0Num bytes received on port 3: 0

Num pkts sent from port 3: 0Num bytes sent from port 3: 0

Si los puertos de la NetFPGA no están conectados a una red tranquila, entonces probablemente veráresultados diferentes.

3.1.3. Entendiendo la interfaz Hardware/Software

Los contadores que han sido objeto de dumping utilizando counterdump son en realidad registros deE/S mapeados en memoria. Estos contadores están en la FPGA de la tarjeta y son exportados a través dela interfaz PCI . El software utiliza llamadas ioctl 3 para hacer la lectura y escritura en estos registros. Lasllamadas ioctl se envuelven en dos funciones: READREG y WRITEREG. En esta sección, se va a analizarcounterdump.c y comprender la interfaz Software/Hardware. counterdump.c es mostrado a continuación.

1 /

2 vim : s e t s h i f tw id t h =2 s o f t t a b s to p =2 e x p an d tab :3 $Id : counterdump . c 5455 2009− 05− 05 18 :18 :16Z g9coving $4

5 Module : counterdump . c

2 Wireshark es un analizador de protocolos basado en las librerías pcap utilizado comúnmente como herramienta de monitoreode redes.3 ioctl es una llamada de sistema en Unix que permite a una aplicación controlar o comunicarse con un driver de dispositivo

Page 22: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 22/83

16 3 Diseños de referencia

6 Pr oj ec t : NetFPGA NIC7 Desc r ip t ion : dumps the MAC Rx/Tx count e rs to s tdo u t8 Author : Jad Naous9

10 Change h is to r y :11

12 / 1314 # inc lu de <s td io . h>15 # inc lu de < st dl ib . h>16 # inc lu de <u nis td . h>1718 # inc lu de <net / i f . h>1920 # inc lu de " . . / l i b /C / reg _de f in es_r e fe ren ce_ nic . h"21 # inc lu de " . . / . . / . . / l i b /C / common/ nf2 . h"22 # inc lu de " . . / . . / . . / li b /C/ common/ nf 2 u t i l . h"2324 # def in e PATHLEN 802526 # def in e DEFAULT_IFACE " nf 2c 0 "2728 / G lob a l v a r s / 29 s t a t i c s t ru ct n f2 d e v ic e n f2 ;3031 / F un c ti o n d e c l a r a t i o n s / 32 void dumpC ounts ( ) ;33 void p ro c e s sA rg s ( i n t , char ) ;34 void u s ag e ( void ) ;3536 i n t main ( i n t argc , char ar gv [ ] )37 {38 nf2 . devic e_nam e = DEFAULT_IFACE;3940 p r oc e s sA rgs ( a rg c , a rgv ) ;4142 / / Open t he i n t e r f a c e i f p o s s ib l e43 i f ( check_i face (&nf2 ) )44 {45 e x i t ( 1 ) ;

46 }47 i f ( openDesc r ip to r (&nf2 ) )48 {49 e x i t ( 1 ) ;50 }5152 dumpCounts ( ) ;5354 c l o s e De s c r i p to r (& nf 2 ) ;5556 r e t u r n 0 ;57 }5859 void dumpCounts ( )60 {61 unsigned val ;6263 re ad Re g(&n f2 , MAC_GRP_0_RX_QUEUE_NUM_PKTS_STORED_REG, &v a l ) ;64 p r in t f ( "Num pkt s re ce iv ed on po rt 0: %u \ n" , va l ) ;65 rea dR eg (&nf 2 , MAC_GRP_0_RX_QUEUE_NUM_PKTS_DROPPED_FULL_REG, &v al ) ;66 p r i n t f ( "Num p k t s d rop p ed ( r x q ue ue 0 f u l l ) : %u \ n " , v a l ) ;67 rea dR eg (&nf 2 , MAC_GRP_0_RX_QUEUE_NUM_PKTS_DROPPED_BAD_REG, &v a l ) ;68 p r i n t f ( "Num pk ts d ro pp ed ( bad f c s q 0 ) : %u \ n " , v a l ) ;69 re ad Re g(&n f2 , MAC_GRP_0_RX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;70 p r i nt f ( "Num b yt es r ec ei ve d on po rt 0 : %u \ n " , va l ) ;71 re ad Re g(&n f2 , MAC_GRP_0_TX_QUEUE_NUM_PKTS_SENT_REG, &v a l ) ;

Page 23: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 23/83

3.1 Reference NIC 17

72 p r i n t f ( "Num p kt s se n t from p o r t 0 : %u \ n " , va l ) ;73 re ad Re g(&n f2 , MAC_GRP_0_TX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;74 p r in t f ( "Num byt es s en t from po rt 0 : %u \ n \ n " , va l ) ;7576 re ad Re g(&n f2 , MAC_GRP_1_RX_QUEUE_NUM_PKTS_STORED_REG, &v al ) ;77 p r in t f ( "Num p kt s r ec ei ve d on po rt 1 : %u \ n " , va l ) ;78 re ad Reg (&nf2 , MAC_GRP_1_RX_QUEUE_NUM_PKTS_DROPPED_FULL_REG, &va l ) ;79 p r i n t f ( "Num p k t s d ro pp ed ( r x q ue ue 1 f u l l ) : %u \ n " , v a l ) ;80 re ad Reg (&nf2 , MAC_GRP_1_RX_QUEUE_NUM_PKTS_DROPPED_BAD_REG, &v a l ) ;81 p r i n t f ( "Num pk ts d ro ppe d ( bad f c s q 1 ) : %u \ n " , v a l ) ;82 re ad Re g(&n f2 , MAC_GRP_1_RX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;83 p r i n tf ( "Num b yt es r ec ei ve d on po rt 1 : %u \ n " , va l ) ;84 re ad Re g(&n f2 , MAC_GRP_1_TX_QUEUE_NUM_PKTS_SENT_REG, &v a l ) ;85 p r i n t f ( "Num p kt s se n t from p o r t 1 : %u \ n " , va l ) ;86 re ad Re g(&n f2 , MAC_GRP_1_TX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;87 p r in t f ( "Num byt es s en t from po rt 1 : %u \ n \ n " , va l ) ;8889 re ad Re g(&n f2 , MAC_GRP_2_RX_QUEUE_NUM_PKTS_STORED_REG, &v al ) ;90 p r in t f ( "Num p kt s r ec ei ve d on po rt 2 : %u \ n " , va l ) ;91 re ad Reg (&nf2 , MAC_GRP_2_RX_QUEUE_NUM_PKTS_DROPPED_FULL_REG, &va l ) ;92 p r i n t f ( "Num p k t s d ro pp ed ( r x q ue ue 2 f u l l ) : %u \ n " , v a l ) ;93 re ad Reg (&nf2 , MAC_GRP_2_RX_QUEUE_NUM_PKTS_DROPPED_BAD_REG, &v a l ) ;94 p r i n t f ( "Num pk ts d ro ppe d ( bad f c s q 2 ) : %u \ n " , v a l ) ;95 re ad Re g(&n f2 , MAC_GRP_2_RX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;96 p r i n tf ( "Num b yt es r ec ei ve d on po rt 2 : %u \ n " , va l ) ;97 re ad Re g(&n f2 , MAC_GRP_2_TX_QUEUE_NUM_PKTS_SENT_REG, &v a l ) ;98 p r i n t f ( "Num p kt s se n t from p o r t 2 : %u \ n " , va l ) ;99 re ad Re g(&n f2 , MAC_GRP_2_TX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;

100 p r i n tf ( "Num b yt es s e nt from po rt 2 : %u \ n \ n " , va l ) ;101102 re ad Re g(&n f2 , MAC_GRP_3_RX_QUEUE_NUM_PKTS_STORED_REG, &v al ) ;103 p r in t f ( "Num p kt s re ce iv ed on po rt 3 : %u \ n " , va l ) ;104 re ad Reg (&nf2 , MAC_GRP_3_RX_QUEUE_NUM_PKTS_DROPPED_FULL_REG, &va l ) ;105 p r in t f ( "Num p k t s d rop pe d ( r x q ue ue 3 f u l l ) : %u \ n " , v a l ) ;106 re ad Reg (&nf2 , MAC_GRP_3_RX_QUEUE_NUM_PKTS_DROPPED_BAD_REG, &v a l ) ;107 p r i n t f ( "Num pk ts d ro ppe d ( bad f c s q 3 ) : %u \ n " , v a l ) ;108 re ad Re g(&n f2 , MAC_GRP_3_RX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;109 p r i n tf ( "Num b yt es r e ce iv ed on po rt 3 : %u \ n " , va l ) ;110 re ad Re g(&n f2 , MAC_GRP_3_TX_QUEUE_NUM_PKTS_SENT_REG, &v a l ) ;111 p r i n t f ( "Num p kt s se n t from p o r t 3 : %u \ n " , va l ) ;

112 re ad Re g(&n f2 , MAC_GRP_3_TX_QUEUE_NUM_BYTES_PUSHED_REG, &v a l ) ;113 p r i n tf ( "Num b yt es s e nt from po rt 3 : %u \ n \ n " , va l ) ;114 }115116 / 117 P ro c e s s t h e a rg ume nt s .118 / 119 void p ro c e s sA rg s ( i n t argc , char a rg v )120 {121 char c ;122123 / don ’ t want ge top t to moan − I c a n do t h a t j u s t f i n e t ha n ks ! / 124 o pt er r = 0 ;125126 while ( ( c = ge top t ( a rgc , a rgv , " i : h" ) ) != − 1)127 {128 swi tch ( c )129 {130 case ’ i ’ : / i n t e r f a c e n a m e / 131 nf2 . device_name = op ta rg ;132 break ;133 case ’ ? ’ :134 i f ( i s p r i n t ( opto pt ) )135 f p r i n t f ( s td er r , "Unknown op t ion ‘− %c ’ . \ n" , op top t ) ;136 e l s e137 f p r i n t f ( s t d e r r ,

Page 24: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 24/83

18 3 Diseños de referencia

138 "Unknown o p t io n c h a r a c t e r ‘ \ \ x %x ’ . \ n " ,139 o p top t ) ;140 case ’h ’ :141 d e f a u l t :142 usage ( ) ;143 e x i t ( 1 ) ;144 }145 }146 }147148149 / 150 D e s c r ibe u s ag e o f t h i s p ro gra m .151 / 152 void u s ag e ( void )153 {154 pr in t f ( "Usage : . / counte rdump <opt ions > \ n \ n" ) ;155 p r i n t f ( " O pt i on s : − i < i f a c e > : i n t e r f a c e name ( d e f a u l t n f2 c0 ) \ n " ) ;156 p r i nt f ( " − h : P r i n t t h i s m es sa ge a nd e x i t . \ n " ) ;157 }

Ahora, se observa con detalle el código:1 # inc lu de " . . / l i b /C / reg _de f in es_r e fe ren ce_ nic . h"2 # inc lu de " . . / . . / . . / l i b /C / common/ nf2 . h"3 # inc lu de " . . / . . / . . / li b /C/ common/ nf 2 u t i l . h"

La línea 20 incluye el archivo de encabezado que contiene todas las direcciones de los registros deNetFPGA. Esto es necesario para referirse a los registros como nombres constantes en lugar de direccionnuméricas. Las líneas 21 y 22 incluyen macros para acceder a los registros. Estas funciones se utilizan madelante en el código.s t a t i c s t ru ct n f2 d e v ic e n f2 ;

La estructura nf2 tendrá información sobre el dispositivo al que se esta intentando acceder.Ahora, se revisa la función main() .nf 2 . de vi ce _n am e = DEFAULT_IFACE;

La línea 38 establece un nombre predeterminado para el dispositivo al que se está intentando acceder. Ees útil para que el usuario no tenga que especicar el nombre si está utilizando el dispositivo por defecto

cual es cierto en la mayoría de los casos).proce ssArgs ( argc , argv ) ;

La línea 40 analiza las opciones de línea de comandos. En este sencillo programa, la única opción delínea de comando es cambiar el nombre de la interfaz que se intenta acceder.

i f ( check_i face (&nf2 ) )

La línea 43 comprueba que la interfaz existe y puede ser alcanzada.i f ( openDesc r ip to r (&nf2 ) )

La línea 47 intenta abrir la interfaz para lectura/escritura utilizando llamadas ioctl. La interfaz tiene queestar lista y tener asignada una dirección IP para que pueda ser accedida mediante llamadas ioctl.

dump Count s ( ) ;

La línea 52 llama a la función dumpCounts() que despliega la información de todos los contadores enpantalla.c lo s e D e s c r i p to r (&n f2 ) ;

La línea 54 cierra la interfaz después de que se ha terminado de usar.La lectura y escritura de registros utiliza dos funciones:

int readReg(nf2device * nf2, unsigned int addr, unsigned int * val)

La función readReg() lee el registro en la dirección addr del dispositivo nf2 y escribe el valor de *val.La función devuelve 1 en caso de fallo o 0 en caso de éxito.

Page 25: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 25/83

3.1 Reference NIC 19

int writeReg(nf2device * nf2, unsigned int addr, unsigned int val)

La función writeReg() escribe val en el registro de dirección addr del dispositivo nf2. Devuelve 1 en falloo 0 en caso de éxito.

Ahora, se presentan dos líneas de la función dumpCounts() . El resto de líneas son similares:re ad Reg (&nf 2 , MAC_GRP_0_RX_QUEUE_NUM_PKTS_STORED_REG, &v al ) ;p r i n tf ( "Num p kt s r ec ei ve d on p or t 0 : %u \ n " , v al ) ;

La línea 63 lee el número de paquetes recibidos en la cola Rx0 y los guarda en val.La línea 64 imprime el resultado.

Documentación de los registros se puede encontrar en la página Register Map 4. Desafortunadamente,se siguen añadiendo y eliminado registros de acuerdo a la evolución del diseño, por lo que encontrará lalista más actualizada en el archivo reg_denes.h, el cual dene las direcciones de registro y es generadoautomáticamente a partir del código fuente Verilog en la etapa de simulación. Los registros en el Register Map se dividen en grupos que corresponden a los módulos Verilog.

A continuación, se modica el archivo reg_denes.h para hacer dumping sobre el ID del dispositivo asig-nado en tiempode ejecución. Para hacer esto, se abre el archivo /netfpga/lib/C/common/reg_defines.h ,se copia el macro que dene el ID del dispositivo para reemplazar lasXXXXcon el ID en las siguientes líneasy luego se copia las líneas al inicio de la función dumpCounts() después de la declaración de val.

readReg(&nf2, XXXX, &val);printf("Device ID: %u\n\n", val);

Posteriormente, después de guardar el archivo, escriba make en el directorio que contiene el counter-dump.c y ejecute el programa de nuevo. Ahora debería ver una salida similar a la siguiente:Found net device: nf2c0Device ID: 1

Num pkts received on port 0: 0Num pkts dropped (rx queue 0 full): 0Num pkts dropped (bad fcs q 0): 0Num bytes received on port 0: 0Num pkts sent from port 0: 10Num bytes sent from port 0: 1000

Num pkts received on port 1: 0Num pkts dropped (rx queue 1 full): 0Num pkts dropped (bad fcs q 1): 0Num bytes received on port 1: 0Num pkts sent from port 1: 0Num bytes sent from port 1: 0

Num pkts received on port 2: 0Num pkts dropped (rx queue 2 full): 0Num pkts dropped (bad fcs q 2): 0Num bytes received on port 2: 0Num pkts sent from port 2: 0Num bytes sent from port 2: 0

Num pkts received on port 3: 0Num pkts dropped (rx queue 3 full): 0Num pkts dropped (bad fcs q 3): 0Num bytes received on port 3: 0Num pkts sent from port 3: 0Num bytes sent from port 3: 0

4 URL Register Map: https://github.com/NetFPGA/netfpga/wiki/RegisterMap

Page 26: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 26/83

20 3 Diseños de referencia

3.2. SCONE

El enrutador SCONE (Software Componentes Of NetFPGA ) es un enrutador a nivel de usuario que hacereenvío de paquetes IPv4, maneja mensajes ARP e ICMP, cuenta con Telnet (puerto 23) y con una interfweb (puerto 8080) para el manejo y control del enrutador e implementa un subconjunto de OSPF llamadoPW-OSPF . SCONE reeja una copia de las direcciones MAC, direcciones IP, tabla de enrutamiento y tabARP en la tarjeta NetFPGA, la cual acelera la transmisión vía hardware.

3.2.1. ¿Cómo usar SCONE?

1. Asegúrese de que la NetFPGA ha sido programada con el bitle del Reference Router .2. Compruebequelas interfacesnf2c0, nf2c1, nf2c2, nfc3 han sido levantadas y que no tengan una dirección

IPv4 asignada.

Para remover una dirección IPv4 de una interfaz ejecute: ’ifcong nf2cX 0.0.0.0’ reemplazando la Xcon el numero de la interfaz

3. Congure el archivo cpuhw:

Un archivo de texto llamado cpuhw debe existir en el directorio sw/ de donde ejecuta el binario deSCONE. El formato del archivo es el siguiente:• <interface name><ip address><ip mask><mac address>.

Ejemplo: eth0-192.168.0.2-255.255.255.0-00:00:00:00:00:01Dentro de SCONE las interfaces son nombradas como eth0-3 y corresponden a los puertos nf2c0-3.

4. (Opcional) Especique un archivo de texto que contenga rutas estáticas:

Un archivo de texto que contenga las rutas estáticas a ser añadidas en el arranque de SCONE pueser especicado desde la línea de comandos mediante el parámetro ’-r’. El formato del archivo debser el siguiente:• <net><next hop><mask><outgoing interface name> .

Ejemplo: 192.168.130.14-192.168.130.9-255.255.255.254-eth1

5. Opcional Especique un archivo para crear un log de los paquetes en formato pcap :

Especique un archivo usando el parámetro ’-l’ desde la línea de comandos. De esta manera todos lpaquetes recibidos por SCONE se registrarán en este archivo utilizando el formato pcap . Este archivopuede abrirse y examinarse mediante Wireshark . Nota: Los paquetes que toman la ruta de reenvío dehardware no aparecerán en este log.

Para modicar la forma en que opera SCONE después de haberlo ejecutado, utilice la interfaz de línde comandos de telnet , o la interfaz web (ver Figura XXX). La interfaz web es compatible con todos loscomandos de la interfaz telnet , y proporciona capacidades de estilo AJAX para mantener al día los datos almismo tiempo que es ejecutado el enrutador. Para utilizar cualquiera de estas dos interfaces, debe conectaa una de las direcciones IP especicadas en el archivo cpuhw por el puerto 23 en telnet, o el puerto 8080para http. Para obtener una lista de los comandos usados en telnet digite el comando con ’?’. Una versgráca de este listado se encuentra disponible en el vínculo Command List de la interfaz web. Para obtenerayuda con un comando digite el comando seguido de ’?’ como argumento. Ejemplo: ’show ip ?’.

3.2.2. ¿Cómo funciona SCONE con la NetFPGA?

Para un paquete entrante a tomar la ruta de reenvío de hardware, el paquete debe afectar la tabla ddirecciones MAC destino, la tabla de enrutamiento, y la tabla de ARP para el siguiente salto. SCONconstruye y mantiene la tabla de enrutamiento conteniendo rutas estáticas y dinámicas, y la tabla ARen el software. Cuando se detectan cambios en las tablas de software, SCONE los copia en las tablas

Page 27: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 27/83

3.2 SCONE 21

Figura 3.1 Interfaz SCONE. Tomada de https://github.com/NetFPGA/netfpga/wiki/guide/images/Web_interface.jpg

hardware de la NetFPGA. Si desea quese transeran paquetes de software quecoincidancon lasdireccionesIP asignadas a las interfaces, debe también tener estas direcciones IP en la tabla del hardware. Estos sonalgunos fragmentos de código para escribir en varias tablas. En general, para escribir primero debe escribirlos registros que representan los datos para la la, entonces procede a escribir el numero de la la en elregistro WR correspondiente. Para leer una la, primero escriba el número de la deseado en el registro RDluego, puede leer los datos del registro indicado.

3.2.2.1. Escritura de direcciones MAC a la NetFPGA

La escritura de direcciones MAC a la NetFPGA, puede ser apreciada en las siguientes líneas de código:

uint8_t mac_addr[6];unsigned int mac_hi = 0;unsigned int mac_lo = 0;mac_hi |= (( unsigned int )mac_addr[0]) << 8;mac_hi |= (( unsigned int )mac_addr[1]);mac_lo |= (( unsigned int )mac_addr[2]) << 24;mac_lo |= (( unsigned int )mac_addr[3]) << 16;mac_lo |= (( unsigned int )mac_addr[4]) << 8;mac_lo |= (( unsigned int )mac_addr[5]);

writeReg(&netfpga, ROUTER_OP_LUT_MAC_0_HI_REG, mac_hi);writeReg(&netfpga, ROUTER_OP_LUT_MAC_0_LO_REG, mac_lo);// 1,2,3 can be substituted in for 0 to set the MAC for the other ports

NOTA: Un aspecto confuso de usar un proceso de nivel de usuario para controlar el router es que las direc-ciones MAC del router no coincidirán con las direcciones MAC del Kernel . Es decir, las direcciones MACde las interfaces nf2cX no reejan necesariamente las que están realmente en el hardware. Las interfacesnf2cX son entidades de software independientes que no necesariamente reejan el estado del hardware. Enla Sección XXX se describirá el Router Kit , el cual reeja la visión de Linux para la red HCORR (Hardware

Page 28: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 28/83

22 3 Diseños de referencia

Component of Reference Router) . Esto incluye las direcciones MAC de los puertos, direcciones IP, la tablade enrutamiento, y la caché ARP.

Para la escritura de la dirección IP de la interfaz en la NetFPGA, se tiene que el HCORR tiene unatabla que almacena las direcciones IP llamada tabla de ltros IP de destino. Los paquetes cuya direccióndestino IP coincide con una entrada en esta tabla serán enviados al hardware. El número de entradas de etabla puede encontrarse en el Register Map . Esta tabla se utiliza para ltrar las direcciones IP del enrutador ylas direcciones IP de los paquetes multidifusión de PW-OSPF . En la tabla se escribe de la siguiente manera:

struct in_addr ip;writeReg(&rs->netfpga, ROUTER_OP_LUT_DST_IP_FILTER_IP_REG, ntohl(ip.s_addr));/ / i is the row to write the IP address towriteReg(&rs->netfpga, ROUTER_OP_LUT_DST_IP_FILTER_WR_ADDR_REG, i);

En cuanto a la escritura en la tabla de enrutamiento se tiene que es similar a la escritura en la tabla ltros IP destino. Tenga en cuenta que el puerto de salida(s) se especica en formato one-hot-encoded ycorresponde al puerto de salida del User Data Path hacia Tx Queues. La función getOneHotPortNumber devuelve los valores (en decimal): 1, 4, 16, 64 los cuales corresponden a los puertos físicos de salida 0-3en la tarjeta NetFPGA. También puede indicar una ruta para enviar especícamente al software medianteespecicación de 2, 8, 32, 128 correspondientes a las interfaces nf2c0,1,2,3 . Para enviar fuera de los puertosMAC 0 y 1, escriba 1 + 4 = 5 , como la entrada del puerto de salida. La escritura de entradas de enrutamientoen la NetFPGA, se presenta en las siguientes líneas de código:

struct in_addr ip, mask, gw;</br>int i;char * iface;/ * write the ip * /writeReg(&netfpga, ROUTER_OP_LUT_RT_IP_REG, ntohl(ip.s_addr));/ * write the mask * /writeReg(&netfpga, ROUTER_OP_LUT_RT_MASK_REG, ntohl(mask.s_addr));/ * write the next hop * /writeReg(&netfpga, ROUTER_OP_LUT_RT_NEXT_HOP_IP_REG, ntohl(gw.s_addr));/ * write the port * /writeReg(&netfpga, ROUTER_OP_LUT_RT_OUTPUT_PORT_REG, getOneHotPortNumber(iface));/ * write the row number * /writeReg(&netfpga, ROUTER_OP_LUT_RT_LUT_WR_ADDR_REG, i);

En cuanto a la escritura de entradas ARP en la NetFPGA, puede consultar las siguientes líneas de códiuint8_t mac_addr[6];unsigned int mac_hi = 0;unsigned int mac_lo = 0;struct in_addr ip;int i;mac_hi |= (( unsigned int )mac_addr[0]) << 8;mac_hi |= (( unsigned int )mac_addr[1]);mac_lo |= (( unsigned int )mac_addr[2]) << 24;mac_lo |= (( unsigned int )mac_addr[3]) << 16;mac_lo |= (( unsigned int )mac_addr[4]) << 8;mac_lo |= (( unsigned int )mac_addr[5]);writeReg(&netfpga, ROUTER_OP_LUT_ARP_MAC_HI_REG, mac_hi);writeReg(&netfpga, ROUTER_OP_LUT_ARP_MAC_LO_REG, mac_lo);/ * write the next hop ip data * /writeReg(&netfpga, ROUTER_OP_LUT_ARP_NEXT_HOP_IP_REG, ntohl(ip.s_addr));/ * set the row * /writeReg(&netfpga, ROUTER_OP_LUT_ARP_LUT_WR_ADDR_REG, i);

Page 29: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 29/83

3.4 Reference router 23

3.3. Router Kit

El Router Kit es un método para proporcionar aceleración de hardware a un sistema Linux sin modicar.Se compone de un único programa, el rkd (Router Kit Daemon) , el cual monitorea la tabla de enrutamientode Linux y la caché ARP, y reeja una copia de estas en la implementación del Reference Router IPv4 .

3.3.1. Correr el Router Kit

El rkd debería trabajar desde la línea de comandos sin ninguna conguración externa. Basta con ejecutar./rkd . Para ejecutar el proceso en background use el parámetro ’-d’ y para especicar el tiempo de sondeoen milisegundos utilice el parámetro ’-i’.

rkd [-h||-- help } [-d||--daemon} [-i||--interval]

3.3.2. Usar el Router Kit

El Router Kit sólo es útil en un host Linux con la NetFPGA instalada y el bitle del Reference Router IPv4 cargado en la tarjeta. Dada esta conguración cada puerto de la tarjeta NetFPGA está disponible através de una interfaz nfc (es decir nfc0, nfc1, nfc2 y nfc3 asumiendo que sólo tiene una tarjeta instalada).

El rkd intentará reejar toda la caché ARP y las entradas de la tabla de enrutamiento asociadas con unainterfaz NetFPGA en hardware. Esto proporciona un método muy simple (y familiar) de adicionar entradaspara el hardware. Por ejemplo, para agregar una entrada ARP estática, sólo tiene que utilizar el comandoarp(8) . El siguiente comando añadirá una entrada ARP estática.

arp -s 1.2.3.4 ca:fe:de:ad:d0:d0 -i nfc0

Para añadir una entrada en la tabla de enrutamiento, use rute(8) (o ip (8)) . Por ejemplo, para adicionaruna entrada por defecto con el siguiente salto en 10.0.0.1 y saliendo por el primer puerto sería algo como:

route add default gw 10.0.0.1 dev nfc0

El Router Kit no se limita a la manipulación manual de la línea de comandos. Todo estado (incluido elestado dinámico) es duplicado. Esto es, ejecutando el rkd junto a un software de enrutamiento estándar,tal como XORP o Zebra/Quagga ; debería proporcionar aceleración por hardware de la tabla de reenvío sinninguna conguración adicional (siempre que el software de enrutamiento esté utilizando las interfaces dela NetFPGA para el reenvío).

3.3.3. Cómo funciona

Elrkd sondeacontinuamente el estadode la tabla de enrutamientoy la caché ARP desde/proc/net/routey /proc/net/arp respectivamente. Cuando se detecta un cambio en algún estado, ./rkd actualiza el es-tado en la NetFPGA a través de la interfaz de registro. Todo el tráco que no es manejado por el hardware

se DMA’d al software, donde es procesado por el kernel de Linux.

3.4. Reference router

En esta sección se presentan los aspectos generales de diseño del enrutador de referencia y se describenlas herramientas disponibles para la comunicación con el Hardware Component of the Reference Router (HardCORR) , así como el proceso de modicación, simulación e implementación de un diseño de referen-

Page 30: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 30/83

24 3 Diseños de referencia

cia. Las herramientas objeto de estudio son: La Java GUI y la interfaz de línea de comandos (Command Line Interface - CLI) .

3.4.1. Componentes del enrutador de referencia

En la Figura 1.4 se presentó una estructura general de los componentes de un enrutador en la NetFPGEstos componentes se dividen en las operaciones que corren en el Control Plane (host que contiene la tarjetaNetFPGA) y las que se ejecutan en el Data Plane (la tarjeta NetFPGA). Visto a un nivel mas detallado,tenemos los componentes que se observan en la Figura 3.2 y que se describen a continuación.

Figura 3.2 Componentes básicos del enrutador de referencia.

3.4.1.1. Tabla de Forwarding

Una vez llega un paquete a través de un puerto del enrutador, la decisión de hacia que puerto de salise envía el paquete, se toma con base en la búsqueda que se haga, de la dirección IP de la red de destinen la Tabla de Forwarding a través de un algoritmo de búsqueda como por ejemplo el LPM ( Longest Prex Match). LPM realiza búsquedas en la tabla ordenada (de las direcciones IP mas especícas a las menespecícas) hasta encontrar la primera dirección IP que concuerde con la red de destino del paquete. Es

garantiza una búsqueda eciente en la tabla a una velocidad alta que permita que se realice el siguienproceso en la tarjeta.

3.4.1.2. Switching

Una vez ubicada la dirección IP de destino del paquete en la Tabla, esa dirección tiene asociado un puede salida del enrutador a través del cual debe enviarse el paquete. El módulo de Switching realiza esa tareade mover el paquete dentro del Data Plane , hacia el puerto de salida de la NetFPGA.

Page 31: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 31/83

3.4 Reference router 25

3.4.1.3. Queuing

Dado quepuedenexistir varios paquetes enviadosconanterioridadal mismo puertoy quelascapacidadesde las colas asociadas con cada puerto de salida son limitadas, es necesario tener un mecanismo que permita“encolar” los paquetes antes de que sean enviados al medio de transmisión a su destino siguiente.

3.4.1.4. Administración y línea de comandos

En el Control Plane se ejecutan las operaciones que no requieren una velocidad tan alta como se requiereen el reenvío físico de los paquetes a través del hardware de la NetFPGA. Una de esas operaciones tieneque ver con la administración del enrutador a través de la línea de comandos con el n de congurar lasdirecciones IP de los puertos y otras actividades comunes de administración de un enrutador que se realizande manera esporádica por la persona encargada de administrar el equipo.

3.4.1.5. Protocolos de Enrutamiento

La actualización de las tablas de enrutamiento es una tarea de mayor complejidad computacional que serealiza en el Control Plane de manera esporádica: cada vez que una ruta se rompa, o que un enrutador falleo un nuevo enrutador se conecte a la red y deban actualizarse las tablas de enrutamiento. Los protocolos deenrutamiento son los encargados de manejar esa actualización de tablas.

3.4.1.6. Tabla de Enrutamiento

Producto de la ejecución de los protocolos de enrutamiento, se mantienen actualizadas las tablas deenrutamiento. Una versión simplicada de estas tablas es la que periódicamente se copia en el hardware dela NetFPGA en la Tabla de Forwarding descrita en la sección 3.4.1.1. Las tablas de enrutamiento contienenno solo la información de direcciones IP de destino y puertos de salida del enrutador, sino informaciónrequerida para el cálculo de la mejor ruta de destino a un paquete como por ejemplo el número de saltosque se requieren para llegar al destino. Esta información es utilizada por los protocolos de enrutamiento.

3.4.2. Java GUI

La Java GUI permite al usuario cambiar las entradas de la tabla de enrutamiento y la cache ARP así como las direcciones MAC e IP del enrutador. También proporciona actualizaciones sobre los valores delcontador, grácos de rendimiento y mucho más. La GUI tiene una parte que está escrita en C, la cualproporciona una interfaz entre el driver y los binarios de Java. Esta librería nativa es compilada desde elarchivo nf2util.c el cual contiene las utilidades readReg y writeReg . La librería se conecta a la interfazgráca usando la librería Java Native Access (jna) .

Para construir la Java GUI , asegúrese primero de que tiene el Java Development Kit de Sun (versión>= 1.6.0) instalado y de que las utilidades java , javac y los binarios jar están en su path (de lo contrario,puede editar el chero Makele en netfpga/lib/java/gui para reejar las rutas reales). Ejecute los

siguientes comandos para construir la Java GUI :cd ~/netfpga/lib/java/guimake cleanmake

Debería obtener una salida similar a la siguiente:

make[1]: Entering directory ‘/home/jnaous/NF2/lib/C/common’gcc -fpic -c nf2util.cgcc -shared nf2util.o -o libnf2.so

Page 32: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 32/83

26 3 Diseños de referencia

make[1]: Leaving directory ‘/home/jnaous/NF2/lib/C/common’Building java...DoneWriting router gui manifest...Building router jar...Writing script to start router gui...Writing event capturing router gui manifest...Building event capturing router jar...

Writing script to start event capturing router gui...

Para mostrar la GUIdelenrutador, ejecute./router.sh (dentro de la carpetanetfpga/lib/java/gui ).La GUI debe desplegarse en pantalla automáticamente. La GUI sondea y actualiza constantemente los dtos que lee desde el hardware. Para hacer las actualizaciones más rápidas puede cambiar la velocidad actualización en la categoría File del menú en la parte superior izquierda.

El panel de inicio rápido proporciona un resumen de las cosas que se pueden hacer con el hardwarEste panel dispone de tres pestañas, uno para conguración, otro para ver las estadísticas y nalmente opara más detalles. La pestaña de detalles mostrará el pipeline del User Datapath con botones clickables .Al hacer click en los botones, se abrirán nuevos botones con más detalles y opciones de conguración.

3.4.3. Interprete de línea de comandos

Una pequeña interfaz de línea de comandos (CLI) que le permite cambiar entradas de la tabla de enrumiento, entradas de la caché ARP y otros ajustes también se proporciona en caso de que el usuario no deejecutar SCONE . El CLI está ubicado en la ruta ~/netfpga/lib/C/router . Para construirlo, ejecutemake en este directorio. Debería ver una salida similar al siguiente:

make[1]: Entering directory ‘/home/jnaous/NF2/lib/C/common’gcc -fpic -c nf2util.cgcc -shared nf2util.o -o libnf2.somake[1]: Leaving directory ‘/home/jnaous/NF2/lib/C/common’Building java...DoneWriting router gui manifest...Building router jar...Writing script to start router gui...Writing event capturing router gui manifest...Building event capturing router jar...Writing script to start event capturing router gui...

Para obtener ayuda sobre el uso de la CLI, inícielo tecleando ./cli y luego escriba ’help’ .

3.4.4. Modicando el enrutador de referencia

Para llevar a cabo la modicación del enrutador de referencia, en primera instancia se da una visiógeneral del enrutador, su diseño y la interfaz entre módulos. Luego se explica como agregar un módual diseño y ponerlo en el Data Path . En seguida, se realiza el proceso de vericación del diseño mediantesimulación y nalmente su ejecución cimo bitle descargable.

Detalles del pipeline de referencia

El User Data Path es de 64 bits de ancho funcionando a 125MHz. Esto daría al Datapath un ancho debanda máximo de 8 Gbps. Los paquetes se transmiten entre módulos mediante una sencilla interfaz tipo

Page 33: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 33/83

Page 34: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 34/83

28 3 Diseños de referencia

Figura 3.4 Format of a packet as it passes through the hardware pipeline. Tomada de https://github.com/Caustic/netfpga-wiki/wiki/ReferenceRouterWalkthrough

Registros del pipeline

El registrodelPipeline esde32 bits ycorrea125 MHz . Cada módulo tiene dos pares de puertos: uno paralas solicitudes entrantes y otro para las respuestas salientes. El siguiente conjunto de señales son las señade entrada para un único módulo: REG_REQ_IN, REG_ACK_IN, REG_RD_WR_L_IN, REG_ADDR_IN

(23-bits), REG_DATA_IN (32 bits), REG_SRC_IN (2 bits) . Existen señales equivalentes terminando en_OUT para el puerto de salida.El registro de peticiones/respuestas son señalados por un alto en el REG_REQ_* . REG_REQ_* sólo

debe estar alta para un único ciclo de reloj, de lo contrario indica acceso a múltiples registros. Para módulo está permitido tomar más de un ciclo de reloj para producir una respuesta, pero debería procuque las solicitudes siguientes a la solicitud inicial no se eliminen. La señal REG_RD_WR_L_* indica si latransacción es una lectura (alta) o una escritura (bajo). REG_ACK_* debe ser bajo cuando la solicitud segenera y sólo debe ser llevada a alta por el módulo que responde a la solicitud.

Un módulo identicasi este es el objetivode la solicitudmediante la inspección de la señal REG_ADDR_IN .Si la dirección coincide con el rango de direcciones asignado al módulo, entonces el módulo debe procela solicitud y generar una respuesta. Una vez que el módulo ha completado cualquier procesamiento nesario debe levantar REG_ACK_OUT , establecer REG_DATA_OUT en el valor correcto en el caso de unalectura y remitir todas las otras entradas a las salidas, todo en un único ciclo. Si un módulo determina qno es objeto de una solicitud, deben reenviar todas las entradas sin modicar a las salidas en el siguienciclo de reloj.

Las señales REG_SRC_* las señales son utilizadas por los iniciadores de solicitud de registro para iden-ticar las respuestas que se destinan al solicitante. Cada solicitante debe usar un valor único como dirección de origen.

Usar un módulo de biblioteca

El NFP contiene varios módulos que pueden utilizarse para añadir más características a un diseño dhardware. Todos los módulos existentes están bajo la ruta~/netfpga/lib/verilog/ . El módulo queserá añadido en esta sección es un limitador de velocidad que permite controlar la tasa a la cual son envialos paquetes por un puerto determinado. El módulo será agregado al archivo user_data_path.v . Para ello,ejecute lo siguiente:cd ~/netfpga/projects/cp -r reference_router/ rate_limited_routermkdir rate_limited_router/src/udpcp ../lib/verilog/user_data_path/reference_user_data_path/src/user_data_path.v rate

Se ha creado una copia del HCORR y se tiene una copia local del archivo user_data_path.v para so-brescribir el de referencia. Pare el desarrollo del ejercicio se sume que el lector tiene conocimientos Verilog. Ahora se procede a conectar cuatro módulos rate_limiter en el Pipeline , entre los módulos out-

Page 35: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 35/83

3.4 Reference router 29

put_queues y loa puertos de salida MAC del user_data_path.v . El módulo rate_limiter está bajo la ruta~/netfpga/lib/verilog/core/rate_limiter/ . Después de modicar~/netfpga/projects/rate_limited_ropara agregar los módulos rate_limiter , el diff del user_data_path.v original con el nuevo debe ser similar alsiguiente.

234a235,251> //------- Rate limiter wires/regs ------> wire [CTRL_WIDTH-1:0] rate_limiter_in_ctrl[0:3];> wire [DATA_WIDTH-1:0] rate_limiter_in_data[0:3];> wire rate_limiter_in_wr[0:3];> wire rate_limiter_in_rdy[0:3];>> wire [CTRL_WIDTH-1:0] rate_limiter_out_ctrl[0:3];> wire [DATA_WIDTH-1:0] rate_limiter_out_data[0:3];> wire rate_limiter_out_wr[0:3];> wire rate_limiter_out_rdy[0:3];>> wire rate_limiter_in_reg_req[0:4];> wire rate_limiter_in_reg_ack[0:4];> wire rate_limiter_in_reg_rd_wr_L[0:4];> wire [‘UDP_REG_ADDR_WIDTH-1:0] rate_limiter_in_reg_addr[0:4];

> wire [‘CPCI_NF2_DATA_WIDTH-1:0] rate_limiter_in_reg_data[0:4];> wire [UDP_REG_SRC_WIDTH-1:0] rate_limiter_in_reg_src[0:4];

En el segmento de código se han añadido los cables para conectar los nuevos módulos.

360,363c377,380< .out_data_0 (out_data_0),< .out_ctrl_0 (out_ctrl_0),< .out_wr_0 (out_wr_0),< .out_rdy_0 (out_rdy_0),---> .out_data_0 (rate_limiter_in_data[0]),> .out_ctrl_0 (rate_limiter_in_ctrl[0]),> .out_wr_0 (rate_limiter_in_wr[0]),

> .out_rdy_0 (rate_limiter_in_rdy[0]),370,373c387,390< .out_data_2 (out_data_2),< .out_ctrl_2 (out_ctrl_2),< .out_wr_2 (out_wr_2),< .out_rdy_2 (out_rdy_2),---> .out_data_2 (rate_limiter_in_data[1]),> .out_ctrl_2 (rate_limiter_in_ctrl[1]),> .out_wr_2 (rate_limiter_in_wr[1]),> .out_rdy_2 (rate_limiter_in_rdy[1]),380,383c397,400< .out_data_4 (out_data_4),< .out_ctrl_4 (out_ctrl_4),< .out_wr_4 (out_wr_4),< .out_rdy_4 (out_rdy_4),---> .out_data_4 (rate_limiter_in_data[2]),> .out_ctrl_4 (rate_limiter_in_ctrl[2]),> .out_wr_4 (rate_limiter_in_wr[2]),> .out_rdy_4 (rate_limiter_in_rdy[2]),390,393c407,410

Page 36: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 36/83

30 3 Diseños de referencia

< .out_data_6 (out_data_6),< .out_ctrl_6 (out_ctrl_6),< .out_wr_6 (out_wr_6),< .out_rdy_6 (out_rdy_6),---> .out_data_6 (rate_limiter_in_data[3]),> .out_ctrl_6 (rate_limiter_in_ctrl[3]),> .out_wr_6 (rate_limiter_in_wr[3]),

> .out_rdy_6 (rate_limiter_in_rdy[3]),414,419c431,436< .reg_req_out (udp_reg_req_in),< .reg_ack_out (udp_reg_ack_in),< .reg_rd_wr_L_out (udp_reg_rd_wr_L_in),< .reg_addr_out (udp_reg_addr_in),< .reg_data_out (udp_reg_data_in),< .reg_src_out (udp_reg_src_in),---> .reg_req_out (rate_limiter_in_reg_req[0]),> .reg_ack_out (rate_limiter_in_reg_ack[0]),> .reg_rd_wr_L_out (rate_limiter_in_reg_rd_wr_L[0]),> .reg_addr_out (rate_limiter_in_reg_addr[0]),> .reg_data_out (rate_limiter_in_reg_data[0]),> .reg_src_out (rate_limiter_in_reg_src[0]),

Nota: En las líneas de código anteriores, en lugar de conectar los puertos de salida del módulo out- put_queues a los puertos de salida user_data_path , se conectaron a los módulos del rate limiter . Lo mismoocurre con las conexiones del anillo de registro.437c454,525<---> generate> genvar i;> for (i=0; i<4; i=i+1) begin : gen_rate_limiters> rate_limiter #(> .DATA_WIDTH (DATA_WIDTH),> .UDP_REG_SRC_WIDTH (UDP_REG_SRC_WIDTH)> ) rate_limiter> (> .out_data (rate_limiter_out_data[i]),> .out_ctrl (rate_limiter_out_ctrl[i]),> .out_wr (rate_limiter_out_wr[i]),> .out_rdy (rate_limiter_out_rdy[i]),>> .in_data (rate_limiter_in_data[i]),> .in_ctrl (rate_limiter_in_ctrl[i]),> .in_wr (rate_limiter_in_wr[i]),> .in_rdy (rate_limiter_in_rdy[i]),>> // --- Register interface> .reg_req_in (rate_limiter_in_reg_req[i]),> .reg_ack_in (rate_limiter_in_reg_ack[i]),> .reg_rd_wr_L_in (rate_limiter_in_reg_rd_wr_L[i]),> .reg_addr_in (rate_limiter_in_reg_addr[i]),> .reg_data_in (rate_limiter_in_reg_data[i]),> .reg_src_in (rate_limiter_in_reg_src[i]),>

Page 37: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 37/83

3.4 Reference router 31

> .reg_req_out (rate_limiter_in_reg_req[i+1]),> .reg_ack_out (rate_limiter_in_reg_ack[i+1]),> .reg_rd_wr_L_out (rate_limiter_in_reg_rd_wr_L[i+1]),> .reg_addr_out (rate_limiter_in_reg_addr[i+1]),> .reg_data_out (rate_limiter_in_reg_data[i+1]),> .reg_src_out (rate_limiter_in_reg_src[i+1]),>> // --- Misc

> .clk (clk),> .reset (reset));> end // block: gen_rate_limiters> endgenerate>> defparam gen_rate_limiters[0].rate_limiter.RATE_LIMIT_BLOCK_TAG = ‘RATE_LIMIT_0_BLOCK> defparam gen_rate_limiters[1].rate_limiter.RATE_LIMIT_BLOCK_TAG = ‘RATE_LIMIT_1_BLOCK> defparam gen_rate_limiters[2].rate_limiter.RATE_LIMIT_BLOCK_TAG = ‘RATE_LIMIT_2_BLOCK> defparam gen_rate_limiters[3].rate_limiter.RATE_LIMIT_BLOCK_TAG = ‘RATE_LIMIT_3_BLOCK>> //--- Connect the wires from the rate limiters> assign out_data_0 = rate_limiter_out_data[0];> assign out_ctrl_0 = rate_limiter_out_ctrl[0];> assign out_wr_0 = rate_limiter_out_wr[0];> assign rate_limiter_out_rdy[0] = out_rdy_0;>> assign out_data_2 = rate_limiter_out_data[1];> assign out_ctrl_2 = rate_limiter_out_ctrl[1];> assign out_wr_2 = rate_limiter_out_wr[1];> assign rate_limiter_out_rdy[1] = out_rdy_2;>> assign out_data_4 = rate_limiter_out_data[2];> assign out_ctrl_4 = rate_limiter_out_ctrl[2];> assign out_wr_4 = rate_limiter_out_wr[2];> assign rate_limiter_out_rdy[2] = out_rdy_4;>> assign out_data_6 = rate_limiter_out_data[3];> assign out_ctrl_6 = rate_limiter_out_ctrl[3];> assign out_wr_6 = rate_limiter_out_wr[3];> assign rate_limiter_out_rdy[3] = out_rdy_6;>> assign udp_reg_req_in = rate_limiter_in_reg_req[4];> assign udp_reg_ack_in = rate_limiter_in_reg_ack[4];> assign udp_reg_rd_wr_L_in = rate_limiter_in_reg_rd_wr_L[4];> assign udp_reg_addr_in = rate_limiter_in_reg_addr[4];> assign udp_reg_data_in = rate_limiter_in_reg_data[4];> assign udp_reg_src_in = rate_limiter_in_reg_src[4];

Nota: Añadir los módulos rate limiter sobre cada puerto de salida a una Ethernet Tx queue . El anillo deregistro pasa a través de cada uno de los módulos rate limiter . Tenga en cuenta el defparams usado paraasignar un bloque de registro para cada módulo rate limiter .

Ahora todo lo que falta es decirle al sistema de construcción que se quiere incluir el rate limiter en lacompilación. Todos los módulos de la librería que son utilizados en un proyecto se encuentran listados en~/netfpga/projects/<project_name>/include/lib_modules.txt . Para el router de ta-sa limitada se tiene el módulo rate limiter , así como todos los módulos que se utilizan normalmente en elenrutador de referencia. El lib_modules.txt modicado debe verse como el siguiente, donde se agregó lalínea 16 :

1 io_queues/cpu_dma_queue

Page 38: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 38/83

32 3 Diseños de referencia

2 io_queues/ethernet_mac3 input_arbiter/rr_input_arbiter4 nf2/generic_top5 nf2/reference_core6 user_data_path/generic_cntr_reg7 output_port_lookup/cam_router8 output_queues/sram_rr_output_queues9 sram_arbiter/sram_weighted_rr

10 user_data_path/reference_user_data_path11 io/mdio12 cpci_bus13 dma14 user_data_path/udp_reg_master15 io_queues/add_rm_hdr16 rate_limiter

Tenga en cuentaqueel móduloreference_user_data_path todavía es mencionado en el archivolib_modules.txt ,aunque se esté reemplazando uno de los archivos. Esto es debido a que se van a usar los otros archivque están en este módulo. El entorno de compilación automáticamente manejará la anulación, por ede asegurarse de utilizar el archivo en el directorio src/ del proyecto en vez del de la librería. Tambiéntenga en cuenta que el sistema de compilación sólo maneja archivos de código fuente que están dire

tamente bajo el directorio src/ del proyecto y a un nivel inferior más. Así que si pones un archivo ba- jo rate_limited_router/src/udp/some_dir/some_file.v no será incluido en la construc-ción.

Todos estos módulos de librería pueden encontrarse en ~/netfpga/lib/verilog/ . Algunos mó-dulos de la librería sólo se utilizan para la simulación, como el módulo testbench . Algunas librerías ofrecenalternativas, como es el caso delmódulouser_data_path . Siobserva~/netfpga/lib/verilog/core/user_data_pencontrará dosdirectorios, unode loscualescontienenalUser Data Path utilizado para el Buffer Monitoring Router 5 y otroque esutilizado enel enrutador dereferencia. Dentrode la ruta~/netfpga/lib/verilog/core/también encontrará algunas alternativas para el módulo output_port_lookup como: El cam_router , que esun router usando un CAM 6 para realizar búsquedas de LPM 7 y el learning_cam_switch que hace que laNetFPGA actúe como un switch de aprendizaje de cuatro puertos.

Añadir nuevas fuentesSi desea añadir nuevo código fuente (es decir, código que no hace parte de la librería) a su proyec

simplemente debe poner los nuevos archivos de Verilog bajo el directorio src/ del proyecto, o hasta un nivelinferior del directorio src/ . Estos archivos serán incluidos automáticamente en la síntesis y simulación.Tenga en cuenta que en caso de que algunos archivos sean utilizados solamente en la simulación, tendque encapsular este código no sintetizable con la directiva translate_off y el sintetizable con la directivatranslate_on .

Para agregar núcleos IP generados con la herramienta de Xilinx, puede hacerlo de dos maneras:1. Copiando el archivo .xco (recomendado): simplemente copie el archivo .xco desde el directorio donde

se genera el nucleo IP al directorio synth/ . El entorno de compilación automáticamente regenerará laenvoltura .v para simulación/síntesis y el .ngc o .edn necesarios para la síntesis.

2. Copiando los archivos .ngc y .v: Copie el archivo .v generado al directorio src/ y los archivos .ngc y .ednal directorio synth/ . Esto evitará re-implementar el core .Si desea añadir registros, necesitará crear un archivo XML para cada módulo añadido al diseño y m

dicar el archivo XML del proyecto para incluir los módulos adicionales. La descripción de alto nivel sistema de registro puede encontrarse en la Developers Guide 8.5 https://github.com/Caustic/netfpga-wiki/wiki/BufferMonitoringSystem6 XXX7 XXX8 https://github.com/Caustic/netfpga-wiki/wiki/DevelopersGuide

Page 39: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 39/83

3.4 Reference router 33

Simular el diseño

El siguiente paso después de escribir el código es simular el diseño. Para ello se utilizarán los mismostestbenches utilizados parael enrutador. Estostestbenches están denidos bajo~/netfpga/proyects/rate_limited_routerCada directorio contiene una descripción de los paquetes para enviar, cuando enviarlas y que paquetes seesperan salgan de la NetFPGA ya sea vía Ethernet o DMA. El entorno de simulación también permiteespecicar registros de lectura y escritura. Cada testbench consta de tres archivos, a saber:1. cong.txt: Especica cuando debe terminar una simulación.2. run: Genera paquetes y ejecuta la simulación. Generalmente esto no debería modicarse salvo circuns-

tancias inusuales tales como deniciones de parámetros de tiempo de simulación.3. make_pkts.pl: Script en Perl que genera todos los paquetes y registra las peticiones.

A continuación se muestra y examina el archivotest_router_short/make_pkts.pl : El primercódigo presentado corresponde al encabezado de archivo (File Header) .#!/usr/local/bin/perl -w# make_pkts.pl##

Seleccione las librerías que van a ser utilizadas en la simulación. Estas librerías proporcionan funciones paracrear/enviar/esperar paquetes y generar registros de solicitudes. En particular, SimLib encapsula las funcio-nes nf_PCI_regread y nf_PCI_regwrite que acceden a los registros. Para la escritura en tablas especícasde enrutamiento la librería RouterLib puede ser utilizada. Estas librerías y algunas otras que se utilizan parapruebas de hardware real (a diferencia de la simulación) se encuentran en ~/netfpga/lib/Perl5/ .use NF2::PacketGen;use NF2::PacketLib;use SimLib;use RouterLib;

Incluya el archivo que dene todas las direcciones de registro.require "reg_defines.ph";

Ajustar el retardo para enviar un paquete.$delay = 2000;

Líneas necesarias para iniciar las librerías.$batch = 0;nf_set_environment( { PORT_MODE => ’PHYSICAL’, MAX_PORTS => 4 } );

# use strict AFTER the $delay, $batch and %reg are declareduse strict;use vars qw($delay $batch %reg);

Denir algunas variables para las pruebas:my $ROUTER_PORT_1_MAC = ’00:ca:fe:00:00:01’;my $ROUTER_PORT_2_MAC = ’00:ca:fe:00:00:02’;my $ROUTER_PORT_3_MAC = ’00:ca:fe:00:00:03’;my $ROUTER_PORT_4_MAC = ’00:ca:fe:00:00:04’;

my $ROUTER_PORT_1_IP = ’192.168.1.1’;my $ROUTER_PORT_2_IP = ’192.168.2.1’;my $ROUTER_PORT_3_IP = ’192.168.3.1’;my $ROUTER_PORT_4_IP = ’192.168.4.1’;

my $next_hop_1_DA = ’00:fe:ed:01:d0:65’;my $next_hop_2_DA = ’00:fe:ed:02:d0:65’;

Page 40: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 40/83

34 3 Diseños de referencia

Iniciar el DMA:# Prepare the DMA and enable interruptsprepare_DMA(’@3.9us’);enable_interrupts(0);

Escribir los registros para congurar las rutas a través del router :# Write the ip addresses and mac addresses, routing table, filter, ARP entries$delay = ’@4us’;set_router_MAC(1, $ROUTER_PORT_1_MAC);$delay = 0;set_router_MAC(2, $ROUTER_PORT_2_MAC);set_router_MAC(3, $ROUTER_PORT_3_MAC);set_router_MAC(4, $ROUTER_PORT_4_MAC);

add_dst_ip_filter_entry(0,$ROUTER_PORT_1_IP);add_dst_ip_filter_entry(1,$ROUTER_PORT_2_IP);add_dst_ip_filter_entry(2,$ROUTER_PORT_3_IP);add_dst_ip_filter_entry(3,$ROUTER_PORT_4_IP);

add_LPM_table_entry(0,’171.64.2.0’, ’255.255.255.0’, ’171.64.2.1’, 0x04);add_LPM_table_entry(15, ’0.0.0.0’, ’0.0.0.0’, ’171.64.1.1’, 0x01);

# Add the ARP table entriesadd_ARP_table_entry(0, ’171.64.1.1’, $next_hop_1_DA);add_ARP_table_entry(1, ’171.64.2.1’, $next_hop_2_DA);

my $length = 100;my $TTL = 30;my $DA = 0;my $SA = 0;my $dst_ip = 0;my $src_ip = 0;my $pkt;

Enviar el primer paquete al puerto 1 (puerto MAC 0). Tenga en cuenta que todos los puertos en llibrerías de simulación son denidos a partir de 1 en lugar de 0.$delay = ’@80us’;$length = 64;$DA = $ROUTER_PORT_1_MAC;$SA = ’01:55:55:55:55:55’;$dst_ip = ’171.64.2.7’;$src_ip = ’171.64.8.1’;

Crear el paquete:$pkt = make_IP_pkt($length, $DA, $SA, $TTL, $dst_ip, $src_ip);

Enviarlo:nf_packet_in(1, $length, $delay, $batch, $pkt);

Crear el paquete que se espera salga del puerto 2 (puerto MAC 1):$DA = $next_hop_2_DA;$SA = $ROUTER_PORT_2_MAC;$pkt = make_IP_pkt($length, $DA, $SA, $TTL-1, $dst_ip, $src_ip);nf_expected_packet(2, $length, $pkt);

Crear un nuevo paquete desde un puerto diferente y que esté destinado para el mismo router . El paquetedebe enviarse a la CPU mediante DMA.

Page 41: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 41/83

3.4 Reference router 35

$length = 60;$DA = $ROUTER_PORT_2_MAC;$SA = ’02:55:55:55:55:55’;$dst_ip = $ROUTER_PORT_1_IP;$src_ip = ’171.64.9.1’;$pkt = make_IP_pkt($length, $DA, $SA, $TTL, $dst_ip, $src_ip);nf_packet_in(2, $length, ’@82us’, $batch, $pkt);

Especicar que se espera el paquete por el puerto DMA 2 (nf2c1):

nf_expected_dma_data(2, $length, $pkt);

Ahora se envía un paquete desde nf2c1. También se debe esperar que el mismo paquete salga por elpuerto MAC 1:

$delay = ’@100us’;PCI_create_and_send_pkt(2, $length);

El resto de las líneas hasta la número 163 prueba con paquetes de diferente tamaño. Después hay unaporción de código que genera toda la información y la pone en archivos. El resto de código en general nose debe cambiar:

163 # ’’’ ********* ’’’ Finishing Up - need this in all scripts ! ’’’ *****************164 my $t = nf_write_sim_files();165 print "--- make_pkts.pl: Generated all configuration packets.\n";166 printf "--- make_pkts.pl: Last packet enters system at approx %0d microseconds.\n"167 if (nf_write_expected_files()) {168 die "Unable to write expected files\n";169 }170171 nf_create_hardware_file(’LITTLE_ENDIAN’);172 nf_write_hardware_file(’LITTLE_ENDIAN’);

Ahora para ejecutar la simulación, se revisa el archivo ~/.bashrc para asegurarse de que el entorno seencuentra correctamente congurado. Asegúrese de que la variable de entorno NF_ROOT apunta a la rutadonde está ubicado el directorio netfpga/ , por ejemplo a ~/netfpga/ y que su NF_DESIGN_DIR apuntaa $NF_ROOT/proyects/rate_limited_router . Asegúrese también de que esta haciendo source

sobre el archivo de conguración $NF_ROOT/bin/nf2_prole o $NF_ROOT/bin/nf2_cshrc dependiendo desu shell. Es necesario tener instalado Modelsim . Para correr las simulaciones, ejecute lo siguiente:

nf_run_test.pl --major router --minor short

La prueba debe entonces generar los paquetes, registrar las peticiones y ejecutar la simulación en modoconsola. Cuando se realiza el test, este buscará la palabra ERROR en el registro para averiguar si ha ocurridoalgún problema y proceder a noticarlo. Si desea ejecutar la prueba en una GUI para ver las formas de onday tener control completo sobre la simulación, puede agregar el parámetro ’- -gui’ al comando. Para másinformación sobre otro tipo de opciones ejecute:

nf_run_test.pl --help

Después de ejecutar la simulación debería ver una salida similar a la siguiente (esto es solamente laúltima parte):...# Timecheck: 493645.00ns# 500100 Simulation has reached finish time - ending.# ** Note: $finish : /home/jnaous/mckeown/NF2/new_tree/lib/verilog/testbench/target32.v# Time: 500100 ns Iteration: 0 Instance: /testbench/target32--- Simulation is complete. Validating the output.

Comparing simulation output for port 1 . ..Port 1 matches [0 packets]Comparing simulation output for port 2 . ..

Page 42: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 42/83

36 3 Diseños de referencia

Port 2 matches [4 packets]Comparing simulation output for port 3 . ..Port 3 matches [0 packets]Comparing simulation output for port 4 . ..Port 4 matches [0 packets]Comparing simulation output for DMA queue 1 ...DMA queue 1 matches [0 packets]Comparing simulation output for DMA queue 2 ...

DMA queue 2 matches [2 packets]Comparing simulation output for DMA queue 3 ...DMA queue 3 matches [0 packets]Comparing simulation output for DMA queue 4 ...DMA queue 4 matches [0 packets]

--- Test PASSEDTest test_router_short passed!------------SUMMARY---------------PASSING TESTS:

test_router_shortFAILING TESTS:TOTAL: 1 PASS: 1 FAIL: 0

Implementar el diseño

Implementar el diseño es un proceso muy sencillo, para ello ejecute:

cd ~/netfpga/projects/rate_limited_router/synthmake

Cuando se termine de ejecutar el comando make, se genera el archivo nf2_top_par.bit , que contienela implementación del enrutador de referencia. Para descargar ese archivo a la tarjeta, se procede de siguiente manera:

nf_download ./nf2_top_par.bit

El proceso de síntesis utiliza Smartguide por defecto en la reconstrucción de un proyecto. En casosdonde la netlist cambia dramáticamente entre diferentes ejecuciones del proceso de síntesis, o donde elugar y proceso de enrutamiento no logra enrutar las redes para cumplir con la sincronización, Smartguideproducirá resultados que no son validos o tomará mucho tiempo en terminar (y aún no cumplirá los tiemde sincronización). En estos casos, puede deshabilitar Smartguide añadiendo la siguiente línea antes delinclude en el /synth/Makefile :

USE_SMARTGUIDE := 0

Además, por defecto, map utiliza el interruptor de tiempo para mejorar la sincronización. Esto puede, enalgunos casos, llevar a raros errores durante el proceso de mapeo. Para deshabilitar el uso del interruptortiempo, agregue la siguiente línea a /synth/Makefile :

TIMING := 0

Puede establecer estos interruptores en 1 o simplemente comentarlos para volver a habilitar Smartguideo la sincronización.

Probar el nuevo enrutador

Unalibrería completa en Perl está disponible para probarel hardware.La librería~/netfpga/lib/Perl5/TestLib.contiene muchas funciones que pueden utilizarse para enviar/recibir paquetes y para la lectura/escritura registros.

Page 43: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 43/83

Capítulo 4Inicio de un nuevo proyecto en NetFPGA

Existen tres maneras de hacer uso de la NetFPGA. La primera consiste en hacer uso de alguno de losdiseños de referencia que vienen con la distribución de la tarjeta. Esto es, usar el enrutador de referencia, elswitch de referencia o la tarjeta de red de referencia.

Otra manera es partir de alguno de los diseños de referencia e incluir un módulo o modicar los módulosexistentes. Esta es la alternativa mas usada por los desarrolladores de NetFPGA dado que reutiliza códigoque ha sido ya validado y que es operacional en varias implementaciones.

La tercera alternativa es crear completamente un nuevo diseño en la tarjeta. Esto implica implementartodas las funcionalidades desde cero con un diseño que no necesariamente corresponde al establecido enlos diseños de referencia de la NetFPGA.

En esta sección se describe de manera general las acciones que deben llevarse a cabo para generar unnuevo proyecto en la NetFPGA a través de la segunda opción de construcción, esto es, partiendo de un dise-ño existente y modicándolo. Para ese n, se va a utilizar un ejemplo que se ha usado en los campamentosde verano de NetFPGA en la Universidad de Stanford durante los años 2011 y 2012.

4.1. Proyecto CryptoNIC

Como ejemplo de creación de un nuevo proyecto, se presenta la implementación de una tarjeta de redque encripta un paquete (su área de datos) antes de enviarlo al canal de transmisión y luego lo decriptacuando el paquete es recibido en su destino. El proceso de encriptación que se utiliza es uno de los massimples a través del uso de una llave secreta y de la función XOR.

Si se considera un mensaje M de 64 bits que va a ser transmitido, este mensaje se puede encriptar utili-zando una llave K aprovechando las siguientes propiedades de la función XOR ()̂:

Asociatividad: ( M K ) K = M (K K )Idempotencia: (K K ) = 0

De esta manera, aplicar una XOR a un mensaje M con una llave K y luego volver a aplicar esa llave almensaje resultante, genera nuevamente el mensaje original:( M K ) K = M (K K )

= M 0= M

En este caso, se utilizará un mensaje de 64 bits y una clave de 32 bits que se duplicará para igualar eltamaño del mensaje tal como se observa en la Figura 4.1

37

Page 44: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 44/83

Page 45: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 45/83

4.2 Conguraciones iniciales para el nuevo proyecto 39

del proyecto:

<? xml version ="1.0" encoding="UTF-8"?><nf:project>

<nf:name>Crypto NIC</nf:name><nf:description>NIC with basic crypto support</nf:description><nf:version_major>0</nf:version_major><nf:version_minor>1</nf:version_minor><nf:version_revision>0</nf:version_revision><nf:dev_id>0</nf:dev_id>

Posteriormente, se ubicanlosmódulos quese cargarán de laslibrearías de verilog ubicadas enlib / verilog :

<nf:use_modules>core/io_queues/cpu_dma_queuecore/io_queues/ethernet_maccore/input_arbiter/rr_input_arbitercore/nf2/generic_topcore/nf2/reference_corecore/output_port_lookup/niccore/output_queues/sram_rr_output_queues

core/sram_arbiter/sram_weighted_rrcore/user_data_path/reference_user_data_pathcore/io/mdiocore/cpci_buscore/dmacore/user_data_path/udp_reg_mastercore/io_queues/add_rm_hdrcore/strip_headers/keep_lengthcore/utils/generic_regscore/utils

</nf:use_modules>

Posteriormente, se debe especicar el lugar en donde se instancian los módulos, el número de instanciasy las direcciones de memoria a utilizar:

<nf:memalloc layout="reference"><nf:group name="core1">

<nf:instance name="device_id" /><nf:instance name="dma" base="0x0500000"/><nf:instance name="mdio" /><nf:instance name="nf2_mac_grp" count="4" /><nf:instance name="cpu_dma_queue" count="4" />

</nf:group><nf:group name="udp">

<nf:instance name="in_arb" /><nf:instance name="crypto" /><nf:instance name="strip_headers" /><nf:instance name="output_queues" />

</nf:group></nf:memalloc>

</nf:project>

Otro archivo que requiere atención es el archivo .bashrc que establece las variables de ambiente que seutilizarán para el nuevo proyecto. Para ello, es necesario realizar las siguientes acciones:

1. Adicionar el archivo net f pgabashrc addon al archivo .bashrc2. Adicionar las siguientes líneas al nal del archivo .bashrc :

Page 46: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 46/83

40 4 Inicio de un nuevo proyecto en NetFPGA

export NF_DESIGN_DIR=\$NF_ROOT/projects/crypto_nicexport PERL5LIB=\$NF_ROOT/lib/Perl5:\$NF_DESIGN_DIR/lib/Perl5

3. Ejecutar:

# source ~/.bashrc

4.3. Modicaciones al user data path

Las modicaciones que se realizan al archivo user _data _ path .v, están orientadas a incluir el nuevomódulo mediante la reconexión de “wires” entre los módulos verilog . Lo que se hace fundamentalmentees conectar los ”wires” de salida del Output Port Lookup a los de entrada de crypto y posteriormente los“wires” de salida de crypto , conectarlos a los de entrada de el módulo de Output Queues . La Figura 4.3presenta el esquema de conexión inicial y reconexión posterior.

Figura 4.3 Reconexión de "wiresçon la inclusión del módulo de crypto

Especícamente en el archivo user _data _ path .v, lo primero que se debe hacer es incluir una declaraciónque especique el tamaño de los datos en el mensaje (número de bits):

module user_data_path#(

parameter DATA_WIDTH = 64,...

)(

Page 47: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 47/83

4.3 Modicaciones al user data path 41

...)

//-------------- Internal parameters -----------------------...

//------------- Input arbiter wires/regs -------------------...

Posteriormente, se incluye una nueva sección justo detrás de “output queues wires” que corresponderá aun duplicado del módulo output port lookup reemplazando op_lut por crypto :

//------------ output port lut wires/regs -----------------wire [CTRL_WIDTH-1:0] op_lut_in_ctrl;wire [DATA_WIDTH-1:0] op_lut_in_data;wire op_lut_in_wr;wire op_lut_in_rdy;

...

//------- output queues wires/regs ------...

Finalmente se deben realizar las conexiones (wires) siguiendo los siguientes pasos:

1. Duplicar la instanciación del output _ port _lookup2. Renombrarlo como crypto3. Remover todos los parámetros dentro del primer conjunto de paréntesis4. En el output _ port _lookup, reemplazar oq_ por crypto_5. En el crypto, reemplazar op_lut _ por crypto_

//--------- Connect the data path -----------input_arbiter #(

...) input_arbiter (

...)

output_port_lookup #(...

) output_port_lookup (...

)

...

Hecho esto, lo que queda es la creación del módulo de crypto de acuerdo con al funcionalidad especi-cada.

Page 48: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 48/83

Page 49: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 49/83

Apéndice AInstalación y vericación de la NetFPGA 1G

El proceso de instalación y puesta a punto de la plataforma NetFPGA se puede resumir en los siguientespasos:

1. Adquisición del hardware.2. Instalación del software.3. Vericación del hardware y software instalado.

A.1. Adquisición e instalación de la tarjeta NetFPGA de 1 GB

A.2. Instalación del software de la NetFPGA

A.2.1. Instalación del LiveDVD

El punto de partida mas recomendado para instalar el software de la NetFPGA es hacerlo a través dela instalación de una distribución de Linux que deja lista la máquina sobre la cual va a operar la tarjetaNetFPGA. El LiveDVD instala actualmente Fedora 13 , los módulos del kernel y todo lo necesario paraque el host reconozca correctamente la tarjeta, el NetFPGA Package (NFP) y las dependencias necesarias.El LiveDVD no instala las herramientas CAD (por ejemplo Xilinx ISE, Modelsim), esto debe hacerse porseparado después de la instalación del LiveDVD.

Obtenga la imagen del LiveDVD del sitio ocial de la NetFPGA . Con el n de apoyar el proceso deinstalación, a continuación se presenta pantalla a pantalla lo que debe obtener y hacer cuando instala el Li-veDVD. Como punto de partida, se asume que ya ha booteado el LiveDVD, ha iniciado sesión y se encuentraen el escritorio de Fedora .

1. Seleccione el icono Install to Hard Drive .

43

Page 50: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 50/83

44 A Instalación y vericación de la NetFPGA 1G

Figura A.1 Icono de instalación hacia el disco duro.

2. Iniciará el asistente de instalación, click en Next .

Page 51: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 51/83

A.2 Instalación del software de la NetFPGA 45

3. Seleccionar la distribución apropiada para el teclado.

4. Seleccionar el tipo de dispositivo sobre el cuales se realizará la instalación, click en Basic Storage Devi-ces, seleccione la otra opción en caso contrario.

Page 52: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 52/83

46 A Instalación y vericación de la NetFPGA 1G

5. Selecionar el dispositivo sobre el cual se efectuará la instalación.

6. Digitar el Hostname de la máquina.

Page 53: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 53/83

A.2 Instalación del software de la NetFPGA 47

7. Seleccionar la ubicación.

8. Denir una contraseña para el usuario root .

Page 54: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 54/83

48 A Instalación y vericación de la NetFPGA 1G

9. Seleccionar el tipo de instalación. En nuestro caso selecionamos Create Custom Layout debido a querealizaremos un particionamiento personalizado del disco.

10. Denir el particionamiento del disco.

Page 55: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 55/83

A.2 Instalación del software de la NetFPGA 49

11. Seleccionar donde instalar el bootloader y otras conguraciones más.

12. El proceso de instalación iniciará. Esperar unos minutos a que nalice.

Page 56: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 56/83

50 A Instalación y vericación de la NetFPGA 1G

13. Una vez terminada la instalación, cerrar el asistente

14. Ya copiada la imagen del LiveDVD al disco duro, retirar el disco y reiniciar el sistema. Iniciando elsistema veremos un asistente el cual le ayudará en la creación de un usuario y otros aspectos más.

Page 57: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 57/83

A.2 Instalación del software de la NetFPGA 51

15. Lea la información de la licencia y posteriormente de click en forward .

16. Crear un usuario.

Page 58: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 58/83

52 A Instalación y vericación de la NetFPGA 1G

17. Denir la fecha y la hora.

18. El sistema actualizará el archivo grub.conf . Click en forward .

Después de haberse reiniciado el sistema, usted ya dispondrá de Fedora 13 con las conguracionesnecesarias para NetFPGA .

Page 59: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 59/83

A.4 Instalación de las herramientas CAD 53

A.3. Ajustar el orden de las interfaces de red

Las interfaces de red comúnmente se encuentran ordenadas incorrectamente después de la instalacióndel LiveDVD. Para los Cube, que cuentan con una interfaz de red on-board y una dual-port PCI Express NIC , se debe mantener el siguiente orden:

eth0 : Interfaz on-boardeth1 : PCI Express NIC

eth2 : PCI Express NIC

Para vericar y/o modicar el orden de las interfaces de red se debe seguir los siguientes pasos:

Editar el archivo /etc/udev/rules.d/70-persistent-net.rules

vim /etc/udev/rules.d/70-persistent-net.rules

El archivo debe tener una estructura como la siguiente. Los campos que se deben vericar son el de ladirección MAC y el nombre de cada interfaz.# T h i s f i l e w as a u t o m a t i c a l l y g e n e r a t e d b y t h e / l i b / u d ev / w r i t e _ n e t _ r u l e s# p r o gr a m , r u n b y t h e p e r s i s t e n t− ne t− g e n e r a t o r . r u l e s r u l e s f i l e .## You c a n m o di fy i t , a s l o n g a s y o u k e ep e a ch r u l e o n a s i n g l e# l in e , an d ch an g e o n ly th e v a lu e o f th e NAME= k ey .

# P CI d ev ice 0 x 8 0 86 :0 x 1 0 5 e ( e1 0 0 0 e )

SUBSYSTEM==" ne t " , ACTION==" add " , DRIVERS=="?" , ATTR{ ad dre ss }==" 00 :1 5: 17 : dd : ed :53 " , ATTR{dev _id }=="0x0 " ,ATTR{ty p e}=="1 " , KERNEL==" eth" , NAME=" eth 1 "

# P CI d ev ice 0 x 8 0 86 :0 x 1 0 5 e ( e1 0 0 0 e )SUBSYSTEM==" ne t " , ACTION==" add " , DRIVERS=="?" , ATTR{ ad dre ss }==" 00 :1 5: 17 : dd : ed :52 " , ATTR{dev _id }=="0x0 " ,ATTR{ty p e}=="1 " , KERNEL==" eth" , NAME=" eth 2 "

# P CI d ev ice 0 x 1 0 ec :0 x 8 1 68 ( r 8 1 6 9 )SUBSYSTEM==" ne t " , ACTION==" add " , DRIVERS=="?" , ATTR{ add ress }==" 20: cf :30 : 56: 29: 78 " , ATTR{dev_id }=="0x0" ,ATTR{ty p e}=="1 " , KERNEL==" eth" , NAME=" eth 0 "

Los siguientes pasos solo deben realizarse en caso de que alguna interfaz esté incorrectamente asignada:

1. Cambiar la sección NAME en cada linea para asignar la interfaz en el orden correcto.2. Guardar y salir del editor3. Migrar al directorio network-scripts

cd /etc/sysconfig/network-scripts

4. Editar cada uno de los archivos de conguración correspondientes a las interfaces (en este caso ifcfg-eth0, ifcfg-eth1, ifcfg-eth2 )5. Cada archivodebe contener unalinea queespecique la direcciónde hardware (ejemplo: HWADDR=00:1A:92:B8:DC:B9 ).

Establecer la dirección de hardware en el archivo de acuerdo a la dirección MAC correspondiente a latarjeta de red a ser usada.

6. Reiniciar la maquina.

A.4. Instalación de las herramientas CAD

A.4.1. Instalación de ISE Xilinx

1. Descargar el instalador del ISE 10.1 del sitio ocial de Xilinx.2. Descomprimir el archivo.3. Migrar a la carpeta descomprimida y ejecutar el instalador.

sudo ./setup

Se iniciará el asistente de instalación. Click en Next .

Page 60: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 60/83

Page 61: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 61/83

A.4 Instalación de las herramientas CAD 55

Selecionar la opción ISE Design Tools

Aceptar los términos de licencia.

Page 62: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 62/83

56 A Instalación y vericación de la NetFPGA 1G

Aceptar nuevamente los términos de licencia.

Seleccionar la ruta de instalación. Por defecto /opt/Xilinx/10.1/

Page 63: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 63/83

Page 64: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 64/83

58 A Instalación y vericación de la NetFPGA 1G

Seleccionar algunos complementos y opciones adicionales.

Se mostrará un resumen de lo que será instalado.

Page 65: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 65/83

Page 66: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 66/83

60 A Instalación y vericación de la NetFPGA 1G

Seleccionar todas las actualizaciones disponibles. Es importante asegurarse que el Service Pack 3 y el IP Update sean instalados en este paso.

Una vez instaladas las actualizaciones, el proceso de instalación habrá terminado.

Page 67: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 67/83

A.4 Instalación de las herramientas CAD 61

4. Si las actualizaciones de software ISE Foundation 10.1 Service Pack 3 y ISE IP Update 10.1 ServicePack 3 no fueron instaladas por el asistente, descargar los archivos respectivos y hacerlo manualmente.

5. Obtener la licencia PCI32 core para simulaciones.6. Agregar la licencia a ~/.Xilinx/Coregen/CoreLicenses/7. Asumiendo quela ruta de instalación fue/opt/Xilinx/10.1/ agregar lo siguientea/etc/profile

# Xilinx version to useXILINX_ISE=10.1

# Source the Xilinx settings32.shif [ -f /opt/Xilinx/$XILINX_ISE/ISE/settings32.sh ] ; then

unset LMC_HOME. /opt/Xilinx/$XILINX_ISE/ISE/settings32.sh

fi

A.4.2. Instalación de ModelSim

1. Descargar el instalador de ModelSim de la página ocial.2. Descomprimir y migrar a la carpeta del instalador de ModelSim3. Ejecutar el instalador.

sudo ./install.linux

Iniciará el asistente de instalación.

Page 68: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 68/83

62 A Instalación y vericación de la NetFPGA 1G

Aceptar los términos de licencia.

Seleccionar Browse para denir la ruta de instalación.

Page 69: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 69/83

A.4 Instalación de las herramientas CAD 63

Denir como ruta de instalación el directorio deseado. En el caso nuestro denimos como ruta/opt/

Una vez denida la ruta click en Next .

Page 70: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 70/83

64 A Instalación y vericación de la NetFPGA 1G

En el menú desplegable, seleccionamos la opción Linux y marcamos la casilla 6.5f .

Se mostrara un resumen de la instalación que va a ser realizada. Click en Install

Page 71: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 71/83

A.4 Instalación de las herramientas CAD 65

El proceso de instalación iniciará. Click en Done una vez nalizado.

Una vez terminada la instalación, podremos cerrar el asistente o vericar la instalación.

4. Agregar a ~/.bashrc las siguientes variables de entorno:

Page 72: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 72/83

66 A Instalación y vericación de la NetFPGA 1G

# ModelSimexport PATH=$PATH:.:/opt/modeltech/bin:/opt/ModelSim/modeltech/linuxexport LM_LICENSE_FILE=/opt/modeltech/license.dat

A.5. Post Inatalación

1. OPCIONAL: Deshabilitar sshd para root. (SSH logins para root pueden ser un riesgo para la seguridHabilitelo solo bajo su propio riesgo)

Ejecute:

vim /etc/ssh/sshd_config

Adicionar la linea: PermitRootLogin no

2. Ejecutar el comando visudo y realizar las siguientes ediciones en el archivo

Adicionar Defaults env_delete -= "PERL5LIB PYTHONPATH"Adicionar Defaults env_ keep += "NF_ ROOT NF_ DESIGN_DIR"Cambiar Defaults requiretty por Defaults ! requiretty

3. OPCIONAL: Instalar vídeos de ejemplo dentro de la carpeta/var/www/html/video

4. Descargar de la página ocial la última versión del NetFPGA packaged.5. Descomprimir y copiar la carpeta netfpga a la carpeta home del usuario.6. Agregar las variables de entorno de la NetFPGA .

cat netfpga/bashrc_addon >> ~/.bashrc

7. Make dentro de la carpeta netfpga

cd netfpga/ && make

A.6. Instalación de módulos de memoria para simulación A.6.1. Micron DDR2 SDRAM

1. Descargar el modelo de Micron.2. Extraer y copiar ddr2_parameters.vh y ddr2.v a la carpeta

~/netfpga/lib/verilog/core/common/src

unzip 256Mb_ddr2.zip && cp -r ddr2_parameters.vh ddr2.v ~/netfpga/lib/verilog/cor

A.6.2. Cypress SDRAM

1. Descargar el modelo de Cypress2. Extraer y copiar cy7c1370d.v a

/netfpga/lib/verilog/core/common/src3. Renombrar cy7c1370d.v por cy7c1370.v

u n z ip CY7C1370D. zip && mv CY7C1370D/13 70 / cy7c1 370d . v ~/ netf pga / li b / ver il og / core /common/ src / cy7c1370 . v

Page 73: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 73/83

A.7 Vericación 67

A.7. Vericación

A.7.1. Vericacion de las interfaces

Vericar que las cuatro interfaces nf2cX han sido cargadas correctamente.

ifconfig -a | | grep nf2

La salida del comando debe ser similar a lo siguiente:nf2c0 Link encap:Ethernet HWaddr 00:4E:46:32:43:00nf2c1 Link encap:Ethernet HWaddr 00:4E:46:32:43:01nf2c2 Link encap:Ethernet HWaddr 00:4E:46:32:43:02nf2c3 Link encap:Ethernet HWaddr 00:4E:46:32:43:03

A.7.2. Re-programar el CPCI

Ejecutar el script de re-programación del CPCI

cpci_reprogram.pl --all(Para re-programar todas las NetFPGAs en el sistema)

La salida del comando debe ser similar a la siguiente:

Loading the CPCI Reprogrammer on NetFPGA 0Loading the CPCI on NetFPGA 0CPCI on NetFPGA 0 has been successfully reprogrammed

A.7.3. Ejecutar el Selftest

Esta prueba asegura que todos los componentes de la plataforma están funcionado correctamente. Elselftest consta tanto de un bitle para la FPGA, que contiene la lógica y las interfaces con los componentesexternos, como del software que muestra los resultados en pantalla. La prueba del selftest hace trabajartodo el hardware en paralelo. Esta prueba continúa ejecutándose varias veces hasta que sea terminada porel usuario. Una prueba del selftest es ejecutada en la fábrica después de la fabricación de las tarjetas. Lastarjetas no se distribuyen a menos que pasen exitosamente todas las funciones del proceso. El selftest realizapruebas rigurosas de la SRAM y la DRAM DDR2 para garantizar que todas las líneas de memoria se puedenleer y escribir correctamente. Múltiples patrones de datos son utilizados para garantizar que no se abordendirecciones incorrectas o que las líneas de datos tengan alguna falla. La prueba de red envía ráfagas depaquetes por las interfaces Ethernet y los cables loopback se ponen en marcha para que los paquetes puedanser leídos y comparados con los datos que se transmiten. El SATA loopback transmite datos a través de laslíneas Multi-gigabit (MGIOs) para asegurar que los datos se pueden transmitir conablemente a través delas interfaces de E/S de alta velocidad. La prueba DMA trabaja el controlador PCI (CPCI) , la Virtex II , y elbus PCI para asegurar que grandes bloques de datos pueden ser enviados entre la NetFPGA y la memoriade la computadora host . El selftest realiza todas las pruebas anteriores en paralelo y se ejecuta de formacontinua hasta que se termina. El software del selftest muestra los resultados de las pruebas en pantalla.

El equipode desarrollo de la universidaddeStanford ofrece elselftest a los usuarios nales paraque estospuedan ejecutarlo cuando reciban la tarjeta. Cuando reciba una tarjeta NetFPGA , se le sugiere que ejecute elselftest para que verique la tarjeta y compruebe que está funcionando correctamente en su entorno. Antesde ejecutar la prueba, asegúrese de que ha conectado los cables loopback . Si no se conectan los cablesloopback , el selftest informará que una interfaz parece no funcionar correctamente.

Page 74: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 74/83

68 A Instalación y vericación de la NetFPGA 1G

A.7.4. Conectar el cable loopback

1. Conectar un cable SATA como loopback .

2. Instalar dos cables Ethernet como se muestra.

Page 75: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 75/83

A.7 Vericación 69

Page 76: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 76/83

70 A Instalación y vericación de la NetFPGA 1G

3. Alzar las interfaces nf2cX. Ejecute:

for i in ‘seq 0 3‘; do ifconfig nf2c$i up; done

4. Descargar el bitle a la tarjeta. Ejecute:

nf_download ~/netfpga/bitfiles/selftest.bit

5. Correr el selftest

Si conecto el cable SATA a la tarjeta, ejecute el siguiente comando:

~/netfpga/projects/selftest/sw/selftest

De lo contrario, ejecute:

Page 77: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 77/83

A.7 Vericación 71

~/netfpga/projects/selftest/sw/selftest -n

6. La salida debe ser similar a la siguiente:

Found net device: nf2c0NetFPGA selftest 1.00 alphaRunning..... PASSED

A.7.5. Ejecutar los test de regresion

La suite de regresión es un conjunto de pruebas que aseguran la funcionalidad del gateware y softwareliberado. En una máquina rápida, esta prueba debería durar unos 10 minutos.Las características testeadas por la suite de regresión son las únicas a las que el equipo de desarrollo deStanford tratará de proporcionar soporte. Las características adicionales pueden estar disponibles y funcio-nales en el gateware liberado, pero no serán soportadas.Para obtener más información sobre lascaracterísticasqueapoyamos, e información denida de laspruebas,consulte:

La NIC soporta con una serie de características• Los detalles de cómo se prueba cada función se describen en el documento de prueba de regresión de

la NIC disponible en la Wiki.

El enrutador de referencia (RR) soporta un conjunto de características• Los detalles de cómo se prueba cada función se describen en el documento de prueba de regresión del

Referece Router disponible en la Wiki.

Por favor, asegúrese de que ha completado con éxito el selftest antes de proceder a las pruebas de regresión.

A.7.6. Conectar los cables Ethernet

Conecte ’eth1 ’ a ’nf2c0’ (nfc0 es el puerto más cercano a la placa base)Conecte ’eth2 ’ a ’nf2c1’ (nfc1 es el puerto de uno de distancia a la placa base)

La ubicación de los puertos eth1 y eth2 puede variar dependiendo de la conguración de su sistema.La siguiente foto muestra la conguración de una máquina test.

Page 78: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 78/83

72 A Instalación y vericación de la NetFPGA 1G

Page 79: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 79/83

A.7 Vericación 73

Login como root a través de una Sesión X .Inicie una sesión X como root o ejecute el comando su - porque vamos a estar probando la GUI de Scone.

A.7.7. Descargar el bitle del reference router

1. Ejecute el siguiente comando para descargar el bitle a la NetFPGA

nf_download ~/netfpga/bitfiles/reference_router.bit

2. La salida esperada del comando debe ser similar a la siguiente:

Found net device: nf2c0Bit file built from: nf2_top_par.ncdPart: 2vp50ff1152Date: 2007/10/ 9Time: 22: 3: 4Error Registers: 1000000Good, after resetting programming interface the FIFO is emptyDownload completed - 2377668 bytes. (expected 2377668).DONE went high - chip has been successfully programmed.

A.7.8. Correr la suite de los test de regresion

1. Ejecute la suite de pruebas de regresión. Las pruebas deben tomar unos 10 minutos en total.

nf_regress_test.pl

2. Ejemplo de la salida de una ejecución exitosa:

Running tests on project ’driver’...Running test ’driver_compile’... PASSRunning test ’driver_install’... PASS

Running test ’verify_mtu’... PASSRunning global teardown... PASS

Running tests on project ’reference_nic’...Running test ’download_nic’... PASSRunning test ’test_loopback_random’... PASSRunning test ’test_loopback_minsize’... PASSRunning test ’test_loopback_maxsize’... PASSRunning test ’test_loopback_drop’... PASSRunning test ’test_ip_interface’... PASSRunning global teardown... PASS

Running tests on project ’reference_router’...Running global setup... PASSRunning test ’test_router_cpusend/run.pl’... PASSRunning test ’test_wrong_dest_mac’... PASSRunning test ’test_nonip_packet’... PASSRunning test ’test_nonipv4_packet’... PASSRunning test ’test_invalidttl_packet’... PASSRunning test ’test_lpm_misses’... PASSRunning test ’test_arp_misses’... PASSRunning test ’test_badipchecksum_packet’... PASS

Page 80: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 80/83

Page 81: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 81/83

A.7 Vericación 75

A.7.9. Ejecutar el Selftest en un nuevo bitle

Si usted ha instalado las herramientas CAD, debe ejecutar esta prueba para comprobar que puede cons-truir un nuevo bitle. Omita este paso si no tiene previsto modicar el hardware.

A.7.10. Sintetizar el reference router desde los archivos fuente

Nota: Este paso tardará unos 45-60 minutos. Este proceso se utiliza para vericar que cuenta con unamáquina congurada para sintetizar proyectos. Si usted es un desarrollador de hardware y quiere sintetizarsu propio hardware del NetFPGA Router utilizando el código fuente de Verilog , siga los siguientes pasos:

1. Para sintetizar hardware FPGA, usted tendrá que tener todas las herramientas de desarrollo de FPGAinstaladas.

2. Inicie sesión, ya sea directamente en una sesión X o vía ssh -X . Este paso agrega unas variables deentorno adicionales a ~/nf_profile . Usted puede preguntarse: “¡Pero yo no estoy corriendo nadagráco!” y estaría en lo cierto. Desafortunadamente, incluso cuando se le llaman sin interfaz gráca,las herramientas de Xilinx requieren de X para ejecutarse. Un informe de error sobre este asunto ya fuepresentado a Xilinx.

3. Asegúrese de que las herramientas Xilinx están en su path y que jó correctamente las variables deentorno.

4. Vaya al directorio de síntesis de la reference nic y ejecute make. Este paso debería tomar menos de unahora en una buena máquina.

cd ~/netfpga/projects/reference_router/synth && make

5. Verique que el bitle del reference router se ha creado.

ls || grep nf2_top_par.bit

6. La salida debe ser la siguiente:

nf2_top_par.bit

A.7.11. Descargar el bitle del reference router

1. Ejecute el siguiente comando para descargar el bitle a la NetFPGA

nf_download nf2_top_par.bit

A.7.12. Ejecutar la suite de regresión desde su nuevo bitle

1. Ejecute el siguiente comando:

nf_regress_test.pl

2. Ejemplo de la salida de una ejecución exitosa:

Running tests on project ’driver’...Running test ’driver_compile’... PASSRunning test ’driver_install’... PASSRunning test ’verify_mtu’... PASSRunning global teardown... PASS

Page 82: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 82/83

76 A Instalación y vericación de la NetFPGA 1G

Running tests on project ’reference_nic’...Running test ’download_nic’... PASSRunning test ’test_loopback_random’... PASSRunning test ’test_loopback_minsize’... PASSRunning test ’test_loopback_maxsize’... PASSRunning test ’test_loopback_drop’... PASSRunning test ’test_ip_interface’... PASSRunning global teardown... PASS

Running tests on project ’reference_router’...Running global setup... PASSRunning test ’test_router_cpusend/run.pl’... PASSRunning test ’test_wrong_dest_mac’... PASSRunning test ’test_nonip_packet’... PASSRunning test ’test_nonipv4_packet’... PASSRunning test ’test_invalidttl_packet’... PASSRunning test ’test_lpm_misses’... PASSRunning test ’test_arp_misses’... PASSRunning test ’test_badipchecksum_packet’... PASSRunning test ’test_ipdest_filter_hit’... PASSRunning test ’test_packet_forwarding’... PASSRunning test ’test_lpm’... PASSRunning test ’test_lpm_next_hop’... PASSRunning test ’test_queue_overflow’... PASSRunning test ’test_oq_limit’... PASSRunning test ’test_ipdest_filter’... PASSRunning test ’test_oq_sram_sz_cpu’... PASSRunning test ’test_oq_sram_sz_mac’... PASSRunning test ’test_router_table/run.pl’... PASSRunning test ’test_send_rec/run.pl’... PASSRunning test ’test_lut_forward’... PASSRunning global teardown... PASS

Running tests on project ’scone’...Running global setup... PASSRunning test ’test_build’... PASSRunning test ’test_mac_set’... PASSRunning test ’test_ip_set’... PASSRunning test ’test_rtable_set’... PASSRunning test ’test_disabled_interfaces/run.pl’... PASSRunning test ’test_noniparp_ethtype’... PASSRunning test ’test_arp_rpl/run.pl’... PASSRunning test ’test_arp_norpl/run.pl’... PASSRunning test ’test_arp_quepkt/run.pl’... PASSRunning test ’test_ip_error/run.pl’... PASSRunning test ’test_ip_rtblmiss/run.pl’... PASS

Running test ’test_ip_intfc/run.pl’... PASSRunning test ’test_ip_checksum/run.pl’... PASSRunning test ’test_ttl_expired/run.pl’... PASSRunning test ’test_send_receive/run.pl’... PASSRunning test ’test_arp_req/run.pl’... PASSRunning test ’test_tcp_port/run.pl’... PASSRunning test ’test_udp_packet/run.pl’... PASSRunning test ’test_icmp_echo/run.pl’... PASSRunning test ’test_icmp_notecho/run.pl’... PASS

Page 83: NetFPGA 1G

7/21/2019 NetFPGA 1G

http://slidepdf.com/reader/full/netfpga-1g 83/83

A.7 Vericación 77

Running global teardown... PASS

Running tests on project ’router_kit’...Running global setup... PASSRunning test ’test_00_make/run.sh’... PASSRunning test ’test_01_ip_dst_filter/run.pl’... PASSRunning test ’test_02_route_table/run.pl’... PASSRunning test ’test_03_arp_table/run.pl’... PASS

Running test ’test_04_ip_packets/run.pl’... PASSRunning global teardown... PASS

Running tests on project ’router_buffer_sizing’...Running global setup... PASSRunning test ’test_time_stamp/run’... PASSRunning test ’test_store_event/run’... PASSRunning global teardown... PASS