XSCT/Vitis 裸机 JTAG 调试与常用命令
如果PL和PS测有交互时,更新bit流后,PS需要复位,从而让各种AXI相关的IP复位, 在vitis命令行执行,触发PS复位
dow D:/vitis/axi_dma/Debug/test.elf;con;
elf bit ltx 三种文件的关系
文件 | 作用对象 | 谁来加载 / 何时用 | 是否写入 FPGA(PL) | 对其它文件的影响 | 关键注意事项 | 常用命令/入口 |
---|---|---|---|---|---|---|
.bit | PL(FPGA 可编程逻辑) | Vivado Program Device / XSCT fpga -f / Vitis 勾选 Program FPGA 时 | 是(重配/复位 PL) | 不直接改 .elf /.ltx ,但:1) 重配后 ILA 状态清空,需用匹配的 .ltx 重新关联;2) MicroBlaze 在 PL 时会被清空,需重下 .elf | .ltx 必须与生成它的 同版 .bit 匹配;Zynq/ZynqMP 上重配 PL 期间可能影响依赖 PL 的 PS 程序 | Vivado GUI / program_hw_devices ;XSCT:fpga -f design.bit |
.ltx | ILA/VIO 调试映射(主机侧) | Vivado Hardware Manager 关联(非编程):set_property PROBES.FILE +refresh_hw_device | 否(不写入 FPGA,仅主机侧映射) | 不改 .bit /.elf ;但 换了 .bit 要用匹配的 .ltx 重新 refresh 才能看到探针 | 只是“探针→网名/位宽”的映射;加载与否不改变 PL 行为 | Vivado:Program Device 对话框选 Debug probes file;或 Tcl:set_property PROBES.FILE design.ltx; refresh_hw_device |
.elf | PS(A9/A53) 或 PL 内的 MicroBlaze | Vitis/XSCT 经 JTAG 下载并运行(dow /con ),或由 FSBL/Boot 介质装载 | 否(写入内存/OCM,不配置 PL) | 不会覆盖 .bit /.ltx ;但若 重配 .bit :1) Zynq/ZynqMP 上 PS 程序仍在内存,但依赖 PL 的外设需重建;2) MicroBlaze 场景必须重下 .elf | 冷上电需先 ps7_init/psu_init ;调试时常用 rst -processor; dow app.elf; con ;避免勾 Program FPGA 以免重配 PL | XSCT:dow app.elf 、con 、rst -processor ;Vitis System Debugger |
一、典型工作流
- Vivado 一次性下 PL(bit + ltx)
open_hw
connect_hw_server
open_hw_target
current_hw_device [lindex [get_hw_devices] 0]# 下载 bit
set_property PROGRAM.FILE {./design.bit} [current_hw_device]
program_hw_devices [current_hw_device]# 加载 ILA 映射(.ltx)
set_property PROBES.FILE {./design.ltx} [current_hw_device]
refresh_hw_device [current_hw_device]
- XSCT/JTAG 调 PS
connect
targets -set -filter {name =~ "Cortex-A9*#0" || name =~ "ARM*#0"}# (冷上电第一次)初始化 PS:仅首次或需要时执行
# source ./ps7_init.tcl
# ps7_init
# ps7_post_configrst -processor ;# 仅复位处理器,不影响 PL(bit/ltx)
dow ./app.elf ;# 下载 ELF(加载符号、设置入口)
con ;# 运行
不要在 XSCT 里执行 fpga -f *.bit,也不要在 Vitis 勾选 Program FPGA,否则会重配 PL、清掉 ILA 映射。
二、XSCT 常用命令速查
连接 / 目标选择
connect
/disconnect
targets
:列出调试目标targets -set -filter {name =~ "Cortex-A9*#0"}
:选择目标state
:查看运行状态version
:XSCT 版本
复位(不动 PL)
rst -processor
:仅复位所选 CPU 核(推荐)rst -system
:系统级复位(更重,但也不会重新配置 PL)
下载 / 运行 / 单步
dow ./app.elf
:下载 ELF(含符号)con
:继续运行stop
:暂停stp
/nxt
/stpout
:单步进入 / 越过 / 跳出dis <addr> <len>
:反汇编locals
/backtrace
:查看局部变量 / 调用栈
断点
bpadd -addr &main
:在符号main
入口处断点- 也可:
bpadd -file foo.c -line 123
或bpadd -addr 0x00100000
- 也可:
bplist
:查看断点bpremove <id> | -all
:删断点bpenable <id>
/bpdisable <id>
:使能 / 禁用bpstatus
:断点命中状态
寄存器 / 内存 / 符号
rrd <reg>
/rwr <reg> <val>
:读 / 写寄存器(如pc
、sp
)mrd <addr> [count]
/mwr <addr> <val> [count]
:读 / 写内存memmap -file ./app.elf
:仅加载符号(不下载代码)print &main
:查看符号解析地址
(一般不需)配置 PL / 校验
fpga -f ./design.bit
:通过 XSCT 配置 PL(慎用)verify <file>
:校验映像
JTAG / 终端
jtag targets
:查看 JTAG 链jtag frequency <Hz>
:设置 JTAG 频率jtagterminal
/readjtaguart
:JTAG UART(若平台支持)
Vitis 项目相关(命令行工程)
setws <dir>
/getws
:工作区platform create|generate|list|report
domain create|config|list
app create|build|clean|report
三、脚本模板
下载elf
# run_zynq_a9.tcl
connect
targets -set -filter {name =~ "Cortex-A9*#0" || name =~ "ARM*#0"}# 冷上电时取消注释以下三行:
# source ./ps7_init.tcl
# ps7_init
# ps7_post_configrst -processor
dow ./app.elf
# 可选:断在 main
# bpadd -addr &main
con
热替换 ELF(不复位,快速迭代)
# hot_swap_elf.tcl
connect
targets -set -filter {name =~ "<Your-Core-Name-Filter>"}
stop
dow ./app.elf
con