1 前言
Switch 芯片是数据中心、云计算、园区网络和运营商网络中的核心转发芯片。它需要在极高吞吐率下完成 Ethernet packet 的接收、解析、查表、缓存、调度、修改和发送。以 Broadcom BCM56980 为例,这是一颗 12.8 Tb/s 级别的高端多层交换芯片,支持最高 32 × 400GbE、64 × 200GbE 或 128 × 100GbE 的前面板端口能力,内部包含 256 × 50G PAM4 SerDes、32 个 BlackhawkCore、8 条 pipeline 和 64 MB SmartBuffer。
对 RTL 设计工程师来说,学习 Switch 芯片设计不能只从协议开始,也不能只从某个单点模块开始。更合理的方式是:
先理解网络和交换芯片的基本概念
-> 再训练 FIFO / CRC / ECC / width conversion / handshake 等 RTL 基础模块
-> 再进入 MAC / packet stream / packet buffer / queue / scheduler
-> 再学习 QoS / MMU / multi-pipeline / SerDes / 管理接口
-> 最后通过一个简化 switch demo 把知识串起来
本文结合 Broadcom BCM56980 datasheet 中公开的高端商用交换芯片信息,以及一个面向新员工训练的 RTL design skill 表,整理一套循序渐进的 Switch 芯片设计学习路线。目标不是一开始复刻 BCM56980,而是先掌握可实现、可验证、可扩展的简化模型,再逐步理解商用 Switch ASIC 的架构取舍。
2 基础概念和术语
Switch 芯片文章中会频繁出现网络协议、芯片架构和 RTL 实现术语。为了方便后续阅读,本节先统一解释常用概念。
2.1 Ethernet 与 Packet
| 术语 | 含义 |
|---|---|
| Ethernet / 以太网 | 最常见的二层网络技术,Switch 芯片主要处理 Ethernet frame |
| Frame / Packet | 在二层通常称 frame,在芯片内部或更通用语境中常称 packet |
| MAC | Media Access Control,可以指 MAC 地址,也可以指 Ethernet MAC 模块 |
| FCS | Frame Check Sequence,Ethernet frame 尾部的 CRC 校验字段 |
| Jumbo Frame | 超过标准 1518/1522 字节的较大 Ethernet frame,例如 9 KB 级别 |
| SOP / EOP | Start of Packet / End of Packet,表示 packet 起始和结束 |
| Beat | 宽数据总线上的一次传输,例如 512b datapath 上每拍一个 beat |
| Empty / Keep | 表示 EOP beat 中哪些 byte 无效或有效 |
2.2 L2 / L3 / 查表转发
| 术语 | 含义 |
|---|---|
| L2 Switching | 根据目的 MAC 地址和 VLAN 进行二层转发 |
| L3 Routing | 根据 IP 地址进行三层路由转发 |
| VLAN | Virtual LAN,用于二层网络隔离 |
| LPM | Longest Prefix Match,最长前缀匹配,常用于 IP 路由表 |
| ACL | Access Control List,访问控制列表,用于包过滤、重定向、统计、限速等 |
| ECMP | Equal-Cost Multi-Path,多路径等价路由,常用于数据中心负载均衡 |
| Multicast | 组播,一个 packet 复制到多个目的端口或目的组 |
2.3 Buffer / Queue / MMU
| 术语 | 含义 |
|---|---|
| Buffer | 用于临时存放 packet 或 packet cell 的存储资源 |
| Packet Buffer | 存放 packet payload 的大容量片上存储 |
| Cell | 将 packet 切成固定大小片段后的基本 buffer 分配单位 |
| Descriptor | packet 描述符,记录 packet 起始地址、长度、目的端口、QoS 等 metadata |
| Queue | 队列,通常存 descriptor,而不是直接存 payload |
| MMU | Memory Management Unit,在 Switch 中通常负责 buffer、queue、admission、threshold 和 flow control |
| SmartBuffer | Broadcom datasheet 中对高性能共享 packet buffer 的称呼 |
| HOL Blocking | Head-of-Line Blocking,队头阻塞问题 |
| VOQ | Virtual Output Queue,为不同输出目的维护独立队列以缓解 HOL blocking |
2.4 QoS / 调度 / 流控
| 术语 | 含义 |
|---|---|
| QoS | Quality of Service,服务质量,决定不同流量的优先级、带宽和丢弃策略 |
| Scheduler | 调度器,从多个 queue 中选择下一个发送的 packet |
| RR | Round Robin,轮询调度 |
| WRR | Weighted Round Robin,带权轮询 |
| DRR | Deficit Round Robin,适合变长 packet 的调度算法 |
| SP | Strict Priority,严格优先级调度 |
| Shaper | 整形器,限制流量输出速率 |
| Token Bucket | 令牌桶,常用于 shaper 和 policer |
| WRED | Weighted Random Early Discard,基于队列深度的随机早期丢弃 |
| ECN | Explicit Congestion Notification,显式拥塞通知,拥塞时标记而不是直接丢包 |
| PFC | Priority-based Flow Control,基于优先级的无损流控 |
| ETS | Enhanced Transmission Selection,为不同 traffic class 提供带宽保证 |
2.5 SerDes / MAC / PCS
| 术语 | 含义 |
|---|---|
| SerDes | Serializer / Deserializer,高速串并转换接口 |
| NRZ | 两电平信号,每个 symbol 表示 1 bit |
| PAM4 | 四电平信号,每个 symbol 表示 2 bit,常用于 50G lane |
| PCS | Physical Coding Sublayer,位于 MAC 和 PMA/SerDes 之间,负责编码、lane 对齐、FEC 等 |
| FEC | Forward Error Correction,前向纠错,高速链路中用于降低误码影响 |
| Lane | 高速串行通道,一个 400G 端口通常由多个 lane 聚合 |
| Flexport | 运行时改变端口速率、lane 数和逻辑端口映射的能力 |
2.6 RTL 与验证术语
| 术语 | 含义 |
|---|---|
| Valid / Ready | 数据流握手协议,valid && ready 表示传输成功 |
| Request / Grant | 仲裁类握手,request 表示申请,grant 表示被授权 |
| Credit | 信用流控,下游预先给上游可发送额度 |
| CDC | Clock Domain Crossing,跨时钟域 |
| FIFO | First In First Out,先进先出队列 |
| Free List | 空闲资源链表或队列,用于管理可分配 buffer |
| Banking | 将 memory 拆成多个 bank,提高并行访问能力 |
| Backpressure | 反压,下游资源不足时通知上游暂停发送 |
| Throughput | 吞吐率,单位时间内可处理的数据量 |
| Latency | 延迟,从输入到输出经历的时间 |
3 Switch 芯片的整体数据流
一个典型以太网 Switch ASIC 的 datapath 可以简化为:
RX SerDes
-> PCS
-> MAC RX
-> Ingress Parser
-> VLAN / L2 / L3 / ACL / QoS Classification
-> Buffer Admission
-> Packet Buffer / MMU / Queue
-> Scheduler
-> Egress Modification
-> MAC TX
-> PCS
-> TX SerDes
从 RTL 视角看,它本质上是一条围绕 packet metadata 和 payload 展开的深流水线。payload 通常进入共享 packet buffer,metadata 则沿 pipeline 传递并最终形成 descriptor。descriptor 进入 queue 后,由 egress scheduler 决定何时读出 payload 并发送到对应 TX 端口。

