Xilinx Zynq 是Arm 处理器(PS)和FPGA (PL) 相结合的混合SOC。如何通过程序下载PL的bit 文件,特别是下载局部重构分区的bit 文件是我关心的话题。不过涉及这方面的文档实在是太多,太复杂了。PCAP,ICAP 等概念一大堆。而网络上的文章大多是介绍操作流程,介绍背景知识的文章非常少。本文记录一些自己的读书笔记,目的是介绍一些“基本知识”和经过自己尝试的过程。

其实在Zynq 的Linux环境下,PL 的bit文件下载变得非常简单,甚至于不需要编写程序,只要使用shell 命令就能轻松地完成。它有两种编程方式:

  • 通过FSBL(First Stage Boot-loader), U-Boot 在引导时写入
  • 通过Linux FPGA Manager 在系统引导后写入

Linux FPGA Manager

FPGA 管理器是linux内核一部分(我也是第一次发现,被惊呆了),它导出一组函数,用于使用映像(image)对 FPGA进行编程。它们的API 与制造商无关。所有制造商的细节都隐藏在一个低级驱动程序中,该驱动程序向内核注册了一组操作。FPGA 图像数据本身是非常特定于制造商的,但对我们而言,它只是二进制数据。FPGA 管理器内核不会解析它。

下图是Xilinx ZYNQ Linux FPGA Manager 的架构。

从上图看,FPGA Manager Driver 的底层是XIlinx FPGA 的Driver。实际上,Linux FPGA Manager 也支持altera 的Arria-V/Cyclone-V/Stratix-V和Arria-10 FPGA 。只要安装了Altera 的相关驱动就可以。在这里,我们只讨论Xilinx Zynq Linux 的FPGA 管理。

下载流程

第一步:design_1_wrapper.bit 转换成为design_1_wrapper.bit.bin 文件

vivado 中点击 Generate bitsstream。

它将会在项目的….runs\impl_ 的目录下产生一个design_1_wrapper.bit文件。

这个文件不能直接地下载到FPGA 中。需要将design_1_wrapper.bit 转换成为design_1_wrapper.bit.bin 文件。具体的步骤如下:

1 在 C:\Users\asus\AppData\Roaming\Xilinx\Vivado 目录下构建Full_Bitstream.bif文件

它的内容是:

all:
{F:\workspace\petalinux_gpio\petalinux_gpio.runs\impl_1\design_1_wrapper.bit /* Bitstream file name */
}

我相信将Full_Bitsstream.bif 构建在impl_1 目录中,只要在下面的命令中使用绝对路径,也是OK的。

2 在vivado 的Tsl Consol 下输入下列命令:

bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin

vivado 的界面为:

bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin
WARNING: [Common 17-259] Unknown Tcl command 'bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin' sending command to the OS shell for execution. It is recommended to use 'exec' to send the command to the OS shell.****** Xilinx Bootgen v2021.2**** Build date : Oct 19 2021-03:13:27** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.[INFO]   : Bootimage generated successfully

注意: 网络上也有人建议在vivado 的项目的setting 中 bitstream 中勾选 bit file 。但是我好像没有尝试成功。

完成之后,会在F:\workspace\petalinux_gpio\petalinux_gpio.runs\impl_1目录下产生一个design_1_wrapper.bit.bin 文件。

3 将这个文件Copy 到 SDCard 上。

4 将sdcard 插入开发板的sd card 卡座上,上电启动。进行下面的操作

第二步:在ZYNQ 的Petalinux 命令行中完成下载

全部Bits流的下载步骤

Set flags for Full Bitstream

echo 0 > /sys/class/fpga_manager/fpga0/flags

加载SD 卡

mount /dev/mmcblk0 /media/

载入bitstream

mkdir -p /lib/firmware

cp /media/design_1_wrapper.bit.bin /lib/firmware/

echo design_1_wrapper.bit.bin > /sys/class/fpga_manager/fpga0/firmware

局部bits 流的编程步骤

Set flags for Partial Bitstream

echo 1 > /sys/class/fpga_manager/fpga0/flags

Load the Bitstream Partial Bitstream

mkdir -p /lib/firmware

cp /media/partail_wrapper.bit.bin /lib/firmware/

echo partail_wrapper.bit.bin  > /sys/class/fpga_manager/fpga0/firmware

下面是我操作的记录

