DDR memory controller (MPMC)
RM0082
134/844
Doc ID 018672 Rev 1
be possible if there are no priority, source ID, WRITE buffer or address collisions or conflicts
with other commands in the command queue.
Every bank splitting feature could be enabled through the bank_split_en parameter.
Read/Write grouping
The memory suffers a small timing overhead when switching from READ to WRITE mode.
For efficiency, the placement queue will attempt to place a new read command sequentially
with other read commands in the command queue, or a new WRITE command sequentially
with other WRITE commands in the command queue. Grouping will only be possible if no
priority, source ID, WRITE buffer or address collision rules are violated.
This feature is enabled through the rw_same_en parameter.
10.6.2 Command
execution
order after placement
Once a command has been placed in the command queue, its order relative to the other
commands in the queue at that time is fixed. Even if this simplifies the algorithm there are
some drawbacks. For this reason, Memory Controller offers two options that affect
commands once they have been placed in the command queue.
High-Priority command swapping
Commands are assigned priority values to ensure that critical commands are executed
before less important commands. Therefore, it is desirable that high-priority commands
cross the Memory Controller core as sooner as possible. The placement algorithm sorts
commands by priority though it can not avoid a such scenario in which a high-priority
command is waiting at the top of the command queue while another command, possibly of a
lower priority, is in process.
The high-priority command swapping feature allows this new high-priority command to be
executed quite sooner. If the user has enabled the swapping function by the swap_en
parameter, the entry at the top of the command queue will be compared with the current
command in progress. If the command queue's top entry is of a higher priority (not the same
priority), and it does not have an address, source ID or WRITE buffer conflict with the
current command being executed, the original command will be interrupted.
If the command has to be interrupted, it will be halted after completing the current burst,
stacked and placed at the top of the queue, while the new command will be executed. As
long as the command queue is not full, new commands may continue to be inserted into the
command queue based on the placement rules, even at the head of the queue ahead of the
interrupted command. The top entry in the command queue will be executed next.
Whenever the interrupted command is resumed, it will start from the point at which it was
interrupted.
Note:
Priority 0 commands could never be interrupted, so the user should set any commands that
should not be interrupted to priority 0.
Command ageing
Since commands can be inserted ahead of existing commands in the command queue, it
could happen a low priority command remains at the bottom of the queue indefinitely. To
avoid such a lockout condition, aging counters have been included in the placement logic
that measure the number of cycles that each command has been waiting. If command aging
is enabled through the active_ageing parameter and an aging counter hits its maximum, the