This issue has been observed in 2015.3, 2015.4, and 2015.4.1 builds of Vivado.
When you create and add a Custom AXI Peripheral, the xparameters.h file which defines the base and high address of the custom IP peripheral is incorrect in SDK.
For a Zynq project, it defines the address range as complete Zynq address space and not the one you have defined in the Vivado Address Editor.
For Example:
#define XPAR_MYIP_NUM_INSTANCES 1
#define XPAR_MYIP_0_DEVICE_ID 0
#define XPAR_MYIP_0_S00_AXI_BASEADDR 0xFFFFFFFF
#define XPAR_MYIP_0_S00_AXI_HIGHADDR 0x00000000
/******************************************************************/
/******************************************************************/
#define XPAR_MYIP_NUM_INSTANCES 1
#define XPAR_MYIP_0_DEVICE_ID 0
#define XPAR_MYIP_0_S00_AXI_BASEADDR 0x43C00000
#define XPAR_MYIP_0_S00_AXI_HIGHADDR 0x43C0FFFF
/******************************************************************/
解决方案
This is a known issue. The BASEADDR and HIGHADDR values of the Custom AXI Peripheral as defined in the Vivado Address Editor is not properly propagated to the xparameters.h file from the .hdf file.
It is planned to be fixed in 2016.1 release.
Work-arounds:
1. Make the changes manually in the main() file and add the BASEADDR and HIGHADDR values as required. This is required as changes to xparameters.h get overwritten if the BSP is re-built.
#define XPAR_MYIP_0_S00_AXI_BASEADDR 0x43C00000
#define XPAR_MYIP_0_S00_AXI_HIGHADDR 0x43C0FFFF
2. Create the custom IP in 2015.2/2015.1 Vivado builds and import it in the latest builds. In that case the Address values are also properly propagated to xparameters.h.