Vitis同时对多个上电的ZYNQ开发板调试或烧写

简介

当前项目需要同时调试两个ZCU102开发板,当两个板子都上电连接时,需要分别对两个板子下载不同的.bit和.elf,直接用vitis常规方法下载会报错。
网上在这方面的资料不多,我自己折腾了很久,现在把解决方法记录一下,供大家参考。

参考

https://docs.amd.com/v/u/en-US/ug1208-xsct-reference-guide
https://www.origin.xilinx.com/htmldocs/xilinx2019_1/SDK_Doc/SDK_tasks/sdk_t_debugconfig_multicable.html

系统环境

Windows
Vitis2021.2
开发板:Xilinx ZCU102(ZYNQ Ultrascale+ MPSoC)

实现需求

当两个ZYNQ开发板都上电并JTAG连接到同一台电脑,若使用Vitis常规下载方法会因为两个器件冲突而报错:
在这里插入图片描述
在这里插入图片描述
比较笨的方法是:先对一个开发板下载程序后,拔出它的JTAG,再连上另一个开发板的JTAG,然后下载…… 但是要知道JTAG是不支持热插拔的,这样操作有损坏芯片的风险,所以这方法不靠谱!

折腾了好几天,总结一下,目前大致有以下两个解决方法:

  1. 在XSCT终端通过命令行下载
  2. 在Vitis GUI界面下载

解决方法1:在XSCT终端通过命令行下载

这个方法在网上的资料比较多,Xilinx提供的XSCT(Xilinx Software Command Line Tool)命令行工具,可以通过命令选择不同的器件,因此可以指定器件进行下载。
(很遗憾的是,我使用这个方法下载完程序后并没有成功跑起来,目前不知道问题出在哪,若有懂的大佬,也欢迎指教指教!)

先把方法记录一下:
看了很多这方面的资料,主要参考UG1208手册的Debugging Applications on Zynq UltraScale+ MPSoC章节,总结完整的下载指令如下:

connect
targets
#选择"PSU"对应的ID
targets 4
#进入workspace
cd F:/FPGA/PolarCode/fpga/board_enc/zcu102/vitis/polar_enc_tcp/
fpga polar_enc_tcp_platform/hw/polar_enc_tcp.bit
source polar_enc_tcp_platform/hw/psu_init.tcl
psu_init
after 1000
psu_ps_pl_isolation_removal
after 1000
psu_ps_pl_reset_config
#选择APU中"Cortex-A53 #0"对应的ID
targets 9
rst -processor
dow polar_enc_tcp_platform/export/polar_enc_tcp_platform/sw/polar_enc_tcp_platform/boot/fsbl.elf
dow polar_enc_tcp_multi/Debug/polar_enc_tcp_multi.elf
bpadd -addr &main
con

附上我的XSCT终端的完整运行log:

xsct% XSDB Server URL: TCP:localhost:60078
xsct% XSDB Server Channel: tcfchan#0
INFO: [Hsi 55-2053] elapsed time for repository (D:/Xilinx/Vitis/2021.2/data/embeddedsw) loading 4 seconds
connect
tcfchan#1
xsct% targets
  1  PS TAP
     2  PMU
     3  PL
  4  PSU
     5  RPU (Reset)
        6  Cortex-R5 #0 (RPU Reset)
        7  Cortex-R5 #1 (RPU Reset)
     8  APU (L2 Cache Reset)
        9  Cortex-A53 #0 (APU Reset)
       10  Cortex-A53 #1 (APU Reset)
       11  Cortex-A53 #2 (APU Reset)
       12  Cortex-A53 #3 (APU Reset)
xsct% targets 4
xsct% cd F:/FPGA/PolarCode/fpga/board_enc/zcu102/vitis/polar_enc_tcp
xsct% fpga polar_enc_tcp_platform/hw/polar_enc_tcp.bit
 
