This ip contains a cluster of Snitch cores, arranged in a specific (but configurable fashion).
The memory map of the cluster is determined by the
Depending on the amount of memory the
Periph regions will be scaled
accordingly. The peripheral region will always be the same size as the
TCDMSizedenote the size of the
PeripheralSizedenote the size of the cluster peripheral address space.
TCDMEndAddress = cluster_base_addr_i + TCDMSize
SocEndAddress = TCDMEndAddress + PeripheralSize
||SoC||Routed out of the cluster. Address range depends on available address bits.|
||Periph||Cluster local peripherals.|
||TCDM||Cluster local tightly coupled data memory.|
||SoC||Routed out of the cluster.|
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
Periph. A static assertion checks that this holds true.