This demos has been created to test Cross Triggering Debug feature, included in the SDK 2016.3 release. Two different use cases are pres
Users are advised to review the Zynq Ultrascale Developers Software User guide here

Build Hardware Platform

Note: The 1.3 version of the zcu102 board files in needed here. These can be downloaded from the headstart lounge prior to completing this demo.
Include a ZYNQ MPSoC device, run default configuration wizard and enable one PL-PS cross triggering port. Also include an ILA IP and configure with the following values.

wiki_zynq_0.pngwiki_zynq_1.png


Include a dummy peripheral in the BD (ie. AXI Timer) and connect the blocks to generate a valid platform design.

wiki_bd.png

Save the project, generate the bitstream and once generated export and launch the SDK.

PL-PS Cross Trigger


This demos is indeed to show how a hardware trigger event can be used to generate a software halt (processor halt) to debug both sides of the device.
Create a peripheral test application for A53 core, and modify the main function (testperiph.c) to include a dummy bus access to the AXI Timer, which is going to be used to trigger the debugger.

Xil_Out32(XPAR_AXI_TIMER_0_BASEADDR, 0xDEADBEEF);

wiki_testperiph.png

Create a new Debug Configuration
Important: There is a bug in the 2016.3 version of SDK, wherein the zynqmp device is not detected if the debug configuration is not created in the following way

wiki_debug_conf.png

Ensure that the Target Setup includes the following features
wiki_target_setup.png

Select the application test in the Application tab and enable stop at program entry checkbox
wiki_appliation.png

Select the advanced features of Cross-Triggering and create a new Breakpoint. In this case cross-trigger input will be any FTM register and as output A53-0 Debug register. Apply and Debug the configuration in order to check that the breakpoint tab shows the cross-trigger.
wiki_cti.png cross-trigger.PNG

On the other hand open the hardware manager (within Vivado project) and connect to the target. Set a new trigger setup to catch the trigger condition we build in the software (WDATA = 0xDEADBEEF), and modify the TRIG_OUT mode value to generate a trigger output that will be used to halt the A53#0 processor.

wiki_hw_man1.png
Once everything is setup, run the trigger in the ILA core and run the software debugger. Once the ILA trigger condition is met in Vivado the core will be full and software debugging will be halted as expected in the cross-trigger configuration.
trigger.PNG
wiki_debug.png


PS internal Cross-Trigger

The second use case demo configures a cross-trigger between A53 and R5 cores, which can be util in AMP environments.
Create an R5 application with Hello World template and include an infinite loop to generate processor halts from the A53 application.
int main()
{
  init_platform();
  print("Hello World\n\r");
  while(1);
  cleanup_platform();
  return 0;
}


Generate a new Debug configuration (using hardware platform project) with the following crosstrigger configuration.
Important: There is a bug in the 2016.3 version of SDK, where in the zynqmp device is not detected if the debug configuration is not created in the following way

wiki_add_cfi.png

Add both applications to the applications tab
wiki_app.png

Apply and debug the application. Once started select the R5#0 core and make in run in the infinite loop while A53#0 is in the startup breakpoint.

wiki_r5.png

Change to the A53#0 core, define a breakpoint and run the application. Once breakpoint is achieved a cross-trigger will be generated to stop the R5#0 core.
wiki_a53.png