ZYNQ 动态更新bit流 ZynqMP PL Programming

项目最后的几个事宜,本以为很简单,结果深坑不浅。公司为某部分设计的XX板,设计128MB QSPI Flash,无SD卡。先需要在内核启动后动态加载bit流,使用脚本完成。参考Xilinx官方的方案,应该比较简单,但实际上差点坑出翔。
本文内容简介,没时间写的太详细!!!

1 配置步骤

1.1 Kernel Configuration

The following config options has to be enabled in order to use FPGA Manager, Please note that these options are enabled by default through xilinx_zynqmp_defconfig except for the fpga debugfs option. If user wants to test readback feature they have enable it.

Zynq UltraScale+ MPSoC FPGA Manager Configuration:

Select: Device Drivers → FPGA Configuration Framework → Xilinx Zynq UltraScale+ MPSoC FPGA
在这里插入图片描述In-order to test readback feature user needs to enable FPGA debug fs

Select: Device Drivers → FPGA Configuration Framework --> FPGA debug fs
在这里插入图片描述DT overlay ConfigFS interface Configuration:
In-order to load Bitstream with DTBO user needs to enable below options

Select: Device Drivers --> Device Tree and Open Firmware support
在这里插入图片描述Contiguous Memory Allocator Configuration:

CONFIG_CMA

Select: Kernel Features --> Contiguous Memory Allocator
此处地址有出入,根据实际情况确定!
在这里插入图片描述CONFIG_DMA_CMA

Select: Device Drivers --> Generic Driver Options → DMA Contiguous Memory Allocator
在这里插入图片描述Devicetree

pcap {
       compatible = "xlnx,zynqmp-pcap-fpga";
       clocks = <&clk 41>;
};
 
fpga_full: fpga-full {
       compatible = "fpga-region";
       fpga-mgr = <&pcap>;
       #address-cells = <2>;
       #size-cells = <2>;
};

2 步骤

2.1 生成bin文件

From 2018.3 release onwards FPGA Manager supports loading of vivado and bootgen generated Bitstream and Bin files vivadobootgen[1]

Note: For releases earlier to 2018.3 FPGA Manager was capable of loading only bootgen generated bin files. bootgen

.Bit Format

Generated by Vivado 

.Bin Format

Generated by Vivado 
Generated by Bootgen by converting vivado generated bit file
Bootgen Command to generate bin file:
# bootgen -image Bitstream.bif -arch zynqmp -o ./Bitstream.bin -w (2018.1 or later releases)
# bootgen -image Bitstream.bif -arch zynqmp -process_Bitstream bin (2017.4 and earlier releases)
Bitstream.bif file should contains the below lines:
all:
{
        [destination_device = pl] Full.bit (or)  Partial.bit /* Bitstream file name */
}

2.2 Vivado生成bin文件

在vivado TCL 命令行中输入命令:dir
查看当前目录

在这里插入图片描述目录如上,修改bif文件,添加bit文件绝对路径:

all:
{
	[destination_device = pl] C:\Users\Administrator\Desktop\wt31003_bram_test_success_9.17\wt31003.runs\impl_1\design_1_wrapper.bit	/* Bitstream file name */
}

输入:bootgen -image all.bif -arch zynqmp -o ./Bitstream.bin -w
完成bin文件制作。

2.3 在petalinux中生成bin文件

只写一句话:
petalinux命令默认根目录为petalinux根目录。
然后使用bootgen命令生成bin文件。
在这里插入图片描述

3 更新bit流

	因使用的位RAM类型的文件系统,更新bit文件总是出错:
	1.内核死掉
	2. 串口终端死掉
	3.其他错误

3.1 挂接jffs2文件系统,更新bit文件成功

先更接ram类型文件系统,在挂接jffs2文件系统,方法不可行(此处没有行通)。
查看以前的RAM文件系统:

在这里插入图片描述发现文件系统目录有缺少。以后在研究。
而且使用jffs2文件系统,linux内核运行非常卡顿。

建议:

使用SD卡,ext4文件系统

如有疑问,联系QQ:810871522
参考:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841847/Solution+ZynqMP+PL+Programming

<think>好的,我现在需要帮用户解决在Vitis SDK调试时遇到的Labtools 27-3361错误。用户提到直接烧录bit文件后使用ILA能正常抓AXI信号,但通过Vitis SDK调试时出现此问题。首先,我得理解这个错误的原因。根据错误信息,调试中心核心未被检测到,可能涉及时钟或扫描链配置的问题。 首先,检查调试hub的时钟是否正确。调试hub需要一个自由运行的时钟,也就是在FPGA配置后始终处于活动状态且不受其他逻辑影响的时钟。用户在使用Vitis SDK调试时,可能涉及到处理器的时钟管理,例如当使用Zynq或MicroBlaze时,如果时钟由处理器控制,可能在调试过程中被关闭,导致调试hub无法工作。需要确认设计中的调试hub是否连接到一个始终有效的时钟源,比如外部晶振或不受处理器控制的时钟。 其次,BSCAN_SWITCH_USER_MASK属性可能需要调整。这个属性指定了扫描链的用户掩码,必须与设计中的设置一致。用户需要根据实际设计的扫描链配置来设置这个属性。可以通过打开已实现的design,使用Tcl命令获取C_USER_SCAN_CHAIN属性值,然后在硬件管理器里设置对应的掩码值。 接下来,分步骤思考解决方案。首先,检查时钟连接是否正确,尤其是调试hub的时钟是否在SDK调试时依然有效。如果设计中使用了处理器的时钟,可能需要切换到另一个自由运行的时钟源。其次,在Vivado中确认扫描链设置,并更新硬件管理器的BSCAN_SWITCH_USER_MASK属性。此外,生成bit时是否启用了调试功能,需要确保在Vivado中正确设置了调试相关的IP,如ILA和调试hub,并在生成bit时包含这些配置。 另外,用户可能在Vitis中执行了软件复位或处理器复位,导致调试模块被禁用。这时候需要确保在调试过程中不进行复位操作,或者在硬件设计中添加保持调试时钟和复位信号有效的逻辑。 最后,建议用户检查Vivado和Vitis的版本兼容性,以及参考官方文档UG908,确认所有步骤符合推荐做法。如果问题依旧,可能需要更详细的日志或尝试重新生成bit文件并确保所有调试IP正确集成。</think>在Vitis SDK调试时出现`Labtools 27-3361`错误,通常与调试时钟或扫描链配置有关。以下是分步解决方案: --- ### **1. 检查调试时钟 (Free-Running Clock)** - **核心问题**:调试Hub(`dbg_hub`)需要一个**始终有效且不受逻辑控制**的时钟。 - **排查步骤**: 1. 打开Vivado工程,检查`dbg_hub`连接的时钟: - 该时钟必须来自**不受处理器控制**的源(如外部晶振或PL端独立时钟)。 - 若使用Zynq PS时钟,需确保PS配置中该时钟在调试期间保持活跃。 2. 在Block Design中: - 确认`dbg_hub`的时钟与ILA时钟一致。 - 若使用Zynq,检查`FCLK_CLK0`是否在PS配置中设为**非关断模式**。 --- ### **2. 更新BSCAN_SWITCH_USER_MASK属性** - **核心问题**:硬件扫描链掩码与设计不匹配。 - **操作步骤**: 1. **获取设计中的扫描链配置**: - 在Vivado Tcl控制台输入: ```tcl get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub] ``` - 记录输出的十六进制值(如`0x2`)。 2. **设置硬件管理器属性**: - 在Vivado Hardware Manager中,右键选择FPGA设备 → **Device Properties** → 设置`BSCAN_SWITCH_USER_MASK`为上述值。 3. **刷新设备**:点击**Refresh Device**重新连接。 --- ### **3. 确认Bitstream生成配置** - **关键点**:确保Bitstream包含调试逻辑。 1. 在Vivado中: - 打开**Synthesis**和**Implementation**设计。 - 检查`debug_hub`和ILA核是否被正确插入。 2. 生成Bitstream前: - 确认`set_property BITSTREAM.CONFIG.ENABLE_SIGNAL_DETECT YES [current_design]`已启用。 --- ### **4. Vitis SDK调试配置** - **常见陷阱**:SDK可能触发复位或时钟关断。 1. 在Vitis中: - 禁用**Reset entire system**选项(在Debug Configuration → Target Setup)。 2. 在硬件设计中: - 添加`Processor System Reset`核,并确保`aux_reset`不控制调试模块时钟。 --- ### **5. 其他可能性** - **FPGA供电问题**:确保JTAG供电稳定。 - **Vivado/Vitis版本兼容性**:升级至最新版本(如2023.1)。 --- ### **总结步骤** 1. 检查调试时钟是否自由运行。 2. 更新`BSCAN_SWITCH_USER_MASK`并刷新设备。 3. 重新生成Bitstream并烧录。 4. 调整Vitis调试配置,禁用系统复位。 若仍报错,建议提供以下信息进一步分析: - Vivado工程中`dbg_hub`的时钟路径截图。 - `get_debug_cores`的完整输出结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值