逐步了解如何为 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
使用 Vivado 2019.1 打开项目
开放式块设计
移除不必要的 IP 核并禁用未使用的 Zynq 接口(不必要)。
将“sdcard_mgr”IP 核添加到模块设计中。
将“sdcard_mgr”连接到 Zynq EMIO 接口。
并修改约束:
打开“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 文件
注意:如果你不想玩 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 管理器。
转到图像打包配置并将根文件系统更改为 SD 卡。Image.ub 将在 /dev/mmcblk0p2 分区上搜索 rootfs。
修改引导顺序以在主 sd 上查找“image.ub”
保存并退出。
转到 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;
Note:
如果您在 Avnet BSP 的 EMMC 内存上构建 Minized PYNQ。您应该将 pynq_bootargs.dtsi 更改为“/dev/mmcblk1p2”。
转到 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 图像。
双击它并恢复 SD-CARD 上的磁盘映像。
flash完成后输入
sudo gparted
并调整第二个分区的大小以使用设备上剩余的所有可用空间。
PYNQ 的密码是“xilinx”
现在我们可以将 USB HUB 与相机和 WI-FI 适配器连接起来。
使用 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 上运行。
打开浏览器并连接到 PYNQ。使用 wlan0 接口中列出的 IP。
http://192.168.0.102:9090
成功!
创建名为“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”
在脚本中运行第一个单元格
如您所见,没有加载默认覆盖,我们使用的是来自 BOOT.BIN 的比特流。
让我们加载一个叠加层。为此,我将使用 Vivado 生成的文件。
cd /Avnet/hdl/Projects/minized_petalinux/MINIZED_2019_1/
并寻找“hw_handoff”文件夹
此外,我们将需要比特流。只需在 Vivado 项目文件夹中搜索。
重命名这些文件,以便 PYNQ 知道它们引用的是同一个覆盖。
将这些文件上传到 Jupyter Notebook
修改脚本以加载新的覆盖。
所以这些是如何为 Minized 创建 PYNQ 的基础知识。
在下一个教程中,我将尝试向您展示如何为 EMMC 内存创建 PYNQ。
小心!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !