User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 737
UG585 (v1.11) September 27, 2016
Chapter 29: On-Chip Memory (OCM)
29.2 Functional Description
29.2.1 Overview
The OCM module is mainly composed of a RAM memory block. The OCM module also contains
arbitration, framing, parity, and interrupt logic in addition to the RAM array.
29.2.2 Optimal Transfer Alignment
The RAM is implemented as a single-ported, double-width (128-bit) module that can emulate a
dual-ported memory under specific conditions. This emulation of dual-ported operation occurs
automatically when 128-bit aligned, even burst multiples of AXI commands are used to access the
64-bit wide OCM AXI interfaces. Optimized bursts are theoretically able to achieve 100% throughput
of the RAM. If bursts are not aligned to 128 bits or burst lengths are odd multiples of 64-bits, the
control logic automatically realigns transfers inside the module — start and end addresses can be
presented to the RAM as 64-bit operations instead of more optimal 128-bit operations.
Configuring OCM memory as device memory in the MMU or using narrow, non-modifiable accesses
through the ACP port is not recommended. In this mode, pipelined 32-bit accesses are generated on
the SCU port. This type of traffic pattern does not take advantage the double-width memory and
effectively reduces OCM efficiency to 25%.
29.2.3 Clocking
The OCM module is clocked by the CPU_6x4x clock. However, the RAM array itself is an exception,
and is clocked by CPU_2x, though its 128-bit width is double that of any of the incoming 64-bit wide
AXI channels. The OCM switch feeding the OCM module is clocked by CPU_2x, and the SCU is
clocked by CPU_6x4x.
29.2.4 Arbitration Scheme
Apart from the CPUs and ACP, all other AXI bus masters are assumed to not have a strong latency
requirement. Therefore, the OCM uses a fixed arbitration scheme (on a data beat basis) between the
two AXI slave interfaces. The default order of decreasing priorities is:
1. SCU-Rd
2. SCU-Wr
3. OCM-Switch
Using the ocm.OCM_CONTROL.ScuWrPriorityLo register setting (see Appendix B, Register Details),
the decreasing priority arbitration can be modified to:
1. SCU-Rd
2. OCM-Switch
3. SCU-Wr