CN101083525B - 密码处理单元以及乘法器 - Google Patents
密码处理单元以及乘法器 Download PDFInfo
- Publication number
- CN101083525B CN101083525B CN2006101309361A CN200610130936A CN101083525B CN 101083525 B CN101083525 B CN 101083525B CN 2006101309361 A CN2006101309361 A CN 2006101309361A CN 200610130936 A CN200610130936 A CN 200610130936A CN 101083525 B CN101083525 B CN 101083525B
- Authority
- CN
- China
- Prior art keywords
- programme
- processing units
- data
- multiplier
- output
- 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
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/72—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
- G06F9/3881—Arrangements for communication of instructions and data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
Abstract
通常,在一方面,本发明描述了一种系统,其包括多个可编程处理单元、专用硬件乘法器以及连接多个处理单元和乘法器的至少一条总线。
Description
相关申请参考
本发明涉及与本申请同一天申请、代理人档案号为42390.P23349、名称为“CRYPTOGRAPHIC SYSTEM COMPONENT(密码系统组件)”、申请号为No._____的共同待决的US专利申请。
本发明涉及与本申请同一天申请、代理人档案号为42390.P22797、名称为“MULTIPLIER(乘法器)”、申请号为No._____的共同待决的US专利申请。
背景技术
密码术(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。因此,RAM 114可以表示组件100和其它系统组件(例如请求对RAM 114中的数据进行加密运算的处理器内核)之间的连接点(nexus)。RAM 114可以位于容纳该组件100的管芯外部。
所示的示例实施方式包括控制组件100运行的可编程处理器内核102。如所示的,内核102接收命令以对数据运行密码运算。该命令可以识别请求代理(例如内核)、用以运行(例如密码协议)的特定操作集合、要对其操作的数据(例如信息包有效载荷的位置),以及诸如密钥、初始向量和/或来自于前一密码运算的余数的额外密码环境(context)数据。响应某一命令,内核102可以运行在RAM114、共享存储器和处理单元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和指向存储在数据库212、214中的数据的一组变量引用202(例如指针)。
可由控制逻辑206完成的示例指令集描述在所附附录A中。其它实施方式可在指令操作和语法方面作出改变。
通常,控制逻辑206包括分配变量值的指令(“设置”指令)、运行数学和逻辑运算的指令(“exec”指令和“fexec”指令)以及诸如过程调用和条件转移指令的控制流指令。该条件转移指令可作用于由算术逻辑单元216/移位器218生成的多个条件代码,例如进位、msb(如果最高有效位=1)、lsb(如果最低有效位=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描述取某一数g的6,015,455,113次方的指数254。为了取一个数的该较大的指数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×An312的结果移位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是的互连网交换网络处理器(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(例如或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 | H/R | 保持/释放标记·0-保持乘法器·1-释放乘法器 |
14:139:84:3 | Ind | 索引-当前作用域中变量的索引 |
12:107:52:0 | 偏移 | 偏移-由当前作用域的范围的值向左移位并增加到由Ind字段隐含的变量的基址的立即数 |
位 | 名称 | 说明 |
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相关 |
位 | 名称 | 说明 |
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 | 范围 | 范围-用于覆写当前作用域中的范围值的立即值 |
位 | 名称 | 说明 |
8:7 | 模式 | MMP模式·00-I/O模式·01-运行模式·10-睡眠-将处理单元置入空闲状态·11-空操作指令-单个空操作指令 |
位 | 名称 | 说明 |
8 | L/H | 低/高标记·0-将立即值装载到低(LSB)半区,将零值装载到高(MSB)半区·1-将立即值装载到高(MSB)半区 |
7:0 | 立即 | 要装载到索引寄存器的值 |
位 | 名称 | 说明 |
8 | L/H | 低/高标记·0-将立即值装载到低(LSB)半区,将零值装载到高(MSB)半区·1-将立即值装载到高(MSB)半区 |
7:0 | 立即 | 要装载到索引寄存器的值 |
位 | 名称 | 说明 |
8 | I/D | 增加/减少·0-如果M/G==0递增目标寄存器·1-如果M/G==0递减目标寄存器 |
7 | M/G | 修改/全局·0-修改目标寄存器·1-设置目标寄存器等于全局字段指定的全局变量 |
6:5 | 全局 | 全局变量-全局变量的索引 |
4 | I/C | 索引/索引比较·0-索引是目标寄存器·1-索引比较是目标寄存器 |
位 | 名称 | 说明 |
8 | A/B | 库的选择·0-库A·1-库B |
7:6 | 目标 | 目标变量数-目标作用域变量的索引 |
5:4 | 源 | 源变量数-或者是当前作用域中的变量的索引,或者是全局变量 |
3:1 | 偏移 | 在运行命令中由操作数定义限定的偏移(注意:使用当前作用域中的范围) |
0 | V/G | 变量/全局标记:定义源变量为来自于作用域的变量或全局变量·0-变量:源字段表示作用域变量的索引·1-全局:源字段表示全局变量的索引 |
位 | 名称 | 说明 |
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}或由低位{C-4,…,CW-5}(固定窗口模式)指定。在每种情况下开窗硬件的高五位{C0,C1,C2,C3,C4}被设置为0。 |
位 | 名称 | 说明 |
8:7 | 目标 | 目标变量数-在目标作用域内变量的索引 |
6:0 | 基址 | 目标变量采用的绝对地址 |
位 | 名称 | 说明 |
8:7 | 目标 | 目标变量数-在目标作用域内变量的索引 |
6:0 | 基址 | 目标变量采用的绝对地址 |
位 | 名称 | 说明 |
8 | C | 进位立即数 |
7:6 | 用户 | 用户位数-当前作用域中用户位的索引 |
5 | S | 移位标记·0-移位进位不修改·1-移位进位被设置为源进位 |
4 | A | ALU标记·0-ALU进位不修改·1-ALU进位被设置为源进位 |
3 | I/U | 立即数/用户标记·0-源进位被设置为C字段·1-源进位被设置为用户字段定义的用户位 |
位 | 名称 | 说明 |
8:7 | UBD | 用户位目标-目标作用域中用户位的索引 |
6 | V | 值-用于填充由UBD字段指定的用户位的立即数(如果源==2) |
5:4 | UBS | 用户位来源-用于填充由UBD字段指定的用户位的在当前作用域中的用户位的索引(如果源==3) |
3:2 | 源 | 来源-选择将填充目标用户位的布尔值的来源·00-移位进位·01-ALU进位·10-V字段提供的立即数·11-UBS字段定义的用户位 |
位 | 名称 | 说明 |
8:6 | Shift imm | 移位字段-立即值 |
5:4 | 全局 | 全局变量-全局变量的索引 |
3:2 | 源 | 来源-选择将填充目标作用域中的范围的四个来源中的哪一个(硬件将允许范围值以01、10模式环绕)·00-包括在移位字段中的立即值·01-当前作用域范围加一·10-当前作用域范围减一·11-全局字段定义的全局变量(的3lsb)的值 |
位 | 名称 | 说明 |
8:7 | 源 | 来源-选择目标作用域的来源·00-立即字段·01-全局字段定义的全局变量(的3lsb)·10-当前目标作用域(的由I/D字段定义)的增加或减不(硬件将允许作用域值的环绕)·11-当前作用域加一 |
6:4 | Immed | 立即值-变量随机存取存储器中的作用域的索引 |
3:2 | 全局 | 全局变量-全局变量的索引 |
1 | I/D | 增加/减少标记·0-增加目标作用域·1-减少目标作用域 |
位 | 名称 | 说明 |
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窗口 |
位 | 名称 | 说明 |
8:7 | LSC | 向左移位结构·00-空操作指令(即,当前结构不改变)·01-算术移位(注意:其等效于移入‘0’的逻辑移位)·10-移入‘0’的逻辑移位·11-移入移位进位的逻辑移位 |
6:5 | RSC | 向右移位结构·00-空操作指令(即,当前结构不改变)·01-算术移位·10-移入‘0’的逻辑移位·11-移入移位进位的逻辑移位(最高有效字的新的msb在该向量操作之前将是移位进位值) |
位 | 名称 | 说明 |
8:6 | Immed | 立即值-作用域的索引 |
5 | I/T | 立即数/目标作用域标记-选择等于当前作用域的内容的目标作用域·0-立即数·1-目标作用域 |
Claims (13)
1.一种用于数值相乘的可编程系统,其包括:
多个可编程处理单元;
专用硬件乘法器,其中只有当多个可编程处理单元之一在输入缓冲器中具有可用的存储器,该可用的存储器大于基于乘法器的输出尺寸的量,该乘法器才访问所述多个可编程处理单元之一中的数据,以及
连接所述多个可编程处理单元和所述乘法器的至少一条总线。
2.权利要求1的系统,
其中多个可编程处理单元动态地接收程序指令,用于由多个可编程处理单元执行;以及
其中该系统还包括用于选择的电路,在下述之间进行选择:
在乘法器和多个可编程处理单元中的至少一个之间传送数据;以及
将程序指令传送到多个可编程处理单元中的至少一个。
3.权利要求2的系统,其中用于选择的电路包括由被传送到多个可编程处理单元中的至少一个的程序指令中的指令控制的电路。
4.权利要求1的系统,
其中多个可编程处理单元中的每一个具有存储由总线接收到的数据的输入缓冲器以及存储要在总线上传送的数据的至少一个输出缓冲器;以及
其中多个可编程处理单元中的每一个包括:
基于数据的到达顺序按顺序把数据存储到输入缓冲器中的电路;以及
基于输出到输出缓冲器的数据的顺序按顺序把数据存储到至少一个输出缓冲器中的电路。
5.权利要求4的系统,
其中至少一个输出缓冲器包括至少两个输出队列,输出队列中的第一个存储第一乘法操作数,输出队列中的第二个存储第二乘法操作数;以及
其中乘法器从第一输出队列中出列第一乘法操作数,从第二输出队列中出列第二乘法操作数。
6.权利要求1的系统,
其中乘法器包括:
至少一个输入缓冲器,用于存储从多个可编程处理单元中的至少一个接收的数据,所述数据包括要进行相乘的操作数;以及
至少一个输出缓冲器,用于存储要传送到多个可编程处理单元中的至少一个的数据,该数据包括要进行相乘的操作数的相乘的结果。
7.权利要求1的系统,还包括选择该乘法器所要服务的多个可编程处理单元中的哪一个的电路。
8.权利要求7的系统,其中选择该乘法器所要服务的多个可编程处理单元中的哪一个的电路包括:用于基于由多个可编程处理单元之一输出的信号而相继地服务所述多个可编程处理单元之一的电路。
9.一种用于数值相乘的可编程方法,其包括:
在多个可编程处理单元中的第一个中,提供两个要相乘的操作数;
在与多个可编程处理单元相耦合的专用硬件乘法器中,使多个可编程处理单元中的第一个提供的两个操作数相乘并将相乘的结果返回到该多个可编程处理单元中的第一个;
其中只有当多个可编程处理单元之一在输入缓冲器中具有可用的存储器,该可用的存储器大于基于乘法器的输出尺寸的量,该乘法器才访问所述多个可编程处理单元之一中的数据。
10.权利要求9的方法,还包括
在以下两者之间选择:
在乘法器和多个可编程处理单元中的至少一个之间传送数据;以及
将程序指令传送到多个可编程处理单元中的至少一个。
11.权利要求10的方法,还包括在多个可编程处理单元中的一个中执行程序指令以控制上述选择。
12.一种用于数值相乘的可编程系统,其包括:
多个可编程处理单元;
专用硬件乘法器,以及
连接所述多个可编程处理单元和乘法器的至少一条总线;
其中所述多个可编程处理单元中的每一个具有存储由总线接收到的数据的输入缓冲器以及存储要在总线上传送的数据的至少一个输出缓冲器;以及
其中多个可编程处理单元中的每一个包括:
基于数据的到达顺序按顺序把数据存储到输入缓冲器中的电路;以及
基于输出到输出缓冲器的数据的顺序按顺序把数据存储到至少一个输出缓冲器中的电路;
其中至少一个输出缓冲器包括至少两个输出队列,输出队列中的第一个存储第一乘法操作数,输出队列中的第二个存储第二乘法操作数;以及
其中乘法器从第一输出队列中出列第一乘法操作数,从第二输出队列中出列第二乘法操作数。
13.一种用于数值相乘的可编程方法,其包括:
在多个可编程处理单元中的第一个中,提供两个要相乘的操作数;
在与多个可编程处理单元相耦合的专用硬件乘法器中,使多个可编程处理单元中的第一个提供的两个操作数相乘并将相乘的结果返回到该多个可编程处理单元中的第一个;
其中多个可编程处理单元中的每一个具有存储由总线接收到的数据的输入缓冲器以及存储要在总线上传送的数据的至少一个输出缓冲器;
其中多个可编程处理单元中的每一个包括:
基于数据的到达顺序按顺序把数据存储到输入缓冲器中的电路;以及
基于输出到输出缓冲器的数据的顺序按顺序把数据存储到至少一个输出缓冲器中的电路;
其中至少一个输出缓冲器包括至少两个输出队列,输出队列中的第一个存储第一乘法操作数,输出队列中的第二个存储第二乘法操作数;以及
其中乘法器从第一输出队列中出列第一乘法操作数,从第二输出队列中出列第二乘法操作数。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/323,993 US7725624B2 (en) | 2005-12-30 | 2005-12-30 | System and method for cryptography processing units and multiplier |
US11/323993 | 2005-12-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101083525A CN101083525A (zh) | 2007-12-05 |
CN101083525B true CN101083525B (zh) | 2011-11-16 |
Family
ID=38068566
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006101309361A Expired - Fee Related CN101083525B (zh) | 2005-12-30 | 2006-12-30 | 密码处理单元以及乘法器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7725624B2 (zh) |
EP (1) | EP1966683A2 (zh) |
CN (1) | CN101083525B (zh) |
WO (1) | WO2007078923A2 (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070157030A1 (en) | 2005-12-30 | 2007-07-05 | Feghali Wajdi K | Cryptographic system component |
US7725624B2 (en) | 2005-12-30 | 2010-05-25 | Intel Corporation | System and method for cryptography processing units and multiplier |
US8438208B2 (en) * | 2009-06-19 | 2013-05-07 | Oracle America, Inc. | Processor and method for implementing instruction support for multiplication of large operands |
US9990201B2 (en) * | 2009-12-22 | 2018-06-05 | Intel Corporation | Multiplication instruction for which execution completes without writing a carry flag |
US8555038B2 (en) | 2010-05-28 | 2013-10-08 | Oracle International Corporation | Processor and method providing instruction support for instructions that utilize multiple register windows |
CN102023893A (zh) * | 2010-11-04 | 2011-04-20 | 北京曙光天演信息技术有限公司 | 一种加密卡内并行处理实现方法 |
US9128769B2 (en) | 2011-10-13 | 2015-09-08 | Cavium, Inc. | Processor with dedicated virtual functions and dynamic assignment of functional resources |
US9129060B2 (en) | 2011-10-13 | 2015-09-08 | Cavium, Inc. | QoS based dynamic execution engine selection |
US9092645B2 (en) | 2011-12-05 | 2015-07-28 | Intel Corporation | Efficient multiplication, exponentiation and modular reduction implementations |
US8677150B2 (en) * | 2012-02-01 | 2014-03-18 | Intel Mobile Communications GmbH | Low-power multi-standard cryptography processing units with common flip-flop/register banks |
US10140129B2 (en) | 2012-12-28 | 2018-11-27 | Intel Corporation | Processing core having shared front end unit |
US9361116B2 (en) | 2012-12-28 | 2016-06-07 | Intel Corporation | Apparatus and method for low-latency invocation of accelerators |
US9417873B2 (en) | 2012-12-28 | 2016-08-16 | Intel Corporation | Apparatus and method for a hybrid latency-throughput processor |
US9251377B2 (en) | 2012-12-28 | 2016-02-02 | Intel Corporation | Instructions processors, methods, and systems to process secure hash algorithms |
US10346195B2 (en) | 2012-12-29 | 2019-07-09 | Intel Corporation | Apparatus and method for invocation of a multi threaded accelerator |
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 |
US9800401B2 (en) * | 2014-04-23 | 2017-10-24 | International Business Machines Corporation | Initialization vectors generation from encryption/decryption |
US9317719B2 (en) | 2014-09-04 | 2016-04-19 | Intel Corporation | SM3 hash algorithm acceleration processors, methods, systems, and instructions |
EP3182277A4 (en) * | 2014-09-09 | 2018-09-19 | Huawei Technologies Co. Ltd. | Processor |
US9658854B2 (en) | 2014-09-26 | 2017-05-23 | Intel Corporation | Instructions and logic to provide SIMD SM3 cryptographic hashing functionality |
KR102285188B1 (ko) * | 2015-02-13 | 2021-08-05 | 삼성전자주식회사 | 시인성 개선을 위한 이미지 처리 방법 및 이를 지원하는 전자 장치 |
EP3125109B1 (en) * | 2015-07-31 | 2019-02-20 | ARM Limited | Vector length querying instruction |
US10721172B2 (en) | 2018-07-06 | 2020-07-21 | Marvell Asia Pte, Ltd. | Limiting backpressure with bad actors |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1310816A (zh) * | 1998-07-22 | 2001-08-29 | 摩托罗拉公司 | 模乘法的电路及其方法 |
US6397241B1 (en) * | 1998-12-18 | 2002-05-28 | Motorola, Inc. | Multiplier cell and method of computing |
CN1392472A (zh) * | 2002-07-31 | 2003-01-22 | 清华大学 | Vlsi用的蒙格玛丽模乘算法及智能卡模乘器的vlsi结构 |
CN1492316A (zh) * | 2003-09-09 | 2004-04-28 | 大唐微电子技术有限公司 | 一种蒙格玛丽模乘算法及其模乘、模幂运算电路 |
CN1694061A (zh) * | 2005-05-18 | 2005-11-09 | 上海迪申电子科技有限责任公司 | 操作数长度可伸缩的蒙哥马利模乘算法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6356636B1 (en) * | 1998-07-22 | 2002-03-12 | Motorola, Inc. | Circuit and method for fast modular multiplication |
US7240204B1 (en) | 2000-03-31 | 2007-07-03 | State Of Oregon Acting By And Through The State Board Of Higher Education On Behalf Of Oregon State University | Scalable and unified multiplication methods and apparatus |
US20020091826A1 (en) * | 2000-10-13 | 2002-07-11 | Guillaume Comeau | Method and apparatus for interprocessor communication and peripheral sharing |
US6901491B2 (en) * | 2001-10-22 | 2005-05-31 | Sun Microsystems, Inc. | Method and apparatus for integration of communication links with a remote direct memory access protocol |
JP4089346B2 (ja) | 2002-08-15 | 2008-05-28 | サンケン電気株式会社 | 巻き取り装置 |
US7392399B2 (en) * | 2003-05-05 | 2008-06-24 | Sun Microsystems, Inc. | Methods and systems for efficiently integrating a cryptographic co-processor |
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 |
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 |
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 |
US7725624B2 (en) | 2005-12-30 | 2010-05-25 | Intel Corporation | System and method for cryptography processing units and multiplier |
-
2005
- 2005-12-30 US US11/323,993 patent/US7725624B2/en not_active Expired - Fee Related
-
2006
- 2006-12-18 EP EP06847763A patent/EP1966683A2/en not_active Withdrawn
- 2006-12-18 WO PCT/US2006/048293 patent/WO2007078923A2/en active Application Filing
- 2006-12-30 CN CN2006101309361A patent/CN101083525B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1310816A (zh) * | 1998-07-22 | 2001-08-29 | 摩托罗拉公司 | 模乘法的电路及其方法 |
US6397241B1 (en) * | 1998-12-18 | 2002-05-28 | Motorola, Inc. | Multiplier cell and method of computing |
CN1392472A (zh) * | 2002-07-31 | 2003-01-22 | 清华大学 | Vlsi用的蒙格玛丽模乘算法及智能卡模乘器的vlsi结构 |
CN1492316A (zh) * | 2003-09-09 | 2004-04-28 | 大唐微电子技术有限公司 | 一种蒙格玛丽模乘算法及其模乘、模幂运算电路 |
CN1694061A (zh) * | 2005-05-18 | 2005-11-09 | 上海迪申电子科技有限责任公司 | 操作数长度可伸缩的蒙哥马利模乘算法 |
Also Published As
Publication number | Publication date |
---|---|
US7725624B2 (en) | 2010-05-25 |
WO2007078923A2 (en) | 2007-07-12 |
US20080013715A1 (en) | 2008-01-17 |
EP1966683A2 (en) | 2008-09-10 |
CN101083525A (zh) | 2007-12-05 |
WO2007078923A3 (en) | 2007-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
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 | |
CN101042639A (zh) | 乘法器 | |
US10985903B2 (en) | Power side-channel attack resistant advanced encryption standard accelerator processor | |
CN100533372C (zh) | 用于多核处理器的存储指令排序 | |
US7953221B2 (en) | Method for processing multiple operations | |
JP3789454B2 (ja) | 暗号コプロセッサを有するストリームプロセッサ | |
US8023644B2 (en) | Multimode block cipher architectures | |
WO2006029152A2 (en) | Multiply instructions for modular exponentiation | |
US10140458B2 (en) | Parallelized authentication encoding | |
US20070192571A1 (en) | Programmable processing unit providing concurrent datapath operation of multiple instructions | |
US20080148011A1 (en) | Carry/Borrow Handling | |
Grand et al. | Design and implementation of a multi-core crypto-processor for software defined radios | |
US20080263115A1 (en) | Very long arithmetic logic unit for security processor | |
Lee et al. | A hardware scheduler for multicore block cipher processor | |
CN108027866B (zh) | 具有轮常数生成的sms4加速处理器 | |
Ahmed et al. | RE-CONFIGURABLE PROGRAMMABLE SECURITY PROCESSOR FOR NETWORK APPLICATIONS |
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: 20111116 Termination date: 20181230 |
|
CF01 | Termination of patent right due to non-payment of annual fee |