PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)

本篇主要介绍,以比较底层的方法操作外设leds、switches和buttons的方法,以及这段时间对PYNQ学习的一些个人见解。


目录

 

前言

正文

一、Vivado部分

二、板上验证部分

结尾


前言

前面的一个帖子https://blog.csdn.net/CSD_N_csdn/article/details/105666949讲解了如何操作外设leds、switches和buttons等的方法,其使用的方法是导入pynq自带的base.bit,此文件中包含的资源比较全面,像一个黑匣子,当然,如果你只是想使用其中的一些模块,这个文件就会显得繁杂。此篇我们同样是使用硬件设计(Hardware design)的方法,针对外设,生成简单的bit,直接通过PS的GPIO管脚来控制外设。

正文

根据本篇的实现流程,这里主要分为两个主要部分,所需的环境:Vivado软件(版本不限)、PYNQ-Z2开发板。

一、Vivado部分

(1)创建Vivado工程、选择板卡型号、创建块设计(Create Block Design)

这里,我的工程命名为project_gpio,板卡型号选择Boards-->pynq-z2(此板卡的文件包在我前面的帖子中有链接),然后-->Next-->Finish。

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第1张图片

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第2张图片

创建块设计(Create Block Design),Create Block Design-->OK,如图

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第3张图片

(2)添加所需的IP核,并且配置每个添加的IP核

首先,添加ZYNQ7PS核,然后点击Run Block Automation,点击OK。

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第4张图片

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第5张图片

双击该核进行配置,配置更改如下:

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第6张图片

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第7张图片

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第8张图片

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第9张图片

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第10张图片

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第11张图片

然后,添加截位的IP核Slice,并对此核配置完如图:

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第12张图片

最后,添加IP核concat,并对此核进行配置完成如图:
PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第13张图片

(3)连线,添加端口,添加管脚约束文件

把三个IP核手动连线,完成后如图所示:

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第14张图片

添加外设的端口,分别是leds、buttons、switches,添加完成后如图:

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第15张图片

添加管脚约束文件(这个切记,一定要约束上一步添加的端口,不然在生成bit文件的时候会报错!),新建一个管脚约束文件gpio,打开文件,在里面添加如下:(这个XDC文件资料链接里会上传)

set_property -dict {PACKAGE_PIN D19 IOSTANDARD LVCMOS33} [get_ports {buttons[0]}]
set_property -dict {PACKAGE_PIN D20 IOSTANDARD LVCMOS33} [get_ports {buttons[1]}]
set_property -dict {PACKAGE_PIN L20 IOSTANDARD LVCMOS33} [get_ports {buttons[2]}]
set_property -dict {PACKAGE_PIN L19 IOSTANDARD LVCMOS33} [get_ports {buttons[3]}]
set_property -dict {PACKAGE_PIN R14 IOSTANDARD LVCMOS33} [get_ports {leds[0]}]
set_property -dict {PACKAGE_PIN P14 IOSTANDARD LVCMOS33} [get_ports {leds[1]}]
set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports {leds[2]}]
set_property -dict {PACKAGE_PIN M14 IOSTANDARD LVCMOS33} [get_ports {leds[3]}]
set_property -dict {PACKAGE_PIN M20 IOSTANDARD LVCMOS33} [get_ports {switches[0]}]
set_property -dict {PACKAGE_PIN M19 IOSTANDARD LVCMOS33} [get_ports {switches[1]}]

点击保存即可。

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第16张图片

(4)生成bit文件,生成tcl文件

右键点击design_1,生成HDL封装,点击OK。(此处如果出现警告,可以忽略不管,点OK就行)

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第17张图片

点击Generate Bitstream,生成bit文件,这个需要等待较长时间。(如果出现警告,点OK就可以了)

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第18张图片

上述完成后,点击Export Block Design,生成tcl文件。

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第19张图片

二、板上验证部分

(1)在以上部分的vivado工程文件夹中找到bit文件、hwh文件、tcl文件,改为相同的名字,存放在同一个文件夹下。(这步操作和前面定制加速overlay方法相同)

我这里新建了一个design_gpio文件夹,将三个文件改名后放了进去。

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第20张图片

(2)将整个文件夹复制到板卡的jupyter_notebooks目录下,如图

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第21张图片

(3)通过浏览器访问jupyter,打开ps_gpio.ipynb文件(这个稍后也会上传),然后开始运行cell,注意代码中的文件路径是否需要修改!接下来的验证就可以通过文档提示完成了,这里不再赘述。

PYNQ-Z2调试笔记:化繁为简,从一个简单的例子深刻理解PYNQ(PS端GPIO直接控制外设leds、switches和buttons)_第22张图片

需要强调的是,在这里的代码都是直接对gpio_pin进行操作,设置输入或输出,pin的编号等,所以应该是对外设的最直接操作。比开头所说的那篇帖子中,定义类,实例化的等要简单许多,也更容易理解。

结尾

结尾说三点:

(1)首先,很抱歉,这段时间更帖不及时,之前给自己定的目标是每周至少一篇,以后请大家监督。这段时间网课占用了部分时间,而且对pynq的学习断断续续,阅读官方手册收效甚微,所以下一步会调整方向!

(2)从本篇帖子开始,后续发帖会更加简洁,默认读者对之前的帖子有所了解,不再详述重复操作,这样也有助于大家提高读帖效率。

(3)下一阶段,小编准备实际着手一个项目,在实践中不断补充知识,积累经验。


资料链接:https://pan.baidu.com/s/1MkQg6TjFgNjZQOU7KWq43Q 
提取码:uusn


欢迎下方评论区交流,韭菜会及时回复的。如果文章帮助到了您,请点赞鼓励,谢谢!

你可能感兴趣的:(PYNQ-Z2调试)