ARM hanging when accessing register map for an IP

  • PYNQ Version v2.7
  • Using a customized image
  • ZCU111 board

I am getting an ARM system hang when trying to access any of the registers for one of the IP’s I am using. The image loads without any problems and the IP is listed as available in the overlay output. I am able to access some other IP’s without causing the system to hang. I am in the process of trying to debug the issue and I noticed that a recommendation was made in another post ( Help debuging chronic PYNQ System Hang) to set up an AXI watchdog timer for the LPD/FPD.

Pretty new to PYNQ code and was wondering where best to add this code? Do I need to add prior to loading the overlay or does it need to be setup even earlier in the process when PYNQ is starting up?

1 Like

When trying to debug what is going on I found that the IP that I am loading creates the RegisterMap and Registers and then uses the embedded device class to map the memory. At this point everything looks like it is working properly and it calls the mmap method in the embedded_device.py module. Their are no errors on mapping the memory but when I try to access the first element in the array the system locks up. I am able to R/W other IP that is in the design with no problems.

When I take and isolate that one IP I can get it to work where the memory is mapped and I can R/W to the register. However when I try it back in the complete design I then have issues with it locking up the PS. In the design there are three different clock domains. The IP I am using has the M_AXI_HPMO_FPD clock at 100MHz and a S_AXI_HPO_FPD at 256 MHz. Would that potentially be causing some of these issues? If so how do I adjust the clock settings associated with a particular AXI interface and its memory mapping?

The issue turned out to be the reference clocks were not set up correctly for the zcu111 board.

Adding the following code seems to have fixed my issue.

import xrfclk
xrfclk.set_ref_clks()