Using the ELA-500 with Arm DS

A tutorial showing how to use the CoreSight ELA-500 with Arm Development Studio (Arm DS) to debug a real-world deadlock scenario


Introduction Before you begin Importing the ELA-500 DTSL use case scripts Configuring the ELA-500 use case scripts Running the ELA use case scripts Capturing the ELA trace data Analyzing the ELA trace capture

Analyzing the ELA trace capture

After performing all the previous steps, the ELA traces each read transaction and stores them into a circular buffer. The circular buffer holds x number of read transactions, where x relates to the size of the ELA-500 SRAM and number of signals. The read transactions came from both explicit reads and Speculative reads. You can identify rogue accesses to the potential holes in the memory map by analyzing the read transactions. 

The following example trace capture shows several accesses, explicitly called, which were outside the bounds of the run memory copy routine. The last address explicitly read by the core was 0x01001fc0. The processor prefetcher continued to read memory from 0x01002000, 0x01002040, and 0x01002080. These memory accesses were to addresses that were outside the internal target SRAM. Performing accesses outside the internal target SRAM can cause execution issues like deadlocks. To fix any potential issues, we could configure addresses outside the internal SRAM in the translation tables as Invalid. Configuring the translations tables as Invalid prevent the prefetcher from prefetching from problematic regions of memory.

Address read valid             = 0x1
Shareability                   = Inner Shareable
Execution state                = AARCH64
Cache Attr                     = Write-back, read/write allocate
Access size                    = 64 bytes
Read address                   = 0x01001fc0

Address read valid             = 0x1 Sharability                    = Inner Shareable Execution state                = AARCH64 Cache Attr                     = Write-back, read/write allocate Access size                    = 64 bytes Read address                   = 0x01002000
Address read valid             = 0x1 Shareability                   = Inner Shareable Execution state                = AARCH64 Cache Attr                     = Write-back, read/write allocate Access size                    = 64 bytes Read address                   = 0x01002040
Address read valid             = 0x1 Shareability                   = Inner Shareable Execution state                = AARCH64 Cache Attr                     = Write-back, read/write allocate Access size                    = 64 bytes Read address                   = 0x01002080
Previous