initializing
  0%    0MB   0.0MB/s  ??:?? ETA
  4%    1MB   2.2MB/s  ??:?? ETA
  7%    1MB   1.9MB/s  ??:?? ETA
 10%    2MB   1.8MB/s  ??:?? ETA
 14%    3MB   1.8MB/s  ??:?? ETA
 17%    4MB   1.7MB/s  ??:?? ETA
 21%    5MB   1.7MB/s  00:11 ETA
 25%    6MB   1.7MB/s  00:10 ETA
 28%    7MB   1.7MB/s  00:10 ETA
 32%    8MB   1.7MB/s  00:09 ETA
 35%    8MB   1.7MB/s  00:09 ETA
 38%    9MB   1.7MB/s  00:08 ETA
 42%   10MB   1.7MB/s  00:08 ETA
 46%   11MB   1.7MB/s  00:08 ETA
 49%   12MB   1.7MB/s  00:07 ETA
 52%   13MB   1.7MB/s  00:07 ETA
 56%   14MB   1.7MB/s  00:06 ETA
 59%   15MB   1.7MB/s  00:05 ETA
 63%   16MB   1.7MB/s  00:05 ETA
 66%   16MB   1.7MB/s  00:04 ETA
 70%   17MB   1.7MB/s  00:04 ETA
 73%   18MB   1.7MB/s  00:03 ETA
 77%   19MB   1.7MB/s  00:03 ETA
 81%   20MB   1.7MB/s  00:02 ETA
 84%   21MB   1.7MB/s  00:02 ETA
 88%   22MB   1.7MB/s  00:01 ETA
 91%   23MB   1.7MB/s  00:01 ETA
 95%   24MB   1.7MB/s  00:00 ETA
 98%   25MB   1.7MB/s  00:00 ETA
100%   25MB   1.7MB/s  00:14    
xsct% source polar_enc_tcp_platform/hw/psu_init.tcl
xsct% psu_init
xsct% after 1000
xsct% psu_ps_pl_isolation_removal
xsct% after 1000
xsct% psu_ps_pl_reset_config
xsct% targets
  1  PS TAP
     2  PMU
     3  PL
  4* PSU
     5  RPU (Reset)
        6  Cortex-R5 #0 (RPU Reset)
        7  Cortex-R5 #1 (RPU Reset)
     8  APU (L2 Cache Reset)
        9  Cortex-A53 #0 (APU Reset)
       10  Cortex-A53 #1 (APU Reset)
       11  Cortex-A53 #2 (APU Reset)
       12  Cortex-A53 #3 (APU Reset)
xsct% targets 9
xsct% rst -processor
WARNING: If the reset is being triggered after powering on the device,
 
         write bootloop at reset vector address (0xffff0000), or use
 
         -clear-registers option, to avoid unpredictable behavior.
 
         Further warnings will be suppressed
Info: Cortex-A53 #0 (target 9) Stopped at 0xffff0000 (Reset Catch)
xsct% dow polar_enc_tcp_platform/export/polar_enc_tcp_platform/sw/polar_enc_tcp_platform/boot/fsbl.elf
 
Downloading Program -- F:/FPGA/PolarCode/fpga/board_enc/zcu102/vitis/polar_enc_tcp/polar_enc_tcp_platform/export/polar_enc_tcp_platform/sw/polar_enc_tcp_platform/boot/fsbl.elf
	section, .text: 0xfffc0000 - 0xfffd5f13
	section, .note.gnu.build-id: 0xfffd5f14 - 0xfffd5f37
	section, .init: 0xfffd5f40 - 0xfffd5f73
	section, .fini: 0xfffd5f80 - 0xfffd5fb3
	section, .rodata: 0xfffd5fc0 - 0xfffd653f
	section, .sys_cfg_data: 0xfffd6540 - 0xfffd6d2f
	section, .mmu_tbl0: 0xfffd7000 - 0xfffd700f
	section, .mmu_tbl1: 0xfffd8000 - 0xfffd9fff
	section, .mmu_tbl2: 0xfffda000 - 0xfffddfff
	section, .data: 0xfffde000 - 0xfffdf257
	section, .sbss: 0xfffdf258 - 0xfffdf27f
	section, .bss: 0xfffdf280 - 0xfffe183f
	section, .heap: 0xfffe1840 - 0xfffe1c3f
	section, .stack: 0xfffe1c40 - 0xfffe3c3f
	section, .dup_data: 0xfffe3c40 - 0xfffe4e97
	section, .handoff_params: 0xfffe9e00 - 0xfffe9e87
	section, .bitstream_buffer: 0xffff0040 - 0xfffffc3f
 
  0%    0MB   0.0MB/s  ??:?? ETA
 77%    0MB   0.1MB/s  ??:?? ETA
100%    0MB   0.2MB/s  00:00    
 
Setting PC to Program Start Address 0xfffc0000
Successfully downloaded F:/FPGA/PolarCode/fpga/board_enc/zcu102/vitis/polar_enc_tcp/polar_enc_tcp_platform/export/polar_enc_tcp_platform/sw/polar_enc_tcp_platform/boot/fsbl.elf
xsct% dow polar_enc_tcp_multi/Debug/polar_enc_tcp_multi.elf
 
