One-to-many PCIe transactions for efficient data distribution
PCIe Multicast enables a single TLP to be replicated and delivered to multiple destinations simultaneously. This eliminates the need to send separate copies of the same data to each recipient.
Unicast (Traditional):
Requester ───TLP1───► Device A
Requester ───TLP2───► Device B
Requester ───TLP3───► Device C
(3 separate TLPs)
Multicast:
┌──► Device A
Requester ───TLP───────┼──► Device B
└──► Device C
(1 TLP replicated at switch)
Multicast uses special address ranges configured via MC capability:
Multicast Address Decoding:
┌──────────────────────────────────────────────────────────────┐
│ Address falls in MC Base + MC Receive range? │
│ │
│ YES → Route as Multicast │
│ Bits [5:0] of address = MC Group Number (0-63) │
│ │
│ NO → Route as normal unicast │
└──────────────────────────────────────────────────────────────┘
| Offset | Register | Description |
|---|---|---|
| 00h | Extended Cap Header | ID = 0012h |
| 04h | MC Capability | Max groups, window sizes |
| 08h | MC Control | Enable, group count |
| 0Ch | MC Base Address (Low) | MC address range base |
| 10h | MC Base Address (High) | Upper 32 bits |
| 14h | MC Receive | Which groups to receive |
| 18h | MC Block All | Block untranslated MC |
| 1Ch | MC Block Untranslated | Block specific groups |
| 20h | MC Overlay BAR | BAR for MC address decode |
Switch receives MC TLP:
1. Decode address → MC Group N
2. For each downstream port:
- Check MC Receive register bit N
- If set → Replicate TLP to that port
3. If upstream port enabled for group:
- Forward upstream copy
┌─────────────────────────────────────────┐
│ Switch │
│ │
│ MC TLP ─────► Port 0 (Group 5 enabled) │
│ └──► Port 1 (Group 5 enabled) │
│ └──► Port 2 (Group 5 disabled)│
│ (not forwarded) │
└─────────────────────────────────────────┘
Multicast TLPs follow specific ordering rules: