PYNQ-Z2零基础学习详解

本人在学习PYNQ,想用自己的理解来解释零基础学习过程中的一些坑,同时采用非官方语言来介绍如何使用PYNQ。大家有什么问题可以给我留言。也可以关注微信公众号一起讨论,在文章末尾。

 

 

简介:PYNQ是“python productivity for zynq”的缩写,它是一块开发板,是赛灵思公司出品,能用python来简化开发赛灵思公司的zynq的芯片的。通常FPGA开发都是采用硬件描述语言的(如verilog)的。pynq实现了用python纯软件编程。片上系统SOC包含两部分,PS和PL端(是什么不知道,先记住),用Python编程,主要是对PS端的简化。

 

day 0

       搭建硬件

其实就是利用win32磁盘工具给SD卡烧录一个镜像,也即linx系统。然后将SD卡插到PYNQ-Z2里面。最后上电看一看灯的闪烁是否符合要求就行。

注意:1.通过读卡器给TF卡烧录系统后,会弹出不可用,是否格式化的窗口。点否即可。

2。供电模式要设置正确,如果使用电源适配器给PYNQ供电,要更改跳线。(USB供电的模式电流小)

3.可以直接用网线连接电脑和PYNQ,也可以通过路由器连接。通过路由器连接,PYNQ就可以上网。电脑连WIFI,电脑通过网线和PYNQ连接,PYNQ也可以上网!

 

day 1

    搭建软件环境

就是说,不能直接在pynq上编程,要在计算机上编。大概有3种方式:

1.计算机和PYNQ网线直连,进入jupyter,然后编程,把程序下载到pynq里

2.在文件管理器打开pynq的文件列表,把编号的程序拖进去

3.通过串口连接,最快,适用于没网的情况。设备里出现usb serial convert A和usb serial convert B而没有出现端口号时,可以下载个360驱动试一试。看端口下是COM几,我这次是COM10。打开串口终端,可以发送指令。可以ping一下

注意:1.使用串口时,要使用专用可传输数据的USB线,不能用仅可充电的USB线,线在PYNQ那里要确认插入进去

           2.搭建软件环境指的是在自己笔记本电脑上登陆upyter页面,这样就可以利用python在电脑上给pynq编程了。

           3.如果在打开设备管理器时,找不到com口,可以点击查看,再点击显示隐藏设备,灰色的口是没有连接的,黑色的就是正确的。

串口和路由器这两种连接方式是可以共存的

 

day 2

今天,用day1的第一种方法中的jupyter来给pynq的板子点亮第一个LED灯。

led灯直接连接到了PYNQ的PL端,为了通过python控制led,我们要先导入overlay。私以为,通过路由器连接是最好最安全的方法。是在线编程

代码如下:

from pynq.overlays.base import BaseOverlay
base_overlay = BaseOverlay("base.bit")
base_overlay.leds[0].on()
import time
while True:
    #base_overlay.leds[0].on()
    #time.sleep(0.5)
    #base_overlay.leds[0].off()
    #time.sleep(0.5)
    for i in range(0,8):
        base_overlay.rgbleds[4].write(i)
        time.sleep(0.1)

先插入overlay,再令灯闪灭。给大家介绍一些英文文档供大家学习:

 https://pynq.readthedocs.io/en/latest/index.html

https://pynq.readthedocs.io/en/latest/pynq_package/pynq.lib/pynq.lib.led.html

https://pynq.readthedocs.io/en/latest/pynq_package/pynq.lib/pynq.lib.rgbled.html

day 3

今天来学习使用拨码以及按键,会一些python语法,然后查阅文档,是很好的学习方法。该代码段功能主要是通过读取按键与拨码的值来控制灯的闪灭

from pynq.overlays.base import BaseOverlay
base_overlay = BaseOverlay("base.bit")
if (base_overlay.switches[0].read()==0 and base_overlay.switches[1].read()==0) :
    base_overlay.leds[0].on()
elif (base_overlay.switches[0].read()==0 and base_overlay.switches[1].read()==1) :
    base_overlay.leds[1].on()
elif (base_overlay.switches[0].read()==1 and base_overlay.switches[1].read()==0) :
    base_overlay.leds[2].on()
elif (base_overlay.switches[0].read()==1 and base_overlay.switches[1].read()==1) :
    base_overlay.leds[3].on()#注意python的elif和and和C语言不一样
#btn = base_overlay.buttons[0].read()#按键
#print(btn)
#sw = base_overlay.switches[0].read()
#print(sw)
#base_overlay.switches[0].wait_for_value(1)#等待拨码值为1才执行下一句
#print("switch on")
#base_overlay.buttons[0].wait_for_value(1)#等待按键值为1才执行下一句
#print("btn pressed")
import time
while 1:
    if base_overlay.buttons[0].read() == 1 :#按键
        for i in range(0,8):
            base_overlay.rgbleds[4].write(i)
            time.sleep(0.1)  

day 4

用串口shell指令,直面linux系统。用putty打开后的界面,在里面输入sudo apt-get install vim安装vim(需笔记本联网)

输入密码的时候,xilinx不显示,输入完成后直接回车即可

然后新建一个源码文件:sudo vim test.py

输入xilinx密码

就可以进入编译环境辣!

进入编译环境,先点击i进入编辑模式,默认是指令模式

最后保存,也可以下载到pynq中运行编写的代码

day 5

我们还可以参与pynq社区里的项目

从github上安装BNN社区项目出现这种情况是因为你的PYNQ没有连接路由器(也可能其他原因,反正是玄学,同样的情况第二次就不行了)。

解决方法是在通过串口连接板子的同时,电脑连路由器LAN口,PYNQ连另一个LAN口

成功界面:

以上步骤是将项目下载到pynq板子上,之后我们就可以从jupyter上运行代码辣!

 

day 7

今天基于vivado在PL端操作,之前是基于PS端。

在安装好vivado之后,需要先导入板层文件,这样开发就会变得快多了。

在创建好vivado工程之后,编程之前,加载 XDC 约束文件,控制引脚分配。

创建工程的时候,有Boards和Parts,要确认选择了Boards后选择PYNQ-Z2

用vivado的供电方式如下:

 


## 微信公众号

欢迎大家关注我的个人公众号,现阶段主要总结Robomaster相关的计算机视觉知识:Qt,C++,CMake,OpenCV等等
公众号名称:三丰杂货铺


 

 

 

 

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页