一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于费马模数的多项式乘法器的制作方法

2022-03-16 16:16:47 来源:中国专利 TAG:


1.本发明属于全同态加密中优化多项式乘法器硬件电路的设计领域,具体说是基于费马模数的多项式乘法器。


背景技术:

2.rlwe密码系统中最耗时的操作是多项式乘法。到目前为止,对多项式乘法的加速进行了大量的研究。目前的大多数多项式乘法利用教科书中的多项式算法(spma)或数论变换(ntt)加实现。spma是简单且直接的硬件实现,而ntt需要复杂的预计算和数组重排序,把多项式乘法时间复杂度从二次降到准线性来实现高性能。与其他算法相比,spma算法结构简单,使用的硬件最少,但吞吐量低,ntt的吞吐是spma的9倍。然而高吞吐的ntt方法需要以硬件资源为代价,总之,spma和ntt在时间和面积上处于两个极端。fnt算法是介于两个极端之间的另一种候选算法,在对r-lwe的fpga实现的研究中并不广泛。硬件实现2d-fnt上,除了传统的行列型方法,提出了基于向量基算法实现2d-fnt,减少了过程中的乘法操作次数。行列型和向量基方法都是采用短序列fnt算法来构造长序列fnt算法,虽然可以有效降低算法的时间复杂度,但也会使数据交互变得困难。长序列的fnt算法一旦被拆分,输入数据就需要根据拆分结构,进行相应的顺序调整,特别是当fnt算法输入的数据量非常多时,数据交互过程就变得更加复杂,同时也会占据很多资源。


技术实现要素:

