c++用一级运算比较大小_以SM3算法为例,构建一个软硬协作算法加速器:设计面向SM3优化的运算结构...

本文详细探讨了如何针对SM3算法优化计算架构,特别是通过使用Carry Save Adder (CSA) 加法器减少加法延迟,以及利用查表法优化循环移位,从而提升系统频率和吞吐性能。通过对SM3运算的分析,揭示了关键路径在加法运算和循环移位中的延迟问题,并提出了解决方案。
摘要由CSDN通过智能技术生成

24b3a72d-4113-eb11-8da9-e4434bdf6706.png

本文书接上文,来讨论如何具体地针对 SM3 算法的特点,优化计算架构,如通过 CSA 加法器来优化加法关键路径等方法,提升系统频率,提高系统吞吐性能。

SM3 中的运算

在分析关键关键路径之前,首先分析 SM3 算法中涉及的运算。SM3 运算量集中在消息压缩模块中。从下图中的运算列表可以发现,主要的运算包括:循环移位(<<< 表示循环移位)异或以及加法

27b3a72d-4113-eb11-8da9-e4434bdf6706.png

所有运算中,循环移位运算开销最小,在硬件上实现为两级触发器间的交换连线位置。

reg [2:0] A; reg [2:0] B;
B <= { A[1:0] , A[2] };

2ab3a72d-4113-eb11-8da9-e4434bdf6706.png
循环移位实现示意

异或运算通过 LUT 布尔函数实现,开销小且固定,具体速度与使用的器件等级相关。以 Xilinx 的架构为例,UltraScale+ 器件的 LUT 延迟比 7 系列器件低一半以上。下图为一个双输入 LUT,实现异或运算的真值表。

2db3a72d-4113-eb11-8da9-e4434bdf6706.png

加法运算的时间开销最大,加法运算可以划分为全加运算进位。加法器中每一位都是一个全加器( Full Adder )。全加器本质上还是一个布尔逻辑运算,分别计算和 S 以及进位 C,在 FPGA 中照例是映射在 LUT 上实现,开销小且固定。

S = (A ^ B) ^ X
C = (A ^ B)X + XY = AB + AX + AY

2fb3a72d-4113-eb11-8da9-e4434bdf6706.png
全加器

加法器的主要延迟在于从最低位开始,直至最高位的逐位进位逻辑。以普通的行波进位加法器 ( Ripple Carry Adder) 为例,下图是一个4bit 行波进位器:

33b3a72d-4113-eb11-8da9-e4434bdf6706.png
4 位加法器

运算结果 S 输出需要等待从输入进位 Cin 开始直到进位到 C3 ,经过 3 个全加器这么长的路径后,才可以到最后一个全加器进行最后一次加法运算后输出,关键路径为从 Cin 经过 4 个全加器到达 Cout 。我们可以得到此次加法运算的延迟:

Tdelay = 4 * Tcarry + Tsum ≈ N * Tcarry (N 位加法器)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值