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。

sudo yum install '*stdc*'
sudo yum install libsigc++ libsigc++.i686 qt.i686 qt
sudo yum groups mark convert
sudo yum group install "Fedora Eclipse"
sudo yum install qgit wireshark wireshark-gnome
sudo yum install python
sudo yum install scapy
sudo yum install fxload
sudo yum install bison byacc flex
sudo yum install glibc.i686
sudo yum install kernel-devel
sudo yum install libusb-devel
sudo yum install libpcap-devel
sudo yum install libnet-devel

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

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

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

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

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

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

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

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

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

然后执行命令

source bashrc_addon_NetFPGA_10G

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

echo $NF_ROOT

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

Step3、 Build the Libraries and IP

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

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

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

cd $NF_ROOT
make hwtestlib

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

make cml_cores

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

Step4、编译一个工程

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

cd $NF_DESIGN_DIR
make

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

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

Step5、连接FPGA到主机

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

如图所示

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

驱动安装步骤

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

之后用命令lsusb可以看到

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

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

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

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

Step6、烧写程序到FPGA中

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

make download

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

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

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

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

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

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

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

cd $NF_ROOT
source bashrc_addon_NetFPGA_10G
make hwtestlib

安装必要组件

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

编译驱动

cd $NF_DESIGN_DIR/sw/host/driver
make

安装驱动

sudo insmod nf10.ko

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

sudo ifconfig nf0 up
sudo ifconfig nf1 up
sudo ifconfig nf2 up
sudo ifconfig nf3 up

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

[netfpga@localhost bin]$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 10 bytes 940 (940.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 940 (940.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 nf0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.1 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::24e:46ff:fe31:3000 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:00 txqueuelen 1000 (Ethernet)
RX packets 377 bytes 528796 (516.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 377 bytes 534074 (521.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 nf1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.201.1 netmask 255.255.255.0 broadcast 192.168.201.255
inet6 fe80::24e:46ff:fe31:3001 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:01 txqueuelen 1000 (Ethernet)
RX packets 377 bytes 528796 (516.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 377 bytes 534074 (521.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 nf2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.202.1 netmask 255.255.255.0 broadcast 192.168.202.255
inet6 fe80::24e:46ff:fe31:3002 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:02 txqueuelen 1000 (Ethernet)
RX packets 371 bytes 528372 (515.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 377 bytes 534074 (521.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 nf3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.203.1 netmask 255.255.255.0 broadcast 192.168.203.255
inet6 fe80::24e:46ff:fe31:3003 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:03 txqueuelen 1000 (Ethernet)
RX packets 370 bytes 528316 (515.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 377 bytes 534074 (521.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 p4p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.105 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::922b:34ff:feba:728b prefixlen 64 scopeid 0x20<link>
ether 90:2b:34:ba:72:8b txqueuelen 1000 (Ethernet)
RX packets 3421 bytes 2595675 (2.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5648 bytes 583390 (569.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Step8、Making Registers

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

$ cd $NF_DESIGN_DIR/hw
$ make regs

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

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

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

然后在去执行上述步骤

Step9、Verify the Design in Hardware with the Test Infrastructure

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

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

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

Running global setup...  PASS
Running test both_loopback_maxsize... PASS
Running global teardown... PASS

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

[netfpga@localhost bin]$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 10 bytes 940 (940.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 940 (940.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 nf0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.1 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::24e:46ff:fe31:3000 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:00 txqueuelen 1000 (Ethernet)
RX packets 427 bytes 603796 (589.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 427 bytes 609774 (595.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 nf1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.201.1 netmask 255.255.255.0 broadcast 192.168.201.255
inet6 fe80::24e:46ff:fe31:3001 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:01 txqueuelen 1000 (Ethernet)
RX packets 427 bytes 603796 (589.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 427 bytes 609774 (595.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 nf2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.202.1 netmask 255.255.255.0 broadcast 192.168.202.255
inet6 fe80::24e:46ff:fe31:3002 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:02 txqueuelen 1000 (Ethernet)
RX packets 421 bytes 603372 (589.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 427 bytes 609774 (595.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 nf3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.203.1 netmask 255.255.255.0 broadcast 192.168.203.255
inet6 fe80::24e:46ff:fe31:3003 prefixlen 64 scopeid 0x20<link>
ether 00:4e:46:31:30:03 txqueuelen 1000 (Ethernet)
RX packets 420 bytes 603316 (589.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 427 bytes 609774 (595.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 30 p4p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.105 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::922b:34ff:feba:728b prefixlen 64 scopeid 0x20<link>
ether 90:2b:34:ba:72:8b txqueuelen 1000 (Ethernet)
RX packets 3441 bytes 2598545 (2.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5697 bytes 590789 (576.9 KiB)
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. 【Tyvj 1728】普通平衡树

    题面 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(若有多个相同的数,因输 ...

  2. 八年架构师大咖首次揭秘,年薪50W秘籍!

    序言 我是土生土长的老北京人,你们肯定觉得我很有钱,为啥呢? 因为觉得我是北京户口,其实你们错了,我的房子是靠我自己买的,父母基本上没帮到我什么,当然,我也不需要吧! 我只想说,作为一名程序员,我很自 ...

  3. wso2ESB - 在eclipse中启用调试模式

    最近在使用wso2ESB,记录一下使用过程中碰到的坑,先写一篇调试的(前面的工具安装就不介绍了,既然想用调试了说明你已经看过一部分文档了),以后可能会介绍其他功能的使用. 在wso2 ei的文档中,介 ...

  4. 为什么覆写equals必须要覆写hashCode?

    ============================================= 原文链接: 为什么覆写equals必须要覆写hashCode? 转载请注明出处! ============= ...

  5. Angular4---起步----环境配置安装@angular/cli

    学习angular,首先要搭建起angular的手脚架@angular/cli.首先需要NodeJS环境. 1.安装NodeJS 首先检查电脑是否安装了NodeJS环境,打开cmd命令行,运行node ...

  6. python计算机基础-Day1

    计算机基础-Day1 一.计算机基础 首先Python是一门编程语言 语言: 那什么是语言?语言就是一种事物与另一种事物沟通的介质. 所以说编程语言是程序员跟计算机沟通的介质,那么为什么要跟计算机沟通 ...

  7. 访问不了firefox附加组件页面怎么办

    最近重新使用火狐浏览器的时候发现访问不了firefox附加组件页面了,一直是一个空白的页面,估计是被墙的原因,于是网上查了查,说是修改hosts即可,我修改后就可以正常访问了.现在分享出来: 在hos ...

  8. business expressions(二)

    1,to give someone a heads up = to inform someone about something important ("heads up") be ...

  9. JavaSE语法基础(3)---函数、数组

    JavaSE语法基础(3)---函数.数组 函数的概念:实现特定功能的一段代码,可反复使用. 函数的出现减少代码冗余,提高代码的复用性,可读性,可维护性,可以使每个功能模块独立起来,方便分工合作. 函 ...

  10. Android开发从GC root分析内存泄漏

    我们常说的垃圾回收机制中会提到GC Roots这个词,也就是Java虚拟机中所有引用的根对象.我们都知道,垃圾回收器不会回收GC Roots以及那些被它们间接引用的对象.但是,对于GC Roots的定 ...