1.前言
Xilinx的环境真是“日新月异”,3个月一升级的速度还真是让人有点受不住。一般情况下大家也不会在一个稳定版本使用后去更换新的版本,所以大家普遍用的Vivado环境都是2015.4,这个版本确实也是非常稳定的一个版本。但是最近出了最新的2017.4,好快啊,前面的版本都还没用熟呢。。
2.版本编年史
但是,我就是喜欢用新版本的!从2013年第一次开始用Xilinx的FPGA,跳过了ISE时代,直接进入了Vivado时代。基本上Xilinx每一次出新的版本我就会拿来使用。下面介绍一下各个版本的情况。
2013.3
这是我最早使用的版本,当时自己的笔记本是Win8操作系统,这个版本不能在Win8上运行,好尴尬。不得已从学校机房里借了一台台式机用来学习Vivado,被Xilinx复杂的开发流程震惊了。。。(以前用的是Altera的Quartus),一键编译的感觉还是不错,而且重要的是它有进度条,而Vivado没有。。
2013.4
用着用着Xilinx又继续出了新的2013.4版本,但依然还是那样,继续在破台式机的Win7上使用。学校的台式机真心是没有我的万元笔记本性能好。而且那时候天天就是用Vivado HLS跑仿真,那叫一个慢啊!受不了了,搜了搜,在国外论坛上找到了一个解决办法,可以让Vivado在Win8上运行了。于是连夜搞了一下,最终在半夜一点左右搞定,能够正常启动了!!oh yes!!
2014.1
继续刚才的说,那天凌晨1点钟,为了和大家分享我的经验,让大家也能够在Win8上用到Vivado,准备在OpenHW论坛上发个帖子告诉大家。结果呢?!我先去官网看了一下软件下载页面,惊了!!Xilinx出了2014.1,而且翻看了一下Release Note,赫然包括了对Microsoft Windows 8.1 64位的支持。。哎,怎么这么背。。。。没得办法,我只能讲这个新版本的消息发到了论坛上,而2013版本如何在Win8上运行也只是提了一嘴子。那天也是安装完成2014.1后都四五点了,才睡的觉。。天呐
2014.2 2014.3 2014.4 2015.1 2015.2 2015.3
这些版本都平稳过渡,没有什么特别的。
2015.4
因为项目需要使用Linux,所以开始研究官方的PetaLinux,而运气比较好,2015.4是一个十分稳定的版本,就一直用下去了。没有遇到什么大的问题。不错不错。
2016.1
因为2015.4足够稳定,没有使用这一版本。
2016.2 2016.3
2016.3是一个新的比较稳定的版本,我就从2015.4迁移过来了。但因为Digilent的一些例程用到了2016.2,不得不下载这个版本去重新创建出工程进行使用。
2016.4
Vivado还是之前的Vivado,但是PetaLinux整个大变样,感觉肯定很多Bug,所以直接没有试。据说这个版本的PetaLinux就是很坑。
2017.1
从什么时候开始不叫Vivado了,叫HLx和SDx。HLx就是之前的Vivado软件包,但是界面变得好看多了,SDx包含了SDSoC工具,就是集成了HLS并调用Vivado,而且能自行生成软硬件交互驱动的东东,很厉害。这个版本我主要学习了官方的reVISION堆栈,东西太复杂啊,不好用啊。而且里面有一些bug。
2017.2
在我使用2017.1的SDx学习reVISION不久之后,官方就更新了2017.2。我也随之更新了上来,确实一些bug得到了改善。具体有哪些bug我也忘记了。不过一个bug需要提一下。2017.1的PetaLinux可以将很多开源库直接加进内核,这样我们就不用自己进行交叉编译了,其中就有OpenCV3,但是这个OpenCV在2017.1中只能在MPSoC中编译成功,而在普通的Zynq SoC中编译会出错。果然在2017.2中这个bug修复了,可以成功编译了。我直接在ZedBoard上进行的测试,可以运行OpenCV处理代码,爽歪歪。而且我也成功的将官方发布的光流测试代码移植进了ZedBoard中,使用的是自己的外界摄像头,VGA输出,驱动也是自己写的,啊,好累。这个版本还是有些bug,但还好。比如Mixer IP的Logo的数据寄存器在1pixel/clock的模式下有一个像素的偏移~不知道后面会改掉这个bug不。
2017.3
最近有个新的项目要用到Zynq,想着就直接用最新的版本,结果被坑了。编写verilog文件的时候,发现奇卡无比!不知道什么原因,我的电脑可是i9加PCIe SSD的,不科学。所以又换回了2017.2进行工程创建,坑啊。
2017.4
过了没多久,也就是前两天,官方终于放出了2017.4的HLx,并且同时放出了2017.4的SDx。SDx直接没有2017.3的版本,估计是真的有问题吧,哈哈。因为我经常关注Xilinx的Wiki,有看到过2017.3的reVISION页面,竟然最后也变成了2017.4。而且,好像从来没有说同版本的SDx和HLx同时发布,一般都是HLx要早于SDx发布。那么我感觉2017.4的版本应该是比较稳定的吧,就压定他了。直接官网下载SDx 2017.4和PetaLinux 2017.4,不用下载HLx,因为HLx的功能在SDx中都是包含着的。
3.虚拟机安装
这个安装过程是我之前在2017.2时候做的一个纯净版Linux(安装了SDx需要的依赖库,修改了一些环境变量什么的,并没有安装任何软件),所以就拿过来直接用了。把当时的记录直接贴在这里(所以有的地方显示的是2017.2,我已经用克隆把这些名称改为了2017.4)。
SDx在Windows中使用时会受到文件路径长度的影响,所以不建议在Windows中使用。又因为有时候我还需用Cadence画电路板,所以我的电脑肯定是Windows10了,而且我不喜欢双系统切换来切换去,看来只能使用虚拟机了。SDx官方建议的Linux操作系统是Ubuntu,CentOS等,怎么说呢,Ubuntu有时候很坑,遇到过一些问题,所以在2016.3时候我就换成了CentOS,所以我将继续使用CentOS。
CentOS 7.3的安装步骤如下:
打开VMware,点击新建->新建虚拟机
选择自定义
选择光盘映像文件
设置安装路径
选择核心数量8
设置内存16GB
NAT
创建新的磁盘
硬盘设置为200GB,立即分配磁盘空间,存储为单个文件。
点击自定义硬件
USB控制器,USB兼容性选择USB 3.0
显示器选择加速3D图形,图形内存2GB
关闭后,点击完成。
系统会在硬盘上创建一个200GB的文件,时间比较长。
之前使用时候发现200GB还是有点小,最好买500GB的固态硬盘。
选择中文
点击安装位置
勾选我要配置分区,点击完成
点击:点这里自动创建他们
按下图进行配置,将root分区的50GB改为了100GB,因为软件需要安装在这个分区下面,所以50GB不够。
点击完成,接受更改
点击:软件选择
选择GNOME桌面,并添加附加选项,点击完成
点击开始安装
安装过程中可以创建用户和修改
修改ROOT密码,设置为root,点击两次完成
创建用户,勾选将此用户作为管理员,密码也设置为root
下面等待安装完成就可以了。
完成后点击重启
启动后点击许可证,接受并同意
点击网络和主机名,开启网络
点击完成配置,启动后登陆账户
根据需要进行配置
点击安装Tools
参考https://docs.vmware.com/en/VMware-Workstation-Pro/12.0/com.vmware.ws.using.doc/GUID-08BB9465-D40A-4E16-9E15-8C016CC8166F.html
技巧
1. 调整root分区大小
当硬盘空间不够用时,可以通过在VMware中添加硬盘来实现扩容。
df -h
fdisk -l
Vmware中从200G增加硬盘到400G
启动centos,以root登录
对新增加的硬盘进行分区、格式化
增加了空间的硬盘是 /dev/sda。 分区:
fdisk /dev/sda 操作 /dev/sda 的分区表
p 查看已分区数量(我看到有两个 /dev/sda1 /dev/sda2)
n 新增加一个分区
p 分区类型我们选择为主分区
分区号选3(因为1,2已经用过了,见上)
回车 默认(起始扇区)
回车 默认(结束扇区)
t 修改分区类型
选分区3
8e 修改为LVM(8e就是LVM)
w 写分区表
q 完成,退出fdisk命令
系统提示重启。
mkfs.ext3 /dev/sda3
lvm
lvm> pvcreate /dev/sda3
lvm> vgextend cl /dev/sda3
lvm> lvextend -L 250G /dev/mapper/cl-root
lvm> pvdisplay
lvm> quit
xfs_growfs /dev/cl/root
fdisk -l
df -h
reboot
2. 共享文件夹
点击菜单: 虚拟机->设置->选项->共享文件夹。
点击总是启用和添加,选择要共享的文件夹目录。
开启虚拟机后,执行指令:
$ sudo su
# mkdir /mnt/win
# vmware-hgfsclient
# /usr/bin/vmhgfs-fuse .host:/ /mnt/win -o subtype=vmhgfs-fuse,allow_other
这样就能够在/mnt/win文件夹下找到我们共享的文件夹“sw”
3. 更换下载源
$ sudo su
# cd /etc/yum.repos.d
# mv CentOS-Base.repo CentOS-Base.repo.bk
# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
# yum clean all
# yum makecache
# yum update
4. 空间不够,清除tmp文件夹
因为root目录下tmp内容过大,可能导致不能安装软件,把tmp的东西清理一下
# yum install tmpwatch
# /usr/sbin/tmpwatch -afv 3 /tmp
这样就清理了3个小时内没有用到的临时文件。
4.SDx和PetaLinux安装
- 依赖库安装
Python 3.4安装
# wget https://www.python.org/ftp/python/3.4.0/Python-3.4.0.tgz
# tar -zxf Python-3.4.0.tgz
# cd Python-3.4.0
# ./configure
# make
# sudo make install
依赖库
$ sudo su
# yum install dos2unix iproute gawk xorg-x11-server-Xvfb gcc git make net-tools ncurses-devel tftp-server zlib-devel openssl-devel flex bison libselinux gnupg wget diffstat
# yum install chrpath socat xterm autoconf libtool tar unzip texinfo SDL-devel glibc-devel glibc.i686 glib2-devel automake screen pax gzip
# yum install ocl-icd ocl-icd-devel opencl-headers kernel-headers kernel-devel gcc-c++ gcc gdb make opencv libjpeg-turbo-devel libpng12-devel python git unzip dmidecode redhat-lsb compat-libtiff3
# yum install libstdc++-static
# yum install libtiff-devel
# yum install boost-devel
# yum install gnuplot
# yum install cmake
# yum install lm_sensors
TFTP
# gedit /etc/xinetd.d/tftp
修改文本为:
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
保存退出。
开启TFTP
# systemctl start tftp.socket
# systemctl start tftp.service
修改ens33为eth0,否则会有hostid为000000000000的问题。
$ sudo su
# gedit /etc/default/grub
修改GRUB_CMDLINE_LINUX的内容
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet net.ifnames=0 biosdevname=0"
保存退出。执行指令:
grub2-mkconfig -o /boot/grub2/grub.cfg
重启后网卡就会变成eth0了。
提前设置好lincense的路径
# gedit ~/.bashrc
在文件最后添加内容:
export XILINXD_LICENSE_FILE=/opt/Xilinx/Xilinx.lic
保存退出。执行命令。
source ~/.bashrc
- 安装SDx
解压安装包后执行命令:
$ ./xsetup -b ConfigGen
$ ./xsetup
安装内容选择:
安装完成后,可能JTAG的驱动没有安装成功?或者digilent的驱动使用不了,
在命令行运行:
$ /opt/Xilinx/Vivado/2017.4/data/xicom/cable_drivers/lin64/install_script/install_drivers/install_digilent.sh
- 安装PetaLinux
执行命令:
$ sudo chmod 777 /opt
$ mkdir -p /opt/pkg/petalinux
$ sudo chmod 777 /opt/PetaLinux
$ ./petalinux-v2017.4-final-installer.run /opt/PetaLinux
这样,我们的SDx,PetaLinux的CentOS环境就装好了。在实际使用前,可以克隆一下虚拟机,之后做别的项目时就可以有一个较为纯净的版本来使用了,毕竟安装一次环境还是比较麻烦的。