Verilog开源项目——百兆以太网交换机(三)Hash模块设计

Verilog开源项目——百兆以太网交换机(三)Hash模块设计


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

  Atom中在SM2加解密和LUT模块中都需要用到Hash模块,且为了更好地解决LUT中Hash冲突的问题,将实现SM3、SHA-256两种Hash算法,以满足循环Hash或双Hash方案

  在SM2中也可以对SM3和SHA-256选择性使用,满足不同需求。

  SM3和SHA-256在算法实现上十分类似,都是填充、扩展、迭代压缩最后得到Hash Key,所以本章我们仅以SHA-256为例,分析Atom中Hash模块的实现过程,但在Atom真实设计中,还是会有两个独立的Hash模块。



一、Hash Feature

  • 实现SHA-256和SM-3两种Hash算法;
  • 吞吐率达到1Gbps;
  • 支持压缩迭代全Pipeline结构,做到每一拍都有数据进出;
  • 时钟频率可达到200MHz;


二、SHA-256概述

  因为加解密模块和Mac LUT对吞吐率都有较高的要求,所以SHA-256也需要满足100Mbps的线速数据Hash,且为留出优化裕量,需要最高支持至1Gbps,因此SHA-256模块我们将设计成全Pipeline的结构,保证数据能不断流动,做到每一个时钟周期都能有数据进出。

  SHA-256总体分为三个步骤:填充(Padding)扩展(Extend)以及迭代压缩(Compressor),填充负责将输入数据补充为完整的512-bits,扩展负责将填充后的数据拆分为压缩所需的多组参数,压缩负责使用扩展后的数据进行多轮迭代计算,得到最终的Hash值。下图即为SHA-256结构图。

        请添加图片描述


  • Padding每一拍都能处理新数据,所以一份逻辑即可。
  • Extend步骤,每16组扩展数据块间可以独立计算,也就是在一次操作时间内可以同时完成16个数据块的扩展,共需要扩展三次(暂定三次可以在一个时钟周期内完成)。
  • 由于compressor在各自迭代中逻辑实现相同,但是SHA-256模块需要完全的Pipeline结构,所以这里通过例化多个compressor单元来实现,具体个数根据综合的最长路径来决定(例如最长路径支持16次循环,那么需要例化4个compressor单元)。

Note:本模块实现过程中,对于多拍的消息块,在Padding后也视作每拍独立,即对于compressor前后的消息块不存在依赖关系,若必须要对多拍消息块的Hash处理,需要在外围自行进行二次处理。



a)Padding

SHA-256在处理过程中,以512-bits为一个消息块,数据需要512-bits对齐,padding过程如下:

  1. 末尾64-bits填写该数据的实际位宽;
  2. 数据后填补一位‘1’bit;
  3. 若完成上述两步后,最后一组数据若不足512-bits,则在step1和step2直接填充‘0’;
    请添加图片描述

Note:最后一组是否为512-bits,应以填充后的长度为准,即至少完成step1、2后,再判断是否对齐。


b)Extend

将每个消息块宽展为64个32-bits W0~W63:

  1. 其中W0~W15为原始消息块M由高位至低位的直接切分;
  2. 对W16~W67通过置换函数迭代计算得到:
    For(i=16;i≤63;i++)
      Wi=F1(Wi-2)+Wj-7+F0(Wi-15)+Wi-16


c)Compressor

通过第三章定义的压缩函数迭代计算得到最后的Hash值,计算过程如下:

  1. 以图2-2中的初始Hash值拼接M=ABCDEFGH作为压缩阶段的初值;
  2. For(i=0;i≤63;i++)
      T1=H+F3+CH+Kj+Wj
      T2=F2+MAJ
      A‘=T1+T2
      B’=A
      C’=B
      D’=C
      E’=D+T1
      F’=E
      G’=F
      H’=G
  3. M‘={A’+A},{B’+B},{C’+C},{D’+D},{E’+E},{F’+F},{G’+G},{H’+H}
  4. 最终迭代结束得到的M即为SHA-256最终输出Hash Key;

初始向量如下图所示:
请添加图片描述