3.本发明为克服现有技术的不足之处,提出一种基于费马模数的多项式乘法器,以期能通过优化同址fnt算法,解决同址计算与蝶形单元流水计算冲突的问题,从而减小存储资源消耗、并提高计算速度和多项式乘法器的性能。
4.为达到上述发明目的,本发明所采用的技术方案如下:
5.本发明一种基于费马模数的多项式乘法器的特点包括:控制单元、地址生成单元、存储单元、存储管理单元、旋转因子生成单元、蝶形计算单元、换向器单元和点乘单元;
6.所述存储单元由多个共享地址线的小存储块组成,其中,4个小存储块存储有n
×
n的多项式x1,另外4个小存储块存储有n
×
n的多项式x2;
7.所述控制单元在所述存储单元完成多项式的存储后,在当前第i个周期下发送fnt正变换的使能信号给地址生成单元;
8.所述地址生成单元根据所述fnt正变换的使能信号和无冲突访存规则生成当前第i个周期下的读写地址w和标签y,并将所述读写地址w发送给所述存储单元和所述旋转因子生成单元,将所述标签y发送给所述存储管理单元和所述旋转因子生成单元;
9.所述存储单元当前第i个周期下根据所述读写地址w读取多项式x1中的4个数据和多项式x2中的4个数据并发送给所述存储管理单元;
10.所述点乘单元从所述存储单元中获取多项式x1中的4个数据和多项式x2中的4个数据并进行点乘运算,得到当前第i个周期下的正变换时的点乘计算结果并发送给所述存
储管理单元;
11.所述存储管理单元根据所述标签y中的第一位y[0],并利用二选一选择器选择n
×
n的多项式x1中的4个数据作为一组数据并输出给所述蝶形计算单元;
[0012]
所述旋转因子生成单元根据所述读写地址w和所述标签y中的第三位y[2]生成4个正变换旋转因子并作为一组因子;
[0013]
所述蝶形计算单元对所述正变换时的一组数据中的每个数据和一组因子中对应的一个因子分别进行加法、移位和取模操作,得到在当前第i个周期下的4个正变换时的计算数据;
[0014]
所述换向器单元由4个4选1的数据选择器、6个数据延迟器组成;
[0015]
第一4选1的数据选择器在当前第i个周期下接收4个计算数据的第一个计算数据并利用第一数据延迟器进行3个延迟;
[0016]
第二4选1的数据选择器在当前第i个周期下接收4个计算数据的第二个计算数据并利用第二数据延迟器进行1个延迟和第一个数据延迟器进行3个延迟;
[0017]
第三4选1的数据选择器在当前第i个周期下接收4个计算数据的第三个计算数据并利用第四数据延迟器进行2个延迟和第一个数据延迟器进行3个延迟;
[0018]
第四4选1的数据选择器在当前第i个周期下接收4个计算数据的第四个计算数据并利用第六数据延迟器进行3个延迟和第一个数据延迟器进行3个延迟;
[0019]
在第i 1、第i 2、第i 3个周期下按照同样的方式对第二组、第三组、第四组数据进行相同的处理;
[0020]
所述换向器单元将4个周期所接收的计算数据一起组成16个数据的正变换时的矩阵,分别在第i 3个周期下,输出第一行的四个数据给所述存储管理单元;在第i 4个周期下,输出第二行的四个数据给所述存储管理单元;在第i 5个周期下,输出第三行的四个数据给所述存储管理单元;在第i 6个周期下,输出第四行的四个数据给所述存储管理单元,从而对矩阵进行转置,得到正变换时的重排序数据;
[0021]
所述存储管理单元根据所述标签y中的第二位y[1],在第i 6个周期下的正变换时的点乘计算结果和所述正变换时的重排序数据中选择所述正变换时的重排序数据输出,再根据第一位y[0],将所述正变换时的重排序数据写入到所述存储单元的读写地址w中,从而完成多项式x1中一组数据的正变换,进而完成多项式x1中所有数据的正变换以及多项式x2的正变换;
[0022]
所述控制单元在第j个周期下将完成多项式x1和多项式x2正变换后的数据存储到所述存储单元,并发送点乘使能信号给所述地址生成单元;
[0023]
所述地址生成单元根据所述点乘使能信号生成一个读写地址w’和两个标签y’、z,并将所述读写地址w’发送给所述存储单元,将标签y’和标签z发送给所述存储管理单元;
[0024]
所述存储单元根据所述读写地址w’读取所述存储单元中的多项式x1和多项式x2正变换后的数据;
[0025]
所述存储管理单元根据标签z,通过四选一选择器选择所述多项式x1和多项式x2正变换后的数据中各自的一个数据输出到所述点乘单元进行点乘运算,得到第j个周期下的点乘计算结果并发送给所述存储管理单元;
[0026]
所述存储管理单元根据标签y’中的第二位y’[1],通过二选一选择器选择所述第j
个周期下的点乘计算结果输出,再根据标签y’中的第一位标签y’[0],通过二选一选择器将所述第j个周期下的点乘计算结果存入所述存储单元的读写地址w’中,完成点乘运算;
[0027]
所述控制单元在所述存储单元完成所述第j个周期下的点乘计算结果存储后,在第k个周期完成所有点乘计算结果的存储后,发送fnt逆变换的使能信号给所述地址生成单元;
[0028]
所述地址生成单元根据所述fnt逆变换脉冲使能信号和无冲突访存规则生成第k个周期的读写地址w”和标签y”,并将所述读写地址w”发送给所述存储单元和所述旋转因子生成单元,将所述标签y”发送给所述存储管理单元和所述旋转因子生成单元;
[0029]
所述存储单元根据所述读写地址w”读取第k个周期下点乘计算结果的一组数据到所述存储管理单元;
[0030]
所述存储管理单元根据标签y”中的第一位y”[0],通过二选一选择器选择所述点乘计算结果的逆变换时的一组数据输出到所述蝶形计算单元;
[0031]
所述旋转因子生成单元根据所述读写地址w”和标签y”中的第三位y[2]生成一组逆变换旋转因子;
[0032]
所述蝶形计算单元对逆变换时的一组数据中的每个数据和一组逆变换旋转因子对应的一个因子分别进行加法、移位和取模操作,得到第k个周期下的4个逆变换时的计算数据;
[0033]
所述换向器单元将4个周期下接收到的4个逆变换时的计算数据组成16个数据的逆变换时的矩阵再进行转置后再分4个周期分别输出一组转置后的逆变换时的重排序数据;
[0034]
所述存储管理单元根据标签y”中的第二位y[1],选择所述逆变换时的重排序数据输出,再根据标签y”中的第一位y[0],将所述逆变换时的重排序数据写入到存储单元的所述读写地址w”,从而完成所述点乘计算结果的一组数据的逆变换,进而完成点乘计算结果所有数据的逆变换,实现多项式乘法功能。
[0035]
本发明所述的基于费马模数的多项式乘法器的特点也在于,所述无冲突访存规则是按如下步骤进行:
[0036]
步骤1、根据n
×
n的多项式x1和多项式x2的行列数,利用式(1)计算变量m和变量l:
[0037][0038]
步骤2、定义当前循环次数为m、最大循环次数为m,并初始化m=1;
[0039]
步骤2.1、定义第m次循环的变量bm,并初始化bm=2
m-m