Downloading Program -- F:/FPGA/PolarCode/fpga/board_enc/zcu102/vitis/polar_enc_tcp/polar_enc_tcp_multi/Debug/polar_enc_tcp_multi.elf
	section, .text: 0x00000000 - 0x0001e377
	section, .init: 0x0001e380 - 0x0001e3b3
	section, .fini: 0x0001e3c0 - 0x0001e3f3
	section, .rodata: 0x0001e3f8 - 0x0001f9b6
	section, .rodata1: 0x0001f9b7 - 0x0001f9bf
	section, .sdata2: 0x0001f9c0 - 0x0001f9bf
	section, .sbss2: 0x0001f9c0 - 0x0001f9bf
	section, .data: 0x0001f9c0 - 0x000305f7
	section, .data1: 0x000305f8 - 0x000305ff
	section, .note.gnu.build-id: 0x00030600 - 0x00030623
	section, .ctors: 0x00030624 - 0x0003063f
	section, .dtors: 0x00030640 - 0x0003063f
	section, .eh_frame: 0x00030640 - 0x00030643
	section, .mmu_tbl0: 0x00031000 - 0x0003100f
	section, .mmu_tbl1: 0x00032000 - 0x00033fff
	section, .mmu_tbl2: 0x00034000 - 0x00037fff
	section, .preinit_array: 0x00038000 - 0x00037fff
	section, .init_array: 0x00038000 - 0x00038007
	section, .fini_array: 0x00038008 - 0x00038047
	section, .sdata: 0x00038048 - 0x0003807f
	section, .sbss: 0x00038080 - 0x0003807f
	section, .tdata: 0x00038080 - 0x0003807f
	section, .tbss: 0x00038080 - 0x0003807f
	section, .bss: 0x00200000 - 0x0241807f
	section, .heap: 0x02418080 - 0x0241a07f
	section, .stack: 0x0241a080 - 0x0241d07f
 
  0%    0MB   0.0MB/s  ??:?? ETA
 28%    0MB   0.1MB/s  ??:?? ETA
 85%    0MB   0.2MB/s  ??:?? ETA
100%    0MB   0.2MB/s  00:01    
 
Setting PC to Program Start Address 0x00000000
Successfully downloaded F:/FPGA/PolarCode/fpga/board_enc/zcu102/vitis/polar_enc_tcp/polar_enc_tcp_multi/Debug/polar_enc_tcp_multi.elf
xsct% bpadd -addr &main
0
xsct% Info: Breakpoint 0 status:
   target 9: {Address: 0x1970 Type: Hardware}
xsct% con
Info: Cortex-A53 #0 (target 9) Running
xsct% rrd
      r0:              N/A        r1:              N/A
      r2:              N/A        r3:              N/A
      r4:              N/A        r5:              N/A
      r6:              N/A        r7:              N/A
      r8:              N/A        r9:              N/A
     r10:              N/A       r11:              N/A
     r12:              N/A       r13:              N/A
     r14:              N/A       r15:              N/A
     r16:              N/A       r17:              N/A
     r18:              N/A       r19:              N/A
     r20:              N/A       r21:              N/A
     r22:              N/A       r23:              N/A
     r24:              N/A       r25:              N/A
     r26:              N/A       r27:              N/A
     r28:              N/A       r29:              N/A
     r30:              N/A        sp:              N/A
      pc: 0000000000000200      cpsr:              N/A
     vfp                         sys                  
     dbg                    acpu_gic                  
 
xsct% 

指令运行一切正常,程序也烧进去了,但串口没有打印任何信息,读取到的寄存器值也是N/A,看起来程序没有正确跑起来,后面如果解决的话再更新吧!

解决方法2:在Vitis GUI界面下载

这个方法特别简单,是偶然间翻到Xilinx古老的SDK使用教程时发现的,就是在Run Configuration界面手动指定下载的目标PS器件和PL器件。

具体流程如下:
在这里插入图片描述
在这里插入图片描述
在Target Setup中,看到PL Device和PS Device这两项默认是Auto Detect,将两个都改为手动指定器件即可:

对开发板A,分别选择PL Device和PS Device,然后点击“Run”,下载程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

同理,对开发板B,分别选择PL Device和PS Device,然后点击“Run”下载程序
在这里插入图片描述

