Vivado 2024.2 AXI GPIO 全流程开发指南从硬件设计到 Procise 调试在嵌入式系统开发中Zynq-7000系列SoC因其独特的ARM处理器与可编程逻辑结合特性成为许多高性能应用的理想选择。本文将详细介绍如何在Vivado 2024.2环境下通过AXI GPIO实现PS端对PL端4路LED的控制并解决Vivado与Procise工具链的兼容性问题。1. 工程创建与基础配置首先启动Vivado 2024.2创建一个新工程选择File Project New指定工程名称如axi_emio_led选择RTL Project类型在器件选择界面输入xc7z015clg485-2筛选目标器件提示对于JFMQL15T开发板确保选择的器件型号与硬件完全匹配避免后续引脚兼容性问题。创建完成后我们需要建立Block Design作为设计核心# 在Vivado Tcl控制台快速创建Block Design create_bd_design -dir ./system.bd2. Zynq处理器系统配置在Block Design中添加Zynq7 Processing System IP核这是整个设计的核心右键点击Diagram空白处选择Add IP搜索并添加ZYNQ7 Processing System双击IP核进入配置界面关键配置参数如下表所示配置项推荐设置说明DDR控制器禁用本示例不需要DDR内存UART1启用保留调试接口GPIO EMIO启用用于PJTAG调试接口时钟配置50MHz提供PL端工作时钟# 通过Tcl脚本快速配置Zynq PS set_property CONFIG.PCW_USE_M_AXI_GP0 1 [get_bd_cells processing_system7_0] set_property CONFIG.PCW_USE_S_AXI_GP0 0 [get_bd_cells processing_system7_0]3. AXI GPIO IP核添加与配置现在添加关键的AXI GPIO IP核再次点击Add IP搜索并添加AXI GPIO双击IP核进行参数配置GPIO宽度设置为4对应4路LED勾选All Outputs启用中断可选配置完成后使用自动连接功能完成基础连线点击Diagram上方的Run Connection Automation勾选所有可选连接项确认时钟和复位信号正确连接此时Block Design应包含以下主要元素Zynq PSAXI InterconnectProcessor System ResetAXI GPIO4. EMIO PJTAG调试接口添加为方便调试我们添加EMIO PJTAG接口在Zynq PS配置中找到MIO Configuration展开GPIO EMIO选项设置宽度为4TCK/TDI/TDO/TMS在Block Design中将EMIO GPIO端口引出注意PJTAG接口的添加应在引脚约束之前完成否则需要重新生成顶层文件。5. 引脚约束文件编写创建并配置XDC约束文件是硬件设计的关键步骤。以下是一个典型的约束示例# LED引脚约束根据实际开发板原理图调整 set_property IOSTANDARD LVCMOS25 [get_ports {pl_led_tri_o[*]}] set_property PACKAGE_PIN E2 [get_ports {pl_led_tri_o[0]}] set_property PACKAGE_PIN D6 [get_ports {pl_led_tri_o[1]}] set_property PACKAGE_PIN F5 [get_ports {pl_led_tri_o[2]}] set_property PACKAGE_PIN E3 [get_ports {pl_led_tri_o[3]}] # PJTAG引脚约束 set_property IOSTANDARD LVCMOS33 [get_ports PJTAG_0_t*] set_property PACKAGE_PIN AB11 [get_ports PJTAG_0_tck] set_property PACKAGE_PIN V11 [get_ports PJTAG_0_tdi] set_property PACKAGE_PIN W11 [get_ports PJTAG_0_tdo] set_property PACKAGE_PIN AA11 [get_ports PJTAG_0_tms]6. 生成比特流与硬件导出完成设计后按以下步骤生成可编程文件右键Block Design选择Generate Output Products创建HDL Wrapper选择Let Vivado manage选项运行Generate Bitstream比特流生成成功后导出硬件平台选择File Export Export Hardware勾选Include bitstream选项指定导出路径建议使用默认位置7. Procise工程迁移与兼容性处理Procise作为国产化开发环境与Vivado的协作需要特别注意以下环节7.1 工程导入基础步骤启动Procise创建空白工程选择PSOC FROM VIVADO导入路径指定之前导出的XSA文件位置7.2 关键驱动文件移植将Vivado SDK生成的BSP驱动文件复制到Procise工程目录xil_assert.hxil_types.hxparameters.hxstatus.hxil_assert.cGPIO驱动相关文件位于libsrc/gpio_v4_3/src在IAR中建立对应文件结构Procise_Project/ └── SDK/ └── system_platform_FM_QL_bsp/ ├── include/ # 放置.h文件 └── src/ # 放置.c文件7.3 三大兼容性修改点xparameters.h修改// 注释掉冲突的头文件引用 // #include xparameters_ps.hxgpio_l.h接口重定向// 替换原有IO操作宏定义 #define XGpio_In32(addr) FMSH_ReadReg(addr,0x0) #define XGpio_Out32(addr,data) FMSH_WriteReg(addr,0x0,data)主程序时钟初始化// 添加Procise特有的时钟配置 FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x008, 0xDF0D767BU); FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x838, 0xf); FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x004, 0xDF0D767BU);8. IAR应用程序开发最后在Procise中创建IAR工程并编写LED控制代码#include xgpio.h int FGpioOutputExample(void) { XGpio led_out; u32 led_channel 1; int status; status XGpio_Initialize(led_out, 0); if(status ! XST_SUCCESS) return XST_FAILURE; XGpio_SetDataDirection(led_out, led_channel, 0x0); // 全部设置为输出 while(1) { // 流水灯效果 for(int i0; i4; i) { XGpio_DiscreteWrite(led_out, led_channel, 1i); delay_ms(200); // 自定义延时函数 } } return 0; }完成编译后通过Procise的调试接口下载程序到开发板即可观察到PL端的4路LED按顺序闪烁。整个开发流程涵盖了从硬件设计到软件调试的全过程特别针对Vivado与Procise的协作问题提供了实用解决方案。
Vivado 2024.2 AXI GPIO 配置实战:Zynq-7000 PS 控制 4 路 PL LED 闪烁(含 Procise 调试)
发布时间:2026/7/9 18:30:20
Vivado 2024.2 AXI GPIO 全流程开发指南从硬件设计到 Procise 调试在嵌入式系统开发中Zynq-7000系列SoC因其独特的ARM处理器与可编程逻辑结合特性成为许多高性能应用的理想选择。本文将详细介绍如何在Vivado 2024.2环境下通过AXI GPIO实现PS端对PL端4路LED的控制并解决Vivado与Procise工具链的兼容性问题。1. 工程创建与基础配置首先启动Vivado 2024.2创建一个新工程选择File Project New指定工程名称如axi_emio_led选择RTL Project类型在器件选择界面输入xc7z015clg485-2筛选目标器件提示对于JFMQL15T开发板确保选择的器件型号与硬件完全匹配避免后续引脚兼容性问题。创建完成后我们需要建立Block Design作为设计核心# 在Vivado Tcl控制台快速创建Block Design create_bd_design -dir ./system.bd2. Zynq处理器系统配置在Block Design中添加Zynq7 Processing System IP核这是整个设计的核心右键点击Diagram空白处选择Add IP搜索并添加ZYNQ7 Processing System双击IP核进入配置界面关键配置参数如下表所示配置项推荐设置说明DDR控制器禁用本示例不需要DDR内存UART1启用保留调试接口GPIO EMIO启用用于PJTAG调试接口时钟配置50MHz提供PL端工作时钟# 通过Tcl脚本快速配置Zynq PS set_property CONFIG.PCW_USE_M_AXI_GP0 1 [get_bd_cells processing_system7_0] set_property CONFIG.PCW_USE_S_AXI_GP0 0 [get_bd_cells processing_system7_0]3. AXI GPIO IP核添加与配置现在添加关键的AXI GPIO IP核再次点击Add IP搜索并添加AXI GPIO双击IP核进行参数配置GPIO宽度设置为4对应4路LED勾选All Outputs启用中断可选配置完成后使用自动连接功能完成基础连线点击Diagram上方的Run Connection Automation勾选所有可选连接项确认时钟和复位信号正确连接此时Block Design应包含以下主要元素Zynq PSAXI InterconnectProcessor System ResetAXI GPIO4. EMIO PJTAG调试接口添加为方便调试我们添加EMIO PJTAG接口在Zynq PS配置中找到MIO Configuration展开GPIO EMIO选项设置宽度为4TCK/TDI/TDO/TMS在Block Design中将EMIO GPIO端口引出注意PJTAG接口的添加应在引脚约束之前完成否则需要重新生成顶层文件。5. 引脚约束文件编写创建并配置XDC约束文件是硬件设计的关键步骤。以下是一个典型的约束示例# LED引脚约束根据实际开发板原理图调整 set_property IOSTANDARD LVCMOS25 [get_ports {pl_led_tri_o[*]}] set_property PACKAGE_PIN E2 [get_ports {pl_led_tri_o[0]}] set_property PACKAGE_PIN D6 [get_ports {pl_led_tri_o[1]}] set_property PACKAGE_PIN F5 [get_ports {pl_led_tri_o[2]}] set_property PACKAGE_PIN E3 [get_ports {pl_led_tri_o[3]}] # PJTAG引脚约束 set_property IOSTANDARD LVCMOS33 [get_ports PJTAG_0_t*] set_property PACKAGE_PIN AB11 [get_ports PJTAG_0_tck] set_property PACKAGE_PIN V11 [get_ports PJTAG_0_tdi] set_property PACKAGE_PIN W11 [get_ports PJTAG_0_tdo] set_property PACKAGE_PIN AA11 [get_ports PJTAG_0_tms]6. 生成比特流与硬件导出完成设计后按以下步骤生成可编程文件右键Block Design选择Generate Output Products创建HDL Wrapper选择Let Vivado manage选项运行Generate Bitstream比特流生成成功后导出硬件平台选择File Export Export Hardware勾选Include bitstream选项指定导出路径建议使用默认位置7. Procise工程迁移与兼容性处理Procise作为国产化开发环境与Vivado的协作需要特别注意以下环节7.1 工程导入基础步骤启动Procise创建空白工程选择PSOC FROM VIVADO导入路径指定之前导出的XSA文件位置7.2 关键驱动文件移植将Vivado SDK生成的BSP驱动文件复制到Procise工程目录xil_assert.hxil_types.hxparameters.hxstatus.hxil_assert.cGPIO驱动相关文件位于libsrc/gpio_v4_3/src在IAR中建立对应文件结构Procise_Project/ └── SDK/ └── system_platform_FM_QL_bsp/ ├── include/ # 放置.h文件 └── src/ # 放置.c文件7.3 三大兼容性修改点xparameters.h修改// 注释掉冲突的头文件引用 // #include xparameters_ps.hxgpio_l.h接口重定向// 替换原有IO操作宏定义 #define XGpio_In32(addr) FMSH_ReadReg(addr,0x0) #define XGpio_Out32(addr,data) FMSH_WriteReg(addr,0x0,data)主程序时钟初始化// 添加Procise特有的时钟配置 FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x008, 0xDF0D767BU); FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x838, 0xf); FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x004, 0xDF0D767BU);8. IAR应用程序开发最后在Procise中创建IAR工程并编写LED控制代码#include xgpio.h int FGpioOutputExample(void) { XGpio led_out; u32 led_channel 1; int status; status XGpio_Initialize(led_out, 0); if(status ! XST_SUCCESS) return XST_FAILURE; XGpio_SetDataDirection(led_out, led_channel, 0x0); // 全部设置为输出 while(1) { // 流水灯效果 for(int i0; i4; i) { XGpio_DiscreteWrite(led_out, led_channel, 1i); delay_ms(200); // 自定义延时函数 } } return 0; }完成编译后通过Procise的调试接口下载程序到开发板即可观察到PL端的4路LED按顺序闪烁。整个开发流程涵盖了从硬件设计到软件调试的全过程特别针对Vivado与Procise的协作问题提供了实用解决方案。