有限域gf(2^227)上的乘法器及模乘算法_2

文档序号:8361173阅读:来源:国知局
然后寄存相应的计算结果,整体模乘采用数字串行的执行方式,数字串行字长w = 57,采用LSB的执行方式,处理的操作数据位宽最大为227bit,一次模乘可得到227*57模乘运算结果,为了提高执行频率以及吞吐率,采用流水执行,经过4次模乘模块运算可以得到最终模乘运算结果。
[0046]输入数据加载以及分配寄存器堆是在主控状态机的控制下,加载了输入的两个模乘操作数A、B,并且正确的分配并给出每一次计算227*57所需要的输入数据,如第一次227*57 模乘,给出 A, B1 (B1= B[56:0]);第二次 227*57 模乘给出 A 57,B2 (A57= AXx57, B2 =B[113:57]);第三次 227*57 模乘给出 A114, B3(A114= AXx114, B3= B[170:114]);第四次227*57 模乘给出 A171, B3(A171= AXx 171,B4= {I ‘bO,B[226:171]})。
[0047]模乘整体模块如图8所示,包括:部分积叠加模块、第一寄存器、第一累加模块、第二寄存器、第二累加模块、第三寄存器、模加模块、第四寄存器。
[0048]部分积叠加模块,其输入端接操作数信号,其输出端与第一寄存器输入端连接,输出操作数按位相乘部分积的叠加结果至第一寄存器输入端。第一寄存器,其输出端与第一累加模块输入端连接,输出寄存的部分积叠加结果至第一累加模块。第一累加模块,其输出端与第二寄存器输入端连接,输出第一累加结果至第二寄存器。第二寄存器,其输出端与第二累加模块输入端连接,输出寄存的第一累加结果至第二累加模块。第二累加模块,其输出端与第三寄存器输入端连接,输出第二累加结果至第三寄存器。第三寄存器,其输出端与模加模块第一输入端连接,输出寄存的第二累加结果至模加模块。模加模块,其第二输入端与第四寄存器输出端连接,其输出端与第四寄存器输入端连接,模加模块对第二累加结果进行组合逻辑运算得到模乘结果,第四寄存器寄存模乘结果并将该模乘结果反馈至模加模块作为下一次模加运算的输入数据。
[0049]模乘模块具体框图如图3所示,包括部分积产生部分302,部分积叠加结果寄存器堆304,308和3012,以及二级异或树链306和3010。
[0050]对于模乘操作,输入数据A、B,计算后得到结果AXB(mod f (X)),根据多项式基乘法规则:AXB (mod f (x)) = Σ (AXBiX1) (mod f (χ)) = Σ (AXxlIi1d f (x))Bi= Σ A j XBi;其中AXxlIi1d f (χ) = Ai, 1^是操作数B的第i位。
[0051]部分积产生部分302,计算了一次227*57并得到57个部分积,每一个都是
227bit,如:计算第一次模乘,那么得到AtlXBtl......A56XB56, AiXBi操作是A i的每一位都要和Bi进行一次与操作,A 过一个Reduct1n单元操作之后得到A i+1。Reduct1n单元详图如图5所示。
[0052]部分积叠加结果寄存器堆304、308和3012,分别将部分积某次叠加后结果保存起来,使得操作能够流水执行,也就是用寄存器打断了部分积的叠加链。它们结构相同,只是数量不同。
[0053]二级异或树链306和3010是组合逻辑,完成部分积的叠加,其具体图示如图4所示。306和3010结构相同,但是异或门的个数不同。
[0054]输入操作数通过302得到部分积,然后通过寄存器堆以及异或逻辑进行模加,最后3012存储的结果通过异或逻辑后得到了最终的227*57的模乘结果。
[0055]模加模块完成两个操作数相加并取模的操作,如果两个操作数A、B,那么模加的结果即为(A+B)mod(2),也就是两个操作数按位相加而没有进位,进一步用硬件实现即两个操作数按位异或A~B,通过异或阵列就能够实现此模块。
[0056]部分积寄存器堆寄存了每一次227*57模乘的运算累加结果,并将之前的累加结果作为模加模块106的一个输入操作数,此模块分时寄存了 C1, C^C2, CJCfC3, Ci+CJQ+C;,其中Ci是每一次模乘的运算结果,最后寄存了 227*227的模乘结果,并作为输出数据。
[0057]图2所示是模乘模块的主控状态机,状态机200包含了9个状态,分别为IDLE, LOAD, PARTIAL REGFILE1, PARTIAL REGFILE2, PARTIAL REGFILE3, RESULTI, RESULT2,RESULT3, FINAL RESULT。外部的控制状态跳转的只有模乘使能信号Mul_en_i,当它为高电平时,启动状态机,跳转到LOAD状态,顺序执行之后状态,如果过程中出现了未知状态,状态机跳转到IDLE状态。下面分别描述各个状态。
[0058]状态IDLE,是空闲状态,此时所有寄存器值都是初始值0,这个状态监测使能信号是否为高,准备启动状态机,此外此状态将把模乘结果输出标志信号清零,当从FINALRESULT跳转到IDLE的时候,会拉高模乘结果输出标志信号,为保证此信号只保持一个时钟周期,在IDLE时将其清零。
[0059]状态LOAD是将输入的两个操作数寄存并将每一次227*57的输入数据给出。
[0060]状态PARTIAL REGFILE1是将第一次227*57生成的部分积部分叠加结果寄存,也就是将结果寄存在图3中的寄存器堆304,并将第二次227*57的输入数据给出。
[0061]状态PARTIAL REGFILE2是将寄存器堆304结果进一步通过而异或树链逻辑叠加之后的结果寄存,也就是将结果寄存在图3中寄存器堆308,同时将第二次227*57生成的部分积部分叠加结果寄存,即将结果寄存在图3中的寄存器堆304,并将第三次227*57的输入数据给出。
[0062]状态PARTIAL REGFILE3将寄存器堆308结果进一步通过而异或树链逻辑叠加之后的结果寄存,也就是将结果寄存在图3中寄存器堆3012,并将寄存器堆304结果进一步通过而异或树链逻辑叠加之后的结果寄存在308,同时将第三次227*57生成的部分积部分叠加结果寄存在304,并将第四次227*57的输入数据给出。
[0063]状态RESULT1将3012的结果通过异或门阵列并通过106模块与108内容相加的结果寄存在108中,此时就得到了第一次模乘结果,同时将寄存器堆308结果进一步通过而异或树链逻辑叠加之后的结果寄存在3012,并将寄存器堆304结果进一步通过而异或树链逻辑叠加之后的结果寄存在308,同时将第四次227*57生成的部分积部分叠加结果寄存在304。
[0064]状态RESULT2将第二次227*57模乘寄存在3012的结果与C1通过组合逻辑运算的结果寄存于108,得到了累加结果(^+(:2,同时将寄存器堆308结果进一步通过而异或树链逻辑叠加之后的结果寄存在3012,并将寄存器堆304结果进一步通过而异或树链逻辑叠加之后的结果寄存在308。
[0065]状态RESULT3将第三次227*57模乘寄存在3012的结果CjC2与通过组合逻辑运算的结果寄存于108,得到了累加结果Q+CdQ,同时把第四次227*57模乘寄存在308的结果通过逻辑运算寄存在3012。
[0066]状态FINAL RESULT将第四次的模乘寄存在3012的结果与CjCfC3通过组合逻辑运算的结果寄存在108,此时得到了最终227*227的运算结果,并拉高模乘结果输出标志信号。
[0067]以上详细说明了各个状态所进行的操作,从中体现出了本发明采用了流水执行方式,减少了一次完整模乘执行所需要的周期,提高了执行效率。
[0068]图4所示是模乘模块中的二级异或树链,其中所示的一个异或门是代指227个异或门,因为一个部分积是227bit位宽,每级异或门都实现部分积的两两相加,也就是实现模加操作,如(CjCw)Ii1c^所以两个部分积按位异或就能够实现模加操作。
[0069]图5所示是模乘模块中的Reduct1n部分的,图上的A0,Al,......A226与图3中的不同,图3所示Ai的就是A卩但是图5的A满每一位
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1