作者:Ivy Guo,AMD工程师;来源:AMD开发者社区
SEM IP的主要任务就是扫描PL Configuration RAM, IP自身也是运行在PL里面的。其实MPSoC器件同样可以运行SEM IP。
但SEM IP ‘默认’情况下在MPSoC上是跑不起来的,原因是PCAP和ICAP的控制权移交问题。ICAP是FPGA控制配置相关操作的接口,SEM IP的工作是建立在ICAP的基础上的,它必须拥有ICAP的访问权限才能够正常工作。PCAP和ICAP类似,它是PS访问配置控制端的接口。ICAP和PCAP不能同时工作,否则会有冲突。在MPSoC刚刚Boot起来的时候,配置控制权的接口默认分配给了PS和PCAP。此时ICAP不能访问,IP也就无法工作起来。下面两个文档,以及本文介绍的简单指令,都是为了解决这个问题。
https://docs.xilinx.com/v/u/en-US/xapp1303-integrating-sem-ip-with-axi
https://docs.xilinx.com/v/u/en-US/xapp1298-integrating-sem-ip
我们先来看指令解决方法。
如果你在MPSoC上运行一个SEM IP,观察到的log如下(此处以ZCU102为例):
IP在初始化阶段就卡住了。从Uart口的log看‘ICAP’后续无字符输出,这是典型的IP无法通过ICAP访问控制端的状态。此时需要把控制权从默认的PCAP切换到ICAP去。我们需要利用pcap_ctrl这个寄存器。UG1087对其定义如下:
https://docs.xilinx.com/r/en-US/ug1087-zynq-ultrascale-registers/pcap_rd...
地址为0xffca3008, Bit 0的pcap_pr就是控制位。其上电默认值为0x1。
打开XSCT,连接到ZCU102的器件XCZU9。
根据地址查询一下pcap_ctrl寄存器的值,返回值为0x1, 说明确实PCAP在控制:
xsct% mrd -force 0xffca3008
FFCA3008: 00000001
把Bit 0清零:
xsct% mwr -force 0xffca3008 0x0
此时可以看到Uart窗口里ICAP立即变为可以访问的状态,并继续打印出了完整的Initialization log:
随意操作一下IP,根据IP的响应情况,可以看到其已经完全正常开始工作了:
如果PCB上有JTAG控制接口,那么通过上述方法,直接修改pcap_ctrl寄存器就可以了。但是如果PCB上没有JTAG口,或者是外场的产品应用,我们就要使用XAPP1298或者1303的方法,利用PS来做控制权的移交。在后续文档中我们会解析一下其使用方法并更新一下参考文件。