×

如何为Minized创建可工作的PYNQ系统

消耗积分:2 | 格式:zip | 大小:60.81 MB | 2022-12-14

张红

分享资料个

描述

逐步了解如何为 Minized 创建可工作的 PYNQ 系统。

小型化作为低成本电路板为新开发人员提供了一个尝试新功能或了解 FPGA 工作原理的切入点。本教程重点介绍如何使用现有工具为 Minized 创建 PYNQ 图像,以便您对其进行修改、创建叠加和学习!

那么,让我们开始吧!

准备环境

第一步是为我们的 PYNQ 项目创建 BSP。为此,您可以为 Minized下载预构建的 BSP或按照我的其他教程进行操作

注意:我在创建本教程时跳过了一些步骤。如果您感到迷茫,请查看我以前的项目,如果您找不到解决方案,请发表评论。
注意:如果你需要干净的 Ubuntu,你可以在这里下载一个:https ://1drv.ms/u/s!As37uPW_18jehTkymDK5EiuWbuC1?e=JBEgII密码是“root”。用oracle虚拟盒子打开就行了。运行“setup_host.sh”(在 PYNQ 脚本文件夹中)并安装 Xilinx 工具。

您将需要创建一些工作目录。例如称它为 Avnet。现在下载 Minized 的存储库并创建模板项目。

mkdir Avnet;
cd Avnet;
git clone https://github.com/Avnet/bdf.git --branch master;
git clone https://github.com/Avnet/hdl.git --branch 2019.1;
git clone https://github.com/Avnet/petalinux.git --branch 2019.1;

并从 Xilinx GitHub 下载 PYNQ 映像。

git clone https://github.com/Xilinx/PYNQ.git -b image_v2.5.4
poYBAGOAMhmAXS5NAAArkraGC38689.png
 

修改 Vivado 项目

使用 Vivado 2019.1 打开项目

poYBAGOX27iAPmAeAAArBm-EswM749.png
 

开放式块设计

poYBAGOX28mAeHxjAAMlMo4mamk405.png
 

移除不必要的 IP 核并禁用未使用的 Zynq 接口(不必要)。

将“sdcard_mgr”IP 核添加到模块设计中。

pYYBAGOX28uAbTE3AAAukE3T5sw657.png
 

将“sdcard_mgr”连接到 Zynq EMIO 接口。

pYYBAGOX286AVhg9AAEcxh54hpM363.png
 

并修改约束:

打开“minized_petalinux.xdc”并添加:

#SD - CARD
set_property PACKAGE_PIN L15 [get_ports PMOD1_PIN1_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN1_0]

set_property PACKAGE_PIN M15 [get_ports PMOD1_PIN2_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN2_0]

set_property PACKAGE_PIN L14 [get_ports PMOD1_PIN3_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN3_0]

set_property PACKAGE_PIN M14 [get_ports PMOD1_PIN4_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN4_0]

set_property PACKAGE_PIN K13 [get_ports PMOD1_PIN7_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN7_0]

set_property PACKAGE_PIN L13 [get_ports PMOD1_PIN8_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN8_0]

set_property PACKAGE_PIN N13 [get_ports PMOD1_PIN9_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN9_0]

set_property PACKAGE_PIN N14 [get_ports PMOD1_PIN10_0]
set_property IOSTANDARD LVCMOS33 [get_ports PMOD1_PIN10_0]

保存模块设计并生成新的比特流。

单击文件 → 导出 → 硬件以导出项目 HDF。

这将创建新的“MINIZED_wrapper.hdf”

注意:我已经删除了 previous.hdf 文件
poYBAGOX29GARudFAABGV6hQhWc517.png
 

修改 Petalinux 项目

注意:如果你不想玩 petalinux,你可以跳过这整个部分。只需下载一个 Avnet 的 BSP 并将其用于创建 PYNQ rootfs,使用它对 EMMC 内存进行编程(使用最小的 petalinux 映像和 USB 记忆棒并将文件复制到 EMMC)。使用其他引导到 EMMC 的 BOOT.bin。稍后 PYNQ 将下载覆盖并覆盖由 BOOT.bin 编程的比特流。

