使用vivado2017.4,在BD设计中用zynq7 IP核的M_AXI_GP0接口连接了一系列的寄存器并且都分配了地址,想通过AXI4_LITE总线去配置
相关的地址宏定义也能在xparameters.h文件中正常生成
构想利用Xil_Out32 ()函数直接对地址写数据来做配置,如下图
但是发现无法运行,经过调试之后,发现GP0连接的部分地址无法读取,用调试的memory窗口打开,有几个能正常显示内存数据,其他的都提示target request failed:unable to read memory
在运行到这些不能读取地址的时候,Xil_Out32 ()函数就会挂起报错
有一个奇怪的现象,假如A地址有效B地址无效,我在memory中先打开A的地址,可以看到A地址的数据,再添加B地址,B提示无法读取内存;但是假如先打开B的地址,提示无法读取后再添加A的地址,连A的地址也会一块无法读取。
使用的板子是ZC706
这个问题可能是由于寄存器地址映射错误或者访问权限问题引起的。如果你使用 IP核生成的 AXI总线 包含的寄存器无法被正确访问, 你可以尝试以下几种方法:
确定寄存器地址映射表是否正确
在Vivado中确认各个寄存器的地址映射表是否正确, 特别是AXI总线的地址映射表和PL与PS之间的地址映射。你可以在BD视图中查看内存地址并确认地址映射表是否正确。如果地址映射表设置错误,可能导致某些地址无法读取。
确保访问权限正确
如果显示“target request failed: unable to read memory”,可能是由于访问权限不正确引起的。你需要仔细检查访问权限,特别是如果这些地址位于PL端,需要配置访问权限以允许PS端正确访问。在PS端,需要使用 Xil_Out32()函数来设置S_AXI_HP0和S_AXI_HP1的地址范围,并在PS中使用M_AXI_GP0接口进行寄存器读取或写入。
检查PL和PS之间的连接
在有些情况下,这个问题可能是由于PL和PS之间的连接不正确或者PL和PS之间的通信出现问题引起的。你需要检查连接是否正确以及通信是否正常。另外,还应该检查DDR或其他外设是否正常工作,并确认访问这些地址时没有发生访问异常或总线错误。
此外,你可以尝试使用 XADC等其他AXI从设备进行访问检查,并确认读写过程中没有出现任何异常。
希望以上解决方案能够解决您的问题。