NetFPGA
The NetFPGA project[1] is an effort to develop open source hardware and software for rapid prototyping of computer network devices. The project targeted academic researchers, industry users, and students. It was not the first platform of its kind in the networking community.[2][3][4][5] NetFPGA used an FPGA-based approach to prototyping networking devices. This allows users to develop designs that are able to process packets at line-rate, a capability generally unafforded by software based approaches. NetFPGA focused on supporting developers that can share and build on each other's projects and IP building blocks.
The NetFPGA is an open source hardware and software platform designed for research and teaching. Currently there are three supported platforms: NetFPGA-SUME, NetFPGA-1G-CML and the NetFPGA-10G and one deprecated platform: NetFPGA-1G. These platforms allow researchers, and students to build prototypes of high-speed, hardware-accelerated networking systems. As of 2014 the NetFPGA platforms have been used in over 226 academic papers. Both platforms are open-source and the hardware is made available at low cost through donations of gifts and silicon chips by sponsors of the NetFPGA project.
Tutorials have been held worldwide to teach new users with hands-on experience using the NetFPGA. There are now over 150 groups around the globe that use the NetFPGA.
NetFPGA 是由美国斯坦福大学 (Stanford University) 开发设计的一个低成本 可重用硬件平台.它的出现使研究人员可以在硬件级别的开发环境上搭建 Gb/s 级高性能网络系统模型,从而进行网络系统的研究和测试.NetFPGA平台的软件系统包括操作系统、作为软件接口的驱动程序、实现各种硬件功能的逻辑代码、执行控制功能的软件程序、系统测试的脚本程序,以及计算机辅助设计软件工具。
NetFPGA的概述
- NetFPGA 能够很好地支持模块化设计,复杂的硬件设计可以通过各个子模 块的组合来完成.更重要的是,NetFPGA 是一个基于 Linux 的开放性平台,所 有对它感兴趣的人都可以利用平台上现有的资源, 在前人开发的基础上搭建自己 的系统, 而自己开发的系统也可以被其他人所用,而不再需要重复地搭建外围模 块,开发驱动和 GUI 等,只要添加自己的模块和修改现有的系统即可. NetFPGA 的模块化和开放性,大大简化了网络研究的任务量,从而使其获 得了全球众多研究机构的青睐. 目前, 基于 NetFPGA 的网络设计和路由器设计, 已经作为一门实验课程在美国的很多高校里讲授. 国内也有很多学校和研究机构采用基于 NetFPGA 进行实验与教学的实例.
NetFPGA的结构
-
最新的2.1版本NetFPGA开发板的实物图如图所示
NetFPGA的主要组成部分为:
Xilinx Virtex-II Pro 50 (赛灵思Virtex-II Pro 50 FPGA )
JTAG cable connector can be used to run Xilinx (国际通用的JTAG测试端口)
4.5 MBStatic Random Access Memory (SRAM) (4.5 MB高速静态随机存取器)
Connector block on left of PCB interfaces to 4 external RJ45 plugs (4组高速以太网口)
Interfaces to standard Gigabit Ethernet using Cat5E or Cat6 copper network cables (支持Cat5E或Cat6标准电缆)
Wire-speed processing on all ports at all time using FPGA logic (基于FPGA硬件控制电路)
Two SATA-style connectors to Multi-Gigabit I/O (MGIO) on right-side of PCB (右侧两个串口连接线)
Double-Date Rate Random Access Memory (DDR2 DRAM) (64MB二代内存)
Standard PCI Form Factor (标准PCI接口)
Dimensions: 25cm long x 10cm tall (10" x 4")(25厘米长x 10厘米高)
NetFPGA的软件系统
-
NetFPGA平台的软件系统包括操作系统、作为软件接口的驱动程序、实现各种硬件功能的逻辑代码、执行控制功能的软件程序、系统测试的脚本程序,以及计算机辅助设计软件工具。
为了保证开放性,NetFPGA平台选择了CentOS操作系统。CentOS是一个开放源代码的 Linux操作系统,全名为"社区企业操作系统"(Community Enterprise Operating System),是Red Hat的免费版本,相对于其他Linux发行版,其稳定性值得信赖,非常适合应用在网络和服务器平台。目前,NetFPGA平台已经支持32位的 CentOS 4.4版本直至最新的5.2版本。
基于Linux内核的设备驱动程序是NetFPGA开发板与主机操作系统的软件接口。首先,驱动程 序对NetFPGA的四个千兆以太网口进行配置,在系统内添加了四个命名为nf2c0、nf2c1、nf2c2、nf2c3的网络连接,从而使得PC主机 上的用户空间软件可以通过NetFPGA开发板上的以太网端口来收发数据分组,就像使用普通的以太网口一样。其次,驱动程序给安装在主机上的每个 NetFPGA板子预留了128MB的主机内存空间,开发板的片上寄存器、SRAM、DRAM被映射到内存中,应用程序通过对这些寄存器映像进行读写,从 而控制NetFPGA的运行模式,监视数据通道的分组处理状态。再者,驱动程序使主机和NetFPGA之间按照DMA方式传送这个以太网帧,从而使主机在 I/O进行的同时能够并行运算而不必等待I/O结束。
实现各种硬件功能的逻辑代码是由Verilog硬件设计语言编写的,这些代码通过仿真来测试和改进 逻辑功能,之后生成bit文件下载到FPGA中,执行相应的硬件功能。NetFPGA作为一个开放平台,其研究者们已经贡献出了很多Verilog模块, 这为我们的研究开发提供了很大的便捷。
完成控制功能的软件程序主要是由C语言编写,包括读写寄存器、网络协议的执行等功能。为了使操作简单和便捷,NetFPGA平台还提供了Java程序开发的图形用户界面(Java GUI)。
此外,Linux操作系统下的Shell脚本程序,可以用来调用C语言程序,从而对系统进行测试,评估其网络性能等。这些脚本程序通常是在Shell终端里,以命令行的方式运行的。
用于NetFPGA平台开发的计算机辅助设计(CAD)工具,对硬件设计进行仿真和调试。设计方案 通过Mentor Graphics ModelSim来仿真,确保逻辑能够正确地执行。Verilog源代码通过Xilinx ISE进行综合,最终生成bit文件。最后,bit文件通过PC主机的命令行程序下载到FPGA并对其进行编程,从而执行设计的硬件功能。硬件电路的调试 可以使用Xilinx ChipScope的片上逻辑分析仪,通过JTAG接口来完成。
NetFPGA的搭建
-
组装PC主机
主机配置要求为双核或四核处理器,2G以上内存,额定功率400W以上的电源,主板必须带有PCI-Express和PCI插槽。主机攒好之后,将双口网卡和NetFPGA分别插到主板的PCI-Express和PCI插槽,并牢牢固定住。
安装操作系统
目前NetFPGA已经兼容从4.4到5.2的各个CentOS版本,由于CentOS暂时不支持SATA硬盘,需要通过设置主板BIOS使SATA硬盘工作在IDE模式。为了保险起见,安装过程中选择所有的组件。
安装Java
由于NetFPGA平台的控制软件中包含了Java语言编写的GUI界面,因此还必须安装Java JDK和JRE。
安装NetFPGA软件包
包含NetFPGA驱动程序和基本模块的软件包,可以从官方网站直接下载,安装之后进行编译,系统已经为NetFPGA的四个端口添加了驱动,出现了nf2c0,nf2c1,nf2c2和nf2c3四个网络连接。
安装CAD工具
编译工具采用Xilinx的ISE Foundation,仿真工具采用Mentor Graphics的ModelSim,调试NetFPGA上的信号采用Xilinx的 ChipScope Pro 。
测试
为了确保软硬件系统的正确设置,在安装完所有软件之后,对NetFPGA平台做了一系列测试。这些测试是由一系列Shell脚本程序来完成的,NetFPGA的基本软件包里已经包含了这些程序
_____________________________________________________
介绍
NetFPGA是一款低功耗的开发平台,作为网络硬件教学和路由设计的设计工具。NetFPGA可以很方便的使得研究人员或者高校的学生搭建一个高速、硬件加速的网络系统。兴起于北美,最初只是斯坦福大学课堂教学使用的Project。NetFPGA把FPGA的可配置的特性带入了网络通讯领域,可以为更多的研究人员研究下一代网络提供了一个开放的平台。愈来愈多的人开始关注到NetFPGA的特性,并有很多人参与了基于NetFPGA的开源项目。
NetFPGA的参数
NetFPGA平台(如图1)包含了一个Xilinx Virtex-2 Pro 50 的FPGA,运行在125MHz的时钟频率下,用于用户自定义逻辑的设计;还包含了Xilinx Spartan-II FPGA,运行PCI接口控制器的控制逻辑,用于与主处理器的通信。两个2.25MB的外部SDRAM以及扩展的64MB的DDR SDRAM作出数据存储介质。平台还提供了四个千兆以太网接口,以配合在FPGA中的四个千兆以太网控制器软核。NetFPGA还包含了两个SATA连接器,使得在一个系统中多个NetFPGA板直接交换数据,而不需通过PCI总线。
图1 . NetFPGA的硬件组成
板上的主要资源:
用于逻辑设计的Xilinx Virtex-2 Pro FPGA
用于PCI主接口的Xilinx Spartan
2*2.25MB ZBT SRAM
64MB DDR2 DRAM
物理层上的4个千兆以太网口
开发环境
NetFPGA的系统架构(如图2所示)。在研究开发的过程中主要包括硬件层的设计(FPGA的逻辑层的设计)以及软件层的开发(对应硬件层的驱动开发以及应用程序的开发)。
硬件
购置的主机(配置越高越好),注意主板需留一个PCI-E给网卡使用,所以选主板的时候最好选择集成显卡。
图2. NetFPGA的系统框架
软件
操作系统推荐的是CentOS 4.4,CentOS 4.5 CentOS 5.1;用户需要对Xilinx的FPGA进行配置,所以需要安装ISE9.1i软件;还有相关FPGA的工具,如ModelSim(FPGA逻辑仿真),ChipScope(片上逻辑分析)等。还需要安装NetFPGA Base package,在安装之前还需要Java和RPMforge yum工具包的支持。需要注意安装的每个软件的版本问题,因为彼此存在很大的依赖。
开源项目
在http://www.netfpga.org/上可以找到一些开源项目,罗列如下:
1. NetFlow Probe
2. Hardware Accelerated Linux Router
3. NetFPGA Ethernet Switch
4. Quad-Port Gigabit NIC
5. NetFPGA OpenFlow Switch
在国内也有多个团队在开发使用NetFPGA,在http://www.openhw.org/上可以找到的开源项目,如:
1. 基于NetFPGA的可重构科学计算平台(宁夏大学)
2. 基于NetFPGA的网络流量采集器(济南大学)
3. 基于NetFPGA的网络处理器设计与实现(山东大学)
4. 基于NetFPGA的包过滤防火墙的设计与实现(哈尔滨工程大学)
从各种开源项目中可以看到NetFPGA的实际应用,相信能促进下一代网络的发展。
注:最近本人在学习和应用FPGA,无意中在网上发现NetFPGA的一些资料,虽然这种技术才刚刚起步,关于NetFPGA的项目很多都是开源的,适合高校的学生、老师、研究人员开发研究,相信在不久的将来肯定会带来更过的惊喜。在中国NetFPGA也已经引起了很多高校、公司的兴趣,如北京交通大学、华为,但尚属起步阶段,所以对NetFPGA做一些简单的介绍。详细的开发指南请见参考文献1。
参考资料
1. NetFPGA开源官方网站http://netfpga.org/static/guide.html#Install_Software
2. NetFPGA开发初探,http://www.eefocus.com/myspace/blog/show_155829.html
3. 开放源码硬件社区 http://www.openhw.org/activity/opproject/
如果这篇文章帮助到了你,你可以请作者喝一杯咖啡