Data Mover / AXI2TCM

  • Moves data from PL to R5 (R5_0) by writing data directly to the BTCM

  • Data mover is intended for use with R5 in split mode

  • PL IP-Cores can write to TCM by AXI

  • Fast possibility to move data from PL to R5

  • Used to read ADC values

Tightly Coupled Memory (TCM)

  • See TRM for TCM information

  • Split mode: ATCM and BTCM with 64 KB each (split mode is used in the UltraZohm project).

  • ATCM: holds interrupts and exception code (.vectors section in linker script)

  • BTCM: used for data processing

  • There is no protection to stop the Cortex-R5F processor from accessing the TCM 1,p. 97

Table 27 Address map of TCM for R5_0

R5_0 View

Global Address

R5_0 ATCM (64 KB)

0x0000_0000

0xFFE0_0000

R5_0 BTCM (64 KB)

0x0002_0000

0xFFE2_0000

  • The R5_0 view is used by the software of the R5

  • The global address is used in Vivado

  • ATCM (64 KB) starts at address 0x0000_0000 and ends at 0x0000_FFFF for usage in software

  • BTCM (64 KB) starts at address 0x0002_0000 and ends at 0x0002_FFFF for usage in software

  • Note that ATCM for R_0 starts at 0x000_0000 to 0x0000_FFFF, then there is a 64 KB gap (see figure in TRM).

IP-Core

The data mover uses the AXI2TCM IP-Core.

Table 28 Settings of IP-Core

Name

Default

Description

Number of 16 bit blocks

24

AXI TARGET SLAVE BASE ADDR

0xFFE20000

Address to which the IP-Core writes data.

AXI ID WIDTH

1

AXI ADDR WIDTH

32

../../../_images/data_mover.png

Fig. 106 Data mover in Vivado.

Software driver

  • Software driver does not need to be initialized

  • Two possibilities to read data from the data mover:

    • Directly access the data in the BTCM

    • Read the data from the BTCM into a buffer and access the buffered data

  • If data access without buffer is used, the data can change without any action from the processor

  • Software driver uses the Array data type

Reference

uz_array_int16_t uz_dataMover_get_data_by_pointer(void)

Returns an array with a direct pointer into the BTCM. The values of the array change independend of the software.

Returns

uz_array_int16_t

uz_array_int16_t uz_dataMover_update_buffer_and_get_data(void)

Copies all data from TCM to buffer and retruns the buffered data.

Returns

uz_array_int16_t

void uz_dataMover_update_buffer(void)

Copies all data from BTCM to a buffer in the PS.

Returns

void

uz_array_int16_t uz_dataMover_get_data_from_buffer(void)

Returns an array with a pointer to the buffered data. The buffer is only updated by explicitly calling the update_buffer function.

Returns

uz_array_int16_t Buffered data

Sources

1

Zynq UltraScale+ Device TRM, UG1085 (v2.2) December 4, 2020