转到由 Avnet 脚本或 BSP 创建的 petalinux 项目

petalinux-create -t project -n MzPynq --template zynq

更改 petalinux 项目的引用 HDF。

此命令将在 MINIZED.sdk 文件夹中搜索.hdf 文件。如果有两个.hdf 文件,petalinux 会返回错误。

petalinux-config --get-hw-description=../../../hdl/Projects/minized_petalinux/MINIZED_2019_1/MINIZED.sdk/

(可选)启用 FPGA 管理器。

 
 
 
poYBAGOX29eADwycAABU3RLm-6U296.png
 
1 / 2
 

转到图像打包配置并将根文件系统更改为 SD 卡。Image.ub 将在 /dev/mmcblk0p2 分区上搜索 rootfs。

 
 
 
pYYBAGOX29uAQSn4AABWk4ATgJ4950.png
 
1 / 2
 

修改引导顺序以在主 sd 上查找“image.ub”

 
 
 
poYBAGOX296AIU-AAABWzxY5JMI384.png
 
1 / 4
 

保存并退出。

转到 MzPynq → 项目规范 → 元用户 → recipes-bsp → 设备树 → system_user.dtsi

cd project-spec/meta-user/recipes-bsp/device-tree/
gedit system_user.dtsi

并更改设备树

/include/ "system-conf.dtsi"
/ {

	aliases {
		serial0 = &uart1;
		serial1 = &uart0;
	};
		
};

&flash0 {
	compatible = "micron,n25q128", "jedec,spi-nor";
};

/{
	usb_phy0: usb_phy@0 {
		compatible = "ulpi-phy";
		#phy-cells = <0>;
		reg = <0xe0002000 0x1000>;
		view-port = <0x0170>;
		drv-vbus;
	};
};

&usb0 {
	dr_mode = "otg";
	usb-phy = <&usb_phy0>;
} ;

&qspi {
	#address-cells = <1>;
	#size-cells = <0>;
	flash0: flash@0 {
		compatible = "micron,m25p80";
		reg = <0x0>;
		#address-cells = <1>;
		#size-cells = <1>;
		spi-max-frequency = <50000000>;
	};
};

/* SD Interface for PMOD */
&sdhci0 {
	status = "okay"; 
	non-removeable;
	bus-width= <4>;
	xlnx,has-cd = <0x0>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;

	mmccard: mmccard@0 {
		reg = <0>;
		compatible = "mmc-card";
		/* broken-hpi; */
	};
};

/ {

};

保存并

petalinux-build

如果在打开 FPGA 管理器的情况下构建通过,这意味着也应该在 PYNQ 中构建。

您可以关闭 FPGA 管理器并根据修改后的硬件创建新的 BSP

petalinux-config
petalinux-build;
petalinux-package --bsp -p /home/bartek/Minized_Pynq/Avnet/petalinux/projects/MzPynq -o Minized_Pynq

使用打包的 BOOT.bin 最小化程序

cd ../../../../images/linux/;
petalinux-package --boot --fpga --fsbl --u-boot --force;
program_flash -f BOOT.BIN -fsbl zynq_fsbl.elf -flash_type qspi-x4-single;

对 PYNQ 的修改

Note:如果您在 Avnet BSP 的 EMMC 内存上构建 Minized PYNQ。您应该将 pynq_bootargs.dtsi 更改为“/dev/mmcblk1p2”。
pYYBAGOX2-KAB4uFAABTD2coo5g865.png
 
pYYBAGOX2-aAFQdZAABFIPY3CCs885.png
 

转到 PYNQ → sdbuild → 脚本并运行“setup_host.sh”

这用于下载构建 PYNQ 映像所需的所有文件和程序。

cd PYNQ/sdbuild/scripts/
bash setup_host.sh

脚本完成后,您可以获取 Vivado 和 SDK 进行构建:

source /home/bartek/petalinux20191/settings.sh;
source /home/bartek/Xilinx/Vivado/2019.1/settings64.sh;
source /home/bartek/Xilinx/SDK/2019.1/settings64.sh;

