一、系统运行硬件
本镜像通过对官方PYNQ开源工程(https://github.com/Xilinx/PYNQ),版本2.7移植修改得到,可以在矿板EBAZ4203上运行,EBAZ4205不能运行。
开发板某鱼某宝都有,补焊好的100来块,原生态的几十块,性价比最高的开发板,没有之一,可以学的东西不要太多,可以学FPGA,嵌入式Linux,可以跑软核的Risc-V蜂鸟E203。以上镜像资源由卖家提供。
二、版本说明
选用了PYNQ 2.7版本,相对比较稳定,BUG比先前版本要少很多,开发环境的版本也比较新。对应的PL端开发环境为Vitis/Vivado2020.2,官方说明中,PYNQ的版本必须与Vitis/Vivado的版本对应,使用其他版本请自行尝试。系统自带的Python版本为3.8.2。
实现了PYNQ基本功能,包括emio,axi-gpio,mimo,interrupt,dma。(hdmi接口与应用功能暂时没有实现,有需要的请自行移植)提供了基础Vivado工程,可以在PYNQ上进行二次开发。
提供了一系列的测试例程 ,包括emio,axi-gpio,mimo,interrupt,dma和经典的Pynq_Helloworld。
三、系统的安装
1、下载镜像文件:EBAZ4203_PYNQ-2.7.0.part1.rar和EBAZ4203_PYNQ-2.7.0.part2.rar(文件太大,只能分卷压缩后上传网盘),解压后得到EBAZ4203_PYNQ-2.7.0.img,大小为7.47G。
2、安装img烧录工具,imager_1.7.4.exe(借用树莓派提供的官方工具),启动后如下图所示,点1处,选“使用自定义镜像”,选中EBAZ4203_PYNQ-2.7.0.img文件;点2处,选择TF所在盘,然后点“烧录”。(烧录会擦除原来TF卡中内容,请谨慎操作!)建议使用至少为16GB容量的TF卡进行安装。
3、烧录完成后,拔下TF读卡器,再次插入电脑,会找到2个分区,1个为Windows可以访问的分区,另一个为Linux分区(Windows中不能直接访问)。打开Windows可以访问的分区,将网盘中的BOOT.BIN替换掉原来分区中的同名文件。至此TF卡完成安装
4、将TF卡插入开发板,连接好电源与串口。设置串口终端软件putty,如下图红框处,串口号根据实际情况进行设置,并打开串口,然后给开发板上电。
5、上电后可以看到系统正常引导,第1次引导可能时间比较久,请耐心等待。偶尔上电启动会死机,切断电源重新上电即可。正常进入系统如下图所示,默认以用户xilinx登录系统,密码也为xilinx(sudo时需要使用密码)。默认不是以root登录的,所以进行设置与操作时,不要忘记在命令前使用sudo。版本信息如红框处所示:
6、使用ifconfig可以显示当前系统的IP地址信息,IP默认有两个,一个是静态IP,固定为192.168.2.99,另一个默认为动态分配IP,假如连接路由器,可以通过DHCP自动获取IP地址。可以使用SSH的登录模式,默认SSH远程登录已经开启。
7、连接网线,设置好PC的IP地址(不会设置的请自行学习,此处不赘述)同样使用putty软件,填入板子的IP地址后,通过SSH可以登录板子。
出现登录界面,输入用户名:xilinx,密码:xilinx可以登录系统,如下图所示:
8、开启jupyter环境。联网正常后,打开浏览器,输入地址:开发板IP地址:9090,可以打开jupyter环境,第1次会要求登录,输入密码:xilinx。jupyter的使用网上资料很多,在此不再赘述。
9、默认板子开启了samba共享,开发时与主机PC间传输文件非常方便,要访问板子的存储空间可以在Windows中“我的电脑”界面下输入:\板子的IP地址,实现访问。如下图,会出现一个xilinx共享位置。
双击后,如下图所示,其中jupyter_notebooks就是jupyter开发环境默认的根目录,后面我们的demo程序会复制到这个目录下。
四、常用设置
1、静态IP的设置
默认系统会用动态IP,连接路由后每次启动IP都会不一样,非常麻烦,为了开发方便,一般会设置为静态IP地址。
(1)用sudo nano修改文件:/etc/network/interfaces.d/eth0
原文件内容:
auto eth0
iface eth0 inet dhcp
auto eth0:1
iface eth0:1 inet static
address 192.168.2.99
netmask 255.255.255.0
修改为(红色部分):
auto eth0
iface eth0 inet static
address 192.168.10.145 #设置的静态IP地址
netmask 255.255.255.0 #设置的网络掩码
gateway 192.168.10.1 #设置的网关
dns-nameservers 192.168.10.1 #设置的DNS
auto eth0:1
iface eth0:1 inet static
address 192.168.2.99
netmask 255.255.255.0
(2)设置DNS
用sudo nano修改文件:/etc/systemd/resolved.conf。在文件最开头加上DNS地址。
[Resolve]
DNS=114.114.114.114
DNS=8.8.8.8
DNS=192.168.10.1
……
保存后,使用命令sudo systemctl restart systemd-resolved.service,使设置生效。
2、开启root登录系统
在开发过程中,用xilinx登录一直要sudo,比较麻烦,可以开启root账号登录功能,这样就可以为所欲为了。
(1)用串口登录系统,在xilinx用户中用如下命令设置root密码:
sudo passwd root
(2)然后切换到root用户,输入刚刚设置的密码,这样串口可以用root登录
su -l root
(3)开启root的SSH登陆功能:
编辑SSH配置文件/etc/ssh/sshd_config,在其中加上一句:PermitRootLogin yes
五、demo程序说明
1、demo程序安装
将网盘中demo.rar文件解压后,通过samba共享复制到jupyter_notebooks目录中,如下图示。然后用jupyter环境打开每个notebook运行即可。
在jupyter中打开demo目录如下图,每个目录对应一个例程:
2、例程简介:IO口的demo,按键与LED的排线连接与测试板子时一样
(1)axigpio:axigpio IP操作IO口
(2)dma:PS与PL间DMA回环传输测试
(3)emio:emio gpio的操作
(4)interrupt:定时器与按键中断的使用
(5)mmio:mmio模块的使用
(6)pynq_helloworld:移植了官方提供的经典pynq例程,比较了单独使用PS与PS+PL加速后对图片进行缩放的性能差别。详见https://github.com/Xilinx/PYNQ-HelloWorld
3、每个例程对应的Vivado工程在文件:demo_vivado工程.rar中,其中的base为PYNQ移植的基础工程,对应各个例子的Vivado工程在对应的例程名称目录中,可以作为二次开发的参考。运行例程Vivado工程不用复制到板子上,工程生成的*.bit与*.hwh文件已经包含在demo目录中了。
视频效果:https://www.bilibili.com/video/BV1oKeFeBEP5