image2 prompt:绘制一张现代数据中心 Ethernet Switch ASIC 数据流架构图,横向从左到右,包含 RX SerDes、PCS、MAC RX、Ingress Parser、L2/L3 Lookup、ACL/QoS、MMU Admission、Shared Packet Buffer、Queue、Scheduler、Egress Pipeline、MAC TX、PCS、TX SerDes。风格为清晰的技术框图,蓝灰色主题,适合博客文章,标注 ingress、MMU、egress 三个大区域。
BCM56980 datasheet 中的总体能力可以作为学习目标的参照:
| 项目 | BCM56980 公开资料中的特征 |
|---|---|
| 总带宽 | 12.8 Tb/s |
| 典型端口 | 32 × 400G、64 × 200G、128 × 100G |
| SerDes | 256 × 50G PAM4 |
| SerDes Core | 32 个 BlackhawkCore,每个 8 lane |
| Pipeline | 8 条 pipe,每条 pipe 承担约 1/8 总吞吐 |
| Buffer | 64 MB SmartBuffer |
| Queue | 每端口 12 个 queue |
| 转发能力 | L2、L3、IPv4、IPv6、ECMP、MPLS、GRE 等 |
| QoS | WRED、ECN、PFC、ETS、Shaper、Scheduler |
| 管理接口 | PCIe、MDIO、BSC/I2C、JTAG、LED、QSPI、SPI、UART |
| 时间同步 | IEEE 1588v2、802.1AS、SyncE、BroadSync |
4 学习路线总览
Switch 芯片设计可以按八个阶段学习:
Phase 0:网络与交换芯片基础
Phase 1:RTL 基础模块能力
Phase 2:MAC / Packet Stream 数据通路
Phase 3:Packet Buffer / Queue / MMU
Phase 4:调度算法与 QoS
Phase 5:Switch Pipeline 架构
Phase 6:SerDes / PCS / 高速接口理解
Phase 7:管理接口与系统集成
Phase 8:完整 Demo Switch 项目
对应关系如下:
| 阶段 | 学习重点 | 目标产出 |
|---|---|---|
| Phase 0 | Ethernet、L2/L3、VLAN、QoS、Switch datapath | 画出 switch 总体架构图 |
| Phase 1 | FIFO、Free List、CRC、ECC、Width Conversion、Handshake | 完成基础 RTL module 和 testbench |
| Phase 2 | 512b packet stream、MAC wrapper、SOP/EOP/empty | 能处理 packet 流 |
| Phase 3 | Descriptor queue、packet buffer、banked memory、MMU admission | 完成 payload 和 descriptor 解耦 |
| Phase 4 | RR/WRR/DRR/SP、WRED、ECN、Shaper | 完成 QoS 和调度模块 |
| Phase 5 | Multi-pipeline、crossbar、VOQ、Clos | 理解高带宽可扩展架构 |
| Phase 6 | PAM4、NRZ、FEC、lane aggregation、Flexport | 理解高速端口实现方式 |
| Phase 7 | PCIe、MDIO、I2C、JTAG、LED、QSPI、寄存器 | 理解控制面和系统集成 |
| Phase 8 | 8 × 100G simplified switch demo | 形成完整训练项目 |