[0040]
步骤2.2、定义第m次循环的变量b’m
,并初始化b’m
=2
m-m-1

[0041]
步骤3、定义第m次循环的变量am,并初始化am=0;
[0042]
步骤3.1、定义第m次循环的变量a’m
,并初始化a’m
=0;
[0043]
步骤4、定义第m次循环的前四级寻址的行地址cm,并初始化cm=am;
[0044]
步骤4.1、定义第m次循环的前四级寻址的列地址c’m
,并初始化c’m
=a’m

[0045]
步骤5、定义变量s,并初始化s=0;
[0046]
步骤5.1、定义变量t,并初始化t=0;
[0047]
步骤6、生成输出读写地址w{cm s
×
b’m
,c’m
t
×
b’m
},并将cm s
×
b’m
赋值给cm,将c’m
t
×
b’m
赋值给c’m

[0048]
步骤7、将t 1赋值给t,判断t=2是否成立,若成立,则执行步骤7.1;否则,返回到步骤6顺序执行;
[0049]
步骤7.1、将s 1赋值给s,判断s=2是否成立,若成立,执行步骤8;否则,返回到步骤5.1顺序执行;
[0050]
步骤8、将c’m
1赋值给c’m
,判断c’m
=a’m
b’m
是否成立,若成立,则执行步骤8.1;否则,返回到步骤5顺序执行;
[0051]
步骤8.1、将cm 1赋值给cm,判断cm=am bm是否成立,若成立,则执行步骤9;否则,返回到步骤4.1顺序执行;
[0052]
步骤9、将c’m
bm赋值给c’m
,判断c’m
》l-1是否成立,若成立,则执行步骤9.1;否则,返回到步骤4顺序执行;
[0053]
步骤9.1、将cm bm赋值给cm,判断cm》l-1是否成立,若成立,则执行步骤10;否则,返回到步骤3.1顺序执行;
[0054]
步骤10、将m 1赋值给m,判断m》m-1是否成立,若成立,则表示完成前四级的寻址和计算,并执行步骤11;否则,返回到步骤3顺序执行;
[0055]
步骤11、定义第m次循环的第五级寻址的行地址cm,并初始化cm=0;
[0056]
步骤11.1、定义第m次循环的第五级寻址的列地址c’m
,并初始化c’m
=0;
[0057]
步骤12、生成输出读写地址w{cm,c’m
};
[0058]
步骤13、将c’m
1赋值给c’m
,判断c’m
》l-1是否成立,若成立,则执行步骤13.1;否则,返回到步骤12顺序执行;
[0059]
步骤13.1、将cm 1赋值给cm,判断cm》l-1是否成立,若成立,则表示完成一次完整fnt变换的地址产生;否则,返回到步骤11.1顺序执行。
[0060]
与现有技术相比,本发明的有益技术效果体现在:
[0061]
1、本发明提出了硬件友好的基于同址计算的fnt算法,针对流水计算的特点改进了访存规则,避免了同址计算与蝶形流水计算产生冲突,减少了存储资源消耗,提高了计算速度。
[0062]
2、本发明使用资源共享的方法,复用硬件电路分时计算多项式1和2,进一步提高了资源效率,降低了硬件资源消耗。
[0063]
3、本发明采用了模数p=65537,保证了蝶形计算的旋转因子都为2的幂次方,从而在实现蝶形计算时,只需要通过加法和移位实现,极大的节省了硬件资源,提高了计算的速度。
附图说明
[0064]
图1为本发明采用的基于费马模数的多项式乘法器的硬件结构图;
[0065]
图2为本发明存储管理单元内部构造图;
[0066]
图3为本发明换向器内部结构图;
[0067]
图4为本发明无冲突访存规则算法流程图;
[0068]
图5为本发明无冲突访存规则寻址图。
具体实施方式
[0069]
本实施例中,如图1所示,一种基于费马模数的多项式乘法器的硬件电路,其结构组成为:控制单元、地址生成单元、点乘单元、旋转因子生成单元、存储管理单元、存储单元、蝶形计算单元和换向器单元。在该乘法器中,使用fnt算法代替ntt算法和使用无冲突访存规则来实现多项式乘法器。fnt算法通过降低预计算,同时保留数组重排序来降低硬件资源使用和保持较快的计算速度。fnt架构相比spma和ntt具有更好的面积时间效率。利用无冲突访存规则优化向量基2
×
2的32
×
32fnt的数据交换过程,保证蝶形计算单元的4个输入输出流水计算。
[0070]
存储单元由8个共享地址线的小存储块组成,其中,4个小存储块存储有n
×
n=32
×
32的多项式x1的数据,另外4个小存储块存储有32
×
32的多项式x2的数据;
[0071]
控制单元在存储单元完成多项式的存储后,在当前第i个周期下发送fnt正变换的使能信号给地址生成单元;
[0072]
地址生成单元根据fnt正变换的使能信号和无冲突访存规则生成当前第i个周期下的8位的读写地址w和标签y,并将读写地址w发送给存储单元和旋转因子生成单元,将标签y发送给存储管理单元和旋转因子生成单元;
[0073]
存储单元当前第i个周期下根据读写地址w读取多项式x1中的4个数据和多项式x2中的4个数据并发送给存储管理单元;
[0074]
点乘单元从存储单元中获取多项式x1中的4个数据和多项式x2中的4个数据并进行点乘运算,得到当前第i个周期下的正变换时的点乘计算结果并发送给存储管理单元;
[0075]
如图2所示,存储管理单元根据标签y中的第一位y[0],并利用二选一选择器选择32
×
32的多项式x1中的4个数据作为一组数据并输出给蝶形计算单元;
[0076]
旋转因子生成单元根据读写地址w和标签y中的第三位y[2]生成4个正变换旋转因子并作为一组因子;
[0077]
蝶形计算单元对正变换时的一组数据中的每个数据和一组因子中对应的一个因子分别进行加法、移位和取模操作,得到在当前第i个周期下的4个正变换时的计算数据;
[0078]
如图3所示,换向器单元由4个4选1的数据选择器、6个数据延迟器组成;
[0079]
第一4选1的数据选择器在当前第i个周期下接收4个计算数据的第一个计算数据并利用第一数据延迟器进行3个延迟;
[0080]
第二4选1的数据选择器在当前第i个周期下接收4个计算数据的第二个计算数据并利用第二数据延迟器进行1个延迟和第一个数据延迟器进行3个延迟;
[0081]
第三4选1的数据选择器在当前第i个周期下接收4个计算数据的第三个计算数据并利用第四数据延迟器进行2个延迟和第一个数据延迟器进行3个延迟;
[0082]
第四4选1的数据选择器在当前第i个周期下接收4个计算数据的第四个计算数据并利用第六数据延迟器进行3个延迟和第一个数据延迟器进行3个延迟;
[0083]
在第i 1、i 2、i 3个周期下与上述同样的方式对第二组、第三组、第四组数据进行同样的处理;
[0084]
换向器单元将4个周期所接收的计算数据一起组成16个数据的正变换时的矩阵,分别在第i 3个周期下,输出第一行的四个数据给存储管理单元;在第i 4个周期下,输出第二行的四个数据给存储管理单元;在第i 5个周期下,输出第三行的四个数据给存储管理单
元;在第i 6个周期下,输出第四行的四个数据给存储管理单元,从而对矩阵进行转置,得到正变换时的重排序数据;
[0085]
如图2所示,存储管理单元根据标签y中的第二位y[1],在第i 6个周期下的正变换时的点乘计算结果和正变换时的重排序数据中选择正变换时的重排序数据输出,再根据第一位y[0],将正变换时的重排序数据写入到存储单元的读写地址w中,从而完成多项式x1中一组数据的正变换,进而完成多项式x1中所有数据的正变换以及多项式x2的正变换;
[0086]
控制单元在第j个周期下将完成多项式x1和多项式x2正变换后的数据存储到存储单元,并发送点乘使能信号给地址生成单元;
[0087]
地址生成单元根据点乘使能信号生成一个8位的读写地址w’和两个标签y’、z,并将读写地址w’发送给存储单元,将标签y’和标签z发送给存储管理单元;
[0088]
存储单元根据读写地址w’读取存储单元中的多项式x1和多项式x2正变换后的数据;
[0089]
如图2所示,存储管理单元根据标签z,通过四选一选择器选择多项式x1和多项式x2正变换后的数据中各自的一个数据输出到点乘单元进行点乘运算,得到第j个周期下的点乘计算结果并发送给存储管理单元;
[0090]
如图2所示,存储管理单元根据标签y’中的第二位y’[1],通过二选一选择器选择第j个周期下的点乘计算结果输出,再根据标签y’中的第一位标签y’[0],通过二选一选择器将第j个周期下的点乘计算结果存入存储单元的读写地址w’中,完成点乘运算;
[0091]
控制单元在存储单元完成第j个周期下的点乘计算结果存储后,在第k个周期完成所有点乘计算结果的存储后,发送fnt逆变换的使能信号给地址生成单元;
[0092]
地址生成单元根据fnt逆变换脉冲使能信号和无冲突访存规则生成第k个周期的读写地址w”和标签y”,并将读写地址w”发送给存储单元和旋转因子生成单元,将标签y”发送给存储管理单元和旋转因子生成单元;
[0093]
存储单元根据读写地址w”读取第k个周期下点乘计算结果的一组数据到存储管理单元;
[0094]
如图2所示,存储管理单元根据标签y”中的第一位y”[0],通过二选一选择器选择点乘计算结果的逆变换时的一组数据输出到蝶形计算单元;
[0095]
旋转因子生成单元根据读写地址w”和标签y”中的第三位y[2]生成一组逆变换旋转因子;
[0096]
蝶形计算单元对逆变换时的一组数据中的每个数据和一组逆变换旋转因子对应的一个因子分别进行加法、移位和取模操作,得到第k个周期下的4个逆变换时的计算数据;
[0097]
换向器单元将4个周期下接收到的4个逆变换时的计算数据组成16个数据的逆变换时的矩阵再进行转置后再分4个周期分别输出一组转置后的逆变换时的重排序数据;
[0098]
如图2所示,存储管理单元根据标签y”中的第二位y[1],选择逆变换时的重排序数据输出,再根据标签y”中的第一位y[0],将逆变换时的重排序数据写入到存储单元的读写地址w”,从而完成点乘计算结果的一组数据的逆变换,进而完成点乘计算结果所有数据的逆变换,实现多项式乘法功能。
[0099]
本实例中,如图4所示,地址生成单元和换向器单元涉及到的无冲突访存规则的算法流程是按如下进行:
[0100]
步骤1、根据32
×
32的多项式x1和多项式x2的行列数,通过式(1)计算变量m和变量l;
[0101][0102]
式(1)中,n是多项式x1和多项式x2的行列数,即n=32。
[0103]
步骤2、定义当前循环次数为m、最大循环次数为m,并初始化m=1;
[0104]
步骤2.1、定义第m次循环的变量bm,并初始化bm=2
m-m

