
NXP Semiconductors
PNX15xx/952x Series
Volume 1 of 1
Chapter 9: DDR Controller
PNX15XX_PNX952X_SER_N_4
NXP B.V. 2007. All rights reserved.
Product data sheet
Rev. 4.0 — 03 December 2007
9-317
If there is no DMA then the CPU can still get the BW which it has to pay for by
allowing the CPU account to borrow from its future budget. If there is a longer time
period where there is no DMA trafc, the CPU account could potentially build up a
huge debt. As soon as DMA trafc restarts, the CPU could conceivably have an
extended period of time where they have a lower priority than DMA (while paying off
the debt). The CPU_CLIP value controls how much debt the CPU account is allowed
to build up. After that value has been reached and there is still no DMA trafc the
CPU will get the bandwidth for free. The number of data transfer cycles is accounted
for to approximately (excluding overhead) get the same account value before and
after the free transaction.
In the time zone marked “constant average account below clip” in
Figure 3, the
transfer rate is such that the average value of the CPU account is constant. In this
zone, we have the following equilibrium:
Where #cycles_in_burst is the nominal number of cycles it takes to complete a DDR
burst, being half of the burst length, and #cycles_between_arbitration is the number
of clock cycles between 2 successive CPU transfers win arbitration.
From this the CPU bandwidth (as percentage of maximum achievable) with constant
average account is derived:
In the time zone marked “constant average account above clip” in
Figure 3, the
transfer rate is such that the average value of the CPU account is constant. In this
zone, we have the following equilibrium:
Figure 3:
CPU account
CPU account
time
transfers
CPU_RATIO
#cycles_in_burst
slope = CPU_DECR/cycle
CPU_LIMIT
CPU_CLIP
constant average account below clip,
see text
constant average account above clip
see text,
CPU_RATIO
#cycles_in_burst
+
CPU_DECR
#cycles_between_arbitration
×
=
CPU_BW
#cycles_in_burst
#cycles_between_arbitration
---------------------------------------------------------------------
CPU_DECR
1
CPU_RATIO
#cycles_in_burst
----------------------------------------
+
--------------------------------------------------
==
#cycles_in_burst
CPU_DECR
#cycles_between_arbitration
×
=