通过以上步骤,便可以成功给开发板A和开发板B下载不同的程序,并正确运行。
问题解决!

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Zynq 7045 开发是一款由赛灵思公司(Xilinx)开发的嵌入式处理器系统开发。该开发采用了Xilinx的Zynq-7000系列芯片,它是一种SoC(System-on-Chip)设计,在一颗芯片上集成了一颗FPGA和一颗ARM Cortex-A9处理器。 Zynq 7045 开发具备强大的处理能力和灵活的可编程逻辑资源。它使用了高性能的ARM Cortex-A9双核处理器,可以运行多个操作系统和应用程序,并且支持硬件加速和协同处理。另外,它还拥有512MB DDR3 SDRAM,256Mb QSPI Flash等外部存储器,可用于存储应用程序和数据。 Zynq 7045 开发的FPGA部分可用于设计和实现各种硬件功能。它拥有240K逻辑单元,同时还集成了多个高速串行接口,如Gigabit以太网、USB、SDIO等,可用于连接外部设备和通信接口。此外,开发还配备了各种外设接口,如GPIO、SPI、UART等,方便用户与外部设备进行通信和交互。 对于嵌入式系统开发人员来说,Zynq 7045 开发提供了丰富的开发工具和资源。Xilinx提供了Vivado Design Suite软件,它是一款强大的FPGA设计开发工具,可用于设计和实现FPGA逻辑。此外,还有软件开发工具链,如Xilinx SDK和Vitis,用于开发调试ARM Cortex-A9的软件程序。 总结来说,Zynq 7045 开发是一款功能强大、灵活性高的嵌入式处理器系统开发。它结合了FPGA的可编程性和ARM Cortex-A9的高性能处理能力,可用于各种应用领域,如嵌入式系统设计、无线通信、图像处理等。开发人员可以借助丰富的开发工具和资源,高效地进行硬件和软件开发,实现各种复杂的嵌入式系统设计。 ### 回答2: Zynq-7045开发是由Xilinx公司开发的一款适用于嵌入式系统设计的高性能集成开发。其主要特点如下: 首先,Zynq-7045开发采用了Xilinx的Zynq-7000系列器件,该系列器件集成了高性能的可编程逻辑和双核ARM Cortex-A9处理器。这一特点使得开发同时具备了硬件加速和软件处理的能力,可以满足各种复杂的应用需求。 其次,Zynq-7045开发具有丰富的外设和接口,包括GPIO、UART、I2C、SPI、PCIe等,这些外设和接口可以满足不同应用场景下的输入输出需求,并支持灵活的扩展功能。 此外,Zynq-7045开发配备了一组高速DDR3存储器,可以提供足够的存储容量和快速的数据传输速度,同时还可以通过SD卡或者SATA接口来扩展存储空间。 最后,Zynq-7045开发具有强大的软件支持,包括Xilinx的Vivado开发套件和SDK软件开发工具,开发人员可以使用这些工具进行硬件设计和软件开发,实现高度定制的嵌入式系统。 综上所述,Zynq-7045开发是一款功能强大的嵌入式系统开发平台,具有高性能、丰富的外设和接口、可扩展的存储容量以及强大的软件支持。它适用于各种嵌入式系统设计,包括工业控制、智能监测、图像处理、无人机等领域。 ### 回答3: Zynq-7045开发是一款基于Xilinx Zynq-7000系列SoC(系统级芯片)的开发Zynq-7045 SoC集成了ARM Cortex-A9双核处理器和Xilinx 7系列可编程逻辑器件,可在一个单一芯片上实现高性能处理和可编程逻辑功能。 Zynq-7045开发具有丰富的硬件资源,包括DDR3内存、USB接口、以太网端口、HDMI接口、SD卡插槽、用户按键和LED指示灯等。开发还提供了用于调试和编程的JTAG接口,以及支持外围设备扩展的PMOD和FMC接口。 通过使用Zynq-7045开发开发人员可以利用ARM Cortex-A9处理器的高性能处理能力和Xilinx可编程逻辑器件的灵活性来实现各种应用。他们可以使用ARM处理器来运行Linux操作系统,并利用FPGA可编程逻辑来实现特定的外围接口或实时数据处理。 开发人员可以使用Xilinx Vivado设计套件来开发和编译他们的设计,并使用Xilinx Software Development Kit (SDK)来开发调试ARM Cortex-A9处理器的软件。同时,开发人员可以利用丰富的Xilinx IP核库来快速实现他们的设计功能。 总之,Zynq-7045开发是一款功能强大的开发工具,提供了丰富的硬件资源和灵活性,可用于各种应用领域的设计和开发。无论是嵌入式系统、图像和信号处理、通信还是工业自动化等,Zynq-7045开发都能提供出色的性能和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值