image2 prompt:绘制一张 Switch 芯片设计学习路线图,采用从下到上的阶梯或路线图形式,包含 Phase 0 网络基础、Phase 1 RTL基础、Phase 2 MAC/Packet Stream、Phase 3 Packet Buffer/MMU、Phase 4 Scheduler/QoS、Phase 5 Multi-Pipeline/Fabric、Phase 6 SerDes/PCS、Phase 7 Management Interfaces、Phase 8 Demo Switch Project。风格简洁、工程技术感、蓝绿色配色,适合中文技术博客。
5 Phase 0:网络与交换芯片基础
第一阶段不急着写 RTL,而是先理解 Switch 芯片要解决什么问题。最基本的问题是:一个 packet 从某个 RX 端口进来后,芯片如何判断它应该从哪个 TX 端口出去。
5.1 必须理解的网络基础
| 主题 | 学习目标 |
|---|---|
| Ethernet frame | 理解 DA、SA、EtherType、payload、FCS |
| MAC learning | 理解二层交换如何学习源 MAC 和查找目的 MAC |
| VLAN | 理解端口隔离和 VLAN tag |
| L2 switching | 理解基于 MAC/VLAN 的转发 |
| L3 routing | 理解基于 IP lookup 的转发 |
| ACL | 理解基于字段匹配的过滤、统计、重定向 |
| ECMP | 理解多路径负载均衡 |
| Multicast | 理解 packet replication |
| Cut-through / Store-and-forward | 理解低延迟和完整校验之间的取舍 |
5.2 建议阅读 BCM56980 datasheet 的章节
| Datasheet 部分 | 阅读重点 |
|---|---|
| Overview | 芯片定位和总体能力 |
| Chapter 1 Introduction | 设备族、端口和 PCIe 基础 |
| Chapter 2 Device Overview | feature list、scalability、table size |
| Table 1 / Table 2 | 不同 SKU 的 I/O bandwidth 和端口能力 |
| Table 3 | L2、L3、QoS、MMU、ACL、telemetry 等功能 |
| Table 4 | SerDes 数量、buffer size、MAC entries、VLAN、VRF、ECMP 等规模 |
| Chapter 3 | 外部接口和 SerDes 组织方式 |
5.3 本阶段输出
建议完成三份学习笔记:
BCM56980 feature summary;Switch packet datapath overview;L2/L3/QoS/MMU 术语表。
6 Phase 1:RTL 基础模块能力
Switch 芯片看起来很复杂,但底层是大量基础 RTL 模块的组合。学习顺序建议从最常见、最容易复用的模块开始。
6.1 FIFO
FIFO 是 Switch 芯片里出现频率最高的基础结构之一。它用于 pipeline 解耦、速率匹配、CDC、request buffering 和 descriptor queue。
学习目标:
- sync FIFO;
- async FIFO;
- full / empty / almost full / almost empty;
- pointer wrap;
- FIFO depth sizing;
- peek / non-peek;
- Gray pointer CDC;
- overflow / underflow 检测。
建议小项目:
Async FIFO + performance test
覆盖场景:
- 不同时钟频率;
- write faster than read;
- read faster than write;
- reset release;
- pointer wrap;
- random read/write;
- full/empty 边界。
6.2 Free List 和 Linked List
Switch packet buffer 通常不会为每个 packet 固定分配最大长度空间,而是把 buffer 切成 cell 或 line,由 free list 管理空闲资源。
典型结构:
free_list_head
free_list_tail
next_ptr_sram[cell_id]
queue_head[qid]
queue_tail[qid]
建议小项目:
Global free pool + per-queue linked list
需要支持:
- alloc cell;
- free cell;
- enqueue packet cell chain;
- dequeue packet cell chain;
- no free cell 时反压或丢包。

