OpenCores
URL https://opencores.org/ocsvn/mpmc8/mpmc8/trunk

Subversion Repositories mpmc8

[/] [mpmc8/] [trunk/] [README.md] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 robfinch
# MPMC8 - Multiport Memory Controller
2
## Overview
3
The multi-port memory controller provides eight access ports with either small streaming read caches or a 16kB shared read cache to the ddr3 ram. The multi-port memory controller interfaces between the SoC and a MIG controller.
4
Ports may be customized with parameter settings. Port #5 is setup to handle sprites and is read-only.
5
# Read Cache / Streaming Cache
6
The read cache is a 16kB direct mapped cache which may be shared between ports. The cache line size is 16 bytes. Note the cache only caches read operations. Writes cause the corresponding cache line to be invalidated to maintain cache coherency. Writes bypass the cache and write directly to memory.
7
The streaming caches are much smaller read caches. They are useful when the data is generally read and used only once, as for a frame buffer for instance. The streaming caches are an alternative to making the read cache multi-way associative, and effectively add ways to the cache reads.
8
 
9
## Suggested Port Usage
10
 
11
|Port|Use                             |Port Bits|Common  Cache|Stream Buffer|
12
|----|--------------------------------|---------|-------------|-------------|
13
| 0  |Frame Buffer / Bitmap Controller|   128   |             |      *      |
14
| 1  |CPU #1                          |   128   |      *      |             |
15
| 2  |Ethernet Controller             |    32   |      *      |             |
16
| 3  |Audio Controller                |    16   |             |      *      |
17
| 4  |Graphics Accelerator            |   128   |      *      |             |
18
| 5  |Sprite Controller               |    64   |             |      *      |
19
| 6  |SD (disk) Controller            |    32   |      *      |             |
20
| 7  |CPU #2                          |   128   |      *      |             |
21
 
22
## Port Priorities
23
Port #0 has the highest priority, down to port #7 which has the lowest. Periodically, for a single clock cycle only, the port priorities are inverted. This helps ensure that low prioriy ports are not permanently starved of access.
24
 
25
## Clocks
26
Each port may have it own clock. Clock domain crossing logic is present for incoming and outgoing signals. The controller's clock typically runs at 1/4 the PHY clock or 100MHz. The port clocks may be a different frequency.
27
 
28
## Memory Access
29
Memory is accessed in strips of 16 bytes which is the size that MIG interface uses. Specifying multiple strips for reading will use a burst of strips which is a much faster way to access memory.
30
 
31
## Address Reservations
32
The controller supports address reservations on memory for imnplementation of semaphores. The CPU must output address reservation set and clear signals to support this.
33
 
34
## Parameters
35
STREAMn - cause port number 'n' to use a streaming cache instead of the main cache
36
STRIPSn - sets the number of memory strips (16 byte accesses) minus 1 for port 'n' to load consecutively (should be 0 (for 1), 1, 3, or 7 (for 8))
37
CnW     - sets the data width for the port (Note port #7 C7R must also be set)
38
NAR     - sets the number of outstanding address reservation that are present, this should be a small number (eg. 2)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.