CN101650644B - 一种伽罗华域乘法器实现装置 - Google Patents
一种伽罗华域乘法器实现装置 Download PDFInfo
- Publication number
- CN101650644B CN101650644B CN2009100817685A CN200910081768A CN101650644B CN 101650644 B CN101650644 B CN 101650644B CN 2009100817685 A CN2009100817685 A CN 2009100817685A CN 200910081768 A CN200910081768 A CN 200910081768A CN 101650644 B CN101650644 B CN 101650644B
- Authority
- CN
- China
- Prior art keywords
- dinb1
- dina1
- mult
- matrix
- binary
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Error Detection And Correction (AREA)
Abstract
本发明公开了一种伽罗华域乘法器实现装置。本装置将伽罗华域乘法的计算转化为矩阵模块相乘,具体包括一个L矩阵模块,一个U矩阵模块,m位数据输入输出接口,以及Q矩阵生成模块等,其结构涉及3m-1组二元与门树和一组二元异或门树。本发明在具体施例部分给出了一种当m=128时,基于FPGA来实现伽罗华域GF(2128)乘法器的例子。这种乘法器可以用来硬件实现G-hash函数,并可达到10Gbps以上的计算速度。
Description
技术领域
本发明涉及一种伽罗华域乘法器实现装置,属于信息安全技术领域,具体来说是一种基于可约多项式形式为P(x)=xm+xkt+……+xk2+xk1+1,其中1≤k1<k2<…<kt≤m/2的m位伽罗华域乘法器装置。
背景技术
有限域乘法是目前密码学领域用到较多的运算,很多加密认证算法都要利用有限域乘法。伽罗华域是一种重要的有限域,一个伽罗华域的运算是指在特定的规则下进行的两类运算:加法和乘法。其中,伽罗华域GF(2)上仅包含两个元素0和1,加法运算很容易利用一个异或门来实现,而其乘法利用一个与门也可以轻易实现。特别地,当伽罗华域运算扩展到m位,且m很大时,计算的实现就变得异常复杂,硬件实现也变得很不理想。以前伽罗华域乘法器多采用通用处理器来实现,但是由于内部结构的限制,对高数据量的计算有很大限制,无法获得很高的计算性能。
目前针对有限域及伽罗华域乘法算法的研究有一些成果,特别是一些针对通用多项式的算法优化也有很多,例如专利“基于FPGA的有限域乘法器的优化设计方法”(专利号:200510041816.X),提出了一种通用多项式结构下的优化算法。然而目前的算法以及优化方法实现起来复杂度比较大,并且也达不到很高的计算速度。
本发明主要从算法的易于实现和提高硬件处理速度的角度,针对可约多项式满足P(x)=xm+xkt+……+xk2+xk1+1,其中1≤k1<k2<…<kt≤m/2的情况,提出了一种易于硬件高速实现的伽罗华域乘法器物理逻辑结构,并根据这种物理逻辑结构给出了一种适用于G-hash函数的伽罗华域乘法器FPGA具体实现,其可约多项式为P(x)=x128+x7+x2+x+1,最终实现的吞吐量可高达10Gbps以上。
发明内容
本发明提出了一种伽罗华域乘法器实现装置,主要包括:
m个m位移位寄存器单元,用于生成m×m的L矩阵;
m-1个m位移位寄存器单元,用于生成(m-1)×m的U矩阵;
2m-1组二元与门树,每组二元与门树是由2m个与门单元组成的二叉树形结构,用来处理计算两个m位元素乘法;
m组二元与门树,每组二元与门树是由2m-3个与门单元组成的二叉树形结构,用来处理计算两个m-1位元素乘法;
一组二元异或门树,是由2m-1个异或门单元组成的二叉树形结构,用来处理计算两个m位元素加法;
数据输入输出接口,提供两个m位元素输入接口以及一个m位元素输出接口,用于m位乘数和m位被乘数的输入以及结果元素的输出。
一个基于可约多项式P(x)=xm+xkt+……+xk2+xk1+1,其中1≤k1<k2<…<kt≤m/2构造的Q矩阵生成模块。
所述的两组m位移位寄存器阵列并行的产生数据,提高了运算速度。
所述的二元与门树是由log2m级与门树结构组成。
所述的二元异或门树是由log2m级与门树结构组成。
所述的Q矩阵生成模块是由一个(m-1)×m位的寄存器单元来存放矩阵数据,经矩阵转置后可以并行输出m个m-1位元素传送给二元与门树来计算中间结果。
所述的伽罗华域乘法器计算过程包括以下步骤:
步骤A:将输入的数据元素A并行送入L矩阵模块经过循环移位后与送进来的数据元素B经过二元与门树。
步骤B:将输入的数据元素A并行送入U矩阵模块经过循环移位后与送进来的数据元素B经过二元与门树,此步骤与步骤A在时序上是同时的。
步骤C:将U运算的结果,一个m-1位数据元素与Q矩阵生成模块输出的m个m-1位元素经过二元与门树。
步骤D:步骤C得到的结果与步骤A,L运算的结果经过二元异或门树,得到最终结果C并予以输出。
附图说明
图1是伽罗华域乘法器装置内部逻辑结构示意框图。
图2是二元与门树,二元异或门树的实现结构图。
图3是伽罗华域乘法器的计算过程示意图。
图4是当m=128时Q矩阵生成模块内部结构示意图。
具体实施方式
下面结合附图1对本发明进行详细说明。
第一步,对可约多项式形式为P(x)=xm+xkt+……+xk2+xk1+1,并且满足1≤k1<k2<…<kt≤m/2的情况,根据以下算法计算出Q矩阵:
Q矩阵的第0行有t+1个1,1的分布分别在0,k1,k2,…,kt列。
Q矩阵的第1行至m-kt-1行由第0行依次右移位得到。
Q矩阵的第m-kt至m-2行的构造规则如下:
当i行最后一列以1结尾时,i+1行向右移一位并与第0行的值进行异或运算;
当i行最后一列以0结尾时,i+1行向右移一位。
经过上面的算法可以得到Q矩阵。通过Q矩阵可以构建Q矩阵生成模块,Q矩阵生成模块是由一组(m-1)×m的矩阵寄存器来提供Q矩阵数据输出,每一个寄存器提供一个m位的二元数据,每一个二元数据是根据Q矩阵赋值的,经矩阵转置后可以并行输出m个m-1位元素传送给二元与门树来计算中间结果。
第二步,如附图1所示,构造m个移位寄存器单元,每个寄存器生成并存储m位数据元素,m个移位寄存器单元并行产生m个m位数据元素,用于生成m×m的L矩阵。
构造m-1个移位寄存器单元,每个寄存器生成并存储m位数据元素,m-1个移位寄存器单位并行产生m-1个m位数据元素,用于生成(m-1)×m的U矩阵。
第三步,如附图1所示,构造2m-1组二元与门树,每组二元与门树是由2m个与门单元组成的二叉树形结构,用来处理计算两个m位元素乘法;构造m组二元与门树,每组二元与门树是由2m-3个与门单元组成的二叉树形结构,用来处理计算两个m-1位元素乘法;最后构造1组二元异或门树,是由2m-1个异或门单元组成的二叉树形结构,用来处理计算两个m位元素加法。
最后,构造数据输入输出接口,提供两个m位元素输入接口以及一个m位元素输出接口,用于m位乘数和m位被乘数的输入以及结果元素的输出。
本发明伽罗华域乘法器的计算过程示意图如附图3所示,当复位信号到来时,乘法器开始接收两个m比特的数据A,B,数据元素A经过L矩阵模块和U矩阵模块并行产生中间数据元素L,U。
U的结果经过和Q矩阵生成模块产生的m个m-1位二元比特元素进入二元与门树处理,运算得到中间结果,得到的结果和L矩阵模块输出的结果经过二元异或门树计算,即元素相加得到最终结果C。
施例1可约多项式为P(x)=x128+x7+x2+x+1,是一种符合G-hash函数的伽罗华域乘法器可约多项式。
依据具体实现方式可以得到如下实现:
第一步,对可约多项式形式为P(x)=x128+x7+x2+x+1,根据如下算法计算出Q矩阵:
Q矩阵的第0行有4个1,1的分布分别在0,1,2,7列。
Q矩阵的第1行至120行由第0行依次右移位得到。
Q矩阵的第121至126行的构造规则如下:
当i行最后一列以1结尾时,i+1行向右移一位并与第0行的值进行异或运算;
当i行最后一列以0结尾时,i+1行向右移一位。
经过上面的算法可以得到Q矩阵,通过Q矩阵可以构建Q矩阵生成模块,是由一组127×128的矩阵寄存器来提供Q矩阵数据输出。如附图4所示,每一个寄存器提供一个128位的二元数据,每一个二元数据是根据Q矩阵赋值的。最后得到Q矩阵为:
经矩阵转置后可以并行输出128个127位元素传送给二元与门树来计算中间结果。
第二步,如附图1所示,构造128个移位寄存器单元,每个寄存器生成并存储128位数据元素,128个移位寄存器单元并行产生128个128位数据元素,用于生成128×128的L矩阵;
构造127个移位寄存器单元,每个寄存器生成并存储128位数据元素,127个移位寄存器单元并行产生127个128位数据元素,用于生成127×128的U矩阵。
第三步,如附图1所示,构造255组二元与门树,每组二元与门树是由256个与门单元组成的二叉树形结构,用来处理计算两个128位元素乘法;构造128组二元与门树,每组二元与门树是由253个与门单元组成的二叉树形结构,用来处理计算两个127位元素乘法;最后构造1组二元异或门树,是由255个异或门单元组成的二叉树形结构,用来处理计算两个128位元素加法。
最后,构造数据输入输出接口,提供两个128位元素输入接口以及一个128位元素输出接口,用于128位乘数和128位被乘数的输入以及结果元素的输出。
下面根据本发明的物理逻辑结构给出了伽罗华域GF(2128)乘法器基于FPGA的Verilog HDL描述如下:
module mul_128(
clk,
rst,
dina,
dinb,
en,
dout,
ready_o
);
input clk;
input rst;
input en;
input [0:127]dina;
input [0:127]dinb;
output [0:127]dout;
output ready_o;
reg [0:127]dout;
reg ready_o;
reg [0:127]dout_reg;
reg ready_o_reg;
reg [0:127]L[0:127];
reg [0:127]U[0:126];
reg [0:127]M;
reg [0:127]N;
reg [0:127]N_reg;
reg [0:127]dina1;
reg [0:127]dinb1;
always(dina or dinb)
begin
dina1=dina;
dinb1=dinb;
L[127]=dina1;
L[126]=dina1>>1;
L[125]=dina1>>2;
L[124]=dina1>>3;
L[123]=dina1>>4;
L[122]=dina1>>5;
L[121]=dina1>>6;
L[120]=dina1>>7;
L[119]=dina1>>8;
L[118]=dina1>>9;
L[1]7]=dina1>>10;
L[116]=dina1>>11;
L[115]=dina1>>12;
L[114]=dina1>>13;
L[113]=dina1>>14;
L[112]=dina1>>15;
L[111]=dina1>>16;
L[110]=dina1>>17;
L[109]=dina1>>18;
L[108]=dina1>>19;
L[107]=dina1>>20;
L[106]=dina1>>21;
L[105]=dina1>>22;
L[104]=dina1>>23;
L[103]=dina1>>24;
L[102]=dina1>>25;
L[101]=dina1>>26;
L[100]=dina1>>27;
L[99]=dina1>>28;
L[98]=dina1>>29;
L[97]=dina1>>30;
L[96]=dina1>>31;
L[95]=dina1>>32;
L[94]=dina1>>33;
L[93]=dina1>>34;
L[92]=dina1>>35;
L[91]=dina1>>36;
L[90]=dina1>>37;
L[89]=dina1>>38;
L[88]=dina1>>39;
L[87]=dina1>>40;
L[86]=dina1>>41;
L[85]=dina1>>42;
L[84]=dina1>>43;
L[83]=dina1>>44;
L[82]=dina1>>45;
L[81]=dina1>>46;
L[80]=dina1>>47;
L[79]=dina1>>48;
L[78]=dina1>>49;
L[77]=dina1>>50;
L[76]=dina1>>51;
L[75]=dina1>>52;
L[74]=dina1>>53;
L[73]=dina1>>54;
L[72]=dina1>>55;
L[71]=dina1>>56;
L[70]=dina1>>57;
L[69]=dina1>>58;
L[68]=dina1>>59;
L[67]=dina1>>60;
L[66]=dina1>>61;
L[65]=dina1>>62;
L[64]=dina1>>63;
L[63]=dina1>>64;
L[62]=dina1>>65;
L[61]=dina1>>66;
L[60]=dina1>>67;
L[59]=dina1>>68;
L[58]=dina1>>69;
L[57]=dina1>>70;
L[56]=dina1>>71;
L[55]=dina1>>72;
L[54]=dina1>>73;
L[53]=dina1>>74;
L[52]=dina1>>75;
L[51]=dina1>>76;
L[50]=dina1>>77;
L[49]=dina1>>78;
L[48]=dina1>>79;
L[47]=dina1>>80;
L[46]=dina1>>81;
L[45]=dina1>>82;
L[44]=dina1>>83;
L[43]=dina1>>84;
L[42]=dina1>>85;
L[41]=dina1>>86;
L[40]=dina1>>87;
L[39]=dina1>>88;
L[38]=dina1>>89;
L[37]=dina1>>90;
L[36]=dina1>>91;
L[35]=dina1>>92;
L[34]=dina1>>93;
L[33]=dina1>>94;
L[32]=dina1>>95;
L[31]=dina1>>96;
L[30]=dina1>>97;
L[29]=dina1>>98;
L[28]=dina1>>99;
L[27]=dina1>>100;
L[26]=dina1>>101;
L[25]=dina1>>102;
L[24]=dina1>>103;
L[23]=dina1>>104;
L[22]=dina1>>105;
L[21]=dina1>>106;
L[20]=dina1>>107;
L[19]=dina1>>108;
L[18]=dina1>>109;
L[17]=dina1>>110;
L[16]=dina1>>111;
L[15]=dina1>>112;
L[14]=dina1>>113;
L[13]=dina1>>114;
L[12]=dina1>>115;
L[11]=dina1>>116;
L[10]=dina1>>117;
L[9]=dina1>>118;
L[8]=dina1>>119;
L[7]=dina1>>120;
L[6]=dina1>>121;
L[5]=dina1>>122;
L[4]=dina1>>123;
L[3]=dina1>>124;
L[2]=dina1>>125;
L[1]=dina1>>126;
L[0]=dina1>>127;
U[0]=dina1<<1;
U[1]=dina1<<2;
U[2]=dina1<<3;
U[3]=dina1<<4;
U[4]=dina1<<5;
U[5]=dina1<<6;
U[6]=dina1<<7;
U[7]=dina1<<8;
U[8]=dina1<<9;
U[9]=dina1<<10;
U[10]=dina1<<11;
U[11]=dina1<<12;
U[12]=dina1<<13;
U[13]=dina1<<14;
U[14]=dina1<<15;
U[15]=dina1<<16;
U[16]=dina1<<17;
U[17]=dina1<<18;
U[18]=dina1<<19;
U[19]=dina1<<20;
U[20]=dina1<<21;
U[21]=dina1<<22;
U[22]=dina1<<23;
U[23]=dina1<<24;
U[24]=dina1<<25;
U[25]=dina1<<26;
U[26]=dina1<<27;
U[27]=dina1<<28;
U[28]=dina1<<29;
U[29]=dina1<<30;
U[30]=dina1<<31;
U[31]=dina1<<32;
U[32]=dina1<<33;
U[33]=dina1<<34;
U[34]=dina1<<35;
U[35]=dina1<<36;
U[36]=dina1<<37;
U[37]=dina1<<38;
U[38]=dina1<<39;
U[39]=dina1<<40;
U[40]=dina1<<41;
U[41]=dina1<<42;
U[42]=dina1<<43;
U[43]=dina1<<44;
U[44]=dina1<<45;
U[45]=dina1<<46;
U[46]=dina1<<47;
U[47]=dina1<<48;
U[48]=dina1<<49;
U[49]=dina1<<50;
U[50]=dina1<<51;
U[51]=dina1<<52;
U[52]=dina1<<53;
U[53]=dina1<<54;
U[54]=dina1<<55;
U[55]=dina1<<56;
U[56]=dina1<<57;
U[57]=dina1<<58;
U[58]=dina1<<59;
U[59]=dina1<<60;
U[60]=dina1<<61;
U[61]=dina1<<62;
U[62]=dina1<<63;
U[63]=dina1<<64;
U[64]=dina1<<65;
U[65]=dina1<<66;
U[66]=dina1<<67;
U[67]=dina1<<68;
U[68]=dina1<<69;
U[69]=dina1<<70;
U[70]=dina1<<71;
U[71]=dina1<<72;
U[72]=dina1<<73;
U[73]=dina1<<74;
U[74]=dina1<<75;
U[75]=dina1<<76;
U[76]=dina1<<77;
U[77]=dina1<<78;
U[78]=dina1<<79;
U[79]=dina1<<80;
U[80]=dina1<<81;
U[81]=dina1<<82;
U[82]=dina1<<83;
U[83]=dina1<<84;
U[84]=dina1<<85;
U[85]=dina1<<86;
U[86]=dina1<<87;
U[87]=dina1<<88;
U[88]=dina1<<89;
U[89]=dina1<<90;
U[90]=dina1<<91;
U[91]=dina1<<92;
U[92]=dina1<<93;
U[93]=dina1<<94;
U[94]=dina1<<95;
U[95]=dina1<<96;
U[96]=dina1<<97;
U[97]=dina1<<98;
U[98]=dina1<<99;
U[99]=dina1<<100;
U[100]=dina1<<101;
U[101]=dina1<<102;
U[102]=dina1<<103;
U[103]=dina1<<104;
U[104]=dina1<<105;
U[105]=dina1<<106;
U[106]=dina1<<107;
U[107]=dina1<<108;
U[108]=dina1<<109;
U[109]=dina1<<110;
U[110]=dina1<<111;
U[111]=dina1<<112;
U[112]=dina1<<113;
U[113]=dina1<<114;
U[114]=dina1<<115;
U[115]=dina1<<116;
U[116]=dina1<<117;
U[117]=dina1<<118;
U[118]=dina1<<119;
U[119]=dina1<<120;
U[120]=dina1<<121;
U[121]=dina1<<122;
U[122]=dina1<<123;
U[123]=dina1<<124;
U[124]=dina1<<125;
U[125]=dina1<<126;
U[126]=dina1<<127;
End
always(posedge clk or negedge rst)
begin
if(!rst)
begin
ready_o<=0;
dout<=128′h0;
end
else if(en)
begin
ready_o<=ready_o_reg;
dout<=dout_reg;
end
else
begin
ready_o<=0;
dout<=128′h0;
end
end
always(L[0] or U[0] or L[1] or U[1] or L[2] or U[2] or L[3] or U[3] or L[4] or U[4] or L[5]
or U[5] or L[6] or U[6] or L[7] or U[7] or L[8] or U[8] or L[9] or U[9] or L[10] or
U[10] or L[11] or U[11] or L[12] or U[12] or L[13] or U[13] or L[14] or U[14] or L[15] or U[15]
or L[16] or U[16] or L[17] or U[17] or L[18] or U[18] or L[19] or U[19] or L[20] or U[20] or L[21]
or U[21] or L[22] or U[22] or L[23] or U[23] or L[24] or U[24] or L[25] or U[25] or L[26] or
U[26] or L[27] or U[27] or L[28] or U[28] or L[29] or U[29] or L[30] or U[30] or L[31] or U[31]
or L[32] or U[32] or L[33] or U[33] or L[34] or U[34] or L[35] or U[35] or L[36] or U[36] or
L[37] or U[37] or L[38] or U[38] or L[39] or U[39] or L[40] or U[40] or L[41] or U[41] or L[42]
or U[42] or L[43] or U[43] or L[44] or U[44] or L[45] or U[45] or L[46] or U[46] or L[47] or
U[47] or L[48] or U[48] or L[49] or U[49] or L[50] or U[50] or L[51] or U[51] or L[52] or U[52]
or L[53] or U[53] or L[54] or U[54] or L[55] or U[55] or L[56] or U[56] or L[57] or U[57] or
L[58] or U[58] or L[59] or U[59] or L[60] or U[60] or L[61] or U[61] or L[62] or U[62] or L[63]
or U[63] or L[64] or U[64] or L[65] or U[65] or L[66] or U[66] or L[67] or U[67] or L[68] or
U[68] or L[69] or U[69] or L[70] or U[70] or L[71] or U[71] or L[72] or U[72] or L[73] or U[73]
or L[74] or U[74] or L[75] or U[75] or L[76] or U[76] or L[77] or U[77] or L[78] or U[78] or
L[79] or U[79] or L[80] or U[80] or L[81] or U[81] or L[82] or U[82] or L[83] or U[83] or L[84]
or U[84] or L[85] or U[85] or L[86] or U[86] or L[87] or U[87] or L[88] or U[88] or L[89] or
U[89] or L[90] or U[90] or L[91] or U[91] or L[92] or U[92] or L[93] or U[93] or L[94] or U[94]
or L[95] or U[95] or L[96] or U[96] or L[97] or U[97] or L[98] or U[98] or L[99] or U[99] or
L[100] or U[100] or L[101] or U[101] or L[102] or U[102] or L[103] or U[103] or L[104] or U[104] or L[105] or
U[105] or L[106] or U[106] or L[107] or U[107] or L[108] or U[108] or L[109] or U[109] or L[110] or U[110] or
L[111] or U[111] or L[112] or U[112] or L[113] or U[113] or L[114] or U[114] or L[115] or U[115] or L[116] or
U[116] or L[117] or U[117] or L[118] orU[118] or L[119] or U[119] orL[120 ]or U[120] or L[121] or U[121] or
L[122] or U[122] or L[123] or U[123] or L[124] or U[124] or L[125] or U[125] or L[126] or U[126] or L[127] or
dinb1)
begin
mult(L[0],dinb1,M[0]);
mult(L[1],dinb1,M[1]);
mult(L[2],dinb1,M[2];
mult(L[3],dinb1,M[3]);
mult(L[4],dinb1,M[4]);
mult(L[5],dinb1,M[5]);
mult(L[6],dinb1,M[6]);
mult(L[7],dinb1,M[7]);
mult(L[8],dinb1,M[8]);
mult(L[9],dinb1,M[9]);
mult(L[10],dinb1,M[10]);
mult(L[11],dinb1,M[11]);
mult(L[12],dinb1,M[12]);
mult(L[13],dinb1,M[13]);
mult(L[14],dinb1,M[14]);
mult(L[15],dinb1,M[15]);
mult(L[16],dinb1,M[16]);
mult(L[17],dinb1,M[17]);
mult(L[18],dinb1,M[18]);
mult(L[19],dinb1,M[19]);
mult(L[20],dinb1,M[20]);
mult(L[21],dinb1,M[21]);
mult(L[22],dinb1,M[22]);
mult(L[23],dinb1,M[23]);
mult(L[24],dinb1,M[24]);
mult(L[25],dinb1,M[25]);
mult(L[26],dinb1,M[26]);
mult(L[27],dinb1,M[27]);
mult(L[28],dinb1,M[28]);
mult(L[29],dinb1,M[29]);
mult(L[30],dinb1,M[30]);
mult(L[31],dinb1,M[31]);
mult(L[32],dinb1,M[32]);
mult(L[33],dinb1,M[33]);
mult(L[34],dinb1,M[34]);
mult(L[35],dinb1,M[35]);
mult(L[36],dinb1,M[36]);
mult(L[37],dinb1,M[37]);
mult(L[38],dinb1,M[38]);
mult(L[39],dinb1,M[39]);
mult(L[40],dinb1,M[40]);
mult(L[41],dinb1,M[41]);
mult(L[42],dinb1,M[42]);
mult(L[43],dinb1,M[43]);
mult(L[44],dinb1,M[44]);
mult(L[45],dinb1,M[45]);
mult(L[46],dinb1,M[46]);
mult(L[47],dinb1,M[47]);
mult(L[48],dinb1,M[48]);
mult(L[49],dinb1,M[49]);
mult(L[50],dinb1,M[50]);
mult(L[51],dinb1,M[51]);
mult(L[52],dinb1,M[52]);
mult(L[53],dinb1,M[53]);
mult(L[54],dinb1,M[54]);
mult(L[55],dinb1,M[55]);
mult(L[56],dinb1,M[56]);
mult(L[57],dinb1,M[57]);
mult(L[58],dinb1,M[58]);
mult(L[59],dinb1,M[59]);
mult(L[60],dinb1,M[60]);
mult(L[61],dinb1,M[61]);
mult(L[62],dinb1,M[62]);
mult(L[63],dinb1,M[63]);
mult(L[64],dinb1,M[64]);
mult(L[65],dinb1,M[65]);
mult(L[66],dinb1,M[66]);
mult(L[67],dinb1,M[67]);
mult(L[68],dinb1,M[68]);
mult(L[69],dinb1,M[69]);
mult(L[70],dinb1,M[70]);
mult(L[71],dinb1,M[71]);
mult(L[72],dinb1,M[72]);
mult(L[73],dinb1,M[73]);
mult(L[74],dinb1,M[74]);
mult(L[75],dinb1,M[75]);
mult(L[76],dinb1,M[76]);
mult(L[77],dinb1,M[77]);
mult(L[78],dinb1,M[78]);
mult(L[79],dinb1,M[79]);
mult(L[80],dinb1,M[80]);
mult(L[81],dinb1,M[81]);
mult(L[82],dinb1,M[82]);
mult(L[83],dinb1,M[83]);
mult(L[84],dinb1,M[84]);
mult(L[85],dinb1,M[85]);
mult(L[86],dinb1,M[86]);
mult(L[87],dinb1,M[87]);
mult(L[88],dinb1,M[88]);
mult(L[89],dinb1,M[89]);
mult(L[90],dinb1,M[90]);
mult(L[91],dinb1,M[91]);
mult(L[92],dinb1,M[92]);
mult(L[93],dinb1,M[93]);
mult(L[94],dinb1,M[94]);
mult(L[95],dinb1,M[95]);
mult(L[96],dinb1,M[96]);
mult(L[97],dinb1,M[97]);
mult(L[98],dinb1,M[98]);
mult(L[99],dinb1,M[99]);
mult(L[100],dinb1,M[100]);
mult(L[101],dinb1,M[101]);
mult(L[102],dinb1,M[102]);
mult(L[103],dinb1,M[103]);
mult(L[104],dinb1,M[104]);
mult(L[105],dinb1,M[105]);
mult(L[106],dinb1,M[106]);
mult(L[107],dinb1,M[107]);
mult(L[108],dinb1,M[108]);
mult(L[109],dinb1,M[109]);
mult(L[110],dinb1,M[110]);
mult(L[111],dinb1,M[111]);
mult(L[112],dinb1,M[112]);
mult(L[113],dinb1,M[113]);
mult(L[114],dinb1,M[114]);
mult(L[115],dinb1,M[115]);
mult(L[116],dinb1,M[116]);
mult(L[117],dinb1,M[117]);
mult(L[118],dinb1,M[118]);
mult(L[119],dinb1,M[119]);
mult(L[120],dinb1,M[120]);
mult(L[121],dinb1,M[121]);
mult(L[122],dinb1,M[122]);
mult(L[123],dinb1,M[123]);
mult(L[124],dinb1,M[124]);
mult(L[125],dinb1,M[125]);
mult(L[126],dinb1,M[126]);
mult(L[127],dinb1,M[127]);
mult(U[0],dinb1,N[0]);
mult(U[1],dinb1,N[1]);
mult(U[2],dinb1,N[2]);
mult(U[3],dinb1,N[3]);
mult(U[4],dinb1,N[4]);
mult(U[5],dinb1,N[5]);
mult(U[6],dinb1,N[6]);
mult(U[7],dinb1,N[7]);
mult(U[8],dinb1,N[8]);
mult(U[9],dinb1,N[9]);
mult(U[10],dinb1,N[10]);
mult(U[11],dinb1,N[11]);
mult(U[12],dinb1,N[12]);
mult(U[13],dinb1,N[13]);
mult(U[14],dinb1,N[14]);
mult(U[15],dinb1,N[15]);
mult(U[16],dinb1,N[16]);
mult(U[17],dinb1,N[17]);
mult(U[18],dinb1,N[18]);
mult(U[19],dinb1,N[19]);
mult(U[20],dinb1,N[20]);
mult(U[21],dinb1,N[21]);
mult(U[22],dinb1,N[22]);
mult(U[23],dinb1,N[23]);
mult(U[24],dinb1,N[24]);
mult(U[25],dinb1,N[25]);
mult(U[26],dinb1,N[26]);
mult(U[27],dinb1,N[27]);
mult(U[28],dinb1,N[28]);
mult(U[29],dinb1,N[29]);
mult(U[30],dinb1,N[30]);
mult(U[31],dinb1,N[31]);
mult(U[32],dinb1,N[32]);
mult(U[33],dinb1,N[33]);
mult(U[34],dinb1,N[34]);
mult(U[35],dinb1,N[35]);
mult(U[36],dinb1,N[36]);
mult(U[37],dinb1,N[37]);
mult(U[38],dinb1,N[38]);
mult(U[39],dinb1,N[39]);
mult(U[40],dinb1,N[40]);
mult(U[41],dinb1,N[41]);
mult(U[42],dinb1,N[42]);
mult(U[43],dinb1,N[43]);
mult(U[44],dinb1,N[44]);
mult(U[45],dinb1,N[45]);
mult(U[46],dinb1,N[46]);
mult(U[47],dinb1,N[47]);
mult(U[48],dinb1,N[48]);
mult(U[49],dinb1,N[49]);
mult(U[50],dinb1,N[50]);
mult(U[51],dinb1,N[51]);
mult(U[52],dinb1,N[52]);
mult(U[53],dinb1,N[53]);
mult(U[54],dinb1,N[54]);
mult(U[55],dinb1,N[55]);
mult(U[56],dinb1,N[56]);
mult(U[57],dinb1,N[57]);
mult(U[58],dinb1,N[58]);
mult(U[59],dinb1,N[59]);
mult(U[60],dinb1,N[60]);
mult(U[61],dinb1,N[61]);
mult(U[62],dinb1,N[62]);
mult(U[63],dinb1,N[63]);
mult(U[64],dinb1,N[64]);
mult(U[65],dinb1,N[65]);
mult(U[66],dinb1,N[66]);
mult(U[67],dinb1,N[67]);
mult(U[68],dinb1,N[68]);
mult(U[69],dinb1,N[69]);
mult(U[70],dinb1,N[70]);
mult(U[71],dinb1,N[71]);
mult(U[72],dinb1,N[72]);
mult(U[73],dinb1,N[73]);
mult(U[74],dinb1,N[74]);
mult(U[75],dinb1,N[75]);
mult(U[76],dinb1,N[76]);
mult(U[77],dinb1,N[77]);
mult(U[78],dinb1,N[78]);
mult(U[79],dinb1,N[79]);
mult(U[80],dinb1,N[80]);
mult(U[81],dinb1,N[81]);
mult(U[82],dinb1,N[82]);
mult(U[83],dinb1,N[83]);
mult(U[84],dinb1,N[84]);
mult(U[85],dinb1,N[85]);
mult(U[86],dinb1,N[86]);
mult(U[87],dinb1,N[87]);
mult(U[88],dinb1,N[88]);
mult(U[89],dinb1,N[89]);
mult(U[90],dinb1,N[90]);
mult(U[91],dinb1,N[91]);
mult(U[92],dinb1,N[92]);
mult(U[93],dinb1,N[93]);
mult(U[94],dinb1,N[94]);
mult(U[95],dinb1,N[95]);
mult(U[96],dinb1,N[96]);
mult(U[97],dinb1,N[97]);
mult(U[98],dinb1,N[98]);
mult(U[99],dinb1,N[99]);
mult(U[100],dinb1,N[100]);
mult(U[101],dinb1,N[101]);
mult(U[102],dinb1,N[102]);
mult(U[103],dinb1,N[103]);
mult(U[104],dinb1,N[104]);
mult(U[105],dinb1,N[105]);
mult(U[106],dinb1,N[106]);
mult(U[107],dinb1,N[107]);
mult(U[108],dinb1,N[108]);
mult(U[109],dinb1,N[109]);
mult(U[110],dinb1,N[110]);
mult(U[111],dinb1,N[111]);
mult(U[112],dinb1,N[112]);
mult(U[113],dinb1,N[113]);
mult(U[114],dinb1,N[114]);
mult(U[115],dinb1,N[115]);
mult(U[116],dinb1,N[116]);
mult(U[117],dinb1,N[117]);
mult(U[118],dinb1,N[118]);
mult(U[119],dinb1,N[119]);
mult(U[120],dinb1,N[120]);
mult(U[121],dinb1,N[121]);
mult(U[122],dinb1,N[122]);
mult(U[123],dinb1,N[123]);
mult(U[124],dinb1,N[124]);
mult(U[125],dinb1,N[125]);
mult(U[126],dinb1,N[126]);
end
always(M or N or en)
begin
if(en)
begin
ready_o_reg=1;
N_reg[0] =N[0] ^N[121] ^N[126];
N_reg[1] =N[0] ^N[1] ^N[121] ^N[122] ^N[126];
N_reg[2] =N[0] ^N[1] ^N[2] ^N[121] ^N[122] ^N[123] ^N[126];
N_reg[3] =N[1] ^N[2] ^N[3] ^N[122] ^N[123] ^N[124];
N_reg[4] =N[2] ^N[3] ^N[4] ^N[123] ^N[124] ^N[125];
N_reg[5] =N[3] ^N[4] ^N[5] ^N[124] ^N[125] ^N[126];
N reg[6] =N[4] ^N[5] ^N[6] ^N[125] ^N[126];
N_reg[7] =N[0] ^N[5] ^N[6] ^N[7] ^N[121];
N_reg[8] =N[1] ^N[6] ^N[7] ^N[8] ^N[122];
N_reg[9] =N[2] ^N[7] ^N[8] ^N[9] ^N[123];
N_reg[10] =N[3] ^N[8] ^N[9] ^N[10] ^N[124];
N_reg[11] =N[4] ^N[9] ^N[10] ^N[11] ^N[125];
N_reg[12] =N[5] ^N[10] ^N[11] ^N[12] ^N[126];
N_reg[13] =N[6] ^N[11] ^N[12] ^N[13];
N_reg[14] =N[7] ^N[12] ^N[13] ^N[14];
N_reg[15] =N[8] ^N[13] ^N[14] ^N[15];
N_reg[16] =N[9] ^N[14] ^N[15] ^N[16];
N_reg[17] =N[10] ^N[15] ^N[16] ^N[17];
N_reg[18] =N[11] ^N[16] ^N[17] ^N[18];
N_reg[19] =N[12] ^N[17] ^N[18] ^N[19];
N_reg[20] =N[13] ^N[18] ^N[19] ^N[20];
N_reg[21] =N[14] ^N[19] ^N[20] ^N[21];
N_reg[22] =N[15] ^N[20] ^N[21] ^N[22];
N_reg[23] =N[16] ^N[21] ^N[22] ^N[23];
N_reg[24] =N[17] ^N[22] ^N[23] ^N[24];
N_reg[25] =N[18] ^N[23] ^N[24] ^N[25];
N_reg[26] =N[19] ^N[24] ^N[25] ^N[26];
N_reg[27] =N[20] ^N[25] ^N[26] ^N[27];
N_reg[28] =N[211 ^N[26] ^N[27] ^N[28];
N_reg[29] =N[22] ^N[27] ^N[28] ^N[29];
N_reg[30] =N[23] ^N[28] ^N[29] ^N[30];
N_reg[31] =N[24] ^N[29] ^N[30] ^N[31];
N_reg[32] =N[25] ^N[30] ^N[31] ^N[32];
N_reg[33] =N[26] ^N[31] ^N[32] ^N[33];
N_reg[34] =N[27] ^N[32] ^N[33] ^N[34];
N_reg[35] =N[28] ^N[33] ^N[34] ^N[35];
N_reg[36] =N[29] ^N[34] ^N[35] ^N[36];
N_reg[37] =N[30] ^N[35] ^N[36] ^N[37];
N_reg[38] =N[31] ^N[36] ^N[37] ^N[38];
N_reg[39] =N[32] ^N[37] ^N[38] ^N[39];
N_reg[40] =N[33] ^N[38] ^N[39] ^N[40];
N_reg[41] =N[34] ^N[39] ^N[40] ^N[41];
N_reg[42] =N[35] ^N[40] ^N[41] ^N[42];
N_reg[43] =N[36] ^N[41] ^N[42] ^N[43];
N_reg[44] =N[37] ^N[42] ^N[43] ^N[44];
N_reg[45] =N[38] ^N[43] ^N[44] ^N[45];
N_reg[46] =N[39] ^N[44] ^N[45] ^N[46];
N_reg[47] =N[40] ^N[45] ^N[46] ^N[47];
N_reg[48] =N[41] ^N[46] ^N[47] ^N[48];
N_reg[49] =N[42] ^N[47] ^N[48] ^N[49];
N_reg[50] =N[43] ^N[48] ^N[49] ^N[50];
N_reg[51] =N[44] ^N[49] ^N[50] ^N[51];
N_reg[52] =N[45] ^N[50] ^N[51] ^N[52];
N_reg[53] =N[46] ^N[51] ^N[52] ^N[53];
N_reg[54] =N[47] ^N[52] ^N[53] ^N[54];
N_reg[55] =N[48] ^N[53] ^N[54] ^N[55];
N_reg[56] =N[49] ^N[54] ^N[55] ^N[56];
N_reg[57] =N[50] ^N[55] ^N[56] ^N[57];
N_reg[58] =N[51] ^N[56] ^N[57] ^N[58];
N_reg[59] =N[52] ^N[57] ^N[58] ^N[59];
N_reg[60] =N[53] ^N[58] ^N[59] ^N[60];
N_reg[61] =N[54] ^N[59] ^N[60] ^N[61];
N_reg[62] =N[55] ^N[60] ^N[61] ^N[62];
N_reg[63] =N[56] ^N[61] ^N[62] ^N[63];
N_reg[64] =N[57] ^N[62] ^N[63] ^N[64];
N_reg[65] =N[58] ^N[63] ^N[64] ^N[65];
N_reg[66] =N[59] ^N[64] ^N[65] ^N[66];
N_reg[67] =N[60] ^N[65] ^N[66] ^N[67];
N_reg[68] =N[61] ^N[66] ^N[67] ^N[68];
N_reg[69] =N[62] ^N[67] ^N[68] ^N[69];
N_reg[70] =N[63] ^N[68] ^N[69] ^N[70];
N_reg[71] =N[64] ^N[69] ^N[70] ^N[71];
N_reg[72] =N[65] ^N[70] ^N[71] ^N[72];
N_reg[73] =N[66] ^N[71] ^N[72] ^N[73];
N_reg[74] =N[67] ^N[72] ^N[73] ^N[74];
N_reg[75] =N[68] ^N[73] ^N[74] ^N[75];
N_reg[76] =N[69] ^N[74] ^N[75] ^N[76];
N_reg[77] =N[70] ^N[75] ^N[76] ^N[77];
N_reg[78] =N[71] ^N[76] ^N[77] ^N[78];
N_reg[79] =N[72] ^N[77] ^N[78] ^N[79];
N_reg[80] =N[73] ^N[78] ^N[79] ^N[80];
N_reg[81] =N[74] ^N[79] ^N[80] ^N[81];
N_reg[82] =N[75] ^N[80] ^N[81] ^N[82];
N_reg[83] =N[76] ^N[81] ^N[82] ^N[83];
N_reg[84] =N[77] ^N[82] ^N[83] ^N[84];
N_reg[85] =N[78] ^N[83] ^N[84] ^N[85];
N_reg[86] =N[79] ^N[84] ^N[85] ^N[86];
N_reg[87] =N[80] ^N[85] ^N[86] ^N[87];
N_reg[88] =N[81] ^N[86] ^N[87] ^N[88];
N_reg[89] =N[82] ^N[87] ^N[88] ^N[89];
N_reg[90] =N[83] ^N[88] ^N[89] ^N[90];
N_reg[91] =N[84] ^N[89] ^N[90] ^N[91];
N_reg[92] =N[85] ^N[90] ^N[91] ^N[92];
N_reg[93] =N[86] ^N[91] ^N[92] ^N[93];
N_reg[94] =N[87] ^N[92] ^N[93] ^N[94];
N_reg[95] =N[88] ^N[93] ^N[94] ^N[95];
N_reg[96] =N[89] ^N[94] ^N[95] ^N[96];
N_reg[97] =N[90] ^N[95] ^N[96] ^N[97];
N_reg[98] =N[91] ^N[96] ^N[97] ^N[98];
N_reg[99] =N[92] ^N[97] ^N[98] ^N[99];
N_reg[100]=N[93] ^N[98] ^N[99] ^N[100];
N_reg[101] =N[94] ^N[99] ^N[100] ^N[101];
N_reg[102] =N[95] ^N[100] ^N[101] ^N[102];
N_reg[103] =N[96] ^N[101] ^N[102] ^N[103];
N_reg[104] =N[97] ^N[102] ^N[103] ^N[104];
N_reg[105] =N[98] ^N[103] ^N[104] ^N[105];
N_reg[106] =N[99] ^N[104] ^N[105] ^N[106];
N_reg[107] =N[100] ^N[105] ^N[106] ^N[107];
N_reg[108] =N[101] ^N[106] ^N[107] ^N[108];
N_reg[109] =N[102] ^N[107] ^N[108] ^N[109];
N_reg[110] =N[103] ^N[108] ^N[109] ^N[110];
N_reg[111] =N[104] ^N[109] ^N[110] ^N[111];
N_reg[112] =N[105] ^N[110] ^N[111] ^N[112];
N_reg[113] =N[106] ^N[111] ^N[112] ^N[113];
N_reg[114] =N[107] ^N[112] ^N[113] ^N[114];
N_reg[115] =N[108] ^N[113] ^N[114] ^N[115];
N_reg[116] =N[109] ^N[114] ^N[115] ^N[116];
N_reg[117] =N[110] ^N[115] ^N[116] ^N[117];
N_reg[118] =N[111] ^N[116] ^N[117] ^N[118];
N_reg[119] =N[112] ^N[117] ^N[118] ^N[119];
N_reg[120] =N[113] ^N[118] ^N[119] ^N[120];
N_reg[121] =N[114] ^N[119] ^N[120] ^N[121];
N_reg[122] =N[115] ^N[120] ^N[121] ^N[122];
N_reg[123] =N[116] ^N[121] ^N[122] ^N[123];
N_reg[124] =N[117] ^N[122] ^N[123] ^N[124];
N_reg[125] =N[118] ^N[123] ^N[124] ^N[125];
N_reg[126] =N[119] ^N[124] ^N[125] ^N[126];
N_reg[127] =N[120] ^N[125] ^N[126];
dout_reg =N_reg ^M;
end
else
begin
ready_o_reg=0;
dout_reg=128′h0;
end
end
task mult;
input [0:127]a;
input [0:127]b;
output c;
reg c;
begin
c = (a[127]&b[0]) ^(a[126]&b[1]) ^(a[125]&b[2]) ^(a[124]&b[3]) ^(a[123]&b[4])
^(a[122]&b[5]) ^(a[121]&b[6]) ^(a[120]&b[7]) ^(a[119]&b[8]) ^(a[118]&b[9])
^(a[117]&b[10]) ^(a[116]&b[11]) ^(a[115]&b[12]) ^(a[114]&b[13]) ^(a[113]&b[14])
^(a[112]&b[15]) ^(a[111]&b[16]) ^(a[110]&b[17]) ^(a[109]&b[18]) ^(a[108]&b[19])
^(a[107]&b[20]) ^(a[106]&b[21]) ^(a[105]&b[22]) ^(a[104]&b[23]) ^(a[103]&b[24])
^(a[102]&b[25]) ^(a[101]&b[26]) ^(a[100]&b[27]) ^(a[99]&b[28]) ^(a[98]&b[29])
^(a[97]&b[30]) ^(a[96]&b[31]) ^(a[95]&b[32]) ^(a[94]&b[33]) ^(a[93]&b[34])
^(a[92]&b[35]) ^(a[91]&b[36]) ^(a[90]&b[37]) ^(a[89]&b[38]) ^(a[88]&b[39])
^(a[87]&b[40]) ^(a[86]&b[41]) ^(a[85]&b[42]) ^(a[84]&b[43]) ^(a[83]&b[44])
^(a[82]&b[45]) ^(a[81]&b[46]) ^(a[80]&b[47]) ^(a[79]&b[48]) ^(a[78]&b[49])
^(a[77]&b[50]) ^(a[76]&b[51]) ^(a[75]&b[52]) ^(a[74]&b[53]) ^(a[73]&b[54])
^(a[72]&b[55]) ^(a[71]&b[56]) ^(a[70]&b[57]) ^(a[69]&b[58]) ^(a[68]&b[59])
^(a[67]&b[60]) ^(a[66]&b[61]) ^(a[65]&b[62]) ^(a[64]&b[63]) ^(a[63]&b[64])
^(a[62]&b[65]) ^(a[61]&b[66]) ^(a[60]&b[67]) ^(a[59]&b[68]) ^(a[58]&b[69])
^(a[57]&b[70]) ^(a[56]&b[71]) ^(a[55]&b[72]) ^(a[54]&b[73]) ^(a[53]&b[74])
^(a[52]&b[75]) ^(a[51]&b[76]) ^(a[50]&b[77]) ^(a[49]&b[78]) ^(a[48]&b[79])
^(a[47]&b[80]) ^(a[46]&b[81]) ^(a[45]&b[82]) ^(a[44]&b[83]) ^(a[43]&b[84])
^(a[42]&b[85]) ^(a[41]&b[86]) ^(a[40]&b[87]) ^(a[39]&b[88]) ^(a[38]&b[89])
^(a[37]&b[90]) ^(a[36]&b[91]) ^(a[35]&b[92]) ^(a[34]&b[93]) ^(a[33]&b[94])
^(a[32]&b[95]) ^(a[31]&b[96]) ^(a[30]&b[97]) ^(a[29]&b[98]) ^(a[28]&b[99])
^(a[27]&b[100]) ^(a[26]&b[101]) ^(a[25]&b[102]) ^(a[24]&b[103]) ^(a[23]&b[104])
^(a[22]&b[105]) ^(a[21]&b[106]) ^(a[20]&b[107]) ^(a[19]&b[108]) ^(a[18]&b[109])
^(a[17]&b[110]) ^(a[16]&b[111]) ^(a[15]&b[112]) ^(a[14]&b[113]) ^(a[13]&b[114])
^(a[12]&b[115]) ^(a[11]&b[116]) ^(a[10]&b[117]) ^(a[9]&b[118]) ^(a[8]&b[119])
^(a[7]&b[120]) ^(a[6]&b[121]) ^(a[5]&b[122]) ^(a[4]&b[123]) ^(a[3]&b[124])
^(a[2]&b[125]) ^(a[1]&b[126]) ^(a[0]&b[127]);
end
endtask
endmodule
Claims (6)
1.一种伽罗华域乘法器实现装置,其特征在于:
m个m位移位寄存器单元,用于生成m×m的L矩阵;
m-1个m位移位寄存器单元,用于生成(m-1)×m的U矩阵;
2m-1组二元与门树,每组二元与门树是由2m个与门单元组成的二叉树形结构,用来处理计算两个m位元素乘法;
m组二元与门树,每组二元与门树是由2m-3个与门单元组成的二叉树形结构,用来处理计算两个m-1位元素乘法;
一组二元异或门树,是由2m-1个异或门单元组成的二叉树形结构,用来处理计算两个m位元素加法;
数据输入输出接口,提供两个m位元素输入接口以及一个m位元素输出接口,用于m位乘数和m位被乘数的输入以及结果元素的输出;
一个基于可约多项式P(x)=xm+xkt+……+xk2+xk1+1,其中1≤k1<k2<…<kt≤m/2构造的Q矩阵生成模块,所述Q矩阵生成模块通过Q矩阵构建,Q矩阵生成模块是由一组(m-1)×m的矩阵寄存器来提供Q矩阵数据输出,每一个寄存器提供一个m位的二元数据,每一个二元数据是根据Q矩阵赋值的,经矩阵转置后可以并行输出m个m-1位元素传送给二元与门树来计算中间结果;所述Q矩阵的第0行有t+1个1,1的分布分别在0,k1,k2,……,kt列;所述Q矩阵的第1行至m-kt-1行由第0行依次右移位得到;所述Q矩阵的第m-kt至m-2行的构造规则如下:当i行最后一列以1结尾时,i+1行向右移一位并与第0行的值进行异或运算;当i行最后一列以0结尾时,i+1行向右移一位。
2.如权利要求1所述的一种伽罗华域乘法器实现装置,其特征在于所述的两组m位移位寄存器并行的产生数据,提高了运算速度。
3.如权利要求1所述的一种伽罗华域乘法器实现装置,其特征在于所述的2m-1组二元与门树是由log2m级与门树结构组成。
4.如权利要求1所述的一种伽罗华域乘法器实现装置,其特征在于所述的二元异或门树是由log2m级与门树结构组成。
5.如权利要求1所述的一种伽罗华域乘法器实现装置,其特征在于所述的Q矩阵生成模块是由一个(m-1)×m位的寄存器单元来存放矩阵数据,经矩阵转置后可以并行输出m个m-1位元素传送给m组二元与门树来计算中间结果。
6.如权利要求1所述的一种伽罗华域乘法器实现装置,其特征在于其计算过程包括以下步骤:
步骤A:将输入的数据元素A并行送入L矩阵模块经过循环移位后与送进来的数据元素B经过2m-1组二元与门树;
步骤B:将输入的数据元素A并行送入U矩阵模块经过循环移位后与送进来的数据元素B经过2m-1组二元与门树,此步骤与步骤A在时序上是同时的;
步骤C:将步骤B运算得到的结果,一个m-1位数据元素与Q矩阵生成模块输出的m个m-1位元素经过m组二元与门树;
步骤D:步骤C得到的结果与步骤A运算得到的结果经过二元异或门树,得到最终结果C并予以输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100817685A CN101650644B (zh) | 2009-04-10 | 2009-04-10 | 一种伽罗华域乘法器实现装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100817685A CN101650644B (zh) | 2009-04-10 | 2009-04-10 | 一种伽罗华域乘法器实现装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101650644A CN101650644A (zh) | 2010-02-17 |
CN101650644B true CN101650644B (zh) | 2012-07-04 |
Family
ID=41672887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100817685A Expired - Fee Related CN101650644B (zh) | 2009-04-10 | 2009-04-10 | 一种伽罗华域乘法器实现装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101650644B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043605B (zh) * | 2010-12-23 | 2012-10-24 | 龙芯中科技术有限公司 | 一种多媒体变换乘法器及其处理方法 |
CN102184088B (zh) * | 2011-03-23 | 2013-12-25 | 北京邮电大学 | 一种基于串并结合实现有限域乘法的方法及装置 |
CN102664731B (zh) * | 2012-04-09 | 2014-06-25 | 中科院成都信息技术股份有限公司 | 电子选票信息的加密及快速处理方法 |
CN103942027B (zh) * | 2014-04-16 | 2017-06-06 | 哈尔滨工业大学深圳研究生院 | 一种可重构的快速并行乘法器 |
CN104407837B (zh) * | 2014-12-16 | 2017-09-19 | 中国电子科技集团公司第三十八研究所 | 一种实现伽罗瓦域乘法的装置及其应用方法 |
CN106909339A (zh) * | 2017-02-22 | 2017-06-30 | 深圳职业技术学院 | 一种基于二叉树结构的有限域乘法器 |
CN108268243B (zh) * | 2018-01-30 | 2021-06-04 | 深圳职业技术学院 | 一种基于查找的复合域乘法装置 |
CN114063973B (zh) * | 2022-01-14 | 2022-04-22 | 苏州浪潮智能科技有限公司 | 伽罗华域乘法器及纠删编解码系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1589429A (zh) * | 2001-11-30 | 2005-03-02 | 阿纳洛格装置公司 | 伽罗瓦域乘法器系统 |
CN1608244A (zh) * | 2001-11-30 | 2005-04-20 | 阿纳洛格装置公司 | 伽罗瓦域乘法/乘法一加法乘法累加 |
-
2009
- 2009-04-10 CN CN2009100817685A patent/CN101650644B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1589429A (zh) * | 2001-11-30 | 2005-03-02 | 阿纳洛格装置公司 | 伽罗瓦域乘法器系统 |
CN1608244A (zh) * | 2001-11-30 | 2005-04-20 | 阿纳洛格装置公司 | 伽罗瓦域乘法/乘法一加法乘法累加 |
Also Published As
Publication number | Publication date |
---|---|
CN101650644A (zh) | 2010-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101650644B (zh) | 一种伽罗华域乘法器实现装置 | |
CN103176767B (zh) | 一种低功耗高吞吐的浮点数乘累加单元的实现方法 | |
Di Matteo et al. | Secure elliptic curve crypto-processor for real-time IoT applications | |
Meher et al. | Low-Latency, Low-Area, and Scalable Systolic-Like Modular Multipliers for $ GF (2^{m}) $ Based on Irreducible All-One Polynomials | |
Meher et al. | A high bit rate serial-serial multiplier with on-the-fly accumulation by asynchronous counters | |
CN101262345A (zh) | 椭圆曲线密码系统的倍点系统 | |
Prasad et al. | Design of low power and high speed modified carry select adder for 16 bit Vedic Multiplier | |
CN102184161A (zh) | 基于余数系统的矩阵求逆装置及方法 | |
McIvor et al. | High-radix systolic modular multiplication on reconfigurable hardware | |
Stavinov | A practical parallel CRC generation method | |
CN107992283A (zh) | 一种基于降维实现有限域乘法的方法和装置 | |
Talapatra et al. | Unified digit serial systolic Montgomery multiplication architecture for special classes of polynomials over GF (2m) | |
CN107885486B (zh) | 一种基于查找树的复合有限域求逆装置 | |
CN103780381B (zh) | 基于高基脉动阵列的蒙哥马利算法的实现装置及方法 | |
Surendran et al. | Implementation of fast multiplier using modified Radix-4 booth algorithm with redundant binary adder for low energy applications | |
Namin et al. | A Fully Serial-In Parallel-Out Digit-Level Finite Field Multiplier in $\mathbb {F} _ {2^{m}} $ Using Redundant Representation | |
Kadu et al. | Hardware implementation of efficient elliptic curve scalar multiplication using vedic multiplier | |
Timarchi et al. | Area-time-power efficient maximally redundant signed-digit modulo 2 n− 1 adder and multiplier | |
Chen et al. | Efficient sigmoid function for neural networks based FPGA design | |
Bokade et al. | CLA based 32-bit signed pipelined multiplier | |
Bui et al. | Experiments with high speed parallel cubing units | |
Ibrahim et al. | Low-power, high-speed unified and scalable word-based radix 8 architecture for montgomery modular multiplication in GF (p) and GF (2 n) | |
CN102929574A (zh) | Gf(2163)域上的脉动乘法器设计方法 | |
Zhang et al. | Accurate and energy-efficient implementation of non-linear adder in parallel stochastic computing using sorting network | |
Mustapha et al. | Intel/Altera FPGA Implementation of CORDIC Square Root Algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120704 Termination date: 20150410 |
|
EXPY | Termination of patent right or utility model |