Verilog开源项目——百兆以太网交换机(一)架构设计与Feature定义
🔈声明:未经作者允许,禁止转载
😃博主主页:王_嘻嘻的CSDN主页
🔑全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
🧡关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
🚩第一代交换机 从零开始 verilog 以太网交换机系列专栏:点击这里
经过第一代的交换机项目后,博主也算对交换机有了更深的认识,但是第一代的Feature过于单一,架构简单,和市场化的交换机功能完全脱节。而在学习Switch Core的过程中,也没有找到什么完善的中文学习资料,所以博主准备进一步完善以太网交换机的项目,希望凭微薄之力,为想学习的同学们多整理一些资料。
第二代交换机有更丰富的feature,更贴近真正使用的功能,除rtl代码,详细设计文档外,还会包括验证环境、验证代码,最后项目完成后,会全部开源供大家学习,顺利的话,希望还能上FPGA进行原型验证。
为了便于称呼,我们将对第二代交换机项目取名为Atom,也意为之后一切项目的开始。
一、Atom Feature
考虑到对CPU暂时不熟悉,所以Atom没有设置控制端口,也没有独立的CPU承担固件功能。Atom定位于百兆Switch Core,将支持以下feature:
- 数据交换能力达到400Mbps,即4 Port x 100Mbps
- 支持2K MAC地址的存储与查询(包括MAC地址、Multicast table、VLAN table)
- 支持SM3或SHA-1的HASH算法
- 支持2MB的数据缓存区
- 支持基于端口的VLAN、基于tag的VLAN、基于流量类型的VLAN
- 支持全双工10/100 Mbps的MII接口
- 发送端、接收端MAC支持可配置的SM2/AES数据流加解密
- 支持802.3x Flow Control
- 支持QoS,基于Port优先级或基于帧优先级进行仲裁输出
- 支持多播、组播包的发送
- 支持基于QCN的拥塞管理
- 支持DPI深度包检测,进行流量类型区分,防火墙功能
- 支持Flush功能:全局Flush或者优先级Flush
- 支持风暴控制
- 支持基于L2层的流量筛选
- 支持Packet重标记
- 支持流量统计
- 支持流量重定向
二、Atom架构
Atom仍将支持4Port,接口也保留双工的10M/100MHz的MII,通过4个MAC接收/发送数据,支持SPI接口访问寄存器模块,对第一代交换机的MAC table进行扩展,还支持了Multicast table、VLAN table等。
Atom共分为9个模块:
-
MAC:分为RMAC和TMAC,包括L2 pause frame功能以及Switch Core v1的基本功能,支持SM2/AES加解密(可选)暂不实现完整的 MACsec IP;
-
PF(Packet Filter):负责入口处的L2、L3 Packet过滤,带有DPI(深度包检测功能);
-
PM(Packet Modifier):负责出口处Packet header内容的修改;
-
DB(Data Buffer):Atom的Packet缓存区,内部按优先级分为多条链表,所有Packet都缓存于此;
-
ENG(Switch Engine):负责管理Packet的自学习、老化、查询等操作,并根据查询结果进一步返回给ENG;
-
TKM(Token Manager):采用令牌桶算法,管理令牌数量;
-
QCN(Quantized Congestion Notification):实现QCN算法,进行拥塞控制;
-
TBM(Table Manager):实现SM-3/SHA-1的Hash算法,处理Hash冲突,负责管理多个Table;
-
CSR(Control and Status Register):通过SPI读写Atom所有控制、统计寄存器,并将寄存器连接到各模块;
由于本人和团队都是第一次独立进行规模化的项目设计,难免缺乏经验,在架构和设计方面若有不足之处,可以及时与我们沟通讨论,我们一定认真听取建议!!!
后续整个工程和代码下载链接也都会放在csdn和公众号内
搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!