root@petalinux_gpio:~# echo 0 > /sys/class/fpga_manager/fpga0/flags
root@petalinux_gpio:~# mount /dev/mmcblk0 /media/
root@petalinux_gpio:~# mkdir -p /lib/firmware
root@petalinux_gpio:~# cp /media/design_1_wrapper.bit.bin /lib/firmware/design_1_
_wrapper.bit.bin
root@petalinux_gpio:~# echo design_1_wrapper.bit.bin > /sys/class/fpga_manager/fp
pga0/firmware
fpga_manager fpga0: writing design_1_wrapper.bit.bin to Xilinx Zynq FPGA Manager
root@petalinux_gpio:~#

注意:如果没有将design_1_wrapper.bit 转换成为design_1_wrapper.bit.bin 文件,上述流程会出错!

root@petalinux_gpio:~# echo system_wrapper.bit > /sys/class/fpga_manager/fpga0/fi irmware
fpga_manager fpga0: writing system_wrapper.bit to Xilinx Zynq FPGA Manager
fpga_manager fpga0: Invalid bitstream, could not find a sync word. Bitstream must be a byte swapped .bin file
fpga_manager fpga0: Error preparing FPGA for writing
-sh: echo: write error: Invalid argument

Zynq 学习笔记(4)Linux FPGA Manager相关推荐

  1. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

  2. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

  3. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程

    FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...

  4. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  5. Linux中常用的文件目录,Linux学习笔记2——Linux中常用文件目录操作命令

    ls 显示文件和目录列表 -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 mkdir 创建目录 -p 父目录不存在情况下先生成父目录 cd 切换目录 touch 生成一个空文件 e ...

  6. ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED

    ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED 总体思路 Block Design界面配置IP核并导出硬件配置 在SDK中编写C代码 下载PS和PL的联合工程到开发板 总体思路 首先需 ...

  7. Linux学习笔记之——Linux系统内部相关介绍

    Linux学习笔记之--Linux系统内部相关介绍 摘要:主要记录一些比较有用的能够帮助理解和使用Linux的知识.比如一些相关概念.没兴趣的看看就好.知道有这么个东西.注意事项.和一些常用目录的作用 ...

  8. ZYNQ学习笔记_GPIO之输入输出

    ZYNQ学习笔记_GPIO之输入输出 GPIO介绍 MIO介绍 EMIO介绍 控制GPIO接口的寄存器原理_输入输出部分 GPIO介绍 GPIO的英文全称为General-purpose input/ ...

  9. 【Linux学习笔记】Linux服务器:配置与管理samba服务器

    Linux系列文章目录 一.[linux学习笔记]红帽Linux 7.8系统在虚拟机上的安装 二.[Linux学习笔记]Linux系统的基本操作 三.[Linux学习笔记]管理Linux操作系统:用户 ...

最新文章

  1. Bash中的逻辑运算
  2. 用JScript.net写.net应用程序(转)
  3. PHPMySQL——防止SQL注入-代码片段
  4. PASSWORD,ENABLE,CONSOLE,VTY及TACACS认证顺序及区别
  5. 依图笔试2020/8/28,我是机器人(AC)、多彩珠子最长子串长度(AC)
  6. sanic官方文档解析之下载和Configuration
  7. c++ 单引号和双引号
  8. JAVA中fish什么意思,fish是什么意思_fish的翻译_音标_读音_用法_例句_爱词霸在线词典...
  9. 一步一步写算法(之prim算法 下)
  10. Flutter拓展 在Android studio中导入Flutter项目报错
  11. bigemap地图下载器优势分析
  12. 前端学习之一——关于第一次使用VSCode打开前端代码并启动问题
  13. telnet php,使用php实现telnet功能
  14. java计算机毕业设计随心淘网管理系统源代码+数据库+系统+lw文档
  15. intel服务器最新主板芯片组,英特尔服务器主板芯片组驱动程序
  16. 程序人生-Hello‘s P2P
  17. LaTeX 排版(三)——排版样式设定
  18. 89c51单片机32个心形流水灯
  19. 【Matlab 六自由度机器人】运动学逆解(附MATLAB机器人逆解代码)
  20. 深夜看了张一鸣的微博,让我越想越后怕

热门文章

  1. 共享事业,厚积薄发,切忌浮躁.
  2. 编程练习:走迷宫问题
  3. Problem 2261 浪里个浪(多起点与多终点问题)
  4. Gameres论坛里某大师的语录 (2007-7-11更新)
  5. 2.4 严格检查格式
  6. 使 WIN 10进入休眠、睡眠、关机的命令
  7. 如何获取常见位置的经纬度
  8. 【23届秋招总结】本科小学弟成功签约滴滴后端开发offer
  9. 华北电力计算机技术考研难度,华北电力大学(保定)计算机技术怎么样
  10. 珠峰登顶在即,5G如何先行?