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

news2024/10/9 4:09:24

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.coloradmin.cn/o/2197892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新型僵尸网络针对 100 个国家发起 30 万次 DDoS 攻击

近日&#xff0c;网络安全研究人员发现了一个名为 Gorilla&#xff08;又名 GorillaBot&#xff09;的新僵尸网络恶意软件家族&#xff0c;它是已泄露的 Mirai 僵尸网络源代码的变种。 网络安全公司 NSFOCUS 在上个月发现了这一活动&#xff0c;并称该僵尸网络在今年 9 月 4 日…

【Java 循环控制实例详解【While do... while】】

Java 循环控制详解【While & do… while】 在 Java 中&#xff0c;循环控制是程序设计中非常重要的部分&#xff0c;主要包括 while 循环和 do...while 循环。本文将详细介绍这两种循环的基本语法、执行流程及相关示例。 1. while 循环控制 基本语法 循环变量初始化; wh…

在uniapp中实现长按聊天对话框可以弹出对话框然后可以删除该条对话,单击可以进入该条对话框的对话页面

效果展示 效果描述 长按【大于1s】某一条对话框会弹出一个对话框&#xff0c;点击确定按钮就可以将当前对话框从列表中进行删除&#xff0c;如果点击取消则不做额外操作。 如果只是点击了一下&#xff0c;时间【小于1s】的情况下会直接引入到与该用户的对话框详情页面。 代码…

ai绘画变现方式全解析,教你如何通过AI绘画赚钱

*AI绘画变现方式全解析&#xff0c;教你如何通过AI绘画赚钱* *为什么选择AI绘画&#xff1f;* 你是否曾经梦想过成为一名画家&#xff0c;但现实却让你无从下手? 或者你已经是一位艺术家&#xff0c;但苦于作品没能带来足够的收入&#xff1f;随着AI技术的飞速发展&#xff…

IDEA没有代码自动提示问题的解决

一、问题描述 如图&#xff0c;博主输入new Hash 没有提示出HashMap之类的api 原因在于&#xff1a;不小心打开了idea的省电模式&#xff0c;在这个模式下&#xff0c;idea是不会为我们提供自动提示的 二、问题解决 在File中找到 Power Save Mode选项&#xff0c;将它关闭即…

【西电电路实验】1. 仪器的使用(电子线路 III 电院)

文章目录 前言一、实验原理二、实验过程1. [高频信号源DSG3030 数据手册](https://www.rigol.com/Images/DSG3000_DataSheet_CN_tcm4-3558.pdf)2. [信号源 SDS 2320X 数据手册](https://www.siglent.com/u_file/download/24_05_29/SDS2000X%20HD_Datasheet_CN02A.pdf#:~:textSD…

MySQL多表查询:标量子查询

先看我的emp表结构 emp表 子查询基本语法 select * from t1 where column1 (select column1 from t2);例子1&#xff1a;查询"销售部" 的所有员工信息 这个可以先拆解为两个 a.查询"销售部"的部门ID select id from dept where name 销售部; b. 根…

2024重生之回溯数据结构与算法系列学习(11)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——…

算法:724.寻找数组的中心下标

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;前缀和&#xff09; 根据题意&#xff0c;我们可以将数组看成三个部分 [left] [mid] [right] 我们只需要[left]区间内的元素和等于[right]区间的元素和即可&#xff0c;此时mid就是中心下标 那么我们可以借助前缀和思…

怎么把录音转换成文字?七大不收费的录音转文字软件推荐,亲测好用!

怎么把录音转换成文字&#xff1f;录音转文字软件是一种可以将音频文件转换成文本的工具&#xff0c;甚至可以在录制音频的同时实时生成文本。音频文件是存储信息的常用方式之一&#xff0c;广泛应用于在线课程、长时间的讲座、商务会议以及产品介绍等场合&#xff0c;音频内容…

ThreadPoolExecutor的源码解析

ThreadPoolExecutor的源码解析 线程池的核心属性 ctl:当前的ctl就是一个int类型的数值,内部是基于AtomicInteger套了一层,进行运算时,是原子性的 ctl表示的线程池的两种核心状态: 线程池的状态: ctl的高3位标识线程池的状态工作线程的状态:ctl的低29位,表示工作线程的个数 pri…

FlagVNE]——用于虚拟网络嵌入的灵活、可通用的强化学习框架

介绍 论文地址&#xff1a;https://arxiv.org/pdf/2404.12633 网络虚拟化&#xff08;NV&#xff09;是一种创新技术&#xff0c;在 5G 网络和云计算等领域日益受到关注。NV 可通过网络切片和共享基础设施在同一物理网络上部署多个用户提交的虚拟网络请求&#xff08;VNR&…

性能测试-JMeter(1)

性能测试工具 主流性能测试工具LoadrunnerJMeter JMeter环境安装JMeter功能概要JDK常用文件目录介绍JMeter元件和组件介绍元件的基本介绍组件的基本介绍 JMeter元件作用域和执行顺序JMeter第一个案例线程组HTTP请求查看结果树 JMeter参数化&#xff08;重点&#xff09;用户定义…

02_InFluxDb

InFluxDb 初始化初始化流程 交互InFluxDbWebUI交互 数据模型行协议添加标签数据格式 数据类型空格索引 初始化 初始化流程 用户 密码 组织名称 Bucket—mysql里面的数据库概念 交互InFluxDb 暂用了8086端口.提供了 http api WebUI交互 略... 数据模型 这是mysql里面的表…

1500元买哪款显卡好?对比一下,差别明显

在游戏过程中&#xff0c;显卡负责渲染游戏画面&#xff0c;将其转化为可视化的图像&#xff0c;并快速显示在屏幕上&#xff0c;确保游戏运行的流畅性和画面的质量。所以对于游戏电脑来说&#xff0c;显卡的重要性尤为突出。虽说在最近几年&#xff0c;显卡市场的“消费升级”…

算法:前缀和算法模版

一维前缀和 题目 链接&#xff1a;一维前缀和模版题 思路分析 一&#xff1a;暴力O(q * N) 对于每一次询问&#xff0c;我们都可以用一个循环计算[l,r]区间内的元素和&#xff0c; 时间复杂度&#xff0c;O(q * N) 每一次计算一个区间都需要去循环一次&#xff0c;这是不是…

2024年中国研究生数学建模什么时候出成绩(附避坑指南)

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 今年的华为杯已经于2024年9月20日——2024年9月25日完成&#xff0c;相信大家下…

40 C 语言结构体:结构体数据类型、结构体变量、访问结构体成员、结构体指针

目录 1 为什么需要结构体 2 什么是结构体 3 声明结构体类型 3.1 语法格式 3.2 案例演示 3.2.1 学生信息结构体 3.2.2 通讯录条目结构体 3.2.3 猫咪结构体 4 声明结构体变量 4.1 什么是结构体变量 4.2 声明结构体变量的常见方式 5 结构体和结构体变量的区别与联系 …

基于STM32的智能鱼缸自动喂食系统设计

引言 本项目设计了一个基于STM32的智能鱼缸自动喂食系统&#xff0c;能够按照预设的时间间隔自动投放饲料&#xff0c;同时监测鱼缸内的水温和光照情况。该系统通过电机控制喂食器的旋转来实现饲料投放&#xff0c;用户还可以通过按键实现手动喂食。该项目展示了STM32在定时控…

Spring Validation —— 参数校验框架

案例说明——后端校验注册表单字段 在编写注册功能时&#xff0c;需要考虑字段校验的情况&#xff0c;这时候可以采用 Spring提供的一套参数校验框架工具——Spring Validation。一下是使用的步骤&#xff1a; 1. 导入validation坐标 2. 在参数上添加 Pattern注解&#xff0c…