Snitch Cluster
This ip contains a cluster of Snitch cores, arranged in a specific (but configurable fashion).
Memory Map
The memory map of the cluster is determined by the cluster_base_addr_i
signal.
Depending on the amount of memory the TCDM
and Periph
regions will be scaled
accordingly. The peripheral region will always be the same size as the TCDM
.
- Let
TCDMSize
denote the size of theTCDM
. - Let
PeripheralSize
denote the size of the cluster peripheral address space. - Let
TCDMEndAddress = cluster_base_addr_i + TCDMSize
- Let
SocEndAddress = TCDMEndAddress + PeripheralSize
Range | Dest | Description |
---|---|---|
[SocEndAddress - ) |
SoC | Routed out of the cluster. Address range depends on available address bits. |
[TCDMEndAddress - SocEndAddress ) |
Periph | Cluster local peripherals. |
[cluster_base_addr_i - TCDMEndAddress ) |
TCDM | Cluster local tightly coupled data memory. |
[0x0 - cluster_base_addr_i ) |
SoC | Routed out of the cluster. |
Info
Because the address check on each core's LSU path is quite critical, we rely
on a simplified checking scheme were we revert to checking the address
against a mask and base combination. This makes the hardware less expensive
(and faster) as no complicated adder circuits are needed and a couple of
and
gates are enough. (In comparison to a full address check where two
adders are need)
assign match = (addr_base & addr_mask) == (addr_to_check & addr_mask);
As a consequence the cluster_base_addr_i
has to be aligned to the the
TCDM
size, otherwise this check can't distinguish between routing to the
TCDM
or SoC
/Periph
. A static assertion checks that this holds true.