[0105]
步骤2.2、定义第m次循环的变量b’m
,并初始化b’m
=2
m-m-1

[0106]
步骤3、定义第m次循环的变量am,并初始化am=0;
[0107]
步骤3.1、定义第m次循环的变量a’m
,并初始化a’m
=0;
[0108]
步骤4、定义第m次循环的前四级寻址的行地址cm,并初始化cm=am;
[0109]
步骤4.1、定义第m次循环的前四级寻址的列地址c’m
,并初始化c’m
=a’m

[0110]
步骤5、定义变量s,并初始化s=0;
[0111]
步骤5.1、定义变量t,并初始化t=0;
[0112]
步骤6、生成输出读写地址w{cm s
×
b’m
,c’m
t
×
b’m
},并将cm s
×
b’m
赋值给cm,将c’m
t
×
b’m
赋值给c’m

[0113]
步骤7、将t 1赋值给t,判断t=2是否成立,若成立,则执行步骤7.1;否则,返回到步骤6顺序执行;
[0114]
步骤7.1、将s 1赋值给s,判断s=2是否成立,若成立,执行步骤8;否则,返回到步骤5.1顺序执行;
[0115]
步骤8、将c’m
1赋值给c’m
,判断c’m
=a’m
b’m
是否成立,若成立,则执行步骤8.1;否则,返回到步骤5顺序执行;
[0116]
步骤8.1、将cm 1赋值给cm,判断cm=am bm是否成立,若成立,则执行步骤9;否则,返回到步骤4.1顺序执行;
[0117]
步骤9、将c’m
bm赋值给c’m
,判断c’m
》l-1是否成立,若成立,则执行步骤9.1;否则,返回到步骤4顺序执行;
[0118]
步骤9.1、将cm bm赋值给cm,判断cm》l-1是否成立,若成立,则执行步骤10;否则,返回到步骤3.1顺序执行;
[0119]
步骤10、将m 1赋值给m,判断m》m-1是否成立,若成立,则表示完成前四级的寻址和计算,并执行步骤11;否则,返回到步骤3顺序执行;
[0120]
本实施例中,如图5所示,前四级的寻址如下操作:
[0121]
当m=1时,第一级的寻址开始,此时的bm=16,b’m
=8,am和a’m
可以取得的值为0,cm和c’m
可以取得的值为0到7的数,s和t可以取0和1。首先am、a’m
、cm、c’m
、s和t都取0,此时l1和l2的值都为0,则生成的第一个行列地址为(0,0),按照算法的循环和图5所示的第一级寻址方向,可以得到后面的三个地址为(0,8),(8,0),(8,8),这四个点就可以等同为图5所示中第一级方块的四个顶点位置。此后就将方块整体向右平移一个方格,再按此方式寻址,以此类推可以遍历完所有的地址。
[0122]
当m=2时,第二级的寻址开始,此时的bm=8,b’m
=4,am和a’m
可以取得的值为0和
8,s和t可以取0和1。首先当am和a’m
为0的时候,cm和c’m
可以取得的值为0到3的数,此时生成的第一个行列地址为(0,0),按照算法的循环和图5所示的第二级寻址方向,可以得到后面的三个点为(0,4),(4,0),(4,4),这四个点就可以等同为图5所示中第二级方块的四个顶点位置。此后就将方块整体向右平移一个方格,再按此方式寻址,以此类推可以遍历完所有的地址。
[0123]
当m=3时,第三级的寻址开始,此时的bm=4,b’m
=2,am和a’m
可以取得的值为0、4、8和12,s和t可以取0和1。首先当am和a’m
为0的时候,cm和c’m
可以取得的值为0到1的数,此时生成的第一个行列地址为(0,0),按照算法的循环和图5所示的第二级寻址方向,可以得到后面的三个点为(0,2),(2,0),(2,2),这四个点就可以等同为图5所示中第三级方块的四个顶点位置。此后就将方块整体向右平移一个方格,再按此方式寻址,以此类推可以遍历完所有的地址。
[0124]
当m=4时,第三级的寻址开始,此时的bm=2,b’m
=1,am和a’m
可以取得的值为0、2、4、6、8、10、12和14,s和t可以取0和1。首先当am和a’m
为0的时候,cm和c’m
可以取得的值为0,此时生成的第一个行列地址为(0,0),按照算法的循环和图5所示的第二级寻址方向,可以得到后面的三个点为(0,1),(1,0),(1,1),这四个点就可以等同为图5所示中第四级方块的四个顶点位置。此后就将方块整体向右平移一个方格,再按此方式寻址,以此类推可以遍历完所有的地址。
[0125]
步骤11、定义第m次循环的第五级寻址的行地址cm,并初始化cm=0;
[0126]
步骤11.1、定义第m次循环的第五级寻址的列地址c’m
,并初始化c’m
=0;
[0127]
步骤12、生成输出读写地址w{cm,c’m
};
[0128]
步骤13、将c’m
1赋值给c’m
,判断c’m
》l-1是否成立,若成立,则执行步骤13.1;否则,返回到步骤12顺序执行;
[0129]
步骤13.1、将cm 1赋值给cm,判断cm》l-1是否成立,若成立,则表示完成一次完整fnt变换的地址产生;否则,返回到步骤11.1顺序执行。
[0130]
如图5所示,第五级的寻址如下操作:
[0131]
当m=5时,第五级的寻址开始,此时按照第五级的寻址方向,先取出(0,0)这个地址,随后先逐行寻址,再到列寻址,直到将所有地址遍历完。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献