有限域GF(2^128)GHASH校验值运算模块——Verilog实现

该博客介绍了有限域GF(2^128)GHASH校验值运算模块的Verilog实现,作者参照GF(2^8)的实现方式,通过Python验证有限域乘法的正确性,并采用组合逻辑和时序逻辑控制完成128次循环的运算。虽然尝试压缩运算周期未果,但最终实现了每8个时钟周期计算一次有限域乘法。
摘要由CSDN通过智能技术生成

(1)题目详见:有限域GF(2^128)GHASH校验值运算模块说明
(2)实现原理参考的是:有限域GF(2^8)内乘法代码实现以及原理
(3)python验证:有限域GF(2^128)GHASH校验值运算模块——Python验证有限域乘法正确性
(4)仿真结果:有限域GF(2^128)GHASH校验值运算模块——Verilog仿真

这里没有全部按照题目的要求实现算法,而是参照上面超链接(2)中GF(2^8)的实现方式,也就是把乘数B依次左移,然后根据A的每一位的值进行异或。
运算流程

并行方面,本来想按照题目时序要求的:GHASH 模块每个分组的运算周期数8拍以内,也就是有限域乘法step3的128次循环,加上外面和 Y i Y_i Yi的异或过程保持在8个时钟周期以内。这样的话,就设计成有限域乘法一拍计算step3中32次循环的结果,最少4拍就可以实现。
step3: for i=0到127, Z i + 1 Z_{i+1} Zi+1 V i + 1 V_{i+1} Vi+1的计算过程如下,其中>>表示右移操作,高位补0;
但是无奈水平有限,自己只想到一种暴力解决的方法,一拍计算循环32次的结果代码又臭又长,实在太丑了,所以选择了模块在一拍内计算16次循环的结果,这样计算一次有限域乘法需要8个时钟周期。方式就是按照(2)中的矩阵乘法的形式。

具体实现:

首先用组合逻辑实现有限域乘法循环,可以看成一个矩阵乘法,直接用python实现:16次step3循环后 V i V_i Vi[127:0]的结果和 Z i Z_i Zi[127:0]的结果,是一个组合逻辑,这样重复进行8次,就可以得到128次循环后 V 128 V_{128} V128[127:0]和 Z 128 Z_{128} Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值