image2 prompt:绘制 packet buffer free list 和 per-queue linked list 的示意图。左侧是 global free pool,包含多个 cell_id,通过 next_ptr 串联;右侧是多个 queue,每个 queue 有 head/tail pointer,packet 由多个 cell 链接组成;底部显示 next_ptr SRAM。技术框图风格,清晰标注 alloc、free、enqueue、dequeue。
6.3 Memory Banking
高带宽 Switch 芯片不能依赖单块大 memory,因为多端口同时读写会造成端口数和带宽不可实现。Banking 的思想是把 memory 拆成多个 bank,通过地址 interleave、hash 或仲裁提高并行访问能力。
学习重点:
- bank select;
- bank conflict;
- read/write arbitration;
- interleave;
- hash-based distribution;
- conflict rate 统计。
建议小项目:
128 request -> 64 bank conflict simulation
输出:
- conflict rate;
- average latency;
- worst-case latency;
- per-bank utilization;
- arbitration fairness。
6.4 CRC 和 ECC
CRC 用于 packet 级完整性检查,ECC 用于 memory 级错误检测和纠正。
CRC 建议项目:
CRC32 512b parallel generator/checker
重点:
- polynomial;
- bit order;
- seed;
- final invert;
- EOP empty/keep;
- pipeline latency。
ECC 建议项目:
SRAM + SECDED ECC model
重点:
- Hamming code;
- syndrome;
- single-bit correction;
- double-bit detection;
- error injection。
6.5 Data Align 和 Width Conversion
Switch datapath 中经常需要不同数据宽度转换,例如:
64b -> 256b
256b -> 512b
512b -> 2048b
2048b -> 512b
建议小项目:
packet align module: 512b -> 2048b
需要处理:
- SOP 对齐;
- EOP 对齐;
- tail empty;
- packet length;
- back-to-back packet;
- output line valid byte mask。
6.6 Handshake 和 Backpressure
Switch 内部大量使用 valid/ready、request/grant 和 credit。如果握手语义不清楚,后续 queue、buffer、scheduler 都容易出错。
必须掌握:
valid && ready = transfer
request && grant = arbitration success
credit > 0 = allowed to send
建议小项目:
credit-based flow control system
7 Phase 2:MAC 和 Packet Stream 数据通路
第二阶段的目标是建立 packet-based streaming datapath 的设计能力。建议先统一内部 packet stream 接口,再逐步从 25G、50G、100G 理解到 200G/400G。
7.1 推荐统一 Packet Stream 接口
logic valid;
logic ready;
logic [511:0] data;
logic sop;
logic eop;
logic [5:0] empty; // 或使用 keep[63:0]
含义:
| 信号 | 含义 |
|---|---|
valid |
当前 beat 有效 |
ready |
下游可以接收 |
data |
packet 数据 |
sop |
当前 beat 是 packet 起始 |
eop |
当前 beat 是 packet 结束 |
empty |
EOP beat 中无效 byte 数量 |
7.2 从 25G 到 100G MAC
对学习来说,25G MAC 更适合理解基础 Ethernet frame,100G MAC 更适合理解宽 datapath 和吞吐压力。
| 速率 | 学习重点 |
|---|---|
| 25G | MAC RX/TX FSM、preamble、SFD、FCS、IPG |
| 50G | 位宽和时钟权衡、PAM4 lane 概念 |
| 100G | 512b datapath、CRC pipeline、SOP/EOP/empty、backpressure |
| 200G | 多 lane merge、elastic buffer、pipeline 切分 |
| 400G | 8 lane 聚合、FEC、lane alignment、超高吞吐架构 |
7.3 BCM56980 的端口模式参考
BCM56980 的 BlackhawkCore 每个 core 有 8 条 SerDes lane,每条 lane 可支持 10.3125 Gb/s 到 53.125 Gb/s 范围的速率。不同端口速率通过 lane aggregation 实现。
| 端口速率 | 典型 lane 数 | Signaling | 说明 |
|---|---|---|---|
| 10G | 1 | NRZ | legacy Ethernet |
| 25G | 1 | NRZ | 常见 server 接口 |
| 50G | 1 | PAM4 | 50G lane |
| 100G | 2 或 4 | PAM4 / NRZ | 2 × 50G PAM4 或 4 × 25G NRZ |
| 200G | 4 | PAM4 | 4 × 50G |
| 400G | 8 | PAM4 | 8 × 50G |

image2 prompt:绘制 Ethernet switch 中端口速率与 SerDes lane 聚合关系图。展示 50G=1 lane PAM4,100G=2 lane PAM4,200G=4 lane PAM4,400G=8 lane PAM4。右侧画一个 BlackhawkCore,内部 8 条 SerDes lane,可组成一个 400G port 或多个 100G/50G port。风格为清晰硬件架构示意图。
8 Phase 3:Packet Buffer、Queue 和 MMU
Packet Buffer / Queue / MMU 是 Switch 芯片的核心。前端 MAC 负责收包,后端 MAC 负责发包,而中间的 MMU 决定 packet 是否能被接收、存在哪里、进入哪个 queue、何时被调度出去。
8.1 Queue 存 Descriptor,不直接存 Payload
推荐从一开始就建立这个架构观念:
Queue stores descriptor
Memory stores payload
也就是:
packet payload -> packet memory
packet metadata -> descriptor FIFO
这样可以把 queue 管理和 payload 存储解耦。

