CN101042639A - 乘法器 - Google Patents
乘法器 Download PDFInfo
- Publication number
- CN101042639A CN101042639A CNA2006101309997A CN200610130999A CN101042639A CN 101042639 A CN101042639 A CN 101042639A CN A2006101309997 A CNA2006101309997 A CN A2006101309997A CN 200610130999 A CN200610130999 A CN 200610130999A CN 101042639 A CN101042639 A CN 101042639A
- Authority
- CN
- China
- Prior art keywords
- operand
- multiplier
- processing unit
- data
- buffer
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/527—Multiplying only in serial-parallel fashion, i.e. one operand being entered serially and the other in parallel
- G06F7/5272—Multiplying only in serial-parallel fashion, i.e. one operand being entered serially and the other in parallel with row wise addition of partial products
- G06F7/5275—Multiplying only in serial-parallel fashion, i.e. one operand being entered serially and the other in parallel with row wise addition of partial products using carry save adders
Abstract
一般的,在一方面,本发明描述了一个乘法器,包括被并联配置的一组多个乘法器,该组多个乘法器访问一个第一操作数和一个第二操作数以相乘,该第一操作数具有多个分段并且该第二操作数具有多个分段。该乘法器还包括重复提供第二操作数的一个单个分段到该组多个乘法器的每个乘法器并且提供第一操作数的多个相应分段到该组多个乘法器的相应乘法器的逻辑,直到第二操作数的每个分段被提供以第一操作数的每个分段。所述逻辑至少部分地基于相应分段在第一操作数里的位置对该组多个乘法器的不同输出进行移位。乘法器还包括与所述逻辑器相耦合的累加器。
Description
相关申请参考
本发明涉及同时待审批的美国专利申请序号为____,代理人档案号为42390.P23349,与本申请在同一天提出,且名称为“密码系统组件(CRYPTOGRAPHIC SYSTEM COMPONENT)”的专利申请。
本发明涉及同时待审批的美国专利申请序号为____,代理档案号为42390.P22799,与本申请在同一天提出,且名称为“密码装置和乘法器(CRYPTOGRAPHY PROCESSING UNITS AND MULTIPLIER)”专利申请。
背景技术
密码术(cryptography)可以保护数据免受不希望的访问。密码术通常涉及数据上的数学运算(加密)使得原始数据(明文)难以理解(密文)。相反的数学运算(解密)从密文中恢复原始数据。典型地,解密依赖于额外的数据,例如密钥。密钥是控制密码算法如何处理明文的数据。换句话说,对于同一明文,不同的密钥通常使得相同的算法输出不同的密文。在缺少所需的密钥的情况下,恢复原始数据至多是一种极端耗时间的数学挑战。
密码术用于各种情况中。例如,计算机上的文档可以被加密,使得只有文档的授权用户可以解密并访问文档的内容。同样地,密码术通常用于加密在公共网络上传播的信息包的内容。尽管恶意的用户可以拦截这些信息包,但是这些恶意的用户只能访问密文而不是被保护的明文。
密码术覆盖了除了加密和解密数据之外的各种广泛应用。例如,密码术通常用于鉴别(即可靠地确定通信代理的身份)、数字签名的生成等等。
当今的密码技术主要依赖于精确的数学运算。例如,多种方案涉及非常大的数字的相乘。例如,多种方案利用被称为模幂的模运算类型,该模运算涉及将一个大数乘方为某个幂,然后相对于一个模数来约化它(即,当被给定的模数除时的余数)。密码术方案所需的数学运算可能消耗相当多的处理器资源。例如,参与一个安全连接的网络计算机的处理器可能将其计算能力的主要部分致力于加密和解密任务,保留较少的处理器资源用于其它操作。
附图说明
图1是密码组件的图表;
图2是说明密码组件的操作的流程图;
图3是包括密码组件的处理器的图表;
图4是说明处理单元结构的图表;
图5是逻辑相互连接的共享存储器和处理单元的图表;
图6是与乘法器耦合的一组处理单元的图表;
图7是可编程处理单元的图表;
图8是说明指令运算的图表,所述指令使得数据从输入缓冲器传递到数据库(data bank);
图9-11是说明指令运算的图表,所述指令使得算术逻辑单元运行;
图12是说明数据通道指令的并行运算的图表;
图13是一个图表,示例了对应于程序运行的不同分级范围的多组不同变量;
图14是说明指数加窗的图表;
图15是加窗逻辑的图表;
图16是说明硬件乘法器的运行的图表;
图17是硬件乘法器的图表;
图18-20是不同类型的处理单元的图表;
图21是具有多个处理器内核的处理器的图表;
图22是处理器内核的图表;
图23是网络转发设备的图表。
具体实施方式
图1描述了运行密码运算的系统组件100的示例设备。组件100可集成到多种系统中。例如,组件100可集成到处理器的晶粒(die)中或可在处理器芯片组中构造。该系统组件100可以从其它的系统处理器卸载多种密码运算。组件100在相对适度的时钟速度下提供高性能,并且组件100是面积有效的。
如所示的,示例组件100可集成在单个的晶粒上,该晶粒包括耦接到共享存储器逻辑104的多个处理单元106-112。共享的存储器逻辑104包括存储器,该存储器充当了由不同处理单元106-112影响的数据和控制结构的集结区域(staging area)。例如,数据可存储在存储器中,然后依次传送到不同的处理单元106-112,每一个处理单元运行密码运算所涉及的一些任务,并将(可能)被变换的数据返回到共享的存储器逻辑104中。
处理单元106-112被构造为运行涉及例如加密、解密、鉴别(authentication)以及密钥生成的密码术的不同运算。例如,当处理单元110运行加密运算时(例如,DES(数据加密标准)、3DES(三重DES)、AES(高级加密标准)、RC4(ARCFOUR)和/或Kasumi),处理单元106可以运行散列算法(例如,MD5(报文摘要5)和/或SHA(安全散列算法))。
如所示的,共享的存储器逻辑104还与RAM 114(随机访问存储器)相耦合。运行时,数据可以从RAM 114传送,以便由处理单元106-112处理。可能地,被变换的数据(例如加密或解密数据)被送回到RAM 114。因此,RAM114可以表示为组件100和其它系统组件(例如请求对RAM 114中的数据进行加密运算的处理器内核)之间的连接点(nexus)。RAM 114可以位于容纳该组件100的晶粒外部。
所示的示例实施方式包括控制组件100运行的可编程处理器内核102。如所示的,内核102接收命令以对数据运行加密运算。该命令可以识别请求代理(例如内核)、用以运行(例如加密协议)的特定操作集合、要对其操作的数据(例如信息包有效载荷的位置),以及诸如密钥、初始向量和/或来自于前一加密运算的余数的额外加密环境(context)数据。响应某一命令,内核102可以运行在RAM 114、共享存储器和处理单元106-112之间传送数据的程序指令。
由内核102运行的程序可以通过程序代码在单遍处理中运行所请求的密码运算。作为一个示例,图2示出了由内核102运行的程序处理加密存储在RAM114中的信息包“A”的命令的处理。例如,另一处理器内核(未示出)可以将命令传送到组件100,以准备在公共网络上传送信息包“A”。如所示的,示例程序:(1)将信息包和任何相关的密码环境(例如密钥、初始向量或余数)从RAM 114读入到共享存储器中;(2)将数据传送到定位(aligning)处理单元106,定位处理单元将数据写回到共享的存储器114中,与一个指定的字节界限对齐;(3)将数据传送到密码处理单元108,在将变换的数据传送到存储器104之前该密码处理单元对数据执行变换加密运算;以及(4)将变换了的数据传送到RAM 114。然后内核102生成一个信号或消息,告知发布该命令的处理器内核,加密已经完成。
处理器内核102可以是多线程处理器内核,其包括多个程序计数器和与多个相应程序运行线程相关的环境数据的存储器。即,在图2中,线程130可以是多线程中的一个。内核102可在多线程环境之间切换,以屏蔽与处理单元106-112操作相关的等待时间。例如,线程130可以包括一个指令,在发送数据到加密处理单元108的指令之后明确放弃线程130的执行,直到接收到指示:变换后的数据已经写入到共享存储器104中。可替换地,内核102可使用优先环境切换,其在特定事件之后(例如请求处理单元106-112的运行或特定量的运行时间之后)切换环境。线程切换能使不同的线程运行其它操作,例如不同信息包的处理,否则不同的信息包将浪费内核102的周期。通过增加内核102的额外的环境可以潜在地增加吞吐量。在多线程实施方式中,可以用多种方式将线程分配给命令,例如,通过为命令分配线程的调度线程,或通过当线程可用时出列命令的线程。
图3示出包括密码系统组件100的处理器124的示例实施方式。如所示的,组件100接收来自于处理器内核118-122的命令。在该示例实施方式中,内核102被集成到系统组件100中并服务来自于其它内核118-122的命令。在一可替换的实施方式中,处理内核102可以不被集成到该组件中。而是内核118-122对于组件100的操作运行可以进行直接控制。可替换地,内核118-122之一可被指定为控制密码组件100并服务从其它内核118-122接收的请求。后面的方法可以减少组件100的费用以及晶粒覆盖区。
如图4所示,不同的处理单元106-112与共享存储器逻辑104具有相同一致接口结构。这种一致性通过使与各个处理单元的相互作用非常类似而减轻了编程的任务。该接口结构也使得易于配置包括在组件100中的一组处理单元106-112。例如,为了增加吞吐量,组件100可配置为包括多个相同的处理单元的复制品。例如,如果组件100可能被包括在一个运行大量鉴别操作的系统中,组件100可配置为具有多个散列处理单元。此外,该结构使得新的处理单元能容易地集成到组件100中。例如,当新的密码算法出现时,完成该算法的处理单元是可用的。
在图4所示的特定实施方式中,各个处理单元包括从共享存储器逻辑104接收数据的输入缓冲器142以及存储数据以传送到共享存储器逻辑104的输出缓冲器140。处理单元106还包括处理逻辑144,例如可编程或专用硬件(例如专用集成电路(ASIC)),以作用于输入缓冲器142接收的数据以及将运行的结果写入缓冲器140。在所示的示例中,缓冲器140、142可包括存储器和逻辑电路(未示出),该存储器和逻辑电路基于数据接收的顺序在缓冲器中对数据排队。例如,逻辑电路可以具有到存储器的头和尾指针,并且可将新接收到的数据添加到尾部。
在所示的示例实施方式中,输入缓冲器142通过总线146连接于共享存储器逻辑104,总线146不同于连接输出缓冲器140到共享存储器逻辑104的总线148。这些总线146、148可相对于其它系统时钟被单独地定时。此外,总线146、148可以专用于组件100以保护组件100的内部操作。潜在地,多个处理单元的输入缓冲器140可共享同一总线146;对于输出缓冲器140、148也一样。当然,也可以实现各种其它的通信方案,例如单个共享总线,而不是双总线,或共享存储器逻辑104和处理单元106-112之间的专用连接。
通常,各个处理单元受到共享存储器逻辑104接收的至少两个命令的影响:(1)处理单元读取(READ)命令,将来自于共享存储器逻辑104的数据传送到处理单元输入缓冲器142;以及(2)处理单元写入(WRITE)命令,将来自于处理单元的输出缓冲器140的数据传送到共享存储器逻辑104。两个命令可识别目标处理单元和要传送的数据。不同处理单元之间的这些指令的一致性可以使得组件100的编程更容易。在所示的特定的设备中,处理单元读取指令使得数据从共享存储器通过总线146压入(push)到各个目标处理单元106-112的输入缓冲器142中,而处理单元写入指令使得数据从目标处理单元106-112的输出缓冲器140通过总线148拉出(pull)到共享存储器中。因此,为了处理数据,内核102程序可发布命令,首先将数据压入到处理单元,然后发布命令,将写入到处理单元输出缓冲器144中的结果拉出。当然,可以使用各种其它的组件100间通信方案。
图5描述了示例实施方式的共享存储器逻辑104。如所示的,逻辑电路104包括各个处理单元(标记为“PU”)的读取队列和写入队列。在入口队列180处接收那些传送数据到共享存储器的库(库a-n)/从共享存储器的库(库a-n)传送数据的命令并基于目标处理单元和命令的类型(例如读取或写入)而分类到队列170-171中。除了命令目标处理单元之外,逻辑电路104还允许组件外部的内核(例如内核118-122)读取(例如拉出)或写入(压入)自/到存储库中,并具有一对附加的队列(标记为“内核”),用于这些命令。判定器(arbiter)182-184从队列170-171的队列中出列命令。例如,各个判定器182-184可利用循环法或其它处理方案。判定器182-184基于命令的类型将命令发送到另一队列172-178。例如,将数据压入到外部内核的命令在队列176中排队,而从外部内核拉出数据的命令在队列172中排队。同样地,将数据压入到处理单元中的命令在队列178中排队,而从处理单元拉出数据的命令在队列174中排队。当一命令到达队列的头时,逻辑电路104适当地启动利用总线146或148从存储器库到处理单元的数据传送,或通过耦合组件100至内核118-122的总线来传送/接收数据。逻辑电路104还包括允许在存储器库和外部RAM 114之间传送(压入和拉出)数据的电路。
图5中所示的逻辑电路104仅是一个示例,也可使用各种其它结构。例如,一种实施方式不需要将命令分类到各个处理单元队列中,尽管这种排队可保证请求之间的公平性。此外,图5中反映的结构可以开启其头部。也就是,替代逻辑电路104接收发送到存储器库以及从存储器库取回数据的命令,命令可以被路由到该处理单元,所述处理单元依次发布请求以访问共享存储器库。
多种密码协议(例如公共密钥交换协议)需要模乘(例如[A×B]mod m)和/或十分大的数字的模幂(例如A^exponent(指数)mod m)。尽管计算起来比较耗时,但是这些运算对于多种安全协议是关键的,例如Diffie-Helman交换、DSA签名、RSA签名以及RSA加密/解密。图6描述了耦接到多个处理单元150-154的专用硬件乘法器156。处理单元150-154可将数据(例如一对可变长度多字向量操作数)传送到乘法器156,并能够使用该结果。为了与很大的数字相乘,处理单元150-154可将乘法分解为一组更小的部分乘积,其能够更有效地由乘法器156执行。例如,两个1024位操作数的乘法可计算为四组512位×512位的乘法或十六组256位×256位的乘法。
乘法器156的最有效的使用可根据当前的问题(例如操作数的大小)不同而不同。为了提供处理单元150-154使用乘法器156时的灵活性,图6中所示的处理单元150-154是可编程的。程序通过接口158可动态地从共享存储器逻辑104随同运行的数据一起下载到处理单元150-154中。被选择下载到给定处理单元150-154的程序根据分配到处理单元150-154的问题(例如特定的协议和/或操作数尺寸)而改变。单元150-154的可编程性允许组件100操作在引入新的安全协议、算法和设备时改变。此外,程序员可基于特定的算法以及协议所需的操作数大小仔细地修正处理单元150-154的运算。由于处理单元150-154可以在运行时被动态地编程(在组件100运行期间),相同的处理单元150-154通过简单地下载适当的软件指令可用于运行不同的协议/协议选择的操作。
如上所述,各处理单元150-154可具有输入缓冲器和输出缓冲器(参见图4)以与共享存储器逻辑104通信。乘法器156和处理单元150-154可利用这些缓冲器进行通信。例如,处理单元150-154可存储操作数以在供乘法器156使用的输出缓冲器中的一对输出队列中进行相乘。在完成后,乘法器156的结果可被传送到处理单元150-154中。同一处理单元150-154的输入和输出缓冲器还可用于与共享存储器逻辑104通信。例如,处理单元150-154的输入缓冲器可接收来自于共享存储器逻辑104的程序指令和操作数。在程序执行完成时,处理单元150-154可类似地将程序运行的结果存储在输出缓冲器中,以便传送到共享存储器逻辑104。
为了协调处理单元的输入/输出缓冲器的不同用途,处理单元150-154提供由处理单元运行的程序指令选择的多种操作模式。例如,在“I/O”模式中,程序单元150-154独占地通过接口158与共享存储器逻辑单元104交换数据。在“运行”模式中,单元150-154的缓冲器独占地与乘法器156交换数据。额外的处理单元逻辑(未示出)可以与接口158和乘法器156相互作用,以指示处理单元的当前模式。
作为一个示例,在运行中,内核可以发布一命令到共享存储器逻辑104,指定下载到目标处理单元的程序和要处理的数据。该共享存储器逻辑104依次通过接口158传送信号,将给定的处理单元从“睡眠”模式唤醒到I/O模式。然后处理单元的输入缓冲器从共享存储器逻辑104接收一命令,以区分,例如,被下载的程序的大小、初始状态、共享存储器中程序指令的起始地址、以及程序的变量值。为了避免程序代码不必要的下载,如果程序大小被指定为零,则运行先前下载的程序。当被请求连续地运行同一操作时,这一点优化了处理单元的初始化。
在下载了程序指令之后,将变量和初始状态设定为特定值,下载程序中的指令将处理单元的模式从I/O模式转变为运行模式。然后处理单元能将要相乘的操作数写入到其输出缓冲器,并将乘法器156发送的结果接收到其输入缓冲器中。最后,程序指令将最终结果写入到处理单元的输出缓冲器中并将处理模式变回到I/O模式。然后最终的结果从单元的输出缓冲器传送到共享存储器逻辑104,且该单元回到睡眠模式。
图7描述了可编程处理单元150的示例设备。如所示的,处理单元150包括算术逻辑单元216,该算术逻辑单元运行例如加、减的运算以及例如向量的布尔“与”(AND)和“或”(OR)的逻辑运算。算术逻辑单元216与存储在集成于处理单元150内的不同存储器资源220、212、214中的操作数相耦合并可以对其进行操作。例如,如所示的,算术逻辑单元216可作用于存储器所提供的操作数,该存储器被分为一对数据库212、214,各个数据库212、214独立耦合到算术逻辑单元216。如上所述,算术逻辑单元216还与存储在输入队列220中的操作数(例如,从例如乘法器或共享存储逻辑104传送到处理单元150的数据)相耦合并且可以对其进行操作。为了运行给定的运算,算术逻辑单元216所用的操作数的大小可以改变,并且可以由程序指令指定。
如所示的,算术逻辑单元216可与移位器218耦合,后者可以对算术逻辑单元216的输出进行编程移位。算术逻辑单元216/移位器218输出的结果可被“再循环”回到数据库212、214中。可替换地,或此外,算术逻辑单元216/移位器218的结果可被写入到一个被分为两个并行队列的输出缓冲器222中。此外,输出队列222可存储被传送到乘法器156的各组乘法操作数,或者可以存储要传送到共享存储器的程序运行的最终结果。
上述组件形成一个循环的数据通道。也就是,操作数从输入缓冲器220、数据库212、214通过算术逻辑单元216,或者回到数据库212、214或者到输出缓冲器222。该数据通道的操作由存储在控制存储器204中的程序指令控制并由控制逻辑206运行。该控制逻辑206具有全局变量208和一组变量参考202(例如指针到存储在数据库212、214中数据)的存储器。
可由控制逻辑206完成的示例指令描述在所附附录A中。其它实施方式可在指令操作和语法方面作出改变。
通常,控制逻辑206包括分配变量值的指令(“配置”指令)、运行数学和逻辑运算的指令(“exec”指令和“fexec”指令)以及诸如过程调用和条件转移指令的控制流指令。该条件转移指令可作用于由算术逻辑单元216/移位器218生成的多个条件代码,例如进位、msb(如果最重要的位=1)、1sb(如果最不重要的位=1)、负值、零(如果最后的四倍字长(quadword)=0)以及零向量(如果整个操作数=0)。此外,处理单元150提供能用作条件指令之条件的一组用户可用的位。
控制逻辑206包括使得数据沿着处理单元150的数据通道移动的指令。例如,图8描述了“FIFO”指令的示例运算,当处理单元处于“运行”模式时,将来自于输入队列220中的数据堆栈存储到指定的数据库212、214中。在“I/O”模式中,取而代之的是FIFO指令能将来自于输入队列220的数据和指令传送到控制存储器204。
图9描述了将操作数提供给算术逻辑单元216的“EXEC”指令的示例运算。在所示的示例中,源操作数由数据库212、214提供,且输出被写入到输出队列222中。如图10所示,EXEC指令可备选地将结果存储回数据库212、214之一中(在所述的情况中,为数据库B 214)。
图11描述了组合有FIFO和EXEC指令的“FEXEC”(FIFO EXEC)指令的示例运算。与EXEC指令类似,FEXEC指令将操作数提供给算术逻辑单元216。然而,取代数据库212、214专门提供的操作数,操作数可从输入队列222中提供。
潜在地,数据通道指令中的一些不同指令可以在数据通道上同时操作。例如,如图12所示,在程序运行期间EXEC指令可跟随在一个FIFO指令之后。然而这些指令可采用多个周期完成,假定这些指令没有访问数据库212,214的重叠部分,控制逻辑206可以在FIFO指令完成之前发布EXEC指令。为了保证同时的运算不会偏离顺序运算的结果,控制逻辑206可判断同时的运算是否会破坏数据的一致性。例如,如果前面的FIFO指令将数据写入数据库A(数据库A为接下来的EXEC指令提供操作数)的一部分中,在数据通道上启动EXEC指令的运算之前,控制逻辑206等待由FIFO指令将数据写入到重叠的数据库部分中。
除了多个数据通道指令同时的运算之外,控制逻辑206可以与数据通道指令导致的运算并行地执行其它指令。例如,控制逻辑206在先前的初始数据通道运算完成之前可运行控制流逻辑指令(例如条件转移)和变量分配指令。更具体地,在所示的实施方式中,FIFO指令可与除模式指令之外的任意转移指令或任意配置指令同时发布。FIFO指令可与任意的运行指令同时发布,假定二者的目标库都是互斥的。FEXEC和EXEC指令可与任意的模式指令以及不依赖于特定条件状态存在的指令同时发布。然而EXEC指令不可与FEXEC指令同时发布。
处理单元150提供了多种特征来简化编程密码操作的任务。例如,完成多个算法的程序能从子程序或函数的递归或其它嵌套运行中获益。如图13所示,处理单元可保持变量和条件不同的作用域(scope)250-256,对应于嵌套的子程序/函数运行不同的深度。控制逻辑将一个作用域250-256用作当前作用域。例如,图13中当前作用域是作用域252。当运行程序时,该作用域指定的变量和条件值由控制逻辑206使用。例如,一个指令对变量“A0”的引用将与当前的作用域252的A0相关。控制逻辑206可分别响应过程调用(例如子程序调用、函数调用或方法调用)和过程出口(例如返回),自动地增加或减少作用域索引。例如,对于一个程序调用,当前作用域可在程序返回之后在回到作用域252之前进入到作用域254。
如所示的,各个作用域250-256具有一组到数据库A和B 212、214的指针。因此,基于当前的作用域,由程序访问的A变量和B变量被解除引用(de-reference)。此外,各个作用域250-256存储程序计数器,该程序计数器能将程序运行设置到一个调用程序停止的位置上。各个作用域还存储识别基本操作数大小的操作数范围值。指令访问该范围值以确定要提供给算术逻辑单元或乘法器的操作数的大小。例如,EXEC指令可指定N×当前作用域范围尺寸的操作数。各作用域进一步包括索引和索引比较值。当两个值相等时,这些值用于生成能用于条件转移指令中的索引比较条件。一个作用域包括能用作条件指令的条件的一组用户位。
除了对当前作用域中的数据提供访问之外,处理单元指令集还提供指令(例如“设置作用域<目标作用域>”(set scope<target scope>)),所述指令在不同于当前作用域的目标作用域中对作用域变量提供显式访问。例如,程序可预先最初配置与返回/嵌入的子程序调用的确认集合相关的递减范围。通常,指令集合包括设置各个作用域字段的指令。此外,指令集合包括把作用域值的集合从当前作用域复制到目标作用域的指令(例如“copy_scope”)。此外,指令集合包括允许基于包括在不同的作用域内的值来计算作用域值的指令(例如“设置相对变量”)。
除了上述的作用域支持之外,处理单元150还可包括减小求幂负担的逻辑。如上所述,许多密码运算需要大数的求幂。例如,图14描述幂254把数g乘方到第6,015,455,113次方。为了把一个数乘方到该较大的指数254,多种算法将该运算消减为一系列更简单的数学运算。例如,算法可把指数254作为位串处理,并从左到右逐位前进(最高有效位到最低有效位)。例如,以初始值“1”开始,对于位串中遇到的每一个“0”该算法可平方该值。对于位串中遇到的各个“1”,算法可平方该值并乘以g。例如,为了确定2^9的值,算法将按如下方法对1001b的二进制指数进行操作:
值
初始化 1
指数 位1-1 1^2*2=2
位2-0 2^2=4
位3-0 4^2=16
位4-1 16^2*2=512
为了减小该算法的计算需求,对于对应预先计算值的位的窗口可查询指数。例如,在2^9的一般示例中,“10”的位图案对应于g^2(4)。因此,在指数“1001”中识别窗口值“10”使得该算法在该窗口内对于每一位简单地平方该值并乘以预先计算的值。因此,使用窗口的算法可以如下进行:
值
初始化 1
指数 位1-1 1^2=1
位2-0 1^2=1
窗口“10”的值 1*4=4
位3-0 4^2=16
位4-1 16^2*2=512
通常,该技术减小了执行求幂所需的数字相乘(尽管不是在这种简单的小例子中)。此外,相同的窗口可在指数254的位串中出现多次,因此可以使用同一预先计算的值。
潜在地,指数254可在N位常规定位的窗口段中处理。例如,第一窗口可能是指数254的四个最高有效位(例如“0001”),第二窗口可以是下面四个最高有效位(例如“0110”)等等。然而,取代常规出现的窗口,图14描述了使用滑动窗口的方案。即,N位的一些任意大小的窗口可能在指数中的任何点处,而不是与N位边界对齐。例如,图14示出识别在指数254内发现的4位窗口的位置的位串256。例如,“1011”的指数窗口在位置256a处,指数窗口“1101”在位置256b处发现。一旦发现一个窗口,在该窗口位被赋零。例如,如所示的,“0011”的窗口在位置256c处发现。对指数位赋零使得“0001”的窗口在位置256d处发现。
图15示出用于完成滑动窗口方案的逻辑电路210。如所示的,逻辑电路210包括运行向左移位操作的一组M寄存器位(标记为C4到C-4),使得窗口逻辑250在指数位流通过逻辑电路210的某一时间访问指数字符串的M位。基于寄存器位和窗口大小252的识别,窗口逻辑250可确认具有指数的非零位的窗口大小图案的位置。通过在大于窗口尺寸的一组位中查询,逻辑250可确认窗口,而不考虑在指数位串中的位置。此外,包括在查询中位的较大行(swath)允许逻辑250从M位中发现的不同的可能窗口中进行选择(例如具有最多“1”位的窗口)。例如,在图14中,指数254以“0001”位开始,然而利用“向前看”位(C-1-C-4),由于窗口“1011”而不选择所述潜在的窗口。
一旦发现非零位的窗口,逻辑210能输出“发现窗口”信号以确定指数字符串中窗口的索引。逻辑210还能输出所发现的非零位的图案。该图案能用作预计算窗口值的表中的查询关键字。最后,逻辑210在该窗口中赋零这些位,并继续查询窗口大小的位图案。
示出的逻辑210可包括在处理单元中。例如,图7描述接收移位器218的输出的逻辑210,该移位器218通过逻辑210循环指数的位。逻辑210还被耦合到控制逻辑206。控制逻辑206具有指令,来控制窗口逻辑的运行(例如设置窗口尺寸和/或选择固定的或滑动窗口操作)并响应逻辑210的输出。例如,控制逻辑206能包括条件转移指令,其对控制逻辑的“发现窗口”输出进行操作。例如,程序能按发现窗口的条件转移并利用输出索引查询该窗口的预计算的值。
如上所述,处理单元可访问专用的硬件乘法器156。在转到示例实施方式之前(图17),图16示出了乘法器实施方式的示例运行。图16中乘法器156在多个时钟周期上对两个操作数A 256、B 256进行运算。如所示的,该操作数由乘法器处理为一组片段,尽管每个操作数的片段的数目和/或片段大小不同。例如,在所示的示例中,操作数A的N位被分为8个片段(0-7),而操作数B被分为2个片段(0-1)。
如所示的,通过操作数A的片段和操作数B的片段的连续相乘而运行乘法器,直到产生所述片段的部分乘积的所有组合。例如,在周期2中,乘法器将操作数B的片段0(B0)乘以操作数A的片段0(A0)262a,而在周期17中2621,乘法器将操作数B的片段1(B1)乘以操作数A的片段7(A7)。在图16中部分乘积被示为位的总集合。如所示的,基于片段在操作数内各自的位置,位的集合相对于彼此进行移位。例如,A和B的最不重要的片段(B0×A0)的乘积262a得到结果位的最不重要的集合,A和B的最重要的片段(B1×A7)的乘积2621得到结果位的最重要的集合。一系列部分乘积的结果相加表示操作数A 256和B 258的乘积。
一系列部分乘积的顺序计算在最后一个周期之前能递进生成最终乘积结果得到的位。例如,图16确定给定重要性的位何时能被退出(retire),如箭头标识线跨越的位。例如,在完成周期2中的B0×A0之后,由于下一部分乘积的结果不影响这些位,因此已知该最终结果的最不重要的位。类似地,在完成周期3中的B0×A1之后,由于只有262a和262b的部分乘积影响这些最不重要的位的总和,因此这些位可以被退出。如所示的,各周期也许不会产生要退出的位。例如,不同片段的乘积能产生具有相同的重要性的位。例如,周期6中B0×A4和周期7中B1×A0的结果正好重叠。因此没有位在周期6中被退出。
图17详细示出乘法器156的示例实施方式。乘法器156能如16中所示地处理操作数。如所示的,乘法器156具有并行配置的一组乘法器306-312。乘法器可以是N位×N位乘法器,但是N位可以不是2的因数。例如,对于512位×512位乘法器156,各个乘法器可以是67位×67位乘法器。此外,乘法器156本身不限于2的幂的操作数。
乘法器156顺序地提供操作数的片段,例如,如图16中所示。例如,在第一周期中,操作数A的片段0被提供到各个乘法器306-312,而操作数B的片段0的子片段d-a分别被提供到各个乘法器306-312。也就是,在一给定的周期中,乘法器312可接收操作数A的片段0以及操作数B的片段0的子片段a,而乘法器310接收操作数A的片段0以及操作数B的片段0的子片段b。
乘法器306-312的输出基于各个片段在操作数内的重要性而被移位314-318。例如,移位器318针对Bna×An 312的结果移位Bnb×An314的结果,以反映子片段b相对于子片段a的重要性。
移位后的结果被传送到累加器320。在所示的示例中,乘法器156利用进位/保存结构,在那里操作产生一个表示缺少到任何更高有效位位置的进位的结果向量以及一个存储该进位的向量。这两个向量的相加可以被推迟,直到需要最后的结果。在图17描述的乘法器156具有进位/保存结构,但是其它实施方式可利用其它方案(例如进位/传递加法器),尽管进位/保存结构的面积和功率效率会高数倍。
如所示的,在图16中,对片段相乘的排序可获得乘法器306-312的输出位,它们不会受到乘法器306-312后续输出的影响。例如,在图16中,在周期2中,乘法器306-312的最低有效位输出可被传送到累加器320中。累加器320在位产生的过程中能退出这些位。例如,累加器320可将退出的位输出到分别存储累加的进位/保存向量的一对FIFO 322、324中。乘法器156包括逻辑326、328、336、338,其对乘法器中剩余的进位/保存向量进行移位,所移位的位数目对应于被退出的位数目。例如,如果累加器320将最不重要64位传送到FIFO322、324,其余的累加器320向量可向右移位64位。如所示的,逻辑以一个变化的量来移位累加器320。
如上所述,FIFO 322、324存储由累加器320退出的进位/保存向量的位。FIFO 322、324依次馈送到加法器330,加法器330对进位/保存向量的被退出部分求和。FIFO 322、324能操作以平滑地将位馈送给累加器330,使得在各个连续的周期中连续地馈送被退出的部分给累加器330,直到输出最终乘法器结果。换句话说,如图16所示,不是所有的周期(例如周期6)都导致退出位。在没有FIFO 322、324的情况下,当这些没有退出的周期通过乘法器156过滤掉时,加法器330将停止。替代地,通过用退出的位填充FIFO 322、324并推迟FIFO 322、324中位的出列,直到有足够的位被退出,FIFO 322、324能保证加法器330的连续运行。然而,FIFO 322、324不必与最终的乘法器156结果中的位数目一样多。替代地,FIFO 322、324仅要大得足够存储足够数目的被退出的位即可,从而“被跳过的”退出周期不停止加法器330,并且FIFO 322、324足够大使得在最终的周期中能容纳退出位的猝发。
乘法器156用作在一系列周期中通过乘法器级传递数据的流水线。如所示的,乘法器具有存储要相乘的操作数的两个队列302、304。为了支持上述的部分乘积乘法的方案,队列302、304的宽度可根据各个队列不同而不同,各个队列是1-操作数-片段的宽度。队列302、304防止了流水线断源。也就是,随着乘法器完成一对操作数的相乘,另一对操作数的相乘随即开始。例如,在B1×A7的结果被输出到FIFO 322、324之后,逻辑电路326、328能给累加器320向量赋零,以启动两个新出列的操作数的相乘。此外,由于流水线结构,两个操作数的相乘可以在乘法器接收到操作数中整个片段集合之前开始。例如,一接收到部分A0和B0,乘法器就开始A×B。在该运算中,FIFO 322、324不仅对于给定的操作数对平滑加法器330的输出,而且对于不同组的操作数平滑加法器330的输出。例如,在流水线填充的初始延迟之后,乘法器156在各个连续周期可以输出所述多个乘法问题的部分最终乘法结果。即,在输出A×B的最重要的位的周期之后,C×D的最不重要的位被输出。
例如,通过从处理单元输出缓冲器中接收数据,乘法器156能获得操作数。为了确定要服务的处理单元,乘法器可具有判定器(未示出)。例如,判定器可依次轮询各个处理单元以确定给定的处理单元是否具有要运行的乘法。为了保证不浪费乘法器156周期,判定器可确定给定的处理单元是否已排列了足够数量的操作数,以及处理单元的输入缓冲器是否具有足够的空间以在选择要使用的处理单元之前容纳该结果。
乘法器156由状态机(未示出)控制,该状态机对提供给乘法器的片段进行选择、控制移位、初始化FIFO出列等等。
潜在地,给定的处理单元可将给定的算法分解为一系列乘法。为了使处理单元快速地完成一系列运算而不受到竞争使用乘法器156的其它处理单元的打断,判定器可检测处理单元提供的信号,该处理单元给判定器发信号,以继续处理由乘法器当前服务的处理单元提供的其它组操作数。如果没有该信号,判定器例如通过恢复处理单元的循环轮询,恢复成为其它处理单元提供服务。
尽管上述说明描述了多个处理单元,多个处理单元可包括在组件100中。例如,图18描述了一个“块(bulk)”处理单元的示例。如所示的,该单元包括字节顺序交换器(endian swapper)以在大尾和小尾表示之间改变数据。块处理单元还包括逻辑,用于按照可编程生成器多项式的规定对数据执行CRC(循环冗余检验)运算。
图19示出鉴别/散列处理单元的示例。如所示该单元存储用于信息鉴别的数据(“通常的鉴别数据结构”),该信息鉴别在不同的鉴别算法之间共享(例如结构和状态寄存器)。对于各个支持的算法,该单元还包括对数据处理负责的专用硬件逻辑(例如,MD5逻辑、SHA逻辑、AES逻辑和Kasumi逻辑)。该单元的整个运行由控制逻辑和有限状态机(FSM)控制。FSM控制鉴别数据缓冲器中的数据的装载和卸载,追踪数据缓冲器中的数据量,将开始信号传送到适当的鉴别内核,控制被载入到数据缓冲器中的数据源,并传送信息给填充逻辑以帮助确定填充数据。
图20示出密码处理单元的示例。该单元对于大量不同的密码算法能在其它任务之间运行加密和解密。如所示的,该单元包括存储状态信息的寄存器,该状态信息包括结构寄存器(标记为“config”)、计数寄存器(标记为“ctr”)、密钥寄存器、参数寄存器、RC4状态寄存器和IV(初始向量)寄存器。该单元还包括多路复用器和XOR门以支持CBC(密码字组链接)、F8和CTR(计数器)模式。该单元还包括多个密码的专用硬件,该密码包括负责所支持的算法的逻辑(例如AES逻辑、3DES逻辑、Kasumi逻辑和RC4逻辑)。该单元还包括控制逻辑和状态机。逻辑块负责控制密码单元的整个行为,包括根据密码单元处于的模式启用适当的数据通道(例如在加密CBC模式中,当解密IV被设置为0时,适当的IV被选择以生成加密IV),在整个密码处理期间选择到密码内核中的适当输入(例如要使用的IV、计数器和密钥),并基于内核102发布的命令产生控制信号以确定传送到输出数据通道上的数据。该块还激活并产生用于RC4密钥扩充和AES密钥转换所需的控制信号。
图18-20示出的处理单元仅仅是不同类型的处理单元的示例,该组件具有与所示的那些不同类型的单元。例如,该组件可包括运行伪随机数生成的单元、以及运行Reed-Solomon编码的单元等等。
上述技术能够通过不同方式以及在不同的环境中实现。例如,该技术可集成在网络处理器中。作为一个示例,图21描述了网络处理器400的示例,其可被编程用于处理信息包。所示的网络处理器400是Intel的互连网交换网络处理器(IXP)。其它处理器具有不同的设计。
所示的网络处理器400具有在单个的集成半导体晶粒400上的可编程处理内核402的集合。各个内核402可以是适于信息包处理的精简指令集计算机(RISC)。例如,内核402不能提供浮点或通常由通用处理器的指令集提供的整数除法指令。单个的内核402可提供多线程运行。例如,内核402对于不同线程能存储多个程序计数器及其它环境数据。
如所示的,网络处理器400还具有在处理器400和其它网络组件之间运载信息包的接口420。例如,处理器400具有转换结构接口420(例如常用的转换接口(CSIX)),该接口使处理器400能将信息包传送到与转换结构相连的其它处理器或电路。该处理器400还能具有接口420(例如系统信息包接口(SPI)接口),该接口使处理器400能与物理层(PHY)和/或链路层设备(例如MAC或成帧器设备)进行通信。处理器400还可包括与例如主机或其它网络处理器通信的接口404(例如外设部件互连(PCI)总线接口)。
如所示的,处理器400包括由内核402共享的其它资源,例如密码组件100、内部中间结果暂存器以及对外部存储器提供访问的存储器控制器416、418。网络处理器400还包括通用目的处理器406(例如StrongARMXScale或Intel结构内核),其通常被编程以运行网络操作中所涉及的“控制面”或“慢速通道”任务,而内核402通常被编程以运行“数据面”或“快速通道”任务。
内核402可通过共享的资源(例如通过将数据写入外部存储器或中间结果暂存器408)与其它内核402通信。内核402还可通过直接连接到邻近内核402的邻近寄存器与邻近的内核之间相互通信。内核402还通过CAP(CSR(控制状态寄存器)访问代理)410单元通信,CAP 410单元在内核402之间路由数据。
图22详细描述示例内核402。图22中所示的内核402的结构还可用于实现图1所示的内核102。如所示的,内核402包括存储程序指令的指令存储器512。内核402还包括ALU(算术逻辑单元)、内容可寻址存储器(CAM)、移位器和/或用于执行其它操作的其它硬件。内核402还包括多个存储器资源,例如局部存储器502和通用目的寄存器504。所示的内核402还包括读和写传送寄存器508、510,其存储要传送到内核之外的目标/从内核之外的目标接收的信息。内核402还包括下一相邻的寄存器506、516,其存储直接传送到其它内核402/从其它内核402直接接收的信息。存储在不同的存储器资源中的数据可用作指令中的操作数。如所示的,内核402还包括命令队列524,该命令队列524缓存要传送到内核之外的目标的命令(例如存储器访问命令)。
为了与密码组件100作用,在内核402上运行的线程可通过命令队列524传送命令。这些命令可将内核402内的传送寄存器确认为命令结果的目的地(例如存储器中加密数据的完整消息和/或位置)。此外,内核402可具有一个指令集,用于在等待时减小空闲内核周期,例如对于实现密码组件100的请求。例如,内核402可提供ctx_arb(环境判定)指令,该指令使线程从运行中换出,直到接收到与组件100完成操作相关的信号。
图23示出一种网络设备,该设备能利用密码组件处理信息包。如所示的,该设备具有多个刀片(blade)608~620的集合,该设备通过转换结构610保持集成电路的相互连接。如所示的,该设备具有运行不同操作的多个刀片,例如I/O刀片608a-608n、数据面转换刀片618a-618b、干线刀片612a-612b、控制面刀片614a-614n和服务刀片。例如,转换结构可与CSIX或例如HyperTransport、Infiniband、PCI、Packet-Over-SONET、PapidIO和/或UTOPIA(ATM的通用测试和运算PHY接口)的其它结构技术一致。
各个刀片(例如608a)可包括一个或多个物理层(PHY)设备(未示出)(例如光的、有线的、无线的PHY),其处理网络连接上的通信。PHY在不同网络媒介运载的物理信号和数字系统所用的位(例如“0”和“1”)之间进行翻译。线卡(line card)608-620还可包括成帧器设备(例如以太网、同步光学网络(SONET)、高级数据链路(HDLC)成帧器或其它的“层2”设备)602,该成帧器设备可在帧上运行诸如误差检测和/或校正运算。所示的刀片608a还可包括一个或多个网络处理器604、606,其对通过PHY 602接收到的信息包运行信息包处理操作,并通过转换结构610将该信息包导向到一个将出口接口转发到信息包的刀片。潜在地,网络处理器606运行“层2”任务,而不是成帧器设备602。网络处理器604、606可具有上述技术。
尽管图21-23描述了网络处理器的具体示例、以及加入到网络处理器的设备,该技术可通过不同的结构实现,该结构包括通用处理器、网络处理器和具有不同于所示设计的网络设备。此外,该技术可用于多种网络设备中(例如路由器、转换器、电桥、网络集线器、通信量发生器等等)。此外,上述多种技术可以提供给除执行密码操作的组件之外的组件。
这里所用的术语电路包括硬连线电路、数字电路、模拟电路、可编程电路等等。可编程的电路可以对位于计算机可读介质上的计算机程序进行操作。
其它实施例包括在下述权利要求的范围中。
附录A:可编程处理单元的示例指令集
本附录包括受到版权保护的材料。
说明 | 指令 | ||||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
运行(exec) | 1 | 移位 | 操作结构 | 操作码 | RefC | 零 | |||||||||||
运行中的Fifo(fexec) | 000 | 操作结构 | 操作码 | 移位 | 零 | ||||||||||||
运行中的Fifo和运行-第二字 | H/R | 操作数0 | 操作数1 | 操作数2 | |||||||||||||
(队列)中的Fifo-运行模式 | 001 | F | A | B | 操作数A | 操作数B | |||||||||||
(队列)中的Fifo-I/O模式 | 001 | N/Z | I/S | A/B | 操作数 | RefC | 范围 | ||||||||||
转移(转移) | 010 | 条件码 | 目标地址 | ||||||||||||||
设置(设置) | 011 | 设置类型 | 特定类型 |
说明 | 运行指令定义-第一字 | ||||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
运行(exec) | 1 | 移位 | 操作结构 | 操作码 | RefC | 零 |
位 | 名称 | 说明 | ||||
14:13 | 移位 | 由1结构移位(操作依赖于最后一个设置-移位操作设置的移位模式)·00-没有移位·01-具有进位的向左移位(向左移位结构定义的进位)·10-向右移位·11-向右移位条件(如果LSB==0) | ||||
12:9 | 操作结构 | 操作结构·输出队列A-可将来自LAU的输出或来自操作数0中指定的变量的数据排列(库A)(‘-’表示没有数据排列给输出队列A)·输出队列B-可将来自LAU的输出或来自操作数1中指定的变量的数据排列(库B)(‘-’表示没有数据排列给输出队列B)·当队列根据来自数据随机存储器中的数据进行排列时(Op0/1),在特定周期中的ALU操作之前,所述数据时RAM的状态·第二控制字的操作数2指定在要被写入的当前作用域内的目的变量的索引,并且写库确定哪个是相关的库。(‘-’表示没有到数据ram的写入) | ||||
编码 | 输出队列A | 输出队列B | 写库 | 说明 | ||
0000 | - | - | - | Nop | ||
0001 | - | - | - | 没有写入-用于设置条件码 | ||
0010 | Op0 | Op1 | - | |||
0011 | ALU | - | - | |||
0100 | - | ALU | - | |||
0101 | ALU | ALU | - | |||
0110 | - | - | A | |||
0111 | - | - | B | |||
1000 | Op0 | Op1 | A | |||
1001 | Op0 | Op1 | B |
1010 | ALU | - | A | |||
1011 | ALU | - | B | |||
1100 | - | ALU | A | |||
1101 | - | ALU | B | |||
1110 | ALU | ALU | A | |||
1111 | ALU | ALU | B | |||
8:5 | 操作码 | ALU结构(注意:进位指的是由该ALU生成的先前的进位)·0000-A·0001-A+进位·0010-B·0011-B+进位·0100-A+B·0101-A+B+进位·011-A-B·0111-A-B+进位·100-B-A·1001-B-A+进位·101-A config_xor B·1011-非A+进位 | ||||
·1100-A与B·1101-非B+进位·111-A或B·1111-进位 | ||||||
4:3 | RefC | 参考计数-(注意:这里范围等于当前作用域中范围的值)·00-1·01-范围·10-2×范围·11-4×范围 | ||||
零字段-规定用于处理向量运算的最高有效位的方式 |
零字段 | A操作数 | B操作数 | Ref计数修改器 | 语法 | ||
000 | 归零(zeroed) | 归零 | +1 | (-,-)+1 | ||
001 | 归零 | 未归零 | +1 | (-,b)+1 | ||
010 | 未归零 | 归零 | +1 | (a,-)+1 | ||
011 | 未归零 | 未归零 | +1 | (a,b)+1 | ||
100 | N/a | N/a | +0 | (-,-)+0 | ||
101 | - | - | - | |||
110 | - | - | - | |||
111 | N/a | N/a | +0 | win-移位进位被移位到开窗硬件中 |
说明 | FIFO_IN运行指令定义-第一字 | ||||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
运行中的队列(exec) | 000 | 操作结构 | 操作码 | 移位 | 零 |
位 | 名称 | 说明 |
12 | 未使用 |
11:9 | 操作结构 | 操作结构·ALU OpA-到ALU的OpA的数据来源是输入队列或第二指令字的Op0中指定的变量·ALU OpB-ALU OpA相同·库A来源-数据随机存储器的被写入到库A中的数据源可以或者是输入队列或者是ALU的结果·库B来源-与库A来源相同·Op0库-用作ALU的数据来源的变量,依赖于操作结构的编码,可参考库A或B·Op1库-用作数据的目标的变(ALU输出或输入队列),其被写入到库A中(‘-’表示没有数据写入库A)·Op2库-与Op1库一致,但是与库B相关·注意:当来源==目标时,在给定的周期中写入队列/ALU数据之前取数Op0 | |||||||
编码 | ALU OpA | ALU OpB | 库A来源 | 库B来源 | Op 0库 | Op 1库 | Op2库 | ||
000 | 输入队列 | Op0 | ALU | 输入队列 | B | A | B | ||
001 | FIFO | Op0 | 输入队列 | ALU | B | A | B | ||
010 | Op0 | 输入队列 | ALU | 输入队列 | A | A | B | ||
011 | Op0 | 输入队列 | 输入队列 | ALU | A | A | B | ||
100 | 输入队列 | Cp0 | ALU | - | B | A | |||
101 | 输入队列 | Op0 | - | ALU | B | B | |||
110 | Op0 | 队列 | ALU | - | A | A | |||
111 | Op0 | 队列 | - | ALU | A | B | |||
8:5 | 操作码 | ALU结构(注意:进位指的是由ALU生成的先前的进位)·0000-A·0001-A+进位·0010-B |
·0011-B+进位·0100-A+B·0101-A+B+进位·0110-A-B·0111-A-B+进位·1000-B-A·1001-B-A+进位·1010-A config_xor B·1011-非A+进位·1100-A与B·1101-非B+进位·1110-A或B·1111-进位 | ||||||
4:3 | 移位 | 由1移位结构·00-没有移位·01-具有进位的向左移位(向左移位结构定义的进位)·10-向右移位·11-向右移位条件(如果LSB==0),LSB是指加法器的中间结果向量的LSB | ||||
2:0 | 零 | 零字段-指定用于处理向量运算的最高有效位的方式 | ||||
零字段 | A操作数 | B操作数 | Ref计数修改器 | 语法 | ||
000 | 归零 | 归零 | +1 | (-,-)+1 | ||
001 | 归零 | 未归零 | +1 | (-,b)+1 | ||
010 | 未归零 | 归零 | +1 | (a,-)+1 | ||
011 | 未归零 | 未归零 | +1 | (a,b)+1 | ||
100 | n/a | n/a | +0 | (-,-)+0 | ||
101 | - | - | - | |||
110 | - | - | - |
111 | n/a | n/a | +0 | win-移位进位被移位到开窗硬件中 |
说明 | 运行/FIFO_IN运行指令定义-第二字 | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
运行中的队列和运行-第二字 | H/R | Ind0 | 偏移0 | Ind1 | 偏移1 | Ind2 | 偏移2 |
位 | 名称 | 说明 |
15 | H/R | 保持/释放标记·0-保持乘法器·1-释放乘法器 |
14:139:84:3 | Ind | 索引-当前作用域中变量的索引 |
12:107:52:0 | 偏移 | 偏移-由当前作用域的范围的值向左移位并增加到由Ind字段隐含的变量的基址的立即数 |
说明 | FIFO输入-运行模式-指令定义 | ||||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
(队列中的)FIFO-运行模式 | 001 | F | A | B | 操作数A | 操作数B |
位 | 名称 | 说明 |
12 | F | 完整结果标记·0-出列16长字·1-出列17长字 |
11 | A | 库A使能-如果将设定队列有效载荷写入操作数A |
10 | B | 库B使能-如果将设定队列有效载荷写入操作数B |
9:5 | 操作数A | 操作数定义为Exec/fexec中的第二字-与库A相关 |
4:0 | 操作数B | 操作数定义为Exec/fexec中的第二字-与库B相关 |
说明 | FIFO输入-运行模式-指令定义 | ||||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
(队列中的)FIFO-I/O模式 | 001 | N/Z | I/S | A/B | 操作数 | RefC | 范围 |
位 | 名称 | 说明 |
12 | N/Z | 截去的零字段·0-+0到向量长度·1-+1到向量长度(注意:附加的四倍字长将出列并写入到数据RAM中) |
11 | I/S | 立即/范围标记·0-立即-利用ref计数计算中的范围字段而不是当前作用域中的范围(即对于该向量中的ref计数计算,局部范围将掩盖全局范围变量)·1-范围-利用当前作用域中的范围 |
10 | A/B | 库A/库B标记·0-库A-操作数是到库A中的变量的引用·1-库B-操作数是到库B中的变量的引用 |
9:5 | 操作数 | 操作数定义为Exec/fexec中的第二字 |
4:3 | RefC | 参考计数与运行指令中所用的一样 |
2:0 | 范围 | 范围-用于覆写当前作用域中的范围值的立即值 |
说明 | 设置指令原型 | ||||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
所有的 | 011 | 指定的指令 |
说明 | 设置指令原型(指令设置关键字) | |||||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
MMP模式(mode) | 0000 | 模式 | Xor-模式设置 | |||||||||||||
装载索引(index) | 0001 | L/H | 立即 | |||||||||||||
装载索引比较(index_cmp) | 0010 | L/H | 立即 | |||||||||||||
修改索引/索引比较(index_mod/index_cmp_mod/index_cmp_global/index_global) | 0011 | I/D | M/G | 全局 | I/G | |||||||||||
设置相关的变量-变量/全局(var_rel/var_rel_global | 0100 | A/B | 目标 | 源 | 偏移 | V/G | ||||||||||
设置相关的变量-窗口/指数(var_rel_win/var_rel_ind | 0101 | A/B | 目标 | 源 | 范围 | I/W | ||||||||||
设置可变的立即数A(var_A_imm) | 0110 | 目标 | 基址 | |||||||||||||
设置可变的立即数B(var_B_imm) | 0111 | 目标 | 基址 | |||||||||||||
装载进位(carry) | 1000 | C | 用户 | S | A | I/U | ||||||||||
设置用户位(user_bit) | 1001 | UBD | V | UBS | 源 | |||||||||||
设置范围(scale) | 1010 | 移位 | 全局 | 源 | ||||||||||||
设置作用域(scope) | 1011 | 源 | 立即 | 全局 | I/U | |||||||||||
设置窗口尺寸(window_size) | 1100 | 尺寸 | G | S/G | ||||||||||||
设置移位模式(shift) | 1101 | LSC | RSC | |||||||||||||
复制作用域(copy_scope) | 1110 | 立即 | I/T | |||||||||||||
未使用 | 1111 |
说明 | 模式 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
模式(mode) | 0000 | 模式 |
位 | 名称 | 说明 |
8:7 | 模式 | MMP模式·00-I/O模式·01-运行模式·10-睡眠-将处理单元置入空闲状态·11-空操作指令-单个空操作指令 |
说明 | 装载索引 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
装载索引(index) | 0001 | L/H | 立即 |
位 | 名称 | 说明 |
8 | L/H | 低/高标记·0-将立即值装载到低(LSB)半区,将零值装载到高(MSB)半区·1-将立即值装载到高(MSB)半区 |
7:0 | 立即 | 要装载到索引寄存器的值 |
说明 | 装载索引比较 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
装载索引比较(index_cmp) | 0010 | L/H | 立即 |
位 | 名称 | 说明 |
8 | L/H | 低/高标记·0-将立即值装载到低(LSB)半区,将零值装载到高(MSB)半区·1-将立即值装载到高(MSB)半区 |
7:0 | 立即 | 要装载到索引寄存器的值 |
说明 | 修改索引/索引比较 |
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
修改索引/索引比较(index_mod/index_cmp_mod/index_cmp_global/index_global | 0011 | I/D | M/G | 全局 | I/C |
位 | 名称 | 说明 |
8 | I/D | 增加/减少·0-如果M/G==0递增目标寄存器·1-如果M/G==0递减目标寄存器 |
7 | M/G | 修改/全局·0-修改目标寄存器·1-设置目标寄存器等于全局字段指定的全局变量 |
6:5 | 全局 | 全局变量-全局变量的索引 |
4 | I/C | 索引/索引比较·0-索引是目标寄存器·1-索引比较是目标寄存器 |
说明 | 设置相关变量-变量/全局 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
设置相关的变量-变量/全局(var_rel/var_rel_global) | 0100 | A/B | 目标 | 源 | 偏移 | V/G |
位 | 名称 | 说明 |
8 | A/B | 库的选择·0-库A·1-库B |
7:6 | 目标 | 目标变量数-目标作用域变量的索引 |
5:4 | 源 | 源变量数-或者是当前作用域中的变量的索引,或者是全局变量 |
3:1 | 偏移 | 在运行命令中由操作数限定的偏移(注意:使用当前作用域中的范围) |
0 | V/G | 变量/全局标记:定义源变量为来自于作用域的变量或全局变量·0-变量:源字段表示作用域变量的索引·1-全局:源字段表示全局变量的索引 |
说明 | 设置相关变量-窗口/全局 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
设置相关的变量-窗口/索引(var_rel_win/var_rel_ind) | 0101 | A/B | 目标 | 源 | 范围 | I/W |
位 | 名称 | 说明 |
8 | A/B | 库的选择·0-库A·1-库B |
7:6 | 目标 | 目标变量数-目标作用域变量的索引 |
5:4 | 源 | 源变量数-当前作用域变量的索引 |
3:1 | 范围 | 在运行命令中由操作数限定的范围。操作数限定的偏移部分或者由当前作用域索引(I/W==0)或者由开窗硬件(I/W==1)提供。 |
0 | I/W | 索引/窗口标记:定义偏移为当前作用域中的索引或者来自开窗硬件的适当的位。·0-索引:偏移由当前作用域的索引指定·1-窗口:偏移由开窗硬件(滑动模式)的高位{C1,…,CW-1}或由低位{C4,…,CW-5}(固定窗口模式)指定。在每种情况下开窗硬件的高五位{C0,C1,C2,C3,C4}被设置为0。 |
说明 | 设置可变的立即数A | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
设置可变的立即数A(var_A_imm) | 0110 | 目标 | 基址 |
位 | 名称 | 说明 |
8:7 | 目标 | 目标变量数-在目标作用域内变量的索引 |
6:0 | 基址 | 目标变量采用的绝对地址 |
说明 | 设置可变的立即数B | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
设置可变的立即数B(var_B_imm) | 0111 | 目标 | 基址 |
位 | 名称 | 说明 |
8:7 | 目标 | 目标变量数-在目标作用域内变量的索引 |
6:0 | 基址 | 目标变量采用的绝对地址 |
说明 | 装载进位 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
装载进位(carry) | 1000 | C | 用户 | S | A | I/U |
位 | 名称 | 说明 |
8 | C | 进位立即数 |
7:6 | 用户 | 用户位数-当前作用域中用户位的索引 |
5 | S | 移位标记·0-移位进位不修改·1-移位进位被设置为源进位 |
4 | A | ALU标记·0-ALU进位不修改·1-ALU进位不设置为源进位 |
3 | I/U | 立即数/用户标记·0-源进位被设置为C字段·1-源进位被设置为用户字段定义的用户位 |
说明 | 设置用户位 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
设置用户位(user_bit) | 1001 | UBD | V | UBS | 源 |
位 | 名称 | 说明 |
8:7 | UBD | 用户位目标-目标作用域中用户位的索引 |
6 | V | 值-用于填充由UBD字段指定的用户位的立即数(如果源==2) |
5:4 | UBS | 用户位来源-用于填充由UBD字段指定的用户位所使用的在当前作用域中用户位的索引(如果源==3) |
3:2 | 源 | 来源-选择填充目标用户位的布尔来源·00-移位进位·01-ALU进位·10-V字段提供的立即数·11-UBS字段定义的用户位 |
说明 | 设置范围 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
设置范围(scale) | 1010 | Shift_imm | 全局 | 源 |
位 | 名称 | 说明 |
8:6 | Shift_imm | 移位字段-立即值 |
5:4 | 全局 | 全局变量-全局变量的索引 |
3:2 | 源 | 来源-选择填充目标作用域的范围的四个来源(硬件允许范围值以01、10模式环绕)·00-包括在移位字段中的立即值·01-当前作用域范围加一·10-当前作用域范围减一·11-全局字段定义的全局变量(的3lsb)的值 |
说明 | 设置作用域 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
设置作用域(scope) | 1011 | 源 | Immed | 全局 | I/D |
位 | 名称 | 说明 |
8:7 | 源 | 来源-选择目标作用域的来源·00-立即字段·01-全局字段定义的全局变量(的3lsb)的值·10-当前目标作用域(硬件将允许作用域值的环绕)(由ID字段定义的)增加或减少·11-当前作用域加一 |
6:4 | Immed | 立即值-变量随机存储器中的作用域的索引 |
3:2 | 全局 | 全局变量-全局变量的索引 |
1 | I/D | 增加/减少标记·0-增加目标作用域·1-减少目标作用域 |
说明 | 设置窗口尺寸 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
设置窗口尺寸(window_size) | 1100 | 尺寸 | 全局 | S/G | F/S |
位 | 名称 | 说明 |
8:6 | 尺寸 | 设置窗口尺寸为尺寸字段的值加一(编码101并且不使用更大的值;硬件将在所述预留编码上产生未定义的结果)·000-如果S/G==0,则窗口尺寸=1·001-如果S/G==0,则窗口尺寸=2·010-当如果S/G==0,则窗口尺寸=3·011-如果S/G==0,则窗口尺寸=4·100-如果S/G==0,则窗口尺寸=5 |
5:4 | 全局 | 全局变量-全局变量的索引 |
3 | S/G | 尺寸/全局标记-选择窗口尺寸是由尺寸字段还是由全局变量定义·0-尺寸字段·1-全局变量(注意:全局使用与尺寸字段相同的映射-即:窗口尺寸=全局变量+1)将使用这种全局变量的3lsb;这些值不应该超过101以防止未定义的硬件行为 |
2 | F/S | 固定/滑动指数窗口·0-滑动窗口·1-固定的Lsb窗口 |
说明 | 设置移位模式 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
设置移位模式(shift) | 1101 | LSC | RSC |
位 | 名称 | 说明 |
8:7 | LSC | 向左移位结构·00-空操作指令(即,当前结构不改变)·01-算术移位(注意:其等于移入‘0’的逻辑移位)·10-移入‘0’的逻辑移位·11-进位移位的逻辑移位 |
6:5 | RSC | 向右移位结构·00-空操作指令(即,当前结构不改变)·01-算术移位·10-移入‘0’的逻辑移位·11-进位移位的逻辑移位(最重要位的新的msb在该向量操作之前是移位进位值) |
说明 | 复制作用域 | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
复制作用域(copy_scope) | 1110 | Immed | I/T |
位 | 名称 | 说明 |
8:6 | Immed | 立即值-作用域的索引 |
5 | I/T | 立即值/目标作用域标记-选择等于当前作用域的内容的目标作用域·0-立即数·1-目标作用域 |
说明 | 设置指令定义(指令设置关键字) | |||||||||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
用户位0(user0) | 0000 | 目标地址 | ||||||||||||
用户位1(user1) | 0001 | 目标地址 | ||||||||||||
用户位2(user2) | 0010 | 目标地址 | ||||||||||||
用户位3(user3) | 0011 | 目标地址 | ||||||||||||
发现指数窗口(window_found) | 0100 | 目标地址 | ||||||||||||
移位进位设置(shift_carry) | 0101 | 目标地址 | ||||||||||||
子程序(subroutine) | 0110 | 目标地址 | ||||||||||||
返回(retum) | 01110 | |||||||||||||
先前进位/借位上的条件子程序 | 01111 | 目标地址MSB | ||||||||||||
零:最后字(zero) | 1000 | 目标地址 | ||||||||||||
零:整个向量(zero_vector) | 1001 | 目标地址 | ||||||||||||
ALU进位设置(carry) | 1010 | 目标地址 | ||||||||||||
负数(negative) | 1011 | 目标地址 | ||||||||||||
索引:索引!=当前作用域中的索引比较(index) | 1100 | 目标地址 | ||||||||||||
第一向量的LSB==1(lsb) | 1101 | 目标地址 | ||||||||||||
最后向量的MSB==1(msb) | 1110 | 目标地址 | ||||||||||||
无条件(总是) | 1111 | 目标地址 |
Claims (19)
1.一种用于将第一操作数和第二操作数相乘的乘法器,包括:
被并联配置的一组多个乘法器,该组多个乘法器访问一个第一操作数和一个第二操作数以相乘,该第一操作数具有多个分段并且该第二操作数具有多个分段;
用于重复提供第二操作数的一个单个分段到该组多个乘法器的每个乘法器并且同时提供第一操作数的多个相应分段到该组多个乘法器的相应乘法器的电路,直到第二操作数的每个分段被提供以第一操作数的每个分段,该电路至少部分地基于所述相应分段在第一操作数内的位置对该组多个乘法器的不同乘法器输出进行移位;以及
一个与所述电路相耦合的累加器。
2.根据权利要求1所述的乘法器,其中组成第一操作数和第二操作数的操作数的大小不是2的整数幂。
3.根据权利要求1所述的乘法器,进一步包括与累加器相耦合的缓冲器。
4.根据权利要求3所述的乘法器,进一步包括当该组乘法器对于所述第一和第二操作数的相应分段上所进行的后续操作不会影响所述累加器的一组最低有效位时,用于把所述最低有效位传送到缓冲器的电路。
5.根据权利要求4所述的乘法器,其特征在于:进一步包括用于对累加器进行移位的电路,移位量与被传输到缓冲器的最低有效位的量相当。
6.根据权利要求3所述的乘法器,其特征在于:进一步包括在缓冲器的位累加允许每个连续周期的出列操作之后,用于对来自该缓冲器的位进行出列的电路,直到该缓冲器已完全出列这些操作数的数据。
7.根据权利要求1所述的乘法器,其特征在于:其中电路包括以一定顺序提供操作数的分段的电路,使得电路输出产生的输出不会影响到比之前电路输出的有效性更低的位。
8.根据权利要求3所述的乘法器,其特征在于:
其中乘法器包括由该组多个乘法器、所述累加器和所述缓冲器组成的流水线;
其中访问第一操作数和第二操作数包括访问第一操作数和第二操作数的第一组的至少一个队列以及第一操作数和第二操作数的第二组;
其中乘法器包括使与第一操作数和第二操作数的第一组以及第一操作数的第二组相对应的数据同时经过流水线的电路;以及
其中第一操作数和第二操作数的第二组的分段被提供到该组多个乘法器,同时与第一操作数和第二操作数的乘法相一致的数据保持在该乘法器流水线中。
9.根据权利要求1所述的乘法器,
其中乘法器被耦合到多个处理单元。
10.根据权利要求9所述的乘法器,
其中乘法器包括一个判定器,基于处理单元提供的信号,连续地从多个处理单元中的同一处理单元获得各组第一操作数和第二操作数。
11.根据权利要求1所述的乘法器,
其中乘法器进一步包括一个存储器,其在接收第一操作数和第二操作数的数据时存储所述第一操作数和第二操作数;以及
其中电路包括在全部第一操作数和全部第二操作数的数据被存储器接收之前提供第一操作数和第二操作数的分段到该组多个乘法器的电路。
12.根据权利要求1所述的乘法器,
其中该组多个乘法器包括一组相同功能的N×N乘法器,N为正整数。
13.根据权利要求1所述的乘法器,其特征在于:
其中乘法器从耦合到乘法器的多个处理单元之一的至少一个输出缓冲器获得第一和第二操作数;以及
其中乘法器将第一操作数和第二操作数的乘法输出写到多个处理单元之一的输入缓冲器。
14.一种将第一操作数和第二操作数相乘的方法,包括:
重复地:
提供第二操作数的一个单个分段到并联配置的一组多个乘法器的每个乘法器并且同时提供第一操作数的多个相应分段到该组多个乘法器的相应乘法器,以及
至少部分地基于所述相应分段在第一操作数中的位置对该组多个乘法器的不同乘法器的输出进行移位,直到第二操作数的每个分段已被提供以第一操作数的每个分段。
15.根据权利要求14所述的方法,进一步包括传输移位输出到一个累加器。
16.根据权利要求14所述的方法,进一步包括当累加器的一组最低有效位不会被所述第一和第二操作数的相应分段上的操作所影响时,传输所述最低有效位到缓冲器。
17.根据权利要求16所述的方法,进一步包括对累加器进行移位,移位量与传输到缓冲器的最低有效位的量相当。
18.根据权利要求16所述的方法,进一步包括在缓冲器的位累加允许在每个连续周期的出列操作之后,出列来自缓冲器的位直到操作数的数据完全出列。
19.根据权利要求14所述的方法,进一步包括基于处理单元之一提供的信号,连续地从多个处理单元的同一处理单元获得各组第一操作数和第二操作数。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/323,994 US8073892B2 (en) | 2005-12-30 | 2005-12-30 | Cryptographic system, method and multiplier |
US11/323994 | 2005-12-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101042639A true CN101042639A (zh) | 2007-09-26 |
Family
ID=38093399
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2006100642259A Pending CN101149675A (zh) | 2005-12-30 | 2006-12-29 | 乘法器 |
CNA2006101309997A Pending CN101042639A (zh) | 2005-12-30 | 2006-12-30 | 乘法器 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2006100642259A Pending CN101149675A (zh) | 2005-12-30 | 2006-12-29 | 乘法器 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8073892B2 (zh) |
EP (1) | EP1966680B1 (zh) |
CN (2) | CN101149675A (zh) |
AT (1) | ATE484789T1 (zh) |
DE (1) | DE602006017589D1 (zh) |
WO (1) | WO2007078939A2 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107743613A (zh) * | 2015-06-24 | 2018-02-27 | Arm 有限公司 | 用于处理浮点值的装置和方法 |
CN107861709A (zh) * | 2017-12-01 | 2018-03-30 | 中国兵器装备集团自动化研究所 | 适应前端高速处理的累加器和功率谱累加器及其累加方法 |
CN109144569A (zh) * | 2013-03-15 | 2019-01-04 | 英特尔公司 | 用于减少短整数乘法数量的系统、装置和方法 |
CN117149129A (zh) * | 2023-10-31 | 2023-12-01 | 共模半导体技术(苏州)有限公司 | 专用大整数乘法微控制器 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8073892B2 (en) | 2005-12-30 | 2011-12-06 | Intel Corporation | Cryptographic system, method and multiplier |
US9191211B2 (en) * | 2009-02-27 | 2015-11-17 | Atmel Corporation | Data security system |
US20100246815A1 (en) * | 2009-03-31 | 2010-09-30 | Olson Christopher H | Apparatus and method for implementing instruction support for the kasumi cipher algorithm |
US9317286B2 (en) * | 2009-03-31 | 2016-04-19 | Oracle America, Inc. | Apparatus and method for implementing instruction support for the camellia cipher algorithm |
US20100250965A1 (en) * | 2009-03-31 | 2010-09-30 | Olson Christopher H | Apparatus and method for implementing instruction support for the advanced encryption standard (aes) algorithm |
US8654970B2 (en) * | 2009-03-31 | 2014-02-18 | Oracle America, Inc. | Apparatus and method for implementing instruction support for the data encryption standard (DES) algorithm |
US8832464B2 (en) * | 2009-03-31 | 2014-09-09 | Oracle America, Inc. | Processor and method for implementing instruction support for hash algorithms |
US9990201B2 (en) | 2009-12-22 | 2018-06-05 | Intel Corporation | Multiplication instruction for which execution completes without writing a carry flag |
US8892459B2 (en) * | 2011-07-25 | 2014-11-18 | BrandVerity Inc. | Affiliate investigation system and method |
US9251377B2 (en) | 2012-12-28 | 2016-02-02 | Intel Corporation | Instructions processors, methods, and systems to process secure hash algorithms |
US8924741B2 (en) | 2012-12-29 | 2014-12-30 | Intel Corporation | Instruction and logic to provide SIMD secure hashing round slice functionality |
US10038550B2 (en) | 2013-08-08 | 2018-07-31 | Intel Corporation | Instruction and logic to provide a secure cipher hash round functionality |
US10503510B2 (en) | 2013-12-27 | 2019-12-10 | Intel Corporation | SM3 hash function message expansion processors, methods, systems, and instructions |
US9912481B2 (en) | 2014-03-27 | 2018-03-06 | Intel Corporation | Method and apparatus for efficiently executing hash operations |
US9317719B2 (en) | 2014-09-04 | 2016-04-19 | Intel Corporation | SM3 hash algorithm acceleration processors, methods, systems, and instructions |
CN104239279A (zh) * | 2014-09-10 | 2014-12-24 | 哈尔滨工业大学深圳研究生院 | 一种乘法器 |
US9658854B2 (en) | 2014-09-26 | 2017-05-23 | Intel Corporation | Instructions and logic to provide SIMD SM3 cryptographic hashing functionality |
US10884957B2 (en) * | 2018-10-15 | 2021-01-05 | Intel Corporation | Pipeline circuit architecture to provide in-memory computation functionality |
US20220171604A1 (en) * | 2020-12-02 | 2022-06-02 | Flex Logix Technologies, Inc. | Multiplier Circuit Array, MAC and MAC Pipeline including Same, and Methods of Configuring Same |
WO2022191859A1 (en) * | 2021-03-12 | 2022-09-15 | Zeku, Inc. | Vector processing using vector-specific data type |
CN113946846B (zh) * | 2021-10-14 | 2022-07-12 | 深圳致星科技有限公司 | 用于联邦学习和隐私计算的密文计算装置及方法 |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3515344A (en) * | 1966-08-31 | 1970-06-02 | Ibm | Apparatus for accumulating the sum of a plurality of operands |
JPS57141753A (en) * | 1981-02-25 | 1982-09-02 | Nec Corp | Multiplication circuit |
JPS59113500A (ja) * | 1982-12-20 | 1984-06-30 | 電子計算機基本技術研究組合 | 相関関数計算装置 |
US4594679A (en) * | 1983-07-21 | 1986-06-10 | International Business Machines Corporation | High speed hardware multiplier for fixed floating point operands |
JPS6284335A (ja) | 1985-10-09 | 1987-04-17 | Hitachi Ltd | 乗算回路 |
CA2008774C (en) * | 1989-01-30 | 1999-10-05 | Hikaru Morita | Modular multiplication method and the system for processing data |
US5150322A (en) * | 1990-06-05 | 1992-09-22 | Vlsi Technology, Inc. | Mixed-radix serial/parallel multipliers |
JPH04216126A (ja) | 1990-12-14 | 1992-08-06 | Fujitsu Ltd | 直並列型乗算器 |
EP0576262B1 (en) * | 1992-06-25 | 2000-08-23 | Canon Kabushiki Kaisha | Apparatus for multiplying integers of many figures |
US6385634B1 (en) * | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
US5892699A (en) * | 1997-09-16 | 1999-04-06 | Integrated Device Technology, Inc. | Method and apparatus for optimizing dependent operand flow within a multiplier using recoding logic |
US6182233B1 (en) * | 1998-11-20 | 2001-01-30 | International Business Machines Corporation | Interlocked pipelined CMOS |
US6711602B1 (en) * | 2000-02-18 | 2004-03-23 | Texas Instruments Incorporated | Data processor with flexible multiply unit |
CN1220935C (zh) | 2001-09-27 | 2005-09-28 | 中国科学院计算技术研究所 | 提高半规模双精度浮点乘法流水线效率的部件 |
US20030065699A1 (en) * | 2001-10-01 | 2003-04-03 | Koninklijke Philips Electronics N.V. | Split multiplier for efficient mixed-precision DSP |
US7139787B2 (en) * | 2003-01-30 | 2006-11-21 | Sun Microsystems, Inc. | Multiply execution unit for performing integer and XOR multiplication |
US7266580B2 (en) * | 2003-05-12 | 2007-09-04 | International Business Machines Corporation | Modular binary multiplier for signed and unsigned operands of variable widths |
US7543142B2 (en) | 2003-12-19 | 2009-06-02 | Intel Corporation | Method and apparatus for performing an authentication after cipher operation in a network processor |
US20050138366A1 (en) | 2003-12-19 | 2005-06-23 | Pan-Loong Loh | IPSec acceleration using multiple micro engines |
US7512945B2 (en) | 2003-12-29 | 2009-03-31 | Intel Corporation | Method and apparatus for scheduling the processing of commands for execution by cryptographic algorithm cores in a programmable network processor |
US20050149744A1 (en) | 2003-12-29 | 2005-07-07 | Intel Corporation | Network processor having cryptographic processing including an authentication buffer |
US7467175B2 (en) * | 2003-12-29 | 2008-12-16 | Xilinx, Inc. | Programmable logic device with pipelined DSP slices |
US7171604B2 (en) | 2003-12-30 | 2007-01-30 | Intel Corporation | Method and apparatus for calculating cyclic redundancy check (CRC) on data using a programmable CRC engine |
US7529924B2 (en) | 2003-12-30 | 2009-05-05 | Intel Corporation | Method and apparatus for aligning ciphered data |
KR20050088506A (ko) * | 2004-03-02 | 2005-09-07 | 삼성전자주식회사 | 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 |
US7433469B2 (en) | 2004-04-27 | 2008-10-07 | Intel Corporation | Apparatus and method for implementing the KASUMI ciphering process |
US7653196B2 (en) | 2004-04-27 | 2010-01-26 | Intel Corporation | Apparatus and method for performing RC4 ciphering |
US7627764B2 (en) | 2004-06-25 | 2009-12-01 | Intel Corporation | Apparatus and method for performing MD5 digesting |
US7539718B2 (en) | 2004-09-16 | 2009-05-26 | Intel Corporation | Method and apparatus for performing Montgomery multiplications |
US20060059219A1 (en) | 2004-09-16 | 2006-03-16 | Koshy Kamal J | Method and apparatus for performing modular exponentiations |
FR2884005B1 (fr) * | 2005-04-01 | 2007-06-01 | Thales Sa | Methode d'implementation de la multiplication modulaire de montgomery et son dispositif |
US7720900B2 (en) * | 2005-09-09 | 2010-05-18 | International Business Machines Corporation | Fused multiply add split for multiple precision arithmetic |
US8073892B2 (en) | 2005-12-30 | 2011-12-06 | Intel Corporation | Cryptographic system, method and multiplier |
-
2005
- 2005-12-30 US US11/323,994 patent/US8073892B2/en not_active Expired - Fee Related
-
2006
- 2006-12-18 WO PCT/US2006/048417 patent/WO2007078939A2/en active Application Filing
- 2006-12-18 EP EP06845803A patent/EP1966680B1/en not_active Not-in-force
- 2006-12-18 AT AT06845803T patent/ATE484789T1/de not_active IP Right Cessation
- 2006-12-18 DE DE602006017589T patent/DE602006017589D1/de active Active
- 2006-12-29 CN CNA2006100642259A patent/CN101149675A/zh active Pending
- 2006-12-30 CN CNA2006101309997A patent/CN101042639A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109144569A (zh) * | 2013-03-15 | 2019-01-04 | 英特尔公司 | 用于减少短整数乘法数量的系统、装置和方法 |
CN107743613A (zh) * | 2015-06-24 | 2018-02-27 | Arm 有限公司 | 用于处理浮点值的装置和方法 |
CN107861709A (zh) * | 2017-12-01 | 2018-03-30 | 中国兵器装备集团自动化研究所 | 适应前端高速处理的累加器和功率谱累加器及其累加方法 |
CN117149129A (zh) * | 2023-10-31 | 2023-12-01 | 共模半导体技术(苏州)有限公司 | 专用大整数乘法微控制器 |
CN117149129B (zh) * | 2023-10-31 | 2024-01-26 | 共模半导体技术(苏州)有限公司 | 专用大整数乘法微控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN101149675A (zh) | 2008-03-26 |
ATE484789T1 (de) | 2010-10-15 |
WO2007078939A2 (en) | 2007-07-12 |
WO2007078939A3 (en) | 2007-11-15 |
US20110264720A1 (en) | 2011-10-27 |
DE602006017589D1 (de) | 2010-11-25 |
EP1966680B1 (en) | 2010-10-13 |
EP1966680A2 (en) | 2008-09-10 |
US8073892B2 (en) | 2011-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101042639A (zh) | 乘法器 | |
CN101083525B (zh) | 密码处理单元以及乘法器 | |
US7475229B2 (en) | Executing instruction for processing by ALU accessing different scope of variables using scope index automatically changed upon procedure call and exit | |
US7900022B2 (en) | Programmable processing unit with an input buffer and output buffer configured to exclusively exchange data with either a shared memory logic or a multiplier based upon a mode instruction | |
US10985903B2 (en) | Power side-channel attack resistant advanced encryption standard accelerator processor | |
CN101040256A (zh) | 用于多核处理器的存储指令排序 | |
CN105306195A (zh) | Sm4加速处理器、方法、系统和指令 | |
EP2126688A1 (en) | Method for processing multiple operations | |
US10140458B2 (en) | Parallelized authentication encoding | |
US11507699B2 (en) | Processor with private pipeline | |
US20070192571A1 (en) | Programmable processing unit providing concurrent datapath operation of multiple instructions | |
US9996708B2 (en) | SMS4 acceleration processors having encryption and decryption mapped on a same hardware | |
US20080148011A1 (en) | Carry/Borrow Handling | |
Lee et al. | A hardware scheduler for multicore block cipher processor | |
CN108027866B (zh) | 具有轮常数生成的sms4加速处理器 | |
Schwabe | High-speed cryptography and cryptanalysis | |
Ahmed et al. | RE-CONFIGURABLE PROGRAMMABLE SECURITY PROCESSOR FOR NETWORK APPLICATIONS | |
Henricksen et al. | Ensuring fast implementations of symmetric ciphers on the intel pentium 4 and beyond |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20070926 |