三、Function define

  • POTR^n(W):对W循环右移n-bits;

  • SHR^n(W): 对W右移n-bits;

  • F0(W):POTR^7(W) ⊕ POTR^18(W) ⊕ SHR^3(W);

  • F1(W):POTR^17(W) ⊕ POTR^19(W) ⊕ SHR^10(W);

  • MAJ: (A&B) ⊕ (A&C) ⊕ (B&C);

  • CH: (E&F) ⊕ ( ~ E&~F);

  • F2: POTR^2(A) ⊕ POTR^13(A) ⊕ POTR^22(A);

  • F3: POTR^6(E) ⊕ POTR^11(E) ⊕ POTR^25(E);



四、SHA-256接口

在这里插入图片描述

  需要注意的是,在处理过程中,数据块长度>447时,Padding操作将带来额外一拍数据,这会使得入口无法线速处理数据,但是出口仍是线速,所以这里将采用反压机制。

  且SHA-256数据无条件输出,若后级处理速度不够,需要外围自行buffer处理





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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159539.shtml

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

相关文章

Java Spring

文章目录 SpringSpring 是什么?从Spring中获取Beanxml获取注解存储类注解⽅法注解bean命名规则类注解之间的关系 注解获取bean属性注⼊缺点 构造⽅法注⼊Setter 注⼊三种注⼊优缺点分析Resource:另⼀种注⼊关键字同⼀类型多个 Bean 报错处理 获取bean对象…

【React-Router】嵌套路由

1. 嵌套路由 在一级路由中又内嵌了其他路由&#xff0c;这种关系就叫做嵌套路由。 2. 嵌套路由配置 // /page/About/index.js const About () > {return (<div>二级路由 About 组件</div>) }export default About// /page/Layout/index.js import { Outlet, …

走进长光,看卫星是怎样炼成的?

在双11专场直播中&#xff0c;长光卫星嘉宾与大家分享了长光的科普教育基地。 这让我回想起了&#xff0c;我们去年到长光参观学习的场景。 让我们再次走进长光&#xff0c;在参观学习增长见识的同时&#xff0c;也可以看看卫星是怎样炼成的&#xff1f; 出发 2022年8月23日…

从零开始安装并运行YOLOv5

从零开始安装并运行YOLOv5 该文主要实现用YOLOv5的基准检测为自己的视频片段渲染对象检测结果和边界框&#xff0c;本文大部分都是实操&#xff0c;帮助大家快速上手。 什么是YOLOv5&#xff1f; ​ yolo是一种用于对象检测的最先进的机器学习模型&#xff0c;yolo有不同的版…

YOLOv5 分类模型 OpenCV和PyTorch两者实现预处理的差异

YOLOv5 分类模型 OpenCV和PyTorch两者实现预处理的差异 flyfish PyTorch封装了PIL库 简单对比下两者的使用方法 import cv2 from PIL import Image import numpy as npfull_path_file_name"/media/a//ILSVRC2012_val_00001244.JPEG"#OpenCV读取图像默认是BGR顺序 …

HTML5+CSS3+JS小实例:霁青+翠蓝的Tabbar动画特效

实例:霁青+翠蓝的Tabbar动画特效 技术栈:HTML+CSS+JS 字体图标库:Font Awesome 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta nam…

提升效率必备:电脑文件批量重命名的实用技巧大放送

在日常工作中&#xff0c;电脑文件的重命名是一项常见的操作。当要处理大量的文件&#xff0c;并且要按照一定的规则或逻辑进行重命名时&#xff0c;手动一个一个重命名显然是非常低效的。掌握批量重命名的技巧可提高工作效率。现在一起来看云炫文件管理器如何批量重命名电脑上…

CmakeLists编译的动态库.so移动到其他位置后,提示找不到该库的依赖库解决办法

主要问题&#xff1a; 最近在搞海康SDK调用相机&#xff0c;发现在linux下一直调用不起来相机&#xff0c;总是提示error code&#xff1a;29&#xff0c;注册失败&#xff0c;重新编译优惠存在找不到依赖库的问题。 1.异常 CmakeLists编译的动态库.so移动到其他位置后&#…

Python Pandas简介及基础教程+实战示例。

文章目录 前言一、Pandas简介二、Python Pandas的使用关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Pan…