转到 PYNQ → sdbuild 文件夹并尝试:

make BOARDS=Pynq-Z1 

查看 PYNQ 是否设置正确。

 

我将使用现有的 PYNQ 2.5 imagerootfs for arm

注意:点击此链接可将 Image 快速移植到 PYNQ。

转到 PYNQ → sdbuild 并输入:

bash scripts/image_from_prebuilt.sh MinizedPynq Minized_Pynq.bsp arm bionic.arm.2.5.img;

构建完成后,您将在 PYNQ → sdbuild → 输出中拥有输出文件夹

使用您的最小化 PYNQ 图像。

poYBAGOX2-qAXViQAAAy3K_7xWs174.png
 

双击它并恢复 SD-CARD 上的磁盘映像。

flash完成后输入

sudo gparted

并调整第二个分区的大小以使用设备上剩余的所有可用空间。

PYNQ 的密码是“xilinx”

poYBAGOX2-6ASPlWAAAgec1W9cc504.png
 

现在我们可以将 USB HUB 与相机和 WI-FI 适配器连接起来。

pYYBAGOX2_GAZOfzAAAq_8XIy_A464.png
 
poYBAGOX2_OAT7qDAAAoBLxozq8823.png
 

使用 nano 生成“wpa_supplicant.conf”

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

和写:

network={
    ssid="SSID"
    psk="PASSWORD"
}

现在加载“wpa_supplicant”并等待 ip-address

sudo wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -B
sudo dhclient wlan0

Jupyter notebook 应该在你的 Minized 上运行。

pYYBAGOX2_aAIphcAAAoGaXYiB8412.png
 

打开浏览器并连接到 PYNQ。使用 wlan0 接口中列出的 IP。

http://192.168.0.102:9090

成功!

poYBAGOX2_iAQyHTAABEBIG2Qqk146.png
 

创建名为“Testing.ipynb”的新文件。该脚本将占用 10 帧并在 Jupyter 笔记本中显示,每帧延迟 1 秒。

import os
import cv2
import time
from matplotlib import pyplot as plt
from IPython.display import clear_output

cap = cv2.VideoCapture(0)
if cap.isOpened():
    print("Camera opened")
else:
    print("Failed to open camera")

i = 1
while (i < 10):
    check, frame = cap.read()
    if check == False:
        print(f"Error reading frame! {i}")
    else:
        plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
    i += 1
    time.sleep(1)
    clear_output(wait=True)

现在让我们试试 PYNQ 覆盖是否正常工作。

打开公共文件夹并运行“overlay_download”

poYBAGOX2_2AdZP6AABwlJHwxNI662.png
 

在脚本中运行第一个单元格

pYYBAGOX3AaAPD--AABQ-TrOyJ4406.png
 

如您所见,没有加载默认覆盖,我们使用的是来自 BOOT.BIN 的比特流。

让我们加载一个叠加层。为此,我将使用 Vivado 生成的文件。

cd /Avnet/hdl/Projects/minized_petalinux/MINIZED_2019_1/

并寻找“hw_handoff”文件夹

pYYBAGOX3AiAEfEXAAA1HuZQFRU008.png
 

此外,我们将需要比特流。只需在 Vivado 项目文件夹中搜索。

poYBAGOX3AqAAGGlAAARqLQ7Pqw397.png
 

重命名这些文件,以便 PYNQ 知道它们引用的是同一个覆盖。

poYBAGOX3A-AX6YzAAAOqGmuhxg196.png
 

将这些文件上传到 Jupyter Notebook

pYYBAGOX3BSAYx8_AABRwTN-F6Q329.png
 

修改脚本以加载新的覆盖。

poYBAGOX3BeANWYpAADFJ9f_iL4353.png
 
poYBAGOX3B6AKPPwAACeVc5fWHA975.png
 

概括

所以这些是如何为 Minized 创建 PYNQ 的基础知识。

在下一个教程中,我将尝试向您展示如何为 EMMC 内存创建 PYNQ。

小心!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !