ZYNQ纯PL端设计:从Bit到Boot.bin的固化实战解析

张开发
2026/4/11 12:33:28 15 分钟阅读

分享文章

ZYNQ纯PL端设计:从Bit到Boot.bin的固化实战解析
1. ZYNQ纯PL端固化的核心挑战第一次接触ZYNQ的开发者经常会遇到一个困惑为什么Vivado生成的bit文件不能像传统FPGA那样直接烧录这其实涉及到ZYNQ芯片的架构特点。ZYNQ本质上是ARM处理器PS和FPGAPL的混合体其非易失性存储器如QSPI Flash的控制器完全由PS端管理。这就导致纯PL端设计在固化时必须通过PS端的引导程序FSBL来完成初始化工作。我刚开始做ZYNQ开发时在这个环节踩过不少坑。最典型的就是直接拿着bit文件去烧录器里操作结果发现根本找不到Flash设备。后来才明白ZYNQ的Flash引脚根本就不归PL管而是PS端的专属资源。这就好比你想用电脑的USB接口却试图绕过操作系统直接操作硬件寄存器——理论上可行但实际操作中几乎不可能。2. 硬件平台搭建要点2.1 开发板选型与配置以正点原子领航者开发板为例其核心是XC7Z020芯片板载128MB DDR3和16MB QSPI Flash。在Vivado中创建工程时有三处关键配置容易出错第一是ZYNQ处理器配置界面需要特别注意时钟设置。虽然纯PL设计不涉及PS端编程但FSBL运行时需要正确的时钟源。我建议直接使用默认的33.333MHz PS时钟避免后续出现时序问题。第二是QSPI Flash的型号选择。开发板通常使用Winbond或Micron的芯片在PS Peripheral I/O配置页中必须勾选Quad SPI Flash选项。曾经有个项目因为选错了Flash型号导致固化后无法启动排查了整整两天。第三是DDR配置。FSBL运行时需要临时存储空间即便PL程序完全不使用DDR这里也必须正确配置。建议对照开发板手册确认芯片型号和时序参数。有个偷懒的技巧直接导入官方提供的预设配置如正点原子提供的tcl脚本。2.2 纯PL设计的特殊处理与传统FPGA设计不同ZYNQ的纯PL开发需要特别注意PS-PL隔离。在Block Design中双击ZYNQ IP核在PS-PL Configuration选项卡里关闭所有AXI接口在Clock Configuration中保留FCLK_CLK0输出用作PL时钟确保PS Peripheral中的UART和GPIO保持禁用状态我曾遇到过一个诡异现象PL逻辑运行时偶尔会崩溃。后来发现是因为无意中开启了PS端的看门狗定时器。所以建议在PS Firmware配置页里禁用所有不必要的PS功能。3. 软件工具链实战3.1 Vivado工程导出关键步骤生成bit文件后需要特别注意导出设置。点击File Export Hardware时必须勾选Include bitstream选项建议同时勾选Local to project这样后续Vitis工程可以直接引用导出路径不要包含中文或空格否则Vitis可能无法识别有个容易忽略的细节导出前建议先执行Validate Design。我遇到过因为约束文件冲突导致导出的硬件描述不完整的情况。3.2 Vitis中的FSBL工程创建在Vitis中新建平台工程时有个隐藏技巧先创建普通应用工程再修改为FSBL。具体操作# 创建平台工程 xsct platform create -name {平台名称} -hw {xsa文件路径} # 创建FSBL应用 xsct app create -name fsbl -platform {平台名称} -template {Zynq FSBL} -proc ps7_cortexa9_0如果遇到missing FSBL template错误通常是Vitis安装不完整导致的。可以尝试重新运行Xilinx安装器的Modify功能确保选中了所有ZYNQ相关组件。3.3 Boot Image生成技巧创建启动镜像时文件顺序至关重要。标准的BIF文件应该这样组织//arch zynq; split false; format BIN the_ROM_image: { [bootloader] fsbl.elf system.bit [destination_device pl] pl.elf # 纯PL设计可省略 }常见的一个误区是直接使用GUI界面添加文件。我建议先用文本编辑器编写BIF文件再通过Import功能加载。这样可以避免Vitis自动调整文件顺序导致启动失败。4. Flash烧录的避坑指南4.1 硬件连接检查清单烧录前务必确认开发板供电稳定建议使用原装电源JTAG接口接触良好可尝试重新插拔启动模式跳线帽设置为JTAG模式通常为MIO50, MIO40, MIO30串口终端已关闭避免占用Flash访问权限有个实用的诊断技巧在Vitis中运行Target Connections测试。如果能看到ARM Cortex-A9的调试接口说明JTAG连接正常。4.2 烧录参数优化在Program Flash对话框中有两个关键参数影响成功率Flash Type必须与硬件完全匹配如s25fl128sVerify建议首次烧录时勾选但后续可关闭以节省时间对于大容量bit文件建议将Erase before programming改为Sector。全片擦除虽然更彻底但耗时可能长达10分钟。5. 固化验证与调试5.1 启动模式切换烧录完成后需要将启动模式改为QSPI通常为MIO51, MIO40, MIO31。这里有个细节容易被忽视部分开发板需要完全断电后再上电仅复位可能无法加载新固件。5.2 故障排查方法如果固化后PL逻辑没有运行可以按以下步骤排查用示波器检查QSPI Flash的CLK信号应有约50MHz时钟通过Vitis读取Flash内容确认BOOT.BIN位于0x00000000地址在Vivado中重新生成bit文件检查是否启用了压缩建议开启我最近遇到过一个典型案例固化后LED闪烁频率变慢。最终发现是因为Flash读取速度未优化在FSBL配置中开启QSPI的DDR模式和更高时钟频率后问题解决。

更多文章