别再只生成bit文件了!ZYNQ纯PL程序固化,手把手教你从Vivado到Vitis生成BOOT.BIN

张开发
2026/4/15 22:58:58 15 分钟阅读

分享文章

别再只生成bit文件了!ZYNQ纯PL程序固化,手把手教你从Vivado到Vitis生成BOOT.BIN
从Vivado到VitisZYNQ纯PL程序固化的完整实战指南在嵌入式系统开发领域Xilinx ZYNQ系列芯片因其独特的ARM处理器(PS)与可编程逻辑(PL)结合架构而广受欢迎。然而许多从传统FPGA转向ZYNQ开发的工程师常常会遇到一个令人困惑的问题为什么在Vivado中生成的bit文件无法直接固化到ZYNQ芯片中这个看似简单的疑问背后隐藏着ZYNQ架构与传统FPGA在程序固化机制上的本质区别。1. ZYNQ程序固化的核心挑战与传统的FPGA不同ZYNQ芯片的非易失性存储器如QSPI Flash、SD卡等是通过PS端的专用引脚连接的。这意味着存储访问控制权这些存储设备由PS端的ARM处理器直接驱动PL端无法独立访问启动流程差异ZYNQ上电后首先运行的是PS端的启动代码而非直接加载PL配置文件格式要求需要将bit流文件与启动引导程序(FSBL)打包成特定的BOOT.BIN格式关键理解ZYNQ的固化过程本质上是教会PS端如何配置PL而非传统FPGA的直接bit流加载。下表对比了传统FPGA与ZYNQ在程序固化方面的主要差异特性传统FPGAZYNQ芯片配置文件格式.bit文件BOOT.BIN存储介质访问直接通过JTAG/专用引脚必须通过PS端驱动启动流程直接加载配置PS先启动再配置PL所需文件单个bit文件bit文件 FSBL 可选组件2. Vivado环境配置关键步骤让我们以一个简单的LED控制项目为例逐步演示完整的固化流程。假设我们已经在Vivado中完成了RTL代码编写和功能验证。2.1 创建Block Design在Vivado中创建新项目时务必选择正确的ZYNQ芯片型号通过IP Integrator创建Block Designcreate_bd_design system添加ZYNQ Processing System IP核在Diagram窗口点击按钮搜索并添加ZYNQ7 Processing System2.2 关键IP核配置对于纯PL开发需要特别注意以下配置ZYNQ PS配置# 关闭未使用的AXI接口 set_property CONFIG.PCW_USE_M_AXI_GP0 0 [get_bd_cells processing_system7_0] # 启用QSPI Flash控制器 set_property CONFIG.PCW_QSPI_PERIPHERAL_ENABLE 1 [get_bd_cells processing_system7_0] set_property CONFIG.PCW_QSPI_GRP_SINGLE_SS_ENABLE 1 [get_bd_cells processing_system7_0]DDR配置根据开发板型号选择# 示例Micron MT41K256M16 RE-125 set_property CONFIG.PCW_UIPARAM_DDR_PARTNO {MT41K256M16 RE-125} [get_bd_cells processing_system7_0]2.3 设计集成与验证将自定义RTL模块添加到Block Design中使用Run Connection Automation自动完成时钟和复位连接关键验证点确保PL时钟源来自ZYNQ的FCLK验证所有外部端口已正确引出执行Validate Design检查连接完整性完成后的设计应该类似以下结构ZYNQ PS ├── FCLK_CLK0 → PL模块时钟输入 ├── FCLK_RESET0_N → PL模块复位 └── QSPI Flash接口已启用 PL模块 ├── 用户逻辑 └── 外部I/O端口3. 生成硬件平台文件完成Block Design后需要依次执行以下步骤生成输出产品右键Block Design选择Generate Output Products保持默认选项点击Generate创建HDL包装器make_wrapper -files [get_files design_1.bd] -top add_files -norecurse design_1_wrapper.v常规实现流程引脚约束XDC文件综合与实现生成bit流文件导出硬件平台选择File → Export → Export Hardware务必勾选Include bitstream选项建议使用有意义的命名如led_control_wrapper.xsa4. Vitis环境中的Boot Image创建切换到Vitis环境后需要创建两个关键组件4.1 创建FSBL工程FSBL(First Stage Boot Loader)是ZYNQ启动过程中的第一个软件组件负责初始化PS端外设加载PL配置跳转到用户应用程序创建步骤# 在Vitis命令行中执行 app create -name fsbl -platform led_control_wrapper.xsa -template {Zynq FSBL} -lang C4.2 生成BOOT.BIN编译FSBL工程生成.elf文件通过GUI或命令行创建Boot Imagebootgen -image boot.bif -arch zynq -o BOOT.BIN -w on对应的BIF文件内容示例the_ROM_image: { [bootloader]fsbl.elf system.bit }常见问题排查找不到elf文件确认FSBL工程已成功编译bit文件路径错误检查硬件平台导出时是否包含bit流启动模式不匹配确保BIF文件中组件顺序正确5. Flash编程与验证最后一步是将生成的BOOT.BIN固化到开发板的非易失性存储器中硬件连接检查确认JTAG连接正常开发板电源稳定启动模式设置为JTAG用于编程编程操作在Vitis中选择Xilinx → Program Flash选择正确的BOOT.BIN文件目标存储器选择QSPI Flash启动验证断电后切换启动模式为QSPI重新上电观察PL功能是否正常加载可通过串口监控FSBL启动日志如有需要实用技巧首次编程建议勾选Verify after flash选项确保数据写入正确。遇到问题时可尝试降低Flash编程时钟频率。在实际项目中我遇到过多次因Flash型号不匹配导致的固化失败。这时需要返回Vivado重新检查ZYNQ PS中的QSPI配置确保与开发板上的Flash芯片完全兼容。另一个常见陷阱是忘记在Block Design中启用QSPI控制器——这个看似简单的疏忽可能导致数小时的调试时间浪费。

更多文章