当前位置: 首页 > news >正文

Verilog开源项目——百兆以太网交换机(九)表项管理模块设计

Verilog开源项目——百兆以太网交换机(九)表项管理模块设计


🔈声明:未经作者允许,禁止转载
😃博主主页:王_嘻嘻的CSDN主页
🔑全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
🧡关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
🚩第一代交换机  从零开始 verilog 以太网交换机系列专栏:点击这里
💥第二代交换机  Atom(百兆以太网交换机)专栏:点击这里

  Atom TBM(Table Manager)即交换机表项管理模块,负责根据Packet的源MAC地址、源端口号进行自学习,便于下次遇到相同的MAC地址查询端口号,并定时完成高效的表项老化处理。

  此外,Atom创新的使用循环hash和双hash算法来减轻hash冲突的影响。



一、Feature

  • 100M时钟下,支持流水,每拍一次hash管理;
  • 支持可选的hash冲突管理;
  • 支持循环hash模式,循环最多不超过8次(否则性能将有几率不达标);
  • 支持双hash模式;
  • 支持表项自学习、查询、表项老化管理;


二、概述

在这里插入图片描述


  TBM(Table manager)为MAC table的管理模块,负责对MAC地址和Port映射的表项管理。主要功能为当DB请求Port查询后,判断MAC addr是否存在于表项,并自学习,记录Src MAC addr和Src Port的映射关系,同时在MAC table空闲时刻,进行表项的老化管理

  Atom在TBM中额外增加了SHA-256和SM-3的Hash算法,并支持Hash冲突避免,当发生Hash冲突后,Atom可以选择循环SHA-256、循环SM-3直至找到空闲位置,或者双Hash模式,同时计算SHA-256或者SM-3来寻找空位。



三、接口

在这里插入图片描述


四、功能设计

a)Hash算法

  Atom共支持两种Hash算法:SHA-256和SM-3。

  • 当用户不启用双Hash模式解决Hash冲突时,可以自由选择其中一种Hash算法对MAC地址进行映射。
  • 当用户启用双Hash模式后,TBM将同时用SHA-256和SM-3进行MAC地址映射,并根据策略选择空闲地址自学习和查询。

b)Hash冲突

  在Port映射的查询过程中,如果发生Hash冲突后,简单丢弃冲突的MAC地址,直接广播将极大的降低Packet传输效率,而过于复杂的Hash冲突解决方案又会降低查询速率,所以平衡性能的解决Hash冲突的方式在自学习和查询过程中将极为重要。

在这里插入图片描述


Hash冲突处理流程如上图所示:

  1. 当DB请求查询Port时,首先同时计算SHA-256、SM-3的Hash值;
  2. 若主Hash算法没有发生Hash冲突,则成功完成这次请求;
  3. 若主Hash算法发生Hash冲突,查询用户配置,是否开启Hash避免模式;
  4. 若没有配置Hash避免,则这次请求失败(学习和查询),作为广播包处理;
  5. 若配置Hash循环模式:(n为用户配置的循环上限,不可大于8)
    a) 循环次数<n时,使用前一次的Hash值作为新一次Hash算法的输入,再次计算Hash值;
    b) 循环次数=n时,退出循环,这次请求失败(学习和查询),作为广播包处理;
  6. 若配置双Hash模式:
    a) 副Hash算法没有发生Hash冲突,成功完成这次请求;
    b) 副Hash算法发生Hash冲突,这次请求失败(学习和查询),作为广播包处理;

c)映射查询

  Atom的自学习流程和查询过程总体和上一代Switch类似,流程如下:

  1. 收到DB请求后,先计算Src MAC Addr的Hash值,判断是否冲突,若冲突则先存入SFIFO中,等待controller空闲时处理;否则学习成功,将Src Port、Src MAC Addr、Hash次数存入表项;
  2. 处理查询操作,计算Dst MAC Addr的Hash值,若冲突,则执行冲突避免策略,如果时Hash循环模式,同样存入SFIFO中,等待controller下次空闲处理;否则需要MAC Addr和Hash次数完全一致才判断命中;
  3. 当DB req和internal SFIFO都存在请求时,优先处理internal req;

d)老化管理

  Atom将采用触发式的老化剔除模式,避免不断请求刷新TTL,浪费功耗。TBM通过一个2048-bits的bitmap记录MAC table每个表项是否有效,并且在MAC table的表项中会同时记录最近一次MAC addr查询成功的时间。


在这里插入图片描述

  通过上述方式可以在没有自学习和查询请求时,间接插入老化请求,剔除过久没有触发的表项,不需要单次连续扫描实现,为此表项内容如上图所示:包含48-bits的MAC addr,4-bits的目的端口,12-bits的表项触发时间戳。

在这里插入图片描述

  在每次查询成功或老化成功时,会同时维护一个Mac table context bitmap,在每次system timer跳动时(单位为1us),触发scan controller进行bitmap的扫描,将存活的bit addr扫描出来,并缓存到SFIFO中。

  • 如果在1us内扫描结束,那么scan controller停止,等待下1us的触发;
  • 若扫描时间超过1us,那么直接开始下一次扫描;

  当aging req读到对应表项后,将表项内的trigger timestamp和sys timer比较,若sys timer > trigger timerstamp + cfg_ttl,则老化剔除,否则不进行任何操作。




若有不专业或错误之处,欢迎指正!

具体电路实现及验证环境代码会在准备完毕后开源,目前暂时不能给出,请见谅


搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!


http://www.mrgr.cn/news/45690.html

相关文章:

  • 面向对象技术——设计模式
  • 详解正确创建好SpringBoot项目后但是找不到Maven的问题
  • 刷题 二叉树
  • (22)以RS码为例说明信道编码AWGN信道的Eb/N0设置
  • 【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习
  • 大数据新视界 --大数据大厂之 Presto 性能优化秘籍:加速大数据交互式查询
  • 动态规划算法题目练习——91.解码方法
  • 九、5 USART串口数据包
  • Windows的兼容性为什么这么强大?
  • LVS负载均衡群集
  • 基于SSM车位租赁系统【附源码】
  • DAMA数据管理知识体系(第6章 数据存储和操作)
  • 快速启动工具 | Biniware Run v7.1.0.0 绿色中文版
  • Linux高效查日志命令介绍
  • JMeter
  • PyQt入门指南七 自定义信号与槽的使用
  • Java如何调用构造函数和方法以及使用
  • 软件工程系列(1)需求工程
  • Linux驱动学习——内核编译
  • 一个月学会Java 第5天 控制结构