本文主要是介绍ZYBO-Z7的PYNQ框架移植测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ZYBO-Z7的PYNQ框架移植测试
在成功移植PYNQ框架到ZYBO-Z7开发板后笔者做了一个简易的test来测试PL与PS侧的交互。
移植过程参照:ZYBO-Z7开发板的PYNQ框架移植
这里笔者通过调用开发板上的四个LED和Switch来达到测试目的。
一:建立Vivado工程
与正常的开发流程相同,同样也是在Vivado中完成PL侧设计,只不过移植了PYNQ后我们可以在jupyter notebook上利用python来完成原本在SDK上进行的PS侧设计工作。
- Create block design
这一设计中需要添加一个 ZYNQ7000 以及两个 AXI GPIO IP核。
更改两个AXI GPIO中的设置如下:
进行完Automation的设计图如下:
这里设计方面基本采用默认设置,需要特别注意的是你引出的SW以及LED的交互端口的名字需与你的约束文件中一致(图中为sw和led),同时需要记住你的两个AXI GPIO IP核的命名,在之后的Python调用中会用到。 - 添加约束文件(ZYBO-Z7板的约束如下,其他开发板请参考对应的master.xdc文件):
##Switches
set_property -dict { PACKAGE_PIN G15 IOSTANDARD LVCMOS33 } [get_ports { sw[0] }]; #IO_L19N_T3_VREF_35 Sch=sw[0]
set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { sw[1] }]; #IO_L24P_T3_34 Sch=sw[1]
set_property -dict { PACKAGE_PIN W13 IOSTANDARD LVCMOS33 } [get_ports { sw[2] }]; #IO_L4N_T0_34 Sch=sw[2]
set_property -dict { PACKAGE_PIN T16 IOSTANDARD LVCMOS33 } [get_ports { sw[3] }]; #IO_L9P_T1_DQS_34 Sch=sw[3]##LEDs
set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { led[0] }]; #IO_L23P_T3_35 Sch=led[0]
set_property -dict { PACKAGE_PIN M15 IOSTANDARD LVCMOS33 } [get_ports { led[1] }]; #IO_L23N_T3_35 Sch=led[1]
set_property -dict { PACKAGE_PIN G14 IOSTANDARD LVCMOS33 } [get_ports { led[2] }]; #IO_0_35 Sch=led[2]
set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { led[3] }]; #IO_L3N_T0_DQS_AD1N_35 Sch=led[3]
- 完成后Generate HDL然后生成bit流,export hardware这些不做赘述。完成后进入工程的文件夹,找两个文件 bit 以及 bd.tcl,这里网上很多教程说的很粗率,请大家注意一定要是bd.tcl文件而不是wrapper.tcl。
- 复制出这 bit 和 tcl 这两个文件到\\PYNQ\Xilinx\pynq\overlays\ZYBO,修改名称为ZYBO.bit,ZYBO.tcl
另:文件夹路径输入\PYNQ\Xilinx可以直接访问板上文件
准备工作完成!
二:Jupyter Notebook上的编程
进入Jupyter Notebook,方法参考ZYBO-Z7开发板的PYNQ框架移植
在右上角可新建python工程
进行PS侧PL侧的交互那么一个根本问题就是我们要提供给PS侧的开发平台这个板的硬件信息,这也是Overlays所起到的作用。PYNQ官网支持的三块板子会提供Overlays包,像我们自己移植的只好自己dowaload了。这里建议大家参考一下Jupyter Notebook官方提供的Overlays使用例程,在 common/overlay_download.ipynb中。
首先我们进行硬件信息的导入,在新建的python文件中输入:
首先查看一下开关是否成功控制,这里overlay之后所跟的为你Vivado设计中开关的AXI GPIO模块名(笔者设计中为SW,不一样的请查看自己的设计自行修改):
用read命令来读取开关的输入信息,这里笔者将四个开关均处于关闭状态点击Run之后返回如下结果(其他按四位二进制换算同理,例:开启开关1则返回1,开启1,2则返回3):
开关输入读取正常。
LED的测试方法同上,如下图:
这里笔者是让LED读取SW的输入,即打开对应开关Run后便会点亮对应的LED。
框架测试结束。
小结:
Vivado实现PL侧设计,Jupyter notebook来实现PS侧控制,overlay_download中提供.bit 和 bd.tcl 文件。
Life is short, I use Python.
Fin
这篇关于ZYBO-Z7的PYNQ框架移植测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!