image2 prompt:绘制 descriptor queue 与 payload memory 解耦架构图。Ingress packet 被拆成 metadata 和 payload,payload 写入 banked packet memory,metadata 形成 descriptor 进入 queue。Egress scheduler 从 queue 取 descriptor,再根据 start_line_id 从 packet memory 读 payload。标注 descriptor 字段:qid、src_port、dst_port、start_line_id、line_count、pkt_len。
8.2 Packet Descriptor 字段
建议 descriptor 包含:
| 字段 | 位宽建议 | 含义 |
|---|---|---|
qid |
3 | queue id |
src_port |
3 | 源端口 |
dst_port |
3 | 目的端口 |
start_line_id |
12 ~ 16 | packet 首地址 |
line_count |
8 ~ 12 | 占用多少个 memory line |
pkt_len_bytes |
16 | packet byte length |
last_line_valid_bytes |
8 | 最后一行有效字节数 |
drop_pri |
optional | 丢弃优先级 |
tc |
optional | traffic class |
8.3 Packet Memory Line 接口
为了训练 512b 到 2048b 的 pack/unpack,packet memory 可以先设计成 2048b line:
logic wr_req;
logic [1:0] wr_bank;
logic [ADDR_W-1:0] wr_addr;
logic [2047:0] wr_data;
logic [255:0] wr_keep;
logic wr_last;
logic rd_req;
logic [1:0] rd_bank;
logic [ADDR_W-1:0] rd_addr;
logic [2047:0] rd_data;
logic rd_valid;
8.4 MMU 中需要关注的问题
| 问题 | 说明 |
|---|---|
| Admission control | packet 进来时是否允许写入 buffer |
| Buffer allocation | 从 free list 分配 line/cell |
| Queue threshold | 根据 queue depth 决定是否反压或丢弃 |
| Shared buffer | 多端口共享 buffer,提高利用率 |
| Static / dynamic allocation | 固定保留和动态共享的折中 |
| HOL prevention | 避免一个拥塞输出阻塞其他输出 |
| Statistics | 统计 queue depth、drop count、occupancy |
9 Phase 4:调度算法与 QoS
QoS 决定了拥塞时谁先发、谁被限速、谁被丢弃。Switch 芯片中 QoS 通常横跨 ingress admission、MMU queue 和 egress scheduler。
9.1 RR / WRR / DRR / SP
| 算法 | 特点 | 适用场景 |
|---|---|---|
| RR | 简单公平轮询 | 等权 queue |
| WRR | 按权重分配服务机会 | 固定权重带宽分配 |
| DRR | 使用 deficit counter,适合变长 packet | packet 长度差异较大 |
| SP | 高优先级绝对优先 | 控制流量、低延迟业务 |
DRR 的核心伪代码:
for each queue q:
deficit[q] += quantum[q]
if queue[q].head_pkt_len <= deficit[q]:
send packet
deficit[q] -= head_pkt_len
9.2 WRED:Ingress Admission Control
WRED 位于 enqueue side,本质是 admission control。它根据 queue depth 提前随机丢包,避免 buffer 完全填满后出现全局拥塞。
depth < min_th -> no drop
min_th ~ max_th -> random drop
depth >= max_th -> drop
建议简化实现:
drop_prob = f(queue_depth, min_th, max_th, max_p);
drop = random_value < drop_prob;
9.3 Shaper:Egress Service Control
Shaper 位于 dequeue side,本质是控制服务速率。最常见实现是 token bucket。
token += rate
if token >= pkt_len:
send packet
token -= pkt_len
else:
hold
9.4 WRED 和 Shaper 的位置区别
| 模块 | 位置 | 作用 |
|---|---|---|
| WRED | Ingress / enqueue side | 决定 packet 是否进入 queue |
| Shaper | Egress / dequeue side | 决定 queue 何时被服务 |
| Scheduler | Egress side | 多个 queue 中选择哪个先发 |
| Policer | 通常 ingress side | 判断流量是否超约束,可能 drop/mark |

image2 prompt:绘制 Switch QoS 中 WRED 和 Shaper 的位置示意图。左侧 Ingress packet 进入 WRED admission control,WRED 根据 queue depth 决定 admit/drop;中间是 Queue 和 Packet Buffer;右侧 Egress Scheduler 和 Token Bucket Shaper 控制 dequeue 到 TX MAC。用不同颜色标出 enqueue side 和 dequeue side。
10 Phase 5:Switch Pipeline 和 Fabric 架构
当总带宽达到 Tb/s 级别时,单条 pipeline 无法承载所有端口。因此高端 Switch ASIC 通常拆成多个 pipe。BCM56980 就是 8-pipe 架构,每个 pipe 处理约 1.6 Tb/s I/O 带宽。
10.1 为什么需要 Multi-Pipeline
主要原因:
- 单 pipeline 数据宽度过大;
- SRAM 读写端口不可实现;
- lookup table 访问压力过高;
- timing closure 困难;
- wire congestion 严重;
- 功耗和时钟树压力过大。
10.2 BCM56980 的 Pipe 与 SerDes 关系
可以用下面的方式理解:
32 BlackhawkCore
每个 BlackhawkCore = 8 × 50G SerDes lane
每 pipe 4 个 BlackhawkCore:
4 × 8 × 50G = 1.6 Tb/s
8 pipe:
8 × 1.6 Tb/s = 12.8 Tb/s

