NetFPGA-1G-CML从零开始环境配置

前言

偶得一块NetFPGA-1G-CML,跟着github对NetFPGA-1G-CML的入门指南,一步步把配置环境终于搭建起来,下面重新复现一下此过程。期间感谢开发板的技术人员支持与帮助,得以成功配置环境。

https://github.com/NetFPGA/NetFPGA-public/wiki/NetFPGA-1G-CML-Getting-Started-Guide

实验工具

  • NetFPGA-1G-CML开发板
  • 一台有PCIe口的主机

下为工具照片:

1、操作系统的选择

官方推荐Fedora 20,于是我也选择了该操作系统。

  • 镜像选择

    镜像为清华大学镜像源的镜像(国内其他镜像源中没有找到Fedora 20 64bit的版本)下载链接

  • 系统盘制作

    • 一个8G U盘
    • 系统盘制作工具 PowerISO。(切记不要用软碟通UltraISO(软碟通),原因软碟通不适合做linux的系统盘,笔者第一次也是采用软碟通进行系统盘制作,结果出现了一些问题,后来用PowerISO一切正常)

可参照这篇文章:制作Linux(Fedora、Ubuntu、CentOS)优盘启动

2、Xilinx开发工具的下载

这个是整个环境安装中最耗费时间的一个地方,建议在windows下用迅雷下载,然后转到fedora下,因为文件相当庞大。之前笔者也下了下列两个工具的最新的版本,可中途也出了莫名其妙的问题,最终成功的环境还是以以下两个工具为基础。

  • ISE Design Suite 14.6(笔者选择的是链接中基于Linux的完整安装程序5.88G,之前安装过ISE Design Suite 14.7的,可其中缺少EDK变量,后来重新换成了这个。安装教程:见Reference Operating System链接里Installing Xilinx ISE Design Suite on Fedora 14部分,有一点不一样,连接中版本较老,但链接的提示中,选项该去掉依然参照它)

    tip:ISE工具需要license,否则无法build。如果您已经拥有license,则可导入,否则还有一种办法:百度一下即可发现惊喜。

  • Vivado Desgin Suite 15.2 (笔者选择的是链接中,2015.02的版本, Vivado 2015.2: Full Installer For Linux Single File Download Image Including SDK (TAR/GZIP - 4.58 GB) ,安装过程遇ISE类似)

3、获得NetFPGA-1G-CML对应github仓库的权限

在次NetFPGA官网的链接中填入你的相关信息,则工作人员会把拉到对应仓库下,然后可以clone下来到本地。

以下步骤皆基于本仓库。

4、Fedora 20操作系统环境所需配置的安装

下面简单罗列命令,至于每个命令所需安装的内容是为何物,请查看Getting Started Guide的Operating System Setup以及Reference Operating System的Additional Required Installation Packages。

  1. sudo yum install '*stdc*'
  2. sudo yum install libsigc++ libsigc++.i686 qt.i686 qt
  3. sudo yum groups mark convert
  4. sudo yum group install "Fedora Eclipse"
  5. sudo yum install qgit wireshark wireshark-gnome
  6. sudo yum install python
  7. sudo yum install scapy
  8. sudo yum install fxload
  9. sudo yum install bison byacc flex
  10. sudo yum install glibc.i686
  11. sudo yum install kernel-devel
  12. sudo yum install libusb-devel
  13. sudo yum install libpcap-devel
  14. sudo yum install libnet-devel

其后四个命令,由于笔者在安装过程中采用是按tab键得到,相关名称可能会有点差异,具体看操作系统级别(32bit or 64bit)选择安装。

5、环境配置,以及跑一个demo

Step1、获得git仓库权限后,把仓库clone到本地

tip:切记此时你已经获得了该仓库的权限(有时候邮件没收到,可能在垃圾箱里面)

  1. git clone https://github.com/NetFPGA/NetFPGA-1G-CML-live.git

Step2、建立编译环境路径变量

  • 取得赛灵思工具的路径
  1. source /opt/Xilinx/14.6/ISE_DS/settings64.sh
  2. source /opt/Xilinx/Vivado/2015.2/settings64.sh
  • 取得clone后仓库的路径