队列:C++实现

引言&#xff1a; 在C中实现队列是一种常见的数据结构操作。队列是一种先进先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;类似于排队买票或者排队等待服务的场景。在本文中&#xff0c;我们将使用C语言来实现一个简单的队列数据结构。 技术实现&#xff1a; 首先&a…

道可云元宇宙每日资讯|第四届元宇宙与人工智能产业生态大会在朝阳区举行

道可云元宇宙每日简报&#xff08;2023年11月22日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 第四届元宇宙与人工智能产业生态大会在朝阳区举行 近日&#xff0c;第四届元宇宙与人工智能产业生态大会在朝阳区举行。大会由北京市朝阳区政府主办。会上&#xff…

webpack项目 index.html 根据不同的变量引入不同的js

项目 webpack搭建 问题&#xff1a;在入口文件index.html中根据不同的变量引入不同的js 使用插件HtmlWebpackPlugin HtmlWebpackPlugin 项目里用来生成静态文件的 这个插件每个项目基本都要用到的&#xff0c;只要全局搜一下位置 根据配置文件的指令找到执行的文件&#xff0…

海外应用速度访问慢?试试这个技术解决方案

在数字化转型的时代&#xff0c;企业需要高效、稳定、安全的网络连接来支撑全球化业务的拓展。然而&#xff0c;在进行海外应用访问时&#xff0c;经常会遇到访问速度慢的问题&#xff0c;因为跨国界的网络通信往往存在延迟和带宽限制等问题。在过去&#xff0c;企业通常会使用…

洛谷 P2294 [HNOI2005] 狡猾的商人

[HNOI2005] 狡猾的商人 题目描述 刁姹接到一个任务&#xff0c;为税务部门调查一位商人的账本&#xff0c;看看账本是不是伪造的。账本上记录了 n n n 个月以来的收入情况&#xff0c;其中第 i i i 个月的收入额为 a i a_i ai​&#xff0c; i 1 , 2 , … , n − 1 , n i…

Thinkphp6 模型 指定字段自增的方法

tp6要使用Db类必须使用门面方式&#xff08;think\facade\Db&#xff09;调用。 use think\facade\Db; 然后&#xff0c;用Db::raw就可以实现指定字段自增了。

46.全排列

原题链接&#xff1a;46.全排列 思路&#xff1a; 主要是和组合的区别&#xff0c;排列是可以从头使用元素 但是依旧是不允许有重复元素使用&#xff0c;所以依旧是需要进行去重 全代码&#xff1a; class Solution { public:vector<vector<int>> result;vector…

Doris动态分区(十四)

动态分区是在 Doris 0.12 版本中引入的新功能。旨在对表级别的分区实现生命周期管理&#xff08;TTL&#xff09;&#xff0c;减少用户的使用负担。 目前实现了动态添加分区及动态删除分区的功能。动态分区只支持 Range 分区。 原理 在某些使用场景下&#xff0c;用户会将表…

PHP while 和 do-while 循环 学习资料

PHP while 和 do-while 循环 在 PHP 中&#xff0c;while 和 do-while 是两种常用的循环结构&#xff0c;用于重复执行一段代码&#xff0c;直到满足指定条件为止。以下是对这两种循环的介绍和示例&#xff1a; while 循环 while 循环用于在指定条件为真时重复执行代码块。循…

计算机基础知识——字,字节,进制,short,byte等

目录 进制位&#xff0c;字节&#xff0c;字Byte&#xff0c;ShortByteBuf有符号数和无符号数 进制 HEX&#xff0c;Hexadecimal &#xff0c;十六进制。 DEC&#xff0c;Decimal &#xff0c;十进制。 OCT&#xff0c;Octal &#xff0c;八进制。 BIN&#xff0c;Binary &a…

【Android】声浪 UI 效果并附上详细代码

声浪效果是基于第三方实现的。 https://github.com/xfans/VoiceWaveView 将三方的 Kotlin 代码转 java 使用&#xff08;按照他的readme 进行依赖&#xff0c;好像少了点东西&#xff0c;至少本项目跑不起来&#xff09; 声浪效果在android 8 以上都是比较好的&#xff0c;不会…