image2 prompt:绘制 BCM56980 风格的多 pipeline switch 架构概念图。显示 8 个 Pipe,从 Pipe0 到 Pipe7;每个 Pipe 连接 4 个 BlackhawkCore,每个 BlackhawkCore 内部有 8 条 50G SerDes lane;中间连接到 shared MMU/Fabric/packet buffer 概念模块。标注每 pipe 约 1.6Tb/s,总计 12.8Tb/s。风格为专业芯片架构图。
10.3 Crossbar、VOQ 和 Clos
如果 packet 从 pipe0 进入,但目的端口在 pipe5,就需要内部 fabric 或 crossbar 完成跨 pipe 转发。
需要逐步学习:
| 架构 | 学习重点 |
|---|---|
| Crossbar | input/output arbitration、grant matrix |
| iSLIP | 高效 input queued switch matching |
| VOQ | 为每个输出维护虚拟队列,缓解 HOL blocking |
| Clos Network | 多级交换结构,提高扩展性 |
| Multi-stage Fabric | 分阶段传输,平衡 latency 和 wiring |
建议小项目:
4-pipe mini switch + central crossbar
11 Phase 6:SerDes、PCS、FEC 和 Flexport
对 RTL 工程师来说,SerDes 模拟细节不一定要完全掌握,但必须理解高速端口如何从 lane 组合出来,以及 PCS/FEC 对 datapath 的影响。
11.1 NRZ 和 PAM4
| 项目 | NRZ | PAM4 |
|---|---|---|
| 电平数 | 2 | 4 |
| 每 symbol bit 数 | 1 | 2 |
| 信噪比要求 | 较低 | 较高 |
| 电路复杂度 | 较低 | 较高 |
| 常见速率 | 10G / 25G | 50G / 100G / 200G / 400G |
11.2 FEC
PAM4 链路误码率相对更高,因此高速 Ethernet 端口通常需要 FEC。BCM56980 datasheet 中提到支持 RS528、RS544、RS272、BASE-R 等 FEC 相关模式。
学习重点:
- FEC 会增加 latency;
- FEC 会影响 PCS pipeline;
- FEC 与 lane group 有绑定关系;
- 某些 FEC 模式对同一个 lane group 有一致性要求;
- FEC 纠错能力和码率开销之间存在取舍。
11.3 Flexport
Flexport 指运行时改变端口速率和 lane 配置的能力。例如同一个 8-lane SerDes core,可以配置成:
1 × 400G
2 × 200G
4 × 100G
8 × 50G
但实际商用芯片中还会受到 PLL、VCO、FEC、lane grouping、SDK logical port mapping 等限制。
12 Phase 7:管理接口与系统集成
Switch ASIC 不只有 datapath,还需要控制面和管理面。Host CPU 需要通过寄存器配置端口、读取状态、设置表项、收发 CPU packet。
12.1 BCM56980 中常见管理接口
| 接口 | 作用 |
|---|---|
| PCIe Gen3 x4 | Host CPU 访问寄存器、表项和 DMA packet |
| MDIO / MIIM | 管理外部 PHY |
| BSC / I2C | 访问板级器件、VRM、电源管理 |
| JTAG | 边界扫描和 debug |
| LED | 端口状态灯控制 |
| QSPI | boot firmware |
| SPI | 外设控制 |
| UART | 内部 mHost 或 1588 相关调试 |
| BroadSync | 时间同步 |
| SyncE | 频率同步 |
12.2 建议学习顺序
- APB / AXI-lite register file;
- counter 和 sticky status;
- interrupt;
- MDIO Clause 22 / Clause 45;
- I2C/BSC master;
- packet DMA 概念;
- PCIe register access 架构;
- JTAG boundary scan 概念。
12.3 Switch Register Block 示例
switch_reg_block
├── port_enable[port]
├── port_speed[port]
├── queue_threshold[qid]
├── wred_min_th[qid]
├── wred_max_th[qid]
├── shaper_rate[qid]
├── shaper_bucket_size[qid]
├── drop_counter[qid]
├── tx_packet_counter[port]
└── rx_packet_counter[port]
13 Phase 8:8 × 100G Simplified Switch Demo
最推荐的训练项目是一个简化但完整的 8 × 100G Switch。它不实现完整 L2/L3 lookup,而使用固定转发规则,但保留 Switch datapath 中最核心的 buffer、queue、QoS 和 scheduler 机制。
13.1 Demo 目标
8 个 100G RX
8 个 100G TX
512b datapath
4-bank packet memory
8 个 queue
descriptor queue
WRED
Shaper
固定转发规则
固定转发关系:
RX0 -> Queue1 -> TX1
RX1 -> Queue2 -> TX2
RX2 -> Queue3 -> TX3
RX3 -> Queue4 -> TX4
RX4 -> Queue5 -> TX5
RX5 -> Queue6 -> TX6
RX6 -> Queue7 -> TX7
RX7 -> Queue0 -> TX0
也就是:
dst_qid = (src_port + 1) % 8;
tx_port = dst_qid;
13.2 推荐 Module Hierarchy
demo_switch_top
├── mac_rx_port[8]
├── mac_tx_port[8]
├── ingress_pipe[8]
│ ├── rx_route
│ ├── ing_wred
│ ├── pkt_assemble_512_to_2048
│ └── ingress_enq
├── queue_mgr
│ ├── q_desc_fifo[8]
│ └── q_depth_counter[8]
├── buffer_mgr
│ ├── free_list_mgr
│ └── bank_alloc_arb
├── pkt_mem_subsys
│ ├── pkt_mem_bank[4]
│ ├── pkt_mem_wr_arb
│ ├── pkt_mem_rd_arb
│ └── pkt_disassemble_2048_to_512
└── egress_pipe[8]
├── eg_shaper
├── egress_sched
├── egress_deq
└── tx_formatter

