跳转到主要内容

为自己的板卡制作Pynq

judy 提交于

本文转载自:<span id="profileBt"><a href="https://mp.weixin.qq.com/s/dE35KGkobbUCQFDsJfywXw"&gt; OpenFPGA微信公众号</a></span>

<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3125…; alt=""></center>

Xilinx Pynq 框架允许我们将 Python 和可编程逻辑结合起来。让我们看看如何为自己的ZYNQ板卡创建 Pynq 镜像。

<strong>介绍</strong>
Python 是目前最热门的编程语言之一(Python是一种高级编程语言,由Guido van Rossum于1991年开发。它具有简洁、易读、易学的特点,被广泛应用于各个领域的软件开发。),我们希望能够在 FPGA/SoC 开发中利用使用 Python 带来的生产力红利。

Xilinx Pynq 框架允许开发人员做到这一点,利用 Python 使用可编程逻辑的进行加速。

在 Pynq 框架内,可编程逻辑设计称为overlays(覆盖层),并被视为硬件库。虽然创建新的overlays需要 FPGA 设计经验,但越来越多的开源overlays可供开发人员使用 ( http://www.pynq.io/community.html )
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3125…; alt=""></center>

然而,有时我们需要不同或自定义板的 Pynq 映像,让我们看看如何为自己的Z7010 板创建 Pynq 镜像。

<strong>创建环境</strong>
我们需要做的第一件事是创建一个虚拟机,配置如下:

<li>Ubuntu 16.04</li>
<li>4 个处理器核心</li>
<li>至少 8 G 内存</li>
<li>至少 300 G 硬盘空间</li>
<li>配置机器进行无密码 sudo 操作</li>

虚拟机启动并运行后,我们需要做的下一件事是安装构建 Pynq 所需的应用程序。

<strong>需要什么工具?</strong>
要创建 Pynq 映像,我们需要在 Linux 虚拟机上安装以下工具

<li>Vivado 2018.2</li>
<li>SDK 2018.2</li>
<li>PetaLinux 2018.2</li>

我们还需要使用以下命令从 Xilinx GitHub 克隆 Pynq 存储库。

git clone https://github.com/Xilinx/Pynq.git

<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3125…; alt=""></center>

clone Pynq 存储库后,将能够看到包含许多文件夹的 Pynq 目录。

<li>Boards - 现有主板规格、Juypter Notebook 和基础覆盖层</li>
<li>Doc - 文档来源</li>
<li>Pynq - Python 和相关的支持文件</li>
<li>SDBuild - 包含构建 Pynq 映像的所有脚本和资源</li>

要正确设置我们的构建环境,下一步是在目录中运行设置环境脚本(setup_host.sh)

Pynq/SDBuild/Scripts

<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3125…; alt=""></center>
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3125…; alt=""></center>

一旦这个脚本运行完成,接下来我们确保可以重建现有的主板(确保环境无问题)。

在这种情况下,决定重建 Pynq Z1 映像,为此我将目录更改为 SDBuild 目录并运行命令

make BOARDS=Pynq-Z1

将启动镜像创建过程
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3125…; alt=""></center>

构建过程可能需要一段时间(如果速度很慢,请检查分配给虚拟机的处理器数量)。完成后 SDBuild 目录下有一个输出目录。

在此将找到 Pynq-Z1 镜像
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3125…; alt=""></center>

现在我们知道我们可以重新创建 Pynq 镜像来开发我们的自定义镜像。

<strong>构建基础覆盖层</strong>
Pynq 构建首先需要的东西之一是基础覆盖层。对于自己的开发板,我们将使用 Pynq Z1 镜像作为起点。

打开 Vivado (2018.2) 并在 Vivado TCL 窗口中获取以下脚本。可以在目录中找到它们

boards/Pynq-Z1/base

source build_base_ip.tcl
Source base.tcl

第一个命令将生成必要的 IP,而第二个命令将在 Vivado 项目中重新创建设计。
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

现在我们需要做的就是更改设备型号(FPGA型号)。
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

根据板卡外设添加自己的外设到工程中,其中包括

<li>Pmod A</li>
<li>Pmod B</li>
<li>Tri-coloured LEDs</li>
<li>Switches (push buttons on the Cora)</li>
<li>I2C interface</li>
<li>SPI Interface</li>

然而,由于我们可用的资源较少,我们需要删除一些功能。最终的基础平台如下。
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

然后,在 Vivado 中生成bit,以确保设计符合我们的设计
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

此步骤的目的是确保新的基础平台适合 Zynq 7010 器件,并允许重新生成我们用于自定义板卡的base.tcl 。

<strong>创建新板</strong>
生成镜像之前的最后一步是在目录下创建一个新板

pynq/boards

创建新板需要创建一个以目标板命名的新目录,在本例中为 cora。

在此目录中,我们还需要创建几个目录和板规范。

电路板规格是一个文本文件,包含以下信息
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

目录是:

base - 这包含基础覆盖层和相关的设计信息 notebooks - 这包含 juypter notebooks petalinux_bsp - Linux BSP
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

使用 Pynq Z1 作为每个目录的模板,根据 Cora 板(自己的板卡)和较小的 7010 设备的需要更新 tcl、xdc 和 python 文件。

使用基本目录中的 make 脚本生成基本设计的位文件。

当上面所有操作完成后,可以使用 SDBuild 目录中的命令启动 Pynq 构建

make BOARDS=cora

同样,这需要一段时间才能结束,但结果将与之前相同

<strong>硬件测试</strong>
启动时要监控的是串口输出,通过串口打印能监控到 Pynq 的启动是否正确。
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

FPGA 启动 Pynq 映像后,下一步是检查 FPGA 能否连接到网络,以便可以访问 Jupyter notebooks。

$ ifconfig

<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

最后阶段是测试 Jupyter notebooks。在与 Pynq 位于同一网络的计算机上打开浏览器并输入网址 pynq:9090

将进入登录屏幕,密码是 xilinx
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

登录后,将看到笔记本和目录
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

一旦我们点击一个notebook,它就会开始运行,我们可以通过点击运行选项来看到正在运行的notebook。

如果需要,我们还可以在 Jupyter 环境中打开终端窗口
<center><img src="https://cdn.eetrend.com/files/2023-08/%E5%8D%9A%E5%AE%A2/100573310-3126…; alt=""></center>

看起来 Pynq 环境已在我们自己的板上启动并运行,我们现在可以根据需要开始开发解决方案和覆盖层。