blob: 2dbfb6cf95ab99e676c14e7d18bf41f6e1b16052 [file] [log] [blame] [view]
# Black Parrot Memory End
The Memory End (ME) comprises the Cache Coherence Engines (CCEs), Coherence Network, and L2 Memory
in a BlackParrot multicore processor. It can be configured to support one or more CCEs that connect
via the Coherence Network to one or more Local Cache Engines (LCEs), which are the L1 entities
that participate in coherence.
Diagrams for the ME blocks can be found [here][2]
## Memory End (ME)
The file *bp\_me\_top.v* defines the top level Memory End module. This module is instantiated once
per BlackParrot multicore processor. This module instantiates the Coherence Network, CCEs, and
L2 memory.
### Parameters
* __num\_lce\_p__ \- number of LCEs in the system
* __num\_cce\_p__ \- number of CCEs in the system
* __num\_mem\_p__ \- number of memory units per CCE in the system
* __addr\_width\_p__ \- physical address width
* __lce\_assoc\_p__ \- Associativity of the LCEs
* __lce\_sets\_p__ \- number of Sets in each LCE
* __block\_size\_in\_bytes\_p__ \- number of bytes per cache block in the LCEs
* __num\_inst\_ram\_els\_p__ \- size of CCE microcode instruction RAM in number of instructions
* __mem\_els\_p__ \- number of cache block sized memory elements in the simulated memory
* __boot\_rom\_els\_p__ \- number of boot ROM words that will be used to initialize simulated memory
* __boot\_rom\_width\_p__ \- width of each boot ROM entry
### Interfaces
The Memory End instantiates the Coherence Network, which sends messages to and from the LCEs and
CCEs in the processor. Inbound messages are routed to the Coherence Network, which then delivers
them to either a CCE or another LCE, depending on the type of message. Outbound messages are
delivered to the LCEs and may come from either the CCE or another LCE.
* __LCE to CCE__ \- ready->valid (ME is helpful consumer)
* __CCE to LCE__ \- ready->valid (ME is demanding producer)
* __LCE to LCE (inbound)__ \- ready->valid (ME is helpful consumer)
* __LCE to LCE (outbound)__ \- ready->valid (ME is demanding producer)
Note: we use the terminology defined in the [BaseJump STL][1] paper.
## Cache Coherence Engine (CCE)
The Cache Coherence Engine (CCE) is the coherence controller for BlackParrot systems. It
implements a directory-based coherence protocol. The file *bp\_cce\_top.v* defines the Cache
Coherence Engine and instantiates the CCE and exposes a well-defined handshaking interface.
### Parameters
* __cce\_id\_p__ \- ID of this CCE in the system
* __num\_lce\_p__ \- number of LCEs in the system
* __num\_cce\_p__ \- number of CCEs in the system
* __num\_mem\_p__ \- number of memory units attached to this CCE (only 1 supported currently)
* __addr\_width\_p__ \- physical address width
* __lce\_assoc\_p__ \- Associativity of the LCEs
* __lce\_sets\_p__ \- number of Sets in each LCE
* __block\_size\_in\_bytes\_p__ \- number of bytes per cache block in the LCEs
* __num\_inst\_ram\_els\_p__ \- size of CCE microcode instruction RAM in number of instructions
### Interfaces
* __LCE to CCE__ \- ready->valid (CCE is helpful consumer)
* __CCE to LCE__ \- ready->valid (CCE is demanding producer)
* __L2 Mem to CCE__ \- ready->valid (CCE is helpful consumer)
* __CCE to L2 Mem__ \- valid->yumi (CCE is helpful producer)
* This interface is also known as valid->ready
## References
1. [BaseJump STL](http://cseweb.ucsd.edu/~mbtaylor/papers/Taylor_DAC_BaseJump_STL_2018.pdf)
[1]: http://cseweb.ucsd.edu/~mbtaylor/papers/Taylor_DAC_BaseJump_STL_2018.pdf
[2]: http://docs.google.com/presentation/d/1yfb3akbj7ajXSX3sYYmxcPwYRE8H5mElJf3b8Vi6mbo/edit