image2 prompt:绘制 8x100G simplified switch demo 的模块层次图。顶层 demo_switch_top,包含 mac_rx_port[8]、mac_tx_port[8]、ingress_pipe[8]、queue_mgr、buffer_mgr、pkt_mem_subsys、egress_pipe[8]。ingress_pipe 内含 rx_route、ing_wred、pkt_assemble_512_to_2048、ingress_enq;queue_mgr 内含 q_desc_fifo[8] 和 q_depth_counter[8];pkt_mem_subsys 内含 4 个 packet memory bank、read/write arbiter 和 disassemble。清晰的树状结构技术图。
13.3 Ingress 数据流
MAC RXi
-> rx_route[i]
-> ing_wred[q=(i+1)%8]
-> pkt_assemble_512_to_2048[i]
-> ingress_enq[i]
-> buffer_mgr alloc line
-> pkt_mem_bank[bank_id] write
-> generate packet descriptor
-> push descriptor into Queue[(i+1)%8]
13.4 Egress 数据流
Queue[i]
-> eg_shaper[i]
-> egress_sched[i]
-> egress_deq[i]
-> pkt_mem_bank[bank_id] read
-> pkt_disassemble_2048_to_512
-> tx_formatter[i]
-> MAC TXi
-> buffer_mgr free line
13.5 分阶段实现
Demo Phase 1:先跑通 packet path
暂时不做 WRED、Shaper 和复杂 bank conflict,只要求 packet 从 RX 到 TX 内容正确。
验收标准:
- packet count 正确;
- packet content 正确;
- SOP/EOP 正确;
- empty/keep 正确;
- packet length 正确。
Demo Phase 2:加入 Buffer Manager
实现:
buffer_mgr;free_list_mgr;bank_alloc_arb;- no free line 时 backpressure;
- free 后资源可复用。
Demo Phase 3:加入 WRED
支持参数:
min_th
max_th
max_p
验收标准:
- depth 小于 min_th 不丢;
- depth 大于 max_th 必丢;
- 中间区域按概率丢;
- drop counter 正确。
Demo Phase 4:加入 Shaper
支持参数:
token_rate
bucket_size
验收标准:
- 输出平均速率不超过配置;
- bucket 允许 burst;
- token 不 overflow;
- token 不足时不 dequeue。
Demo Phase 5:性能和 Corner Case
测试内容:
- minimum packet;
- jumbo packet;
- back-to-back packet;
- 8 port 同时灌包;
- 单 queue 热点流量;
- bank conflict;
- queue full;
- buffer full;
- WRED drop;
- shaper rate limit;
- TX ready 拉低;
- reset during traffic。
14 与 BCM56980 架构的对应关系
Demo 不是 BCM56980 的实现,但可以作为理解商用 Switch ASIC 的抽象模型。
| Demo 模块 | BCM56980 对应概念 |
|---|---|
mac_rx_port / mac_tx_port |
10G/50G/100G/200G/400G MAC |
pkt_assemble / pkt_disassemble |
高速 datapath width conversion |
buffer_mgr |
SmartBuffer resource allocation |
free_list_mgr |
cell / line free pool |
q_desc_fifo |
MMU queue |
q_depth_counter |
queue occupancy / MMU statistics |
ing_wred |
WRED admission control |
eg_shaper |
egress shaping |
egress_sched |
SP / RR / WRR / WDRR scheduler |
pkt_mem_bank |
banked packet buffer |
rx_route |
L2/L3 lookup 的简化替代 |
| descriptor | internal packet metadata |
| backpressure | PFC / HOL / MMU threshold 的基础机制 |
15 推荐学习时间表
如果每周投入 8 ~ 12 小时,可以按 20 周左右规划。
第 1 ~ 2 周:Switch 基础和 Datasheet 阅读
学习内容:
- Ethernet frame;
- L2 switching;
- L3 routing;
- VLAN;
- QoS;
- BCM56980 overview。
输出:
- BCM56980 总体架构图;
- feature summary 表;
- 端口模式表。
第 3 ~ 5 周:RTL 基础模块
实现:
- sync FIFO;
- async FIFO;
- free list;
- linked list queue;
- CRC32;
- ECC SRAM model;
- 512b to 2048b aligner。
第 6 ~ 8 周:Packet Buffer / Queue
实现:
- descriptor FIFO;
- queue manager;
- buffer manager;
- packet memory bank;
- memory read/write arbiter。
第 9 ~ 11 周:QoS / Scheduler
实现:
- RR;
- WRR;
- DRR;
- Strict Priority;
- Token Bucket Shaper;
- WRED;
- ECN marker。
第 12 ~ 16 周:8 × 100G Demo Switch
实现完整 demo:
8 RX
8 TX
512b stream
2048b packet memory
4 bank memory
8 queue
WRED
Shaper
第 17 ~ 20 周:高级架构
学习:
- multi-pipeline;
- crossbar;
- VOQ;
- Clos;
- Flexport;
- SerDes lane aggregation;
- PFC / ETS;
- TimeSync。
小项目:
4-pipe mini switch + crossbar
16 优先级建议
如果时间有限,可以按 P0 / P1 / P2 分层。
16.1 P0:必须掌握
FIFO
valid/ready
packet stream
SOP/EOP/empty
CRC
descriptor queue
packet buffer
free list
memory banking
RR/WRR scheduler
WRED
token bucket shaper
16.2 P1:进阶掌握
DRR
VOQ
crossbar
ECN
PFC
linked-list cell buffer
multi-pipeline
L2 lookup
L3 lookup
ACL TCAM
16.3 P2:架构理解即可
PAM4 SerDes
FEC
PCIe Gen3
BroadSync
IEEE 1588
SyncE
thermal / power / AVS
package / ballout
17 如何阅读 BCM56980 Datasheet
Datasheet 不建议从第一页逐字读到最后,而应按目标分层阅读。
17.1 第一遍:看架构和能力
重点:
- Overview;
- Feature List;
- Table 1;
- Table 2;
- Table 3;
- Table 4;
- Figure 1。
问题:
- 芯片支持多少总带宽?
- 有多少 SerDes?
- 有多少 pipe?
- 每个 pipe 大约多少带宽?
- 支持哪些 L2/L3/QoS 功能?
- Buffer 多大?
- Queue 和 table size 到什么规模?
17.2 第二遍:看端口和 SerDes
重点:
- Chapter 3;
- Table 6;
- Table 7;
- BlackhawkCore;
- Flexport。
问题:
- 400G 为什么是 8 lane?
- 200G 为什么是 4 lane?
- 100G 有哪些模式?
- PAM4 和 NRZ 如何共存?
- FEC 有哪些限制?
- Flexport 改速时有哪些约束?
17.3 第三遍:看系统接口
重点:
- PCIe;
- MIIM / MDIO;
- BSC / I2C;
- JTAG;
- LED;
- QSPI;
- BroadSync。
问题:
- Host CPU 如何控制 switch?
- PHY 如何管理?
- boot firmware 从哪里加载?
- LED 状态如何输出?
- PTP/1588 需要哪些接口?
17.4 第四遍:看电源、时钟、热
重点:
- Operating Conditions;
- Power Supply;
- Clock Requirements;
- Thermal Specs。
问题:
- 为什么 12.8T switch 功耗高达数百瓦?
- 为什么需要 AVS?
- 为什么需要复杂散热?
- 哪些 reference clock 是必须的?
- SerDes reference clock jitter 为什么要求很严?
18 总结
Switch 芯片设计的学习难点在于它横跨网络协议、RTL 基础模块、高速数据通路、buffer/MMU、QoS、SerDes、系统接口和验证方法。比较有效的学习方式不是直接试图理解完整商用芯片,而是沿着下面这条主线逐步搭建能力:
FIFO
-> valid/ready stream
-> CRC32
-> 512b packet parser
-> 512b to 2048b aligner
-> descriptor FIFO
-> free list buffer manager
-> banked packet memory
-> queue manager
-> RR/WRR scheduler
-> WRED
-> token bucket shaper
-> 8-port demo switch
-> multi-pipeline / crossbar
-> 对照 BCM56980 datasheet 理解商用架构
这条路线的核心思想是:先用可控规模的 RTL demo 建立 packet datapath、buffer、queue 和 QoS 的工程直觉,再回头阅读 BCM56980 这类高端 Switch ASIC datasheet,理解为什么商用芯片需要 8 pipe、256 条 50G PAM4 SerDes、SmartBuffer、复杂 QoS、Flexport、PCIe 管理面和严格的电源/热设计。
19 参考资料
-
Broadcom BCM56980 Data Sheet: 12.8 Tb/s Multilayer Switch
https://www.broadcom.com/products/ethernet-connectivity/switching/strataxgs/bcm56980-series -
IEEE 802.3 Ethernet Working Group
https://www.ieee802.org/3/ -
IEEE 802.1Q VLAN / Bridging Standards
https://www.ieee802.org/1/ -
RFC 2697: A Single Rate Three Color Marker
https://www.rfc-editor.org/rfc/rfc2697 -
RFC 2698: A Two Rate Three Color Marker
https://www.rfc-editor.org/rfc/rfc2698 -
RFC 3168: The Addition of Explicit Congestion Notification to IP
https://www.rfc-editor.org/rfc/rfc3168 -
RFC 3176: InMon Corporation’s sFlow
https://www.rfc-editor.org/rfc/rfc3176 -
McKeown, N. “The iSLIP Scheduling Algorithm for Input-Queued Switches”
https://tiny-tera.stanford.edu/~nickm/papers/islip.pdf -
Shreedhar, M., Varghese, G. “Efficient Fair Queuing using Deficit Round Robin”
https://www.cs.umd.edu/~shankar/417-F01/Slides/chapter-7b.pdf -
W. J. Dally, B. Towles, Principles and Practices of Interconnection Networks
https://www.sciencedirect.com/book/9780122007514/principles-and-practices-of-interconnection-networks -
AXI4-Stream Protocol Specification, Arm AMBA
https://developer.arm.com/documentation/ihi0051/latest/ -
本文参考的内部学习表格:
basic design skill.xlsx,包括 FIFO、Free List、CRC、ECC、Width Conversion、Scheduler、QoS、Packet Buffer、MAC 和 Demo Switch Training Project 等训练主题。