多级计数装置 【发明领域】
本发明涉及一种在通常所指的流水线装置中,与多级设备一起使用的时钟分配电路。发明背景
在处理业务时,各用户之间电子存储文件的交换,例如通过分布式信息网络,如全球互联的因特网(万维网)进行的交换,变得越来越普遍。因特网的一个普遍的问题在于其缺乏安全的通讯信道。而为了确保医院、政府、银行、股票经纪、以及信用卡公司等能使用因特网,必须有隐私和安全方面的保证。解决上述问题的一种方案是在数据传送之向前行加密处理。在现有技术中,主机系统一般装有一个加密单元,例如一个加密处理器,该加密处理器可与至少一个用于存储一个以上私人加密密钥的存储器电路进行电通信。当需要保密的信息由主机通过互联网传送到接收者时,该信息首先被传送到所述加密处理器用所保存的私人密钥进行加密处理。典型的情况是每一次数据加密处理均使用同一私人密钥。相应地,加密密钥是从存储在所述至少一个与加密处理器有电通信的存储电路中的一组有限的私人加密密钥中选择出来的。
当然,由加密处理器所执行的数据加密处理是一种数学算法,其中的输入数值,例如电子文件的混编版本,是唯一的可变量。因此有可能对加密处理器进行最优化,使其可用最少的处理资源来执行所需地加密功能。另外,在现有技术的加密单元中,优化后的加密处理器与主机系统的微处理器之间一般是分离的,因为采用这种方式能达到最优化的效果。
目前有好几个在因特网上通过加密/解密处理以实现保密和强认证的标准。典型的加密/解密处理是基于可让数据通过公开信道在用户之间进行传送,而同时能维持信息内容保密性的运算法则来执行。这一过程是通过由发送者用加密密钥对数据进行加密、再由接收方用解密密钥对其进行解密来完成的。在对称密钥的密码术中,加密密钥和解密密钥是相同的。
加密算法一般分为公开密钥算法和秘密密钥算法。秘密密钥算法中的密钥是隐秘的,而公开密钥算法中的其中一个密钥是公众所知的。分组密码是目前使用的秘密密钥密码系统中的一种代表,它一般以一组32-128位的数据作为输入数据,并生出同样位数的输出数据。加密处理和解密处理的执行采用的是典型长度在56-128位之间的密钥。加密算法的设计就是要使得如果不知道密钥、则对信息的解密会非常困难。
除分组密码之外,互联网安全协议还依赖于以公开密钥为基础的算法。公开密钥密码系统中一般使用两个密钥,其中一个是隐秘/私人的,另一个公共可用的,例如在授权给Pogue及Rivest的专利号为5,144,667的美国专利中所公开的Rivest,Shamir,Adelman(RSA)的密码体制即为此例。一旦有人公布一个公开密钥,则任何人均可向其发送用该公开密钥进行加密处理后的保密信息,然而,如要对该信息进行解码则只有使用私人密钥才可以完成。公开密钥加密处理的优点在于私人密钥没有在交流前预先分配给所有用户。反之,当使用对称加密处理时,将产生多个秘密密钥,其中一个分配给要接收信息的各用户,并且每一个秘密密钥都是私下传送的。如果想用安全的模式分配秘密密钥,就会存在与信息传送中只用一个秘密密钥进行加密处理时所面对的相同的问题,也就是通常所讲的密钥分配问题。
密钥交换是公开密钥技术的另一种应用方式。在密钥交换协议中,两用户可协议共用一个密钥,即使他们的会话被第三方中途截取。在专利号为4,200,770的美国专利中所公开的Diffie-Hellman指数密钥交换方法就是此协议的一个例证。
大多数公开密钥算法,比如RSA及Diffie-Hellman密钥交换,都是基于模数求幂,也就是计算式αx mod p,该算式表示“α的x次方的结果,再除以p后所得余数”。要执行这一计算的运算消耗是非常大的,因为执行这一运算需要重复多次乘法运算及多次除法运算。刊登在《计算数学》1985年4月第170期44册里的蒙哥马利方法,即“ModularMultiplication Without Trial Division(不需试除的模数乘法)"中所公开的一种技术可减少所需除法运算的次数,但仍不能完全克服运算消耗大的问题。另外,目前的密码系统中所使用数据非常大(一般为1024位或更多),因此不能直接采用普通CPU中的乘法及除法命令。而是采用特殊的算法将这些大型的乘法运算及除法运算分解成多个足够小的运算,以便能在所用的CPU运行。这些算法所需的运行时间通常与机器语言中所含字节数的平方成比例增长。这些因素使得大数字乘法运算的运算速度很低。例如,一个奔腾处理器可在10个时钟周期内执行一次32×32位乘法运算。而一个2048位的数字可由64个32位数来表示,则2048×2048位的乘法运算需要64×64次32×32位乘法运算,也就需要占用奔腾处理器40960个时钟周期。如果按上述方式,则一个2048位指数的求幂运算需要4096次乘法运算,也就需要约167,000,000个时钟周期。如果奔腾处理器以166MHz的速度运算,则整个过程大约需要一秒钟才能完成。当然,其中的除法运算还会增加整个运算的时间。可见,一个普通的CPU,例如上述的奔腾处理器,是不能以极高的速度来完成密钥生成及交换动作的。
流水线处理器含有多个按串接阵列排列的处理单元,其中的多数处理单元是现有的公知技术,并特别适合于执行数据加密算法。目前所知有两种流水线处理器:其中一种是一端进另一端出的类型,只有一个处理方向;另一种是同一端进出型的双向处理器,包含一个向前处理路径及一个返回处理路径。以一个特定的双向流水线处理器为例,第一数据块从存储缓冲器中读取到所述串接阵列的第一处理单元中,执行第一级处理;然后将该第一数据块送到第二处理单,执行第二级处理,同时第一处理单元从所述存储缓冲器中读取第二数据块,并对第二数据块执行同样的第一级处理。依次顺序,每一个数据块沿着串接阵列的向前处理路径一步一步地从一个处理单元传送到下一个处理单元。每一步包括一个对输入的各数据块执行相同的数学处理的处理级。同时,每一个处理单元的计算结果按返回处理路径提供给所述串接阵列中的前一个处理单元,其结果是将加密处理器所反馈的处理数据包含在一个集合中。这种使用大量的处理单元组成数据处理流水线的方法,对于执行前面所述计算量较大的数据加密算法,是非常有效的。当然,用于执行计算量较大处理操作的流水线处理器的用途,并不是严格限于上面的详细例子中所描述的数据加密算法。
现有双向流水线处理器技术的一个缺点是同一串接阵列中的每一个处理单元必须与其它各个处理单元时间同步。为了控制数据块在向前方向时从一个处理单元到下一个处理单元时的定时门控、以及处理后的数据在返回方向时从一个处理单元到前一处理单元的定时门控,处理单元之间的时间同步是必须的。一般采用一个时钟来控制数据块沿着流水线的向前方向和返回方向的进程。然而,当时钟信号沿着流水线前进时,如果没有较好的时钟分配设计,在各级之间将会出现递增的延迟,例如由于时钟电路内的电阻和电容而产生的延迟。在早期相对较慢的流水线处理器中,这种延迟并不重要,对整体的运行或计算也无不利影响。随着处理速度的加快,这种延迟变得明显起来,因而需要更准确和精密的时钟分配方法。
此外,为了从存储缓冲器中读取数据,例如供流水线处理器处理的数据,串接阵列的中第一处理级必须与存储缓冲器时间同步。因而进一步要求流水线处理器内时钟分配的同步性。
最好能提供一种在流水线处理器中用于数据处理的系统和方法,可以不需要将提供给流水线处理器中各个处理单元的时钟值同步。这种系统可用相对简单的电路设计来实现,其中大型的处理单元是由一系列次级小处理单元所构成的。发明目的
本发明的目的在于,提供一种不需要将各处理单元的时钟信号同步的流水线处理器。发明概要
本发明的整体概念在于,提供一种具有扩展流水线阵列的多级计算装置,包括边靠边串接排列的多个子阵列、以及一个沿所述阵列弯曲设置并与每一级连接的时钟导体。所述阵列可以是多个段组成,其中每一段有输入端和输出端,而整个阵列或所有的段都能处理数据。该装置中的向前及返回路径可安排得让一级中最短的计算在返回路径中进行。
根据本发明的另一实施例,提供一种数据处理装置,包括:
以串接阵列排列的多个独立处理单元,其中,第一处理单元先于第二处理单元,第二处理单元先于第n处理单元;以及,
与所述串接阵列中的多个独立处理单元中每一个处理单元电通信的时钟分配电路,使得在使用中,沿时钟分配电路传播的时钟信号以相对于时钟信号到达前一处理单元的延迟到达每一个处理单元,
其中,从数据写入处理单元到该数据被后一处理单元读出的时间等于时钟周期准确个数k,这里k大于0,不足以从该处理单元产生出准确的输出数据,但如果有额外的延迟则上述时间就足以产生出准确的输出数据,在所述时钟周期准确个数k后,待处理的新数据被读入同一处理单元。
根据本发明的另一实施例,提供一种可切换处理单元,包括:
用于接收第一时钟信号的第一端口;
用于接收第二其它时钟信号的第二端口;
可在选择第一时钟信号和第二其它时钟信号中的一个的两种模式之间进行切换的开关;
其中,从所述第一时钟信号和第二其它时钟信号中所选出之一被提供给所述处理单元。
根据本发明的另一方面,还提供一种数据处理方法,包括以下步骤:
(a)提供一个流水线处理器,所述流水线处理器包括按串接阵列排列的多个独立的处理单元,以使第一处理单元先于第二处理单元处理,第二处理单元先于第n处理单元处理;
(b)为所述按串接阵列排列的多个独立处理单元中的每一个处理单元提供一个时钟信号,使得到达第一处理单元之外的每个独立处理单元的时钟信号,相对于到达其在先处理单元的时钟信号要延迟;
(c)提供数据给所述第一处理单元进行处理;
(d)将所述数据传播到至少下一个处理单元以进行进一步处理;
其中,提供给所述多个独立处理单元中的某一单元的时钟信号,相对于提供给该多个独立处理单元中另一个单元的时钟信号,有以时钟周期为基准的相当量的延迟。
根据本发明的另一实施例,还提供一种在流水线处理器中数据处理方法,包括以下步骤:
(a)为有n个处理单元的流水线处理器提供一个沿第一部分第一方向的时钟信号,使得到达所述第一部分中第一处理单元之外的每个独立处理单元的时钟信号,比起到达同在第一部分的其在先处理单元的时钟信号要延迟;
(b)为同样有n个处理单元的流水线处理器提供一个沿第二其它部分的第二相反方向的时钟信号,使得到达所述第二其它部分中第一处理单元之外的每一个独立处理单元的时钟信号,比起到达同在第二其它部分的其在先处理单元的时钟信号要延迟;
(c)提供数据给流水线处理器第一部分的第一处理单元以进行处理;
其中,到第一部分最后处理单元的延迟与到第二部分的最后处理单元的延迟大致相同,使得在流水线处理器的中心所述两个相邻处理单元是同步的。
根据本发明的另一方面,还提供一种在数据处理设备的布置中使用的宏,包括:
串接排列并有一个时钟输入导体和一个时钟输出导体的多个独立处理单元,与所述时钟输入导体电通信的时钟导体增加了从时钟输入导体到所述多个独立处理单元中每一个后继单元的长度,同时该时钟导体减小了从时钟输入导体到所述多个独立处理单元中每一个后继单元的长度;
其中,所述时钟输入导体和输出导体被排列得使一个布局内相邻放置的宏形成空间足够的组,并使一个宏的输入时钟导体与相邻宏的输出时钟导体在耦合时,有与宏被设置在一个预定的空间足够位置时同一宏内的两个相邻单元之间的导体路径长度大致相同的导体路径长度。附图说明
通过以下与附图结合的多个优选实施例,可增加对本发明的理解,其中:
图1是本发明的第一实施例中流水线处理器的结构简图;
图2本发明中与时钟分配电通信的处理单元阵列的结构简图;
图3现有技术的流水线处理器中用于多个处理单元的门控信息时序图;
图4是本发明的流水线处理器中用于多个处理单元的门控信息时序图;
图5是本发明中分别用于同一处理器内的三个相邻处理单元的时序图;
图6是本发明的第二实施例中流水线处理器的结构简图;
图7是本发明的第三实施例中流水线处理器的结构简图;
图8a是本发明中含有一个时钟切换电路并按第一模式运行的一个处理器单元的结构简图;
图8b是本发明中含有一个时钟切换电路并按第二模式运行的一个处理器单元的结构简图;
图9是被安排用于在单元与单元之间提供蛇形时钟信号的处理单元宏块的结构简图;
图10是用于在流水线处理器中执行加密处理功能的一个资源足够的处理单元的设计结构图;
图11是用于模数乘法的一个Systolic阵列的结构图;
图12是一个示出其输入路径的单个单元的结构图;
图13是一个DP RAM Z单元的结构图;
图14是一个Exp RAM单元的结构图;
图15是一个Pree RAM单元的结构图;
图16是用于在流水线处理器中执行加密处理功能的一个速度足够的处理单元的结构图;
图17是用于模数乘法的一个Systolic阵列的结构图;
图18是一个示出其输入路径的单个单元的结构图;
图19是一个DP RAM Z单元的结构图。具体实施方式
本发明是关于如何减小级间的时间延迟。该结果是通过在不同级的附近设置一个时钟导体,并使其沿各级蛇行来实现的。这样一来相近单元之间的时钟迟延会变得充分地小,从而不再需要适当的级间同步。除了直接相邻之可能外,如能给相互联络的级间相邻单元之间提供一个一致的时间延迟,则可以实现更进一步的优势。
如果想取得更进一步的优点,除了现有用于大型计算的各级整个阵列外,可以将阵列进行划分,例如分对半分或分成四份,以便在同一时间进行一个以上的计算。
参考图1,示出了本发明的第一实施例中通过硬件连接2与实时时钟1连接的流水线处理器7的结构简图;其中流水线处理器7包含多个处理单元阵列4a,4b和5(处理单元未在图中画出),阵列4a与每个4b各有256个处理单元,阵列5有512个处理单元。输入/输出端口9分别与阵列4a,4b和5中的第一处理单元连接,用于接收供流水线处理器7处理的数据,例如从一个与端口9连接的客户机(未在图中画出)输入的数据。还有一个通过硬件连接2与时钟源1连接的时钟导体3,该时钟导体在每个阵列4a,4b和5旁以时钟分配电路的形式蜿蜒分布。该时钟导体3还单独与每一阵列4a,4b和5中的每一个处理单元电通信。
参考图2,示出了由处理器单元81、82、83、…8n-1和8n的组成的串接阵列的结构简图;其中的独立处理器单元8包含在图1所示流水线处理器7的阵列4a的集合中。每个处理器单元8分别通过连接10与时钟导体3电通信。时钟导体3又经硬件连接2与时钟发生器电路、即时钟源连接。其中与阵列4a的第一处理器单元连接的输入/输出端口9用于接收客户站(未在图中画出)送来的数据,该客户站也与输入/输出端口9连接,以输入供阵列4a处理的数据。
在操作时,数据是由客户站经端口9处提供的,例如,包含在一个完整文件中的多个数据块形成的数据流。阵列4a中的第一处理器单元81经端口9接收第一数据块,并执行预定的第一级处理。当然,第一处理器单元81与端口9的存储缓冲器(未在图中画出)应是时间同步的,这样才能使数据流同步进入处理器单元81。例如,时钟导体3从实时时钟1提供一个时间信号,该时间信号在与存储缓冲器的时钟信号相关的预定时间内,到达第一处理器单元81。在第一处理周期结束时,第一处理器单元81经端口9收到第二个数据块。同时,第一处理器单元81根据第一数据块得到一个输出、沿着向前处理途径传送到第二处理器单元82。另外,第一处理器单元81还沿返回处理路径向端口9的缓冲器提供一个第二计算结果。
在第二个处理周期内,第一处理器单元81对第二数据块同样执行一次与第一处理操作、而第二处理器单元82对所述的第一个数据块执行一次第二处理操作。在第二个处理周期结束时,对所述第一数据块进行处理的结果会沿着向前处理路径分别在第二和第三处理器单元82和83之间传播。同样的,对所述第二数据块进行处理的结果会沿着向前处理路径分别在第一和第二处理器单元81和82之间传播。此外,第二处理器单元82沿着返回处理路径将其计算结果传输到第一处理器单元81。当然,沿着向前处理路径和返回处理路径在相邻处理器单元之间的数据传输需要有一个同步时序。沿两种处理方向所执行的处理操作都必须在数据向任一方向传送之前完成。
参考图3,示出了现有流水线处理器中的多个处理器单元的门控信息时序图。图中画出了分别与前五个处理器单元1,2,3,4,和5对应的时序图。其中每一时钟周期由一对字母表示,例如AB、CD、EF等。为了描述方便,假设所述门控信息在时钟周期的“上升沿”选通每一个处理器单元的输入及输出。例如,沿着向前处理路径,处理器单元1在AB的上升沿输入第一数据块,并在一个周期内对该第一数据块进行处理。同样,处理器单元2在CD的上升沿从处理器单元1输入所述第一数据块,并在一个周期内对该第一数据块进行处理。另外,沿着返回处理路径,处理器单元1在EF的上升沿从第二处理器单元输入已处理的第一数据块。
当然,现有系统的时钟周期比率至少应与沿向前和返回之一的处理方向上每一级中所需的最长处理时间一样长。如数据流沿着串接阵列以步进式传播,每一步处理必须在数据再次被传播前完成。因此,如果沿返回处理路径的处理与沿向前处理路径的处理相比需要较短的时间,则在每一级反向处理路径中需引入一个延迟,以便向前处理路径上的处理能顺利完成。
另外,从图3中可以看出,每一处理器单元必须与同一阵列中的其它处理器单元同步。也就要图1中的时钟必须沿阵列的每一段分配。这是一个典型的代价高而且难以解决的问题。其解决需要复杂的硬件设计以及集成电路拓扑设计和分析。
在解决这种时钟分配问题的一个方法中,第一处理器为第二处理器提供时钟信号、第二处理器又为第三处理器提供时钟信号,依此类推。这种方法中,相邻单元之间存在同步,但对于距离较远的单元,则不能保证同步。然而这种消除时间同步的方法是在没有全局时钟的情况下执行的,从而使时钟在每两个需要数据通信的单元之间传递,这样就导致了不同时钟分配的问题。
参考图4,其中示出了本发明中流水线处理器中用于多个处理器单元的门控信息的时序图。该图例中示出了包含前十个处理器单元、也即第1、2、3、4、5、6、7、8、9及10个处理器单元的串接阵列子集的独立时序图。每一时钟周期用一对字母表示,例如AB、CD、EF等等。为了讨论方便,假设所述门控信息在时钟周期的“上升沿”选通每一个处理器的输入及输出。例如,沿着向前处理路径,处理器单元1在AB的上升沿输入第一数据块,并在一个周期内对该第一数据块进行处理。同样,处理器单元2在CD的上升沿从处理器单元1输入所述第一数据块,并在一个周期内对该第一数据块进行处理。另外,沿着返回处理路径,处理器单元1在EF的上升沿从第二处理器单元输入已处理的第一数据块。为了讨论方便,还假设在任一处理器需要最多时间来完成的处理操作是沿着向前处理路径方向的。当然,如图4中所示,对于不同的处理单元,所述上升沿发生在不同的时间。
再参考图4,每一时序图与其前一处理器单元的时序图相比有一个微小的偏移δ,其中的δ等于到达该处理器的时钟信号的增量延迟。因为时钟导体中所含电路的电容及电阻特性,所述有限的时间段δ等于时间信号到达第一处理器单元与时间信号到达第二处理器单元之间的间隙。而设备与不同处理器单元之间的时钟信号有一个故意的延迟,因此,处理器单元1与处理器单元2之间的时间同步有一个偏移量δ。同样,每一对相邻处理器单元之间的时间同步也有一个偏移量,例如δ。也就是说,偏移量虽然不同,但仍在可知范围内。
再参考图4,对于同一处理操作,本发明的单个时钟周期比图3所示现有技术时序图中的时钟周期要短。这似乎意味着处理器单元在输入新的数据之前没有足够的时间沿向前处理路径完成其处理操作。例如,在图3中的时钟周期至少与沿向前路径上的最长的处理操作的时间一样长。而在本实施例中,到达处理器单元1之外的各个处理器单元的时钟信号有一个逐渐增大的延迟。在效果上,这种延迟为处理的完成提供了更多的时间,例如,在下一数据块输入由处理器单元2进入处理器单元3之前,处理器单元2有更多的时间沿向前处理路径完成其操作。其有利点在于,单个时钟周期的最小长度可被减小到等于一个时间长度,该时间长度等于完成最长处理操作所需的时间,并小于需要较长处理时间的路径、此处为向前路径上的单元之间的时间延迟。因此,在向前处理路径上,从某一处理器单元输入一数据块到下一处理器单元从该单元中输入已处理的该数据块之间,有一个大于一个完整时钟周期的时间间隙。另外,在返回路径上,从某一处理器单元输入一数据块到下一处理器单元(按向前路径则是前一单元)从该单元中输入已处理的该数据块之间,有一个小于一个完整时钟周期的时间间隙。本发明在返回路径上提供了一个所谓的“赶回”动作,从而使总的周期时间小于其中一个处理方向的时间,但至少是两个方向处理时间的平均值。
参考图5,示出了本发明中三个相邻处理器单元3,4和5的时序图。第一数据块在100时刻输入处理器单元4,并由处理器单元4在时钟周期FG内进行处理。其中,处理器单元4由处理器单元3的输出端读出所述第一数据块,而该第一数据块是在时刻101输入到处理器单元3中的。处理器单元4同时使第一数据块对于处理器单元5是可获取的,其中处理器单元4将第一数据块提供到其一个输出端,使该第一数据块在时刻104被读取到处理器单元5。显然,步骤101、100和104包含向前处理路径的一部分。从图5中可清楚看出,在向前处理路径上,从某一处理器单元输入一个数据块到下一处理器单元从该单元中输入已处理的该数据块结果之间,有一个大于一个完整时钟周期的时间间隙。
同样,步骤102、100和103包含相反处理路径的一部分,其中含有由某一处理器单元所处理的数据的一个数据块被提供给该阵列中的前一处理器单元。从图5中可清楚看出,在返回路径上,从某一处理器单元输入一个已处理数据块到下一处理器单元从该单元中输入已进一步处理的该数据块之间,有一个小于一个完整时钟周期的时间间隙。可见,在向前处理路径上积累的处理延迟可在返回路径上被“赶回”来。这就是一般所说的“双向平均”现象。另外,因为本发明中减小了时钟周期的长度,其总的优点在于增中了现有双向流水线处理器的处理速度。
本发明的一个优点在于每一个处理器单元只需要与相邻的两个单元之间通信,这时一个总能确定一个准确的延迟并将其维持在预定范围内。本发明的另一优点在于可将电路设计成n个相邻的处理器单元,此时整个流水线处理器是由一系列的n单元“宏”所构成。当然,每当需要将一个宏块与另一宏块连接时,还需要一个电路来解决不同宏的处理器单元之间的额外延迟。宏的设计应易于相互联络,这样才能使其首端和尾端能与另一相邻的宏兼容、以继续执行同样的操作。在图9示出了本发明中两个宏块91和92的示意图。这两个宏块可按任一种串接方式排列,并在处理单元之间提供基本一致的路径延迟。
参考图6,示出了本发明的第二实施例中流水线处理器12的结构简图。流水线处理器12包括多个处理器单元阵列4a,4b和5(处理器单元未在图中画出),其中阵列4a和4b各有256个处理单元,阵列5有512个处理单元。图中的虚线6a和6b分别代表可选择的电连接,用于在阵列4a的第256个处理单元与阵列4b的第256个处理单元之间、以及在阵列4b的第1个处理单元与阵列5的第1个处理单元之间提供电通信。时钟分配电路3分别与阵列4a,4b和5中的各个处理器单元电通信。图6中还有一个经硬件连接2与流水线处理器12电通信的时钟发生器1。图中还有一个分别与阵列4a,4b和5的第一处理单元连接的输入/输出端口9,用于接收客户站(未在图中画出)送来的数据,该客户站也与输入/输出端口9连接,以输入供阵列4a,4b和5中指定的一个串接排列进行处理的数据。
参考图7,示出了本发明的第三实施例中流水线处理器13的结构简图。流水线处理器13包括多个处理器单元阵列4a,4b和5(处理器单元未在图中画出),其中阵列4a和4b各有256个处理单元,阵列5有512个处理单元。阵列4a的第256个处理单元与阵列4b的第256个处理单元之间通过硬件连接11a电通信,阵列4b的第1个处理单元与阵列5的第1个处理单元之间也通过硬件连接11a电通信。时钟分配电路3分别与阵列4a,4b和5中的各个处理器单元电通信。图7中还有一个经硬件连接2与流水线处理器13电通信的实时时钟1。图中还有一个分别与阵列4a,4b和5的第一处理单元连接的输入/输出端口9,用于接收客户站(未在图中画出)送来的数据,该客户站也与输入/输出端口9连接,以输入供阵列4a,4b和5的串接排列进行处理的数据。另外,还可选择单独设置一个至少向阵列4a的第一处理器单元之外的处理器单元直接输入数据的输入端口。
图6和图7中所示的流水线处理器12和13可按分别以下模式操作,其中输入阵列4a的第256个处理器单元的数据可被阵列4b的第256个处理器单元得到。当某一特殊操作需要多于256个处理器单元时,可通过将所述处理操作转到第二个不同阵列执行、以增加处理器阵列的有效长度。当然,当某一特殊操作需要多于512个处理器单元时,可通过将所述处理操作转到第三个不同阵列执行、以增加处理器阵列的有效长度。对于图6和图7中所示的任一流水线处理器:当需要执行256位加密处理时,采用单个阵列;当需要执行512位加密处理时,采用两个不同阵列;而当需要执行1024位加密处理时,采用全部三个阵列。当然,可将阵列4a的第256个处理器单元与阵列4b的第一处理器单元连接起来,但此时需保证阵列4a的第256个处理器单元和阵列4b的第一处理器单元能彼此同步并与缓冲器同步。这种同步需求由于需要严格统一的分配时钟,会增加电路设计的复杂性。同时,大多数流水线处理器的排布都要求每一单元必须在每一周期内完成处理操作,而时钟同步通常会增加一个等待状态,使得阵列中的第257个单元将比其前面的单元晚一个时钟周期处理数据。
不管采用图6中的可选择形式还是图7中的固定形式,当阵列4a的第256个处理器单元与阵列4b的第256个处理器单元连接时,将丧失前面所述的“双向平均”优势。然而其优点在于,能够对多个处理器单元阵列、其中每一阵列包含相同数目的处理器单元,采用这种首尾连接的方式。此时的时钟信号沿每下一个阵列递增延迟,但又能在其间再次赶回。
当然,因为时钟分配并不特别重要,而且时钟分配的延迟有较好的支持,时钟信号可从两个时钟源中选择一个输入每一处理单元。按与图7中所示处理器类似的结构,时钟可通过连接11a与第二处理器阵列连接。如此一来就可以保持“赶回”的优点,并实现相邻阵列之间的同步。另外,这种结构使得各种不同长度的阵列可彼此连接以组成更长的阵列,而不需要在其间保持时钟同步。这里在第二阵列中的每一处理单元需要两个时钟,一个由第一方向的在前处理单元提供、另一个由第二其它方向的在前处理单元提供。由于时钟在处理单元之间日延迟,所以切换电路的作用仅是将所需延迟的一部分或全部提供给时钟信号。
参考图8,示出了本实施例中一个具有时钟切换电路的处理单元。端口81提供第一时钟信号。端口82提供第二时钟信号。因在使用时时钟只沿其中一个方向传播,所以端口81和82都可以是双向端口。每一端口分别与时钟驱动器84和83连接。这两个端口还与一个开关85连接,以选择其中一个时钟并沿时钟导体86提供到处理单元87。该时钟同时还提供给两个驱动器,其中只有一个工作。此时,每一单元从两个可选择的传播方向中选择一个传播方向的时钟信号进行传播。
因为可以知道处理器将在何时完成其处理,所以使得指定该处理器处理另一处理器的顺流数据成为可能。例如,假设处理器4a的处理单元可处理256位操作,并开始处理一个256位操作,再假设4b是一个类似的处理器,当处理单元4a开始一个处理之后并在其结束之前,传来一个512位的处理请求,由于知道在该数据传播到处理阵列4a的最后单元时,该单元将已经完成其对现有处理的操作,所以512位操作可在处理阵列4b中进行。通过减小处理器在等待其它处理器能支持链接阵列处理所需的待机时间,可以大大提高整个系统的性能。以蒙哥马利为基础的加密数据流水线处理
采用蒙哥马利算法,模数求幂的成本可降低为一系列长整数的加法运算。在乘法和加法结构中,目前有好几种避免传播的方法。这些方法中都采用蒙哥马利算法与冗余基数系统、或余数系统结合。
在IEEE计算机会刊(42(6):693-699,1993年7月),由S.E.Eldridge and C.D.Walter所写的“Hardware implementation of Montgomery’s modular multiplication algorithm(蒙哥马利模数乘法算法的硬件实现)中,蒙哥马利模数乘法算法被改编得适于硬件实现。因为采用了简单的结合逻辑,可从较高的时钟频率取得速度的增加。与先前以Brickell算法为基础的技术相比,报告了两个取得高速度的因素。
数字设备公司(DEC)研究实验室在IEEE VLSL系统会刊(4(1):56-69,1996年3月)中,报告了由J.E.Vuillemin,P.Bertin,D.Roncin,M.Shand,H.H.Touati,以及P.Boucard所写的“Programmable active memories:Reconfigurable systems come of age”(可编程有源存储器:可重构系统时代的到来),并在IEEE计算机算法会议纪(第252-259页,1993)的第11期论文集中,报告了由M.Shand和J.Vuillemin所写的“Fastimplementationsof RSA cryptography”(RSA密码系统的快速实现),由16 XILINX 3090 FPGA组成的阵列采用了包括中国余数定理在内的好几种快速方法,异步加法器,以及一个窗口求幂方法来实现模数求幂。其中以185kb/s(每一次970位解密处理需5.2ms)的速度执行一个970位RSA解密运算,并以超过300kb/s(每一次512解密处理需1.7ms)速度执行512位RSA解密运算。本方案的缺点在于其模件的二进制表示是以硬布线方式置入到逻辑表示中的,所以对于每一个新的模件需要一次结构调整。
在蒙哥马利模数乘法算法中采用高基数的一个问题在于需要更复杂决定的商。这一行动在直接方式之外还需要一个流水线处理执行。在计算机算法会议纪要(第193-199页,1995年)的第12期论文签订中,报告了由In H.Orup所写的“Simplifying quotientdetermination in high-radix modular multiplication(高基数模数乘法中的简单商决定法)”,其中采用算法重写以避免在商决定过程中的任何操作。每一给定商只执行所需的一次预先计算。
在IEEE国际电路与系统会议纪要(第2040-3页,1995年)论文集第3卷中,报告了由P.A.Wang所写的“New VLSI architectures of RSA public key crypto systems”,其中建议在蒙哥马利模数乘法算法中采用一种新的VLSI结构。决定时钟速度的关键路径是流水线型的,这可通过算法的每一反复交叉处理来实现。与前面所述建议相比,报告了两个提高时间区域的乘积因素。
J.Bajard,L.Didier和P.Kornerup在其发表于IEEE计算机汇刊(47(7):766-76,1998年7月)上的文章“An RNS Montgomery modular multiplication algorithm(一种RNS蒙哥马利模数乘法算法)”中描述了一种使用余数系统(RNS)的新方法。在n个适度简单的处理器上,用n个模件实现了该算法。其结果处理时间为·O(n)。
当然,以上引用的大部分文件与处理器的硬件实现是相关的,而处理器几乎没有或有很小灵活性。
对模数算法,已有若干个关于Systolic阵列结构的建议。它们有不同的复杂度和灵活性。
在E.F.Brickell于1990年,在Springer-Verlag举行的CRYPTO’1989年度的密码学进展的年会上发表的“A survey of hardware implementations of RSA(RSA硬件实现概观)“中,E.F.Brickell总结了90年代可用于进行RSA加密的芯片。
在1991年举行的关于计算机体系结构的第10次IEEE学术会论文集的第35-42页中,N.Takagi提出了对迭代模数乘法有效率的基4模数乘法的硬件算法,作者建议采用基4硬件算法。其中采用冗余数表示,从而避免了附加的进位的传递。报告中说与以前的工作相比,处理速度提高了大约6倍。
基于J.Yong-Yin和W.P.Burleson的迭代Horner法则,最近提出了提前计算模件余数的方法。在IEEE关于VLSI系统的汇刊(5(2):211-17,1997年6月)上揭示了VLSI阵列算法和RSA模数乘法的体系结构。与蒙哥马利算法相比较,这种方法使用了中间结果中最重要的位来决定减去模件的哪一倍数。此解决方案的不足是它们要么需要大量存储空间,要么需要很多时钟周期来完成模数乘法。
T模数求幂最通用的算法是平方&乘法运算。公开密钥加密系统通常是基于模数求幂或重复点加法。两种运算都是由平方和乘法算法完成的最基本形式。方法1.1:计算Z=XEmod M,其中E=Σi=0n-1ei2i,ei∈{0,1}]]>
1.Z=X
2.FOR i=n-2 down to 0 DO
3.Z=Z2mod M
4.IF ei=1 THEN Z=Z·X mod M
5.END FOR
方法1.1在最坏情况下要进行2(n-1)次运算,而平均次数为1.5(n-1)。为了并行计算平方和乘法,可采用以下方式计算平方及乘法:方法1.2:计算P=XEmod M,其中E=Σi=0n-1ei2i,ei∈{0,1}]]>
1.P0=1,Z0=X
2.FOR i=0 to n-1 DO
3.ZI+1=Zi2mod M
4.IF ei=1THEN Pi+1=Pi·Zi mod M
ELSEPi+1=Pi
5.END FOR
方法1.2在最坏情况下要进行2n次运算,而平均次数为1.5n。可利用一元方法实现速度加快,例如采用由D.E.Knuth在其“The Art of Computer Programming(程序设计技术)”第2卷:半数字算法(Addison-Wesley,Reading,Massachusetts,1981年,第2版)中公开的一种由方法1.1广义化的方法。该一元方法一次处理1个指数位。其缺点是必须预先计算并存储X的(21-2)倍。有可能减小到21-1次预计算。结果是形成复杂性大致为n/l次乘法运算和n次平方运算。
如上所示,用蒙哥马利方法可将模数求幂简化为一连串模数乘法操作和平方步骤。以下所述模数乘法方法是由P.L.蒙哥马利在“Modular multiplication without trial division(无须试除的模数乘法)”中提出的,该论文发表于1985年4月出版的《计算数学》杂志(44(170):519-21)上。这是一种用于将两个整数以M模件进行乘法运算的方法,同时避免了除以M。该想法是用m余数对整数进行转换并用这些m余数计算乘法。最后,将该表示转换为其正常表示。该方法只有在计算转换域内一连串乘法运算时才是有益的(例如,模数求幂)。
为计算蒙哥马利乘法,基数R>M,选择gcd(M,R)=1。如能被R除则最经济,如果M=Σi=0m-1mi2i]]>,这样理想的选择是R=2m。x的m余数是xR mod M。也可计算M’=M-1mod R。其中提供了一个函数MRED(T)来计算TR-1mod M:假设T是一个m余数,则该函数计算T的标准表示。方法1.3 MRED(T):计算蒙哥马利T的减少
T<RM,R=2m,M=Σi=0m-1mi2i,gcd(M,R)=1]]>
1.U=TM’mod R
2.t=(T+UM)/R
3.IF t≥M RETURN t-M
ELSE RETURN t
MRED(T)的结果是t=TR-1mod M.
在转换域中,将两个整数a和b相乘,其中,它们分别表示(aR mod M)和(bR mod M),两者的乘积提供给MRED(T):
MRED((aR mod M)·(bR mod M))=abR2R-1=abR mod M
对模数求幂,按照方法1.1或1.2重复该步骤若干遍以得到最后结果ZR mod M或PnR mod M。这些数值中的一个提供给MRED(T),以得到结果Z mod Mo或Pn mod M。
初始转换步骤仍然需要昂贵的模件约简。为避免涉及除法,用除法计算R2mod M。对给定的密码系统,该步骤只需要进行一次。为在转换域中得到a和b,执行MRED(a·R2mod M)和MRED(b·R2modM)以得到aR mod M和bR mod M。显然,以这种方式中可转换任何变量。
对方法1.3的硬件实现,使用m×m位的乘法和2m位的加法以计算步骤2。中间结果可多达2m位。替代一次U的计算,计算r基表示的一个数字。选择基数r,使得优选gcd(M,r)=1。被r的除法最好也是廉价的,这样,理想的选择是r=2k。全部变量可用r基表示。另一改进是在该算法中包括乘法A×B。方法1.4用于计算A·B mod M的蒙哥马利模数乘法,其中:Σi=0m-1(2k)imi,mi∈{0,1…2k-1;B=Σi=0m-1(2k)ibi,bi∈{0,1…2k-1};]]>A=Σi=0m-1(2k)iai,ai∈{0,1…2k-1;A,B<M;M<R=2km;M′=-M-1mod2k;gcd(2k,M)=1]]>
1.S0=0
2.FOR i=0 to m-1 DO
3.qi=(((Si+aiB)mod 2k)M’)mod 2k
4.Si+1=(Si+qiM+aiB)/2k
5.END FOR
6.IF Sm≥M RETURN Sm-M
ELSE RETURN Sm
应用方法1.4的结果是Sm=ABR-1mod M。对基2k,至多需要两次k×k位乘法运算和一次k位加法来计算步骤3。对步骤4,需要两次k×m位乘法运算和两次m+k位加法运算。与方法1.3的2m位相比,将S的最大位长度减到m+k+2。
方法1.5是基r=2时对方法1.4的简化。对基r=2,方法1.4的步骤3的运算是以2为模完成的。由于条件gcd(M,2k)=1,模件M是偶数。下面立即有M=1 mod 2。这样,M’=-M-1mod 2也退化为M’=1。而且,在步骤3,与M’mod 2的乘法可随意忽略。方法1.5蒙哥马利模数乘法(基r=2)计算
用于计算A·B mod M的蒙哥马利模数乘法,其中M=Σi=0m-1(2k)imi,mi∈{0,1};]]>B=Σi=0m-1(2k)ibi,bi∈{0,1};A=Σi=0m-1(2k)iai,ai∈{0,1};A,B<M;M<R=2m;gcd(2,M)=1]]>
1.S0=0
2.FOR i=0 to m-1 DO
3.qi=(Si+aiB)mod 2
4.Si+1=(Si+qiM+aiB)/2
5.END FOR
6.IF Sm≥M RETURN Sm-M
ELSE RETURN Sm
方法1.5的步骤6的最后的比较和减法实现成本高,由于m位的比较非常慢,资源使用上很昂贵。这也会使得该算法不可能流水线执行。如果A,B<M,很容易证明Si+1<2M始终成立。但是,Sm不能再用为下一次模数乘法的输入A或B。如果am+1=0以及输入A,B<2M,将循环执行2次多,就满足不等式Sm+2<2M。这样,Sm+2c可用作下一次模数乘法的输入B。
为进一步减低方法1.5的复杂性,将B上移一个位置,即乘以2。其结果是ai·B mod 2=0,且可避免步骤3中的加法。在刷新Si+1(Si+qiM+aiB)/2时,可用(Si+qiM)/2+aiB代替。这种简化的代价是要多执行一次am+2=0的循环。以下方法包括了这些优化。方法1.6用于计算A·B mod M的蒙哥马利模数乘法(基r=2),其中:M=Σi=0m-1(2k)imi,mi∈{0,1};B=Σi=0m-1(2k)ibi,bi∈{0,1};A=Σi=0m-1(2k)iai,ai∈{0,1};]]>A,B<2M;M<R=2m+2;gcd(2,M)=1
1.S0=0
2.FOR i=0 to m+2 DO
3.qi=(Si)mod 2
4.Si+1=(Si+qiM)/2+aiB
5.END FOR
以上算法计算Sm+3=(2-(m+2)AB)mod M。为得到正确的结果,以22(m+2)mod M执行额外的蒙哥马利模数乘法。但是,如果在求幂运算中需要进一步的乘法操作,最好将全部输入预乘因数22(m+2)mod M。这样,每个中间结果带有一个因数2m+2。用“1”与将该结果进行蒙哥马利乘法,可消除该因数。
最后的蒙哥马利乘法带有“1”,可保证最后结果小于M。高基数的蒙哥马利算法
通过避免步骤6中昂贵的比较和减法操作以及将条件改为4M<2km和A,B<2M,在用硬件实现方法1.4会产生一些优化。其代价是将循环多执行2次。最终方法如下:方法1.7用于计算A·B mod M的蒙哥马模数乘法,其中M=Σi=0m-3(2k)imi,mi∈{0,1…2k-1M~=(M′mod2k)M,M~=Σi=0m-2(2k)im~i,m~i∈{0,1…2k-1};]]>B=Σi=0m-1(2k)ibi,bi∈{0,1…2k-1};---A=Σi=0m-1(2k)iai,ai∈{0,1…2k-1;]]>A,B<2M~;4M~<2km;M′=-M-1mod2k]]>
1.S0=0
2.FOR i=0 to m-1 DO
3.qi=(Si+aiB)mod 2k
4.Si+1=(Si+qiM~+aiB)/2k]]>
5.END FOR
因为aiB mod 2k=0,步骤3简化为qi=Si mod 2k,所以可以通过用B·2k代替B来降低商qi的确定复杂性。为补偿B中的额外的因数2k,可以循环的额外迭代的代价来避免步骤3的加法。以下示出了蒙哥马利方法硬件实现的优化。方法1.8用于计算A·B mod M的蒙哥马利模数乘法,其中:M=Σi=0m-3(2k)imi,mi∈{0,1…2k-1M~=(M′mod2k)M,M~=Σi=0m-2(2k)im~i,m~i∈{0,1…2k-1};]]>B=Σi=0m-1(2k)ibi,bi∈{0,1…2k-1};---A=Σi=0m(2k)iai,ai∈{0,1…2k-1},am=0;]]>A,B<2M~;4M~<2km;M′=-M-1mod2k]]>
1.S0=0
2.FOR i=0 to m-1 DO
3.qi=Si mod 2k
4.Si+1=(Si+qiM~)/2k+aiB]]>
5.END FOR
然后将最后的结果与1进行蒙哥马利相乘以消除以上讨论的因素。
在由Thomas Blum于1999年4月8日提交给Worcester工学院、题目为“ModularExponentiation on Reconfigurable Hardware(在可重构硬件上模数求幂)”的论文在此结合作为参考,Thomas Blum提出两种不同的流水线体系结构,以便用模数乘法和蒙哥马利空间执行加密函数:基于方法1.6的区域效率的体系结构以及快速高效体系结构。作为目标装置,使用了Xilinx XC4000系列的装置。
通用的基2 Systolic阵列使用m×m个处理单元,其中m是模件的位数,每个单元只处理一个位。可同时进行2m个模数乘法运算,其特点是,每个时钟周期一次模数乘法的吞吐量以及2m的等待时间。这种方法对在现代公开密匙方案中所要求的典型位长度产生不切实际大的CLB计数,只实现了处理单元中的一列。用此方法,可同时对两个模数乘法运算进行处理,并且效能降低为每2m个周期进行两次模数乘法运算的吞吐量以及等待时间保持为2m周期。
第二个考虑是基的选择r=2k。增加k可减少方法1.8执行的步骤个数。但这种方法需要更多的资源。主要的开销在于M和B的2k倍的计算。它们或者被预先计算并存储在RAM中,或者由多路复用网络计算。显然,对r=2,CLB计数达到最小,因为无须对M或B的倍数进行计算或预计算。
使用基r=2,可计算方法1.6中的等式。为进一步减小所需要的CLB数量,可有选择地采取以下措施:每个单位处理大于1个位,单个加法器用于预计算B+M,以及在正常处理期间进行其他加法运算,并行计算平方和乘法运算。该方法从结构上可划分为3个级别。处理单元:计算u位模数乘法。模数乘法:一个处理单元阵列用于计算模数乘法。模数求幂:将模数乘法运算与模数求幂按照方法12进行结合处理单元
图10示出了处理单元的实现。
在处理单元中有以下寄存器:
·M-Reg(u位):存储模件
·B-Reg(u位):存储B乘数
·B+M-Reg(u位):存储中间结果B+M
·S-Reg(u+1位):存储中间结果(包括阵列)
·S-Reg-2(u-1位):存储中间结果
·Control-Reg(3位):控制乘法器和时钟使能
·ai,qi(2位):乘数A,商Q
·Result-Reg(u位):存储乘法结束时的结果
寄存器总共需要(6u+5)/2个CLBs,加法器需要u/2+2个CLBs,乘法器需要4·u/2个CLBs,译码器需要2个CLBs。组合逻辑的复用寄存器有可能允许节省一些CLBs。用B-Reg和Result-Reg的CLBs实现MuxB和MuxRes,用部分M-Reg和B+M-Reg的CLBs实现Mux1 and Mux2。结果的代价近似为每个位的处理单元为3u+4 CLBs。即,每个位3-4个CLBs,这取决于单元大小u。
在一个单元计算模数乘法之前,必须加载系统参数。将M存储到该单元的M-Reg。在开始模数乘法时,按照多路复用器B-Mux的选择线,从B-in或S-Reg加载操作数B。下一步是再计算一次M+B并将结果存储到B+M-Reg。该操作需要2个时钟周期,先将计算结果被送入S-Reg。Mux1和Mux2的选择线分别由ai或控制字控制。
在以下2(m+2)周期内,按照方法1.6计算模数乘法。多路复用器Mux1按照二进制变量ai和qi的数值,选择其输入0,M,B,B+M中的一个,送到加法器中。Mux2将前面结果S-Reg2的u-1最大位加上下一单元(除以2/右移)最低结果位,送到该加法器的第二输入端。在一个周期内将该结果存储在S-Reg中。该最低位进到该单元到右侧(除以2/右移),该单元的进位到左侧。在该周期内,在加法器中,用S-Reg2,ai和qi的刷新数值计算第二模数乘法。除了不同的运算数A,第二乘法使用相同的运算数B。
在模数乘法结束时,在一个周期内,Sm+3在加法器输出端是有效的。该数值被存储在Result-Reg,并通过S-Reg送到B-Reg。第二乘法的结果在一个周期后送到Result-Reg。
图11示出处理单元如何连接成一个阵列,以计算m位模数乘法。以每个Unit处理u位,对m位执行该方法,要使用m/u+1个Unit。其中Unit0只有u-1个B输入,作为B0的输入,加到移位的数值Si+qiM上。按照蒙哥哥马利算法原理,结果位S-Reg0始终为0。Unitm/u处理B的最高位和中间结果Si+1的临时溢出,没有M输入到该Unit。
该单位(Unit)的输入和输出按以下方式彼此连接。控制字qi和ai抽吸从右到左通过该单位。该结果从左抽吸到右。进位出信号送到右边的进位入。输出S_0_Out始终连接到该单位的输入S_0_In到右侧。这表示公式中被2除。
首先,将模件M送到单位。为有足够时间将信号传递到全部单位,M在两个时钟周期内是有效的。我们使用两个M总线,将M-偶数-总线连接到所有所有偶数编号的单位,将M-奇数-总线连接到所有奇数编号的单位,这种方法可在每个时钟周期内将u位送到该单位。这样,装载全部模件M需要花费m/u个周期。
同样方式装载运算数B。这些信号在2个时钟周期内也是有效的。在装载运算数B后,方法1.6步骤开始作用。
在最右单位unit0t开始,控制字ai,和qi送到其寄存器。按照ai和qi,加法器在一个读时钟周期内计算S-Reg-2加B,M,或B+M。结果的最低位在下次计算中作为qi+1读回。结果的进位、控制字ai和qi被抽吸到该单位左,在下一个时钟周期进行同样计算。
用这种中心收缩方式,可将控制字ai,qi和进位从右到左抽吸通过全部单位进位。方法1.6中的被2除,也可导出右移操作。单位加法的最低位(S0)始终送到单位右。在完成模数乘法后,将结果从右抽吸到左通过该单位,连续存储在RAM中作进一步处理。
单个处理单元计算u位的Si+1=(Si+qi·M)/2+ai·B。在时钟周期i,单位0计算Si的0...u-1位。在i+1时间周期,单位1使用产生的进位并计算Si的u...2u-1位。在i+2时间周期,单位0使用Si(S0)右移(除2)的位u计算Si+1的0...u-1位。时钟周期i+1在单位只是等待单元1结果而无操作。按照方法1.2,通过并行计算平方和乘法运算可避免该低效率。pi+1和zi+1取决于zi。这样,中间结果zi存储在B寄存器中,将pi送到单元的ai输入以进行平方和乘法运算。
图12示出如何使用单位阵列进行模数求幂。该结构的中心是一个有17个状态的有限状态机(FSM)。在空闲状态,4个状态用于加载系统参数,3×4个状态用于模数求幂。在四个主状态“预计算1”、“预计算2”、“计算”和“计算后”中执行实际的模数求幂。这些主状态中的每一个被划分为三个子状态load-B,B+M,和计算乘法。按照状态对送到控制入的控制字进行编码。该FSM以1/2的时钟速率为时钟信号。对装载和读入RAM和DPRAM单元也同样如此。这种措施可保证最大传播时间处在这些单位内。这样,模数求幂的最小时钟周期时间和产生结果的速度与单位中的有效计算时间关联,而与计算的开销无关。
在模数求幂之前,装载系统参数。在该时刻将该模件M的2u位从I/O读到M-Reg。
从低阶位到高阶位开始,时间交替地将从M-Reg读出低阶位到高阶位的u位到M-奇数-总线和M-偶数-总线。这些信号在两个时间周期内是有效的。指数E是从I/O读出并存储在Exp-RAM中的16位。来自I/O的第一个16位宽的字用各个位规定了指数的长度。多达64的以下的字包含实际的指数。该时刻从I/O读出2u位的预计算因子22(m+2)mod M。它被存储到Prec-RAM。
在预计算状态,每个周期u位,我们从I/O读出X数值,将之存储在DP RAM Z。同时,从Prec RAM读出预计算因子22(m+2)mod M,每个时钟周期u位,通过M-奇数-总线和M-偶数总线交替地将其送到单位的B寄存器中。在以下的两个时钟周期内,在单位中计算B+M。
方法1.2的初始数值是存在的。并行地将两个数值乘以2,两个乘法运算使用公共的操作数22(m+2)mod M,该运算数已经存储在B中。时分多工(TDM)单位从DP RAM Z读出X,将之乘以X和1。在2(m+3)时钟周期后,结果的低阶位出现在Result-Out,将之存储在DP RAM Z。一个周期后,下一个结果的低阶位出现在Result-Out,将之存储在DP RAMP。该过程重复2m个周期,直到两个结果中所有数字存储在DP RAM Z和DP RAM P中。结果的X·2m+2mod M也存储在单位的B寄存器中。
在预计算2状态下,启动方法1.2的实际步骤。对Z和P1的计算,将Z0用作操作数。该数值存储在B寄存器中。分别从DP RAM Z和DP RAM P读出第二操作数Z0或P0,并通过TDM“抽吸”ai到各单位。在另外的2(m+3)个时钟周期后,在Result-Out出现Z1和P1结果的低阶位。将Z1存储在DP RAM中。只有在指数e0的第一位等于“1”时,才需要P1。根据e0,可将P1存储在DP RAM P中或丢弃。
在计算状态,将方法1.2的循环执行n-1次。每个周期后,刷新DP RAM Z中的Zi,并作为ai“抽吸”回各个单位。DP RAM P中的Pi只有在指数ei相关位等于“1”时才刷新。用这种方法,始终可将最后存储的P抽吸回各个单位。
在处理en-1以后,FSM进入后计算状态。为从结果Pn消除因子2m+2,计算最后的与1的Montgomery乘法。将第一矢量0,0,...0,1通过M-奇数-总线和M-偶数总线交替送到单位的B寄存器。从DP RAMP抽吸Pn作为ai送到各个单位。在执行后计算状态后,在I/O端口,u位的结果Pn=XE mod M是有效的。每两个时钟周期,在I/O出现另外的u位。可立即重新进入预计算状态,以计算另一个X数值。
在2(n+2)(m+4)个时钟周期内计算完全的模数求幂。这有一个延迟,从将X的前u位插入该装置开始,直到在输出出现前u个结果位。在此观点看,另一个X数值可输入到该装置。利用m/u时钟周期的附加的潜伏性,在输出总线出现最后的u位。
下文解释图12中的功能模数。图13示出DP RAM Z的结构。m/u×u位的DP RAM处于该单元中心。它有分离的写(A)和读(DPRA)地址输入。计数到m/u的写计数器计算写地址(A)。当Zi的前u位出现在数据入(data in)时,写计数器启动子状态B-load的计数(时钟使能)。同时,DP RAM的使能信号是有效的,将数据存储在DP RAM。当达到m/u时,端子计数复位DP RAM的计数使能和写使能。在计算子状态中,使能该读出计数器。在读出计数器达到其上限m+2,端子-计数触发FSM跃迁到B-load子状态。读出计数器数值(q out)的log2(m/u)个最高位选址DP RAM的DPRA。每u个周期,读出DP RAM中存储的另一数值。当q的log2(u)个最低位达到0,将该数值装载到移位寄存器中。在下u个周期,该u位将逐位出现在移位寄存器的串行输出上。将zi的最后数值存储在一个u位寄存器中。这种安排使得我们能够选择m/u×u位的DP RAM来代替2m/u×u-位的DP RAM(m=2x,x=8,9,10)。
DP RAM P几乎以同样方式工作。它有一个额外的输入ei,在ei=1时,可以激活DPRAM的写使能(write-enable)信号工作。
图17示出Exp RAM的结构。在装载指数状态的第一个周期内,从I/O读出第一个字,将之存储在10位寄存器中。该数值规定了以位表示的指数的长度。在以后的周期,读出16位的指数,并存储在RAM中。由一个6位写计数器计算存储地址。在每个计算状态的开始,该10位读出计数器被使能。它6个最高位计算该存储地址。这样。每16次激活,从RAM中读出新的数值。在读出计数器4个最低位等于0的同时,将该数值存储在16位的移位寄存器中。当读出计数器达到10位寄存器中规定的数值时,端子信号触发FSM进入后计算状态。
图15示出Prec RAM的结构。在load-pre-factor状态,从I/O读出2u位的预计算因子并存储在RAM中。计数达到m/2u的计数器选址该RAM。当读出全部m/2u个数值,端子计数信号触发FSM离开load-pre-factor状态。
在状态预计算1中,从RAM中读出预计算因子并送到带单元的B寄存器。每个时钟周期该计数器递增,将2u位装入2u位寄存器。在每个时钟的正向边沿,从中将u位送到B-偶数-总线上。在负时钟边沿,将u位送到B-奇数-总线。一种快速高效的体系结构
上述结构可优化其资源的使用。使用基数r=2k,k>1,可用因数k.减少方法1.6的步骤数。方法1.8的计算执行m+3次(i=0 to m+2)。
很容易将一种快速高效的体系结构按级划分为三层。处理单元:计算模数乘法的4位模数乘法:一个处理单元阵列计算模数乘法模数求幂:将模数乘法运算与模数求幂按照方法12进行结合
图16示出处理单元的实现。
配置了以下单元:
·B-Reg(4位):存储B乘数
·B-Adder-Reg(5位):存储B被乘数
·S-Reg(4位):存储中间结果Si
·Control-Reg(3位):控制乘法器和时钟使能
·ai-Reg(4位):乘数A
·qi-Reg(4位):商Q
·Result-Reg(4位):存储乘法结束时的结果
·B-Adder(4位):将B加到以前计算出的B的倍数上
·B+M~-Adder(4位):将M~的倍数加到B的倍数上
·S+B+M~-加法器(5位):加中间结果M~SitoB+
·B-RAM(16x4位):存储B的16倍
·M~-RAM(16x4位):存储M~的16倍
该单元的运算很容易从前面引用的T.Blum,T的论文和附图的阐述中导出。
图17示出处理单元如何连接到阵列,进行全部大小的模数乘法。
图18示出如何使用单元阵列进行模数求幂。
图19示出DP RAM Z的结构。m×4位的DP RAM处于该单元的中心。它有分离的写(A)和读(DPRA)地址输入。两个计数器递增计数到m+2,计算这些地址。当数据入出现Zi的第一个数字时,写计数器启动子状态B-负载中的计数(时钟使能)。同时,激活DP RAM的使能信号,将数据存储在DP RAM中。当达到m+2时,写计数器的端子计数信号复位两个使能信号。在子状态计算时,使能该读计数器。DP RAM的数据被读计数器输出的q选通,并立即出现于DPO。当读计数器达到m+2,端子-计数触发FSM变换到子状态B负载。将zi最后两个数值存储在各个4位的寄存器中。
该方法允许我们选择100%利用的m×4位的DP RAM,来代替只有50%利用的2m×4位的DP RAM。该DP RAM P以几乎相同的方式工作。它有一个附加的输入ei,,在ei=“1.”时,激活DP RAM的写使能信号工作。
由于上述流水线处理器结构中体现了许多流水线处理单元,因此将每一单元同步到同一集成电路中的时钟源常常困难而费用高昂,所以,本发明通过克服时钟分配问题来减少总的资源需求。同样,既然在一个方向需要加法,在其它方向需要乘法,显然沿一条路径需要花费比其他路径更多的时间,所以,按照本发明的实施例,有可能使路径时间平均化。
当然,还会有许多不偏离本发明精神或范围的其他实施例。