路径的信息保存于该仓库的文件bashrc_addon_NetFPGA_10G中,记得根据实际路径进行修改,比如笔者的仓库位于/home/netfpga/Program/NetFPGA-1G-CML-live,所以笔者该文件的信息修改如下:

  1. export NF_ROOT=${HOME}/Program/NetFPGA-1G-CML-live
  2. export NF_DESIGN_DIR=${NF_ROOT}/projects/reference_nic_nf1_cml
  3. export NF_WORK_DIR=/tmp/${USER}
  4. export PYTHONPATH=${NF_ROOT}/lib/python:${NF_DESIGN_DIR}/lib/Python:${NF_ROOT}/tools/scripts:
  5. export LD_LIBRARY_PATH=${NF_ROOT}/lib/java/NetFPGAFrontEnd/bin:${LD_LIBRARY_PATH

然后执行命令

  1. source bashrc_addon_NetFPGA_10G

为了更好确认上部是否写对,可以执行一下命令看看输出

  1. echo $NF_ROOT

此时如果输出为仓库的所在的绝对路径,就证明正确了。

Step3、 Build the Libraries and IP

此处由于笔者还不了解大概这些库的功能,中文无法直接翻译。

tip:这个步骤的过程一定要基于ISE已经导入license

To build the hardware test libraries for the hardware and simulation tests:

  1. cd $NF_ROOT
  2. make hwtestlib

To build the IP cores used by the NF1-CML projects:

  1. make cml_cores

上述两个步骤,若无出现make ...错误都表示步骤已经成功进行。

Step4、编译一个工程

本次 $NF_DESIGN_DIR所选择的工程为 reference_nic_nf1_cml一个简单的网卡(若想编译其他工程,记得去bashrc_addon_NetFPGA_10G修改对应的$NF_DESIGN_DIR路径)

  1. cd $NF_DESIGN_DIR
  2. make

此时你会等待相当长的一段时间,最后如果成功后最后两行会显示如下:

  1. mkdir -p bitfiles
  2. cp hw/implementation/download.bit bitfiles/reference_nic_nf1_cml.bit

Step5、连接FPGA到主机

笔者是用J12的usb jtag引脚作为连接主机的口,这里主要介绍一下相关驱动的安装,以及一些坑。

如图所示

首先下载usb驱动,驱动:rmdir.de/~michael/xilinx/

驱动安装步骤

  1. tar -xvf usb-driver-HEAD-xxxxxxx.tar.gz
  2. cd usb-driver-HEAD-xxxxxxx
  3. source /opt/Xilinx/13.4/ISE_DS/settings64.sh 这里要相应改变
  4. make
  5. ./setup_pcusb
  6. cp libusb-driver.so /usr/local/lib/libusb-jtag-driver.so
  7. export LD_PRELOAD=/usr/local/lib/libusb-jtag-driver.so

之后用命令lsusb可以看到

  1. [netfpga@localhost bin]$ lsusb
  2. Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
  3. Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
  4. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  5. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  6. Bus 001 Device 003: ID 1443:0007 Digilent Development board JTAG //这个就是我们的设备
  7. Bus 002 Device 003: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory
  8. Bus 002 Device 004: ID 192f:0916 Avago Technologies, Pte.

可是通过impact & 打开ISE impact又有提示如下图所示问题,需重新装驱动

后来在技术人员帮助下,有了一个解决答案,具体的下载文件请移步另外一篇博客:Digilent Xilinx USB Jtag cable

根据上述做完,即可从impact &看到我们的FPGA芯片。

Step6、烧写程序到FPGA中

进入到项目文件夹下,执行以下命令

  1. make download

然后烧写成功后,会有如下输出

  1. INFO:iMPACT - '1': Checking done pin....done.
  2. '1: Programmed successfully.
  3. Elapsed time = 62 sec.
  4. rm -f bitfiles/download.bit

Step7、安装NetFPGA-1G-CML作为系统设备

首先确保已经把NetFPGA-1G-CML开发板插到PCIe口上,如图所示

然后执行以下命令,并可看到该设备

  1. lspci | grep Xilinx
  2. 01:00.0 Ethernet controller: Xilinx Corporation Device 4244

安装NetFPGA-1G-CML驱动,在这之前,请在执行一次

  1. cd $NF_ROOT
  2. source bashrc_addon_NetFPGA_10G
  3. make hwtestlib

安装必要组件

  1. sudo yum install kernel-devel-3.11.10-301.fc20.x86_64

编译驱动

  1. cd $NF_DESIGN_DIR/sw/host/driver
  2. make

安装驱动

  1. sudo insmod nf10.ko

初始化NetFPGA-1G-CML的四个以太网接口

  1. sudo ifconfig nf0 up
  2. sudo ifconfig nf1 up
  3. sudo ifconfig nf2 up
  4. sudo ifconfig nf3 up

执行一下ifconfig,可以看到四个以太网卡出现了

  1. [netfpga@localhost bin]$ ifconfig
  2. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  3. inet 127.0.0.1 netmask 255.0.0.0
  4. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  5. loop txqueuelen 0 (Local Loopback)
  6. RX packets 10 bytes 940 (940.0 B)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 10 bytes 940 (940.0 B)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. nf0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  11. inet 192.168.200.1 netmask 255.255.255.0 broadcast 192.168.200.255
  12. inet6 fe80::24e:46ff:fe31:3000 prefixlen 64 scopeid 0x20<link>
  13. ether 00:4e:46:31:30:00 txqueuelen 1000 (Ethernet)
  14. RX packets 377 bytes 528796 (516.4 KiB)
  15. RX errors 0 dropped 0 overruns 0 frame 0
  16. TX packets 377 bytes 534074 (521.5 KiB)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  18. device interrupt 30
  19. nf1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  20. inet 192.168.201.1 netmask 255.255.255.0 broadcast 192.168.201.255
  21. inet6 fe80::24e:46ff:fe31:3001 prefixlen 64 scopeid 0x20<link>
  22. ether 00:4e:46:31:30:01 txqueuelen 1000 (Ethernet)
  23. RX packets 377 bytes 528796 (516.4 KiB)
  24. RX errors 0 dropped 0 overruns 0 frame 0
  25. TX packets 377 bytes 534074 (521.5 KiB)
  26. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  27. device interrupt 30
  28. nf2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  29. inet 192.168.202.1 netmask 255.255.255.0 broadcast 192.168.202.255
  30. inet6 fe80::24e:46ff:fe31:3002 prefixlen 64 scopeid 0x20<link>
  31. ether 00:4e:46:31:30:02 txqueuelen 1000 (Ethernet)
  32. RX packets 371 bytes 528372 (515.9 KiB)
  33. RX errors 0 dropped 0 overruns 0 frame 0
  34. TX packets 377 bytes 534074 (521.5 KiB)
  35. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  36. device interrupt 30
  37. nf3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  38. inet 192.168.203.1 netmask 255.255.255.0 broadcast 192.168.203.255
  39. inet6 fe80::24e:46ff:fe31:3003 prefixlen 64 scopeid 0x20<link>
  40. ether 00:4e:46:31:30:03 txqueuelen 1000 (Ethernet)
  41. RX packets 370 bytes 528316 (515.9 KiB)
  42. RX errors 0 dropped 0 overruns 0 frame 0
  43. TX packets 377 bytes 534074 (521.5 KiB)
  44. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  45. device interrupt 30
  46. p4p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  47. inet 192.168.2.105 netmask 255.255.255.0 broadcast 192.168.2.255
  48. inet6 fe80::922b:34ff:feba:728b prefixlen 64 scopeid 0x20<link>
  49. ether 90:2b:34:ba:72:8b txqueuelen 1000 (Ethernet)
  50. RX packets 3421 bytes 2595675 (2.4 MiB)
  51. RX errors 0 dropped 0 overruns 0 frame 0
  52. TX packets 5648 bytes 583390 (569.7 KiB)
  53. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Step8、Making Registers

对于这个步骤,笔者较为陌生,编译寄存器的相关映射,再次只做操作步骤,原理还需细究

  1. $ cd $NF_DESIGN_DIR/hw
  2. $ make regs

在此处步骤,笔者遇到一个莫名其妙的问题,编译不通过,然后出去吃个饭,重启了一下,重新打开makefile保存了一下,竟莫名其妙的解决了.(已解决)

解决方案,重新打开一个终端,执行命令

  1. source /opt/Xilinx/14.6/ISE_DS/settings64.sh
  2. source bashrc_addon_NetFPGA_10G

然后在去执行上述步骤

Step9、Verify the Design in Hardware with the Test Infrastructure

最终步骤验证实验,并把四个以太网口按如图所示接上,NF0---NF3,NF1---NF2

  1. cd $NF_ROOT/tools/bin
  2. su -c "./nf_test.py hw --major loopback --minor maxsize"

然后如果测试成功会有如下显示:

  1. Running global setup... PASS
  2. Running test both_loopback_maxsize... PASS
  3. Running global teardown... PASS

然后在执行一遍ifconfig,可以发现NF0-3各个网卡的收发包较上次执行ifconfig有了上涨

  1. [netfpga@localhost bin]$ ifconfig
  2. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  3. inet 127.0.0.1 netmask 255.0.0.0
  4. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  5. loop txqueuelen 0 (Local Loopback)
  6. RX packets 10 bytes 940 (940.0 B)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 10 bytes 940 (940.0 B)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. nf0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  11. inet 192.168.200.1 netmask 255.255.255.0 broadcast 192.168.200.255
  12. inet6 fe80::24e:46ff:fe31:3000 prefixlen 64 scopeid 0x20<link>
  13. ether 00:4e:46:31:30:00 txqueuelen 1000 (Ethernet)
  14. RX packets 427 bytes 603796 (589.6 KiB)
  15. RX errors 0 dropped 0 overruns 0 frame 0
  16. TX packets 427 bytes 609774 (595.4 KiB)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  18. device interrupt 30
  19. nf1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  20. inet 192.168.201.1 netmask 255.255.255.0 broadcast 192.168.201.255
  21. inet6 fe80::24e:46ff:fe31:3001 prefixlen 64 scopeid 0x20<link>
  22. ether 00:4e:46:31:30:01 txqueuelen 1000 (Ethernet)
  23. RX packets 427 bytes 603796 (589.6 KiB)
  24. RX errors 0 dropped 0 overruns 0 frame 0
  25. TX packets 427 bytes 609774 (595.4 KiB)
  26. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  27. device interrupt 30
  28. nf2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  29. inet 192.168.202.1 netmask 255.255.255.0 broadcast 192.168.202.255
  30. inet6 fe80::24e:46ff:fe31:3002 prefixlen 64 scopeid 0x20<link>
  31. ether 00:4e:46:31:30:02 txqueuelen 1000 (Ethernet)
  32. RX packets 421 bytes 603372 (589.2 KiB)
  33. RX errors 0 dropped 0 overruns 0 frame 0
  34. TX packets 427 bytes 609774 (595.4 KiB)
  35. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  36. device interrupt 30
  37. nf3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  38. inet 192.168.203.1 netmask 255.255.255.0 broadcast 192.168.203.255
  39. inet6 fe80::24e:46ff:fe31:3003 prefixlen 64 scopeid 0x20<link>
  40. ether 00:4e:46:31:30:03 txqueuelen 1000 (Ethernet)
  41. RX packets 420 bytes 603316 (589.1 KiB)
  42. RX errors 0 dropped 0 overruns 0 frame 0
  43. TX packets 427 bytes 609774 (595.4 KiB)
  44. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  45. device interrupt 30
  46. p4p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  47. inet 192.168.2.105 netmask 255.255.255.0 broadcast 192.168.2.255
  48. inet6 fe80::922b:34ff:feba:728b prefixlen 64 scopeid 0x20<link>
  49. ether 90:2b:34:ba:72:8b txqueuelen 1000 (Ethernet)
  50. RX packets 3441 bytes 2598545 (2.4 MiB)
  51. RX errors 0 dropped 0 overruns 0 frame 0
  52. TX packets 5697 bytes 590789 (576.9 KiB)
  53. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

至此,安装环境测试完毕

结语

本篇博客只是把NetFPGA-1G-CML的步骤走了一遍,描述了遇到的问题以及相关解决方案,并没有详细描述每一个步骤的目的,建议读者阅读原github上的Getting-Started-Guide,并以本文作为辅助。

图片较为模糊,很抱歉,也较大。

NetFPGA-1G-CML从零开始环境配置的更多相关文章

  1. 【转载】NetFPGA-1G-CML从零开始环境配置

    ##环境 深度Linux ###环境配置 ```bash sudo apt-get install libsigc++ sudo apt-get install qgit sudo apt-get i ...

  2. 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

    原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...

  3. .NET Core VS Code 环境配置

    VSCode .NET环境配置     在此之前我一直是使用notepad++配置的C/C#环境来写代码,比起打开"笨重"的VS要方便很多.VSCode出来之后,本来也想折腾了一下 ...

  4. Android SDK 4.0.3 开发环境配置及运行

    最近又装了一次最新版本的ADK环境 目前最新版是Android SDK 4.0.3 本文的插图和文本虽然是Android2.2的 步骤都是一样的,如果安装的过程中遇到什么问题,可以留言,我会尽快回复! ...

  5. 第6天【egrep、bash环境配置及脚本、vim编辑器】

    bash环境配置及脚本(02)_recv bash环境配置及脚本(02)_recv bash环境配置文件: 按生效范围划分,存在两类: 全局配置: /etc/profile /etc/bashrc 个 ...

  6. 如何用Python做Web开发?——Django环境配置

    用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手.     概念 最近有个词儿很流行,叫做“全栈”(full stack ...

  7. Ubuntu虚拟机+ROS+Android开发环境配置笔记

    Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04. 比較稳定,且支持非常多ROS ...

  8. Open SSL 开发环境配置

    Open SSL 开发环境配置 最后更新日期:2014-05-13 阅读前提:VisualStudio的基本使用.Cent OS的基本使用 环境: Windows 8.1 64bit英文版,Visua ...

  9. SpringBoot2.x【一】从零开始环境搭建

    SpringBoot2.x[一]从零开始环境搭建 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么SpringBoot被推上主流的原因,Sp ...

随机推荐

  1. tomcat启动很慢很慢很慢

    今天下载tomcat8.5,启动的时候发现非常慢,大概三分钟左右才能启动,网上搜到一个解决方案,在此记录下来 原因: Tomcat 7/8都使用org.apache.catalina.util.Ses ...

  2. 【经验随笔】 Tomcat多个APP使用相同名称环境变量导致问题

    背景介绍 之前遇到一个问题,在一个tomcat下部署了两个APP,其中一个APP不能正常从底层接口获取数据.如果将两个APP分到不同服务器上的tomcat部署,又都正常了.分析了一下: 远程调试跟代码 ...

  3. git本地项目关联远程仓库

    应用场景: 当你在开发一个项目的时候,不想只在本地存储,想用git来管理代码时候的. 1.在你的项目根目录打开git命令窗口,通过 git init 命令把这个目录变成Git可以管理的仓库: git ...

  4. RPC vs RESTful

    在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术: (binary) RPC or Restful. 以Apache Thrift为代表的二进制RPC,支持多种 ...

  5. javaScript执行环境、作用域链与闭包

    一.执行环境 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为:每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象 ...

  6. Unity3D NGUI事件监听的综合管理

    首先,将Event Listener挂在按钮上 Event Listener的源码很简单 就是利用C#的时间委托机制 注册了UI场景的事件而已 public class UIEventListener ...

  7. UML系列图2

    时序图: 用例图:

  8. 框架开发之——AngularJS+MVC+Routing开发步骤总结——5.14

    1.延续MVC的观念:包括路由映射的编写,Controller的内容,具体View页面js的分离. 2.结合AngularJS做前端,后端使用Node.Js的写法,引入MVC框架,进行快速的开发. 步 ...

  9. 笔记:Maven 生命周期与命令行详解

    Maven 拥有三套相互独立的生命周期,分别是 clean.default和site,clean 生命周期的目的是清理项目,default 生命周期的目的是构建项目,而site生命周期的目的是建立项目 ...

  10. Day3---------Linux操作系统目录结构

    一.Linux系统文件树状结构 "/" 根目录 "." 当前目录 .. 父目录,既上一层目录 pwd 显示当前目录路径 ls. = ls = ls/ 显示当前目 ...