
1.本技术涉及数据处理技术领域,具体而言,涉及一种协处理器、电子器件及电子设备。
背景技术:2.现有的加解密协处理器架构常常采用类似于dma(direct memory access,直接存储器访问)的结构,以提升加解密性能,结构如图1所示。运行时,在加解密协处理器内部的控制模块的调度下,将需要进行加解密的数据读入到加解密协处理器输入端的fifo(first in,first out,先进先出,是一种常用的先进先出的数据缓冲器)中,然后数据从输入端的fifo中,依次送入加解密协处理器内部的相应算法引擎中。算法引擎运算结束后,将处理后的数据通过输出端写入指定存储器地址中。
3.但是,在实际使用过程中发现,由于算法引擎的处理性能有限,常会出现一条命令的所有待加解密的数据已经存到加解密协处理器内的fifo中,但加解密算法引擎还未处理完成,从而使得加解密协处理器的输入端常处于空闲状态的情况。这就造成了加解密协处理器的性能的浪费,降低了加解密协处理器的处理速度。
技术实现要素:4.本技术实施例的目的在于提供一种协处理器、电子器件及电子设备,用以提高协处理器的性能。
5.本技术实施例提供了一种协处理器,包括:命令fifo和运算fifo;取命令模块,与所述命令fifo连接,用于获取命令,并将获取到的命令存放于所述命令fifo;取运算参数模块,与所述运算fifo连接,用于获取运算参数,并将获取到的运算参数存放于所述运算fifo;控制器,分别与所述取命令模块和所述取运算参数模块连接,用于在一条命令成功写入所述命令fifo后,控制所述取命令模块获取下一条命令,以及用于在一条命令对应的运算参数成功写入所述运算fifo后,控制所述取运算参数模块获取下一条命令对应的运算参数;算法引擎,分别与所述控制器和所述运算fifo连接,用于在接收到所述控制器从所述命令fifo取出的命令后,从所述运算fifo中取出该命令对应的运算参数进行运算。
6.在上述实现过程中,通过设置命令fifo和运算fifo,以及设置取命令模块和取运算参数模块,从而在控制器的控制下,取命令模块可以独立进行命令的获取,并将命令存入命令fifo中。而取运算参数模块也可以独立进行运算参数的获取,并将运算参数写入运算fifo中。这就实现了对于命令和运算参数的独立获取和存储,使得针对任一条命令,在算法引擎没有执行完毕时,协处理器中就可以预先获取到后一条或后几条命令,以及后一条或后几条命令对应的运算参数,达到数据预取的效果,从而减少协处理器的输入处于空闲状态的情况,提高协处理器整体表现出的处理速度,从而提高协处理器的性能。
7.进一步地,所述控制器包括命令子控制器;其中:所述命令子控制器分别与所述取命令模块和所述命令fifo连接;所述取命令模块具体用于,将获取到的命令发送给所述命
令子控制器,以通过所述命令子控制器将所述命令写入所述命令fifo;所述命令子控制器用于,将所述命令写入所述命令fifo,并在将所述命令写入所述命令fifo后,控制所述取命令模块获取下一条命令。
8.在上述实现过程中,通过设置专门的命令子控制器对取命令模块进行命令获取的控制,可以有效保证对于命令获取控制的可靠性,同时,由命令子控制器来写入命令,可以确保在一条命令成功写入命令fifo后,才执行下一条命令的获取,保证命令的逐条写入与获取。
9.进一步地,所述命令子控制器还用于,所述命令子控制器具体用于,对所述取命令模块传来的命令进行正确性校验;若命令正确,将所述命令写入所述命令fifo。
10.在上述实现过程中,通过对取命令模块传来的命令进行正确性校验,在命令正确时才写入命令fifo中,从而保证了对于后续执行的命令的正确性。
11.进一步地,所述控制器包括运算子控制器;所述运算子控制器分别与所述取运算参数模块和所述命令fifo连接,用于从所述命令fifo中读取命令,并将该命令发送给所述取运算参数模块;所述取运算参数模块具体用于,根据所述运算子控制器发来的命令,获取该命令对应的运算参数。
12.在上述实现过程中,通过设置专门的运算子控制器对取运算参数模块进行运算参数获取的控制,可以有效保证对于运算参数获取控制的可靠性。
13.进一步地,所述运算参数包括密钥和数据;所述运算fifo包括密钥fifo和数据fifo;所述取运算参数模块包括取密钥模块和取数据模块;所述运算子控制器包括密钥子控制器和数据子控制器;其中:所述取密钥模块分别与所述密钥子控制器和所述密钥fifo连接,用于根据所述密钥子控制器传来的命令,获取该命令对应的密钥,并写入所述密钥fifo中;所述取数据模块分别与所述数据子控制器和所述数据fifo连接,用于根据所述数据子控制器传来的命令,获取该命令对应的数据,并写入所述数据fifo中。
14.在实际应用过程中,若协处理器为加解密协处理器,算法引擎需要进行加解密运算时,算法引擎所需的运算参数往往需要包含命令指定的数据和密钥。在上述实现过程中,通过专门的取密钥模块和取数据模块、专门的密钥子控制器和数据子控制器、专门的密钥fifo和数据fifo来分别实现对于数据和密钥的获取、控制以及存储,这就有效保证对于命令对应的数据和密钥的获取与存储的可靠性。
15.进一步地,所述运算子控制器具体用于,判断当前读取的命令与所述算法引擎当前执行的命令之间是否具有数据相关性;若不具有数据相关性,则从所述命令fifo中读取命令发送给所述取运算参数模块;若具有数据相关性,则等待所述算法引擎当前执行的命令执行完毕,重新判断当前读取的命令与所述算法引擎所执行的下一条命令之间是否具有数据相关性。
16.在上述实现过程中,考虑了当前需要进行运算参数获取的命令与算法引擎当前执行的命令之间的数据相关性,在两命令之间不具有数据相关性时,才执行运算参数获取操作,从而保证命令队列执行的正确性。
17.进一步地,所述控制器包括主控制器;所述协处理器还包括输出反馈模块;所述主控制器分别与所述命令fifo、所述算法引擎和所述输出反馈模块连接,用于从所述命令fifo取出的命令发送给所述算法引擎;所述输出反馈模块分别与所述主控制器和所述算法
引擎连接,用于在接收到所述算法引擎运算完毕后的输出信号后,向所述主控制器反馈通知信号;所述通知信号表征所述算法引擎当前执行的命令已执行完毕;所述主控制器还用于在接收到所述通知信号后,继续从所述命令fifo取出命令发送给所述算法引擎。
18.在上述实现方案中,通过输出反馈模块,可以保证在算法引擎中的一条命令执行完毕之后,主控制器才输出下一条命令供算法引擎执行,从而保证了算法引擎对于命令的执行可靠性,保证了协处理器的正常运转。
19.进一步地,所述命令fifo具有第一指针、第二指针和第三指针;其中:所述第一指针指向所述命令fifo的队尾,用于写入命令;所述第二指针指向所述命令fifo的队首,用于供所述控制器取出命令发送给所述算法引擎;所述第三指针指向所述取运算参数模块当前需获取的运算参数所对应的命令。
20.在上述实现方案中,通过在命令fifo中设置上述三种指针,从而只需一个命令fifo即同时实现了对于取运算参数模块和算法引擎两者的命令输出,无需设置多个命令fifo,节约了硬件成本。
21.本技术实施例还提供了一种电子器件,所述电子器件内设有上述任一种的协处理器。
22.本技术实施例还提供了一种电子设备,所述电子设备内设有上述的电子器件。
附图说明
23.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
24.图1为现有技术中的加解密协处理器的结构示意图;
25.图2为本技术实施例提供的一种协处理器的基本结构示意图;
26.图3为本技术实施例提供的一种具体的协处理器的结构示意图;
27.图4为本技术实施例提供的另一种具体的协处理器的结构示意图;
28.图5为本技术实施例提供的另一种具体的协处理器的结构示意图;
29.图6为本技术实施例提供的一种更具体的协处理器的结构示意图;
30.图7为本技术实施例提供的一种具体可选的加解密协处理器的结构示意图;
31.图8为本技术实施例提供的一种命令子控制器的工作流程示意图;
32.图9为本技术实施例提供的一种数据子控制器的工作流程示意图;
33.图10为本技术实施例提供的一种主控制器的工作流程示意图;
34.图11为本技术实施例提供的一种命令fifo的结构示意图;
35.图12为本技术实施例提供的一种加解密协处理器工作时的时空图。
具体实施方式
36.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
37.实施例一:
38.为了提高协处理器的性能,本技术实施例中提供了一种新的协处理器的实现微架
构。可以参见图2所示,图2为本技术实施例中提供的协处理器的基本结构示意图,包括:命令fifo、运算fifo、取命令模块、取运算参数模块、控制器和算法引擎。其中:
39.取命令模块与命令fifo连接。取命令模块用于获取命令,并将获取到的命令存放于命令fifo。
40.取运算参数模块与运算fifo连接,用于获取运算参数,并将获取到的运算参数存放于运算fifo。
41.控制器则分别与取命令模块和取运算参数模块连接。在本技术实施例中,控制器一方面用于控制取命令模块取回命令,在一条命令成功写入命令fifo后,控制取命令模块获取下一条命令。控制器另一方面用于在一条命令对应的运算参数成功写入运算fifo后,控制取运算参数模块获取下一条命令对应的运算参数。
42.在本技术实施例的一种可行实施方式中,控制器可以从命令fifo中取出命令,并将该命令下发给取运算参数模块,并控制取运算参数模块取回该命令的运算参数。然后在一条命令对应的运算参数成功写入运算fifo后,继续控制取运算参数模块获取下一条命令对应的运算参数。
43.而在本技术实施例的另一种可行实施方式中,控制器可以向取运算参数模块下发控制取运算参数模块获取运算参数的指令,取运算参数模块在接收到指令后,从命令fifo中取出命令,并取回该命令的运算参数写入运算fifo。在一条命令对应的运算参数成功写入运算fifo后,控制器继续向取运算参数模块下发控制取运算参数模块获取运算参数的指令,控制取运算参数模块获取下一条命令对应的运算参数。
44.算法引擎则分别与控制器和运算fifo连接。
45.在本技术实施例中,控制器还用于从命令fifo取出命令发送给算法引擎执行。而算法引擎则用于在接收到控制器从命令fifo取出的命令后,从运算fifo中取出该命令对应的运算参数进行运算。
46.这样,在控制器的控制下,取命令模块可以独立进行命令的获取,并将命令存入命令fifo中。而取运算参数模块也可以独立进行运算参数的获取,并将运算参数写入运算fifo中。这就实现了对于命令和运算参数的独立获取和存储,使得针对任一条命令,在算法引擎没有执行完毕时,协处理器中就可以预先获取到后一条或后几条命令,以及后一条或后几条命令对应的运算参数,达到数据预取的效果,从而减少协处理器的输入处于空闲状态的情况,提高协处理器整体表现出的处理速度,从而提高协处理器的性能。
47.需要说明的是,在本技术实施例中,取命令模块和取运算参数模块的结构均可以采用现有已知的,以及未来可能出现的所有可以实现信息取放的电路来实现,在本技术实施例中不做限制。例如,可以采用现有加解密协处理器的输入端内获取命令等信息的电路来实现,但不作为限制。
48.还需要说明的是,在本技术实施例中,控制器内可以设置专门的子控制器来实现相应信息的获取控制,以达到更好的控制效果。
49.例如参见图3所示,控制器内可以包括命令子控制器,从而由命令子控制器分别与取命令模块和命令fifo连接。
50.此时,取命令模块在获取到命令后,可以将获取到的命令发送给命令子控制器,从而通过命令子控制器将命令写入命令fifo。
51.而命令子控制器则可以在将命令写入命令fifo,并在将命令写入命令fifo后,控制取命令模块获取下一条命令。
52.需要理解的是,为了保证写入命令fifo中的命令的可靠性,从而保证协处理器处理结果的正确性,在本技术实施例中,命令子控制器可以对取命令模块传来的命令,先进行正确性校验。若命令正确,才将该命令写入命令fifo中,然后再控制取命令模块获取下一条命令。若命令不正确,则命令子控制器可以进入停止状态。
53.应当理解的是,上述方式仅是本技术实施例所示例的一种可选实施方式。事实上,在控制器内设置命令子控制器来进行命令获取的控制时,也可以如图4所示,取命令模块在获取到命令后,可以由取命令模块将该命令写入命令fifo中。将命令写入命令fifo成功后,取命令模块可以通知命令子控制器。而命令子控制器在接收到通知后可以控制取命令模块继续获取下一条命令。
54.若需要命令子控制器进行命令的正确性校验,那么在上段所示例的方案中,取命令模块在获取到命令后,可以先将命令发送给命令子控制器,进而由命令子控制器进行命令的正确性校验。若命令正确,则通知取命令模块,取命令模块在接收到命令子控制器的通知后,再将该命令写入命令fifo中。若命令不正确,则命令子控制器可以进入停止状态。
55.需要理解的是,在上述示例出的两种实现方式中,也可以是由取命令模块来校验命令的正确性,在本技术实施例中不做限制。
56.还需要理解的是,在上述示例出的两种实现方式中,可以通过判断当前命令的内容或者格式是否正确,从而确定出该当前命令是否正确。
57.还需要理解的是,在上述示例出的两种实现方式中,命令子控制器可以通过向取命令模块发送命令获取请求的方式,控制取命令模块获取命令。
58.还需要理解的是,在实际应用中,针对一次处理任务,所需获取的命令通常是一个命令队列(命令队列是指在地址空间上连续的一组命令,命令队列里的命令是顺序执行的),因此获取命令时,命令子控制器可以按照命令队列,依次控制取命令模块获取命令。
59.还需要理解的是,在上述示例出的两种实现方式中,命令子控制器还可以不断检测命令队列是否为空。若命令队列为空,即表明所有的命令均已被获取了,从而命令子控制器可以进入停止状态。相反,若命令队列不为空,即表明还有命令需要获取,从而可以继续控制命令模块获取命令。
60.还需要说明的是,在本技术实施例中,命令可以包括输入地址、输出地址、使用何种算法引擎等信息,协处理器可以根据命令的信息自动完成数据处理。应理解,在实际应用中,某些文献中也会将命令称之为descriptor(描述符),因此无论是称之为命令,还是称之为描述符,均应认为其是在本技术的保护范围内的。
61.类似的,在本技术实施例的一种可行实施方式中,可以参见图3所示,控制器还可以包括运算子控制器。运算子控制器分别与取运算参数模块和命令fifo连接。
62.运算子控制器用于从命令fifo中读取命令发送给取运算参数模块。而取运算参数模块则具体用于根据运算子控制器发来的命令,获取该命令对应的运算参数,进而在获取到对应的运算参数后,将获取到的运算参数写入运算fifo中。
63.而在本技术实施例的另一种可行实施方式中,可以参见图5所示,控制器同样还可以包括运算子控制器。运算子控制器与取运算参数模块连接,取运算参数模块和命令fifo
连接。
64.运算子控制器可以向取运算参数模块下发控制取运算参数模块获取运算参数的指令。取运算参数模块在接收到指令后,从命令fifo中取出命令,并取回该命令的运算参数写入运算fifo。在一条命令对应的运算参数成功写入运算fifo后,运算子控制器继续向取运算参数模块下发控制取运算参数模块获取运算参数的指令,控制取运算参数模块获取下一条命令对应的运算参数。
65.应理解,在本技术实施例中,运算参数是指算法引擎执行命令时所需的与该命令对应的信息,包括但不限于所执行的命令对应的密钥、数据、初始向量、初始计数值等信息中的至少一种。
66.还应理解,在所需的运算参数为多种时,对应设置的取运算参数模块也可以为多个,从而通过一个取运算参数模块,对一种运算参数进行获取。
67.相应的,对应设置的运算子控制器也可以为多个,从而每一个运算子控制器对应控制一个取运算参数模块。
68.相应的,运算fifo也可以为多个,从而每一个取运算参数模块对应连接一个运算fifo,从而将不同种类的运算参数分别写入不同的运算fifo中,从而便于进行信息管理。
69.示例性的,假设运算参数包括命令对应的密钥和数据,则协处理器中可以设置密钥fifo和数据fifo,取密钥模块和取数据模块,密钥子控制器和数据子控制器。其中:
70.取密钥模块分别与密钥子控制器和密钥fifo连接,用于根据密钥子控制器传来的命令,获取该命令对应的密钥,并写入密钥fifo中。
71.取数据模块分别与数据子控制器和数据fifo连接,用于根据数据子控制器传来的命令,获取该命令对应的数据,并写入数据fifo中。
72.应理解,运算fifo、取运算参数模块和运算子控制器的具体设置,可以根据协处理器所需实现的功能,以及所具有的算法引擎的需求进行设置,在本技术实施例中不做限制。
73.需要注意的是,在本技术实施例中,运算子控制器在从命令fifo中读取命令发送给取运算参数模块之前,可以检查命令fifo是否为空。如果命令fifo非空,则读取命令发送给取运算参数模块。若命令fifo为空,则可以继续等待。
74.还应理解的是,在实际应用过程中,为了保证算法引擎对于命令队列执行的正确性,还需要考虑获取运算参数进行存储时的命令,与引擎当前执行的命令之间的数据相关性。为此,运算子控制器还可以判断当前读取的命令与算法引擎当前执行的命令之间是否具有数据相关性;若不具有数据相关性,则从命令fifo中读取命令发送给取运算参数模块;若具有数据相关性,则等待算法引擎当前执行的命令执行完毕,然后再重新判断当前读取的命令与所述算法引擎所执行的下一条命令之间是否具有数据相关性。这样,即可以有效避免所取用的命令间的数据相关性对命令的执行造成影响。
75.应理解,在本技术实施例中,数据相关性包括但不限于写后读、写后写、读后写等情况中的至少一种。
76.在本技术实施例中,可以通过在运算子控制器中设置相应的可以实现数据相关性检测的硬件电路来实现对于数据相关性的检测。除此之外,还可以通过软件方式实现对于数据相关性的检测。比如由软件判断命令之间的数据相关性,如果出现数据相关性,软件在该命令中增加一个标识位,当运算子控制器识别到该标识位后,会暂停对命令的取用。
77.需要注意的是,在本技术实施例中,如图3至图7所示,控制器内还可以包括主控制器。主控制器可以分别与命令fifo和算法引擎连接,从而从命令fifo取出命令发送给算法引擎进行运算。
78.需要理解的是,在本技术实施例中,上述主控制器和上述各种子控制器可以通过单独的控制器实现电路实现,或者也可以通过独立的模块或芯片来实现,在本技术实施例中不做限制。
79.在本技术实施例中,主控制器还可以和各子控制器连接,以控制各子控制器的工作。
80.在本技术实施例中,为了保证算法引擎是逐条命令进行执行的,参见图6所示,协处理器中还可以包括输出反馈模块。
81.该输出反馈模块分别与主控制器和算法引擎连接,用于在接收到算法引擎运算完毕后的输出信号后,向主控制器反馈通知信号。该通知信号为表征算法引擎当前执行的命令已执行完毕的信号。
82.主控制器在接收到该通知信号后,即可继续从命令fifo取出命令发送给算法引擎。
83.应理解,在本技术实施例中,输出反馈模块可以采用现有已知的,以及未来可能出现的所有可以实现信号反馈的电路来实现,本技术实施例中对此不做限制。
84.需要理解的是,在本技术实施例中,控制器为了控制取运算参数模块需要从命令fifo中取用命令,同时为了保证算法引擎的执行,控制器也需要从命令fifo中取用命令,且两次取用的命令还可以不同。那么,为了保证控制器可以正确读取到所需的命令,在本技术实施例的一种可行实施方式中,可以设置两个命令fifo,一个专用于控制取运算参数模块,另一个专用于控制算法引擎。相应的,取命令模块在获取到命令后,该命令需要写入到这两个命令fifo中,从而保证控制过程的可靠性。
85.而在本技术实施例的另一种可行实施方式中,则可以仅设置一个命令fifo,并在命令fifo中设置三种指针,分别记为第一指针、第二指针和第三指针。其中:
86.第一指针指向命令fifo的队尾,用于写入命令。
87.第二指针指向命令fifo的队首,用于供控制器取出命令发送给算法引擎。
88.第三指针则指向取运算参数模块当前需获取的运算参数所对应的命令。
89.这样,通过三种指针,即可保证对于命令的准确获取。
90.需要说明的是,在运算参数为多种时,对于第三指针,可以仅设置一个,也可以设置多个。在设置多个时,可以针对每一种取运算参数模块,对应设置一个第三指针,以达到对于取运算参数模块更为精细化的控制。
91.还需要说明的是,在本技术实施例中,为了便于控制器中的主控制器和各子控制器进行命令的读取,可以将命令fifo设置于控制器内。当然,命令fifo也可以设置于控制器外,本技术实施例中对此不做限制。
92.还需要说明的是,在本技术实施例中,算法引擎可以是加解密算法引擎,也可以是数据透传引擎等,在本技术实施例中对于算法引擎的类型不做限制。
93.本技术实施例中还提供了一种电子器件,该电子器件内设有本技术实施例所提供的协处理器。
94.示例性的,本技术实施例中所述的电子器件可以是具有协处理器的数据处理模组、通信模组等模组器件,或者也可以是片上系统等系统化器件。
95.本技术实施例中还提供了一种电子设备,该电子设备内设有本技术实施例中提供的电子器件。
96.示例性的,本技术实施例中所述的电子设备可以是具有协处理器的电脑主机、服务器等等设备。
97.本技术实施例所提供的协处理器、电子器件及电子设备,通过设置命令fifo和运算fifo,以及设置取命令模块和取运算参数模块,从而在控制器的控制下,取命令模块可以独立进行命令的获取,并将命令存入命令fifo中。而取运算参数模块也可以独立进行运算参数的获取,并将运算参数写入运算fifo中。这就实现了对于命令和运算参数的独立获取和存储,使得针对任一条命令,在算法引擎没有执行完毕时,协处理器中就可以预先获取到后一条或后几条命令,以及后一条或后几条命令对应的运算参数,达到数据预取的效果,从而减少协处理器的输入处于空闲状态的情况,提高协处理器整体表现出的处理速度,从而提高协处理器的性能。
98.此外,本技术实施例所提供的协处理器、电子器件及电子设备,考虑了当前需要进行运算参数获取的命令与算法引擎当前执行的命令之间的数据相关性,在两命令之间不具有数据相关性时,才执行运算参数获取操作,从而保证命令队列执行的正确性。
99.实施例二:
100.本实施例在实施例一的基础上,以一种加解密协处理器,运行参数为命令的密钥和数据的情况为例,为本技术做进一步示例说明。
101.参见图7所示,图7示出了本实施例提供的加解密协处理器的结构。其包括几个模块:控制器、输入端、算法引擎、输出端。控制器是加解密协处理器的控制核心,完成命令的分发和全生命周期的管理。输入端是加解密协处理器的输入接口,完成命令、数据、密钥的读入。算法引擎用于对数据完成各种算法的处理。输出端是加解密协处理器的输出接口,完成数据的写出。
102.其中,控制器包括主控制器、命令子控制器、数据子控制器、密钥子控制器和命令fifo。主控制器完成命令分发和执行,以及各个子控制器的启动、停止等控制。命令子控制器在主控制器的作用下,取回命令并将命令写入命令fifo。数据子控制器在主控制器的作用下,从命令fifo中读出命令并控制取数据模块完成该命令的数据预取功能。密钥子控制器在主控制器的作用下,从命令fifo中读出命令并控制取密钥模块完成该命令的密钥预取功能。命令fifo用于存储多条已取回的命令。
103.输入端包括取命令模块、取数据模块、取密钥模块、数据fifo和密钥fifo。其中:取命令模块在命令子控制器的作用下,从总线上取回命令并将命令写入命令fifo中。取数据模块在数据子控制器的作用下,从总线上取回数据并将数据写入数据fifo中。取密钥模块在密钥子控制器的作用下,从总线上取回密钥并将密钥写入密钥fifo中。
104.输出端内具有输出反馈模块,可以在算法引擎对一条命令运算完毕后,通知主控制器。
105.控制器中的各个子控制器都是受主控制器控制并相互独立运行。每个子控制器说明如下:
106.图8描述了命令子控制器的工作流程。命令子控制器在主控制器作用下,向输入端的取命令模块发出取命令请求。命令子控制器接收到取回的命令后,检查命令是否正确。如果命令错误,则进入停止状态。如果命令正确,则将命令写入命令fifo中。命令子控制器将命令写入命令fifo后,判断命令队列是否为空。如果命令队列非空,则继续取下一条命令。如果命令队列为空,则进入停止状态。
107.图9描述了数据子控制器的工作流程。数据子控制器在主控制器作用下,检查命令fifo是否为空。如果命令fifo非空,则读出一条命令并发送给输入端的取数据模块。输入端的取数据模块根据命令内容,向指定地址取回数据,并将数据存入数据fifo中。当该命令的所有数据都已存入数据fifo后,数据子控制器开始下一条命令的数据取回。
108.需要理解的是,密钥子控制器的工作流程与数据子控制器的工作流程一致,区别仅在于控制的对象为输入端的取密钥模块,取回的是密钥而不是数据,故此不再展开说明。
109.图10描述了主控制器的工作流程。软件准备好命令队列后,启动主控制器。主控制器依次启动命令子控制器、数据子控制器和密钥子控制器。然后,主控制器检查命令fifo是否为空。如果命令fifo为空,则继续等待。如果命令fifo不为空,则取出一条命令,将该命令发给算法引擎。算法引擎收到命令后,从数据fifo和密钥fifo中读取该命令对应的数据和密钥。如果读取到数据和密钥,则开始运算并将结果通过输出端写回至指定地址。当该命令的所有数据都已处理完毕并写回至指定地址后,输出端的输出反馈模块将通知主控制器,主控制器开始从命令fifo中取下一条命令发给算法引擎。
110.图11描述了命令fifo的结构。图11中示出的命令fifo的深度为5(在实际应用中对于命令fifo的深度并不做限制),即最多可以存5条命令(图中cmd0(valid)至cmd4(valid)表征存入了命令cmd0至cmd4,图中in valid表征该位置还未存入命令)。命令fifo有3个指针,分别为:
[0111]-wrptr(即第一指针):指向命令fifo的队尾,即最新取得的命令,给命令子控制器使用,命令子控制器向该地址写入命令。
[0112]-rdptr(即第二指针):指向命令fifo的对头,即当前正在处理的命令,给主控制器使用,主控制器从该地址取出命令。
[0113]-prefetchptr(即第三指针):指向输入端正在预取数据和密钥的命令,给数据子控制器和密钥子控制器使用,数据子控制器和密钥子控制器从该地址读出命令。
[0114]
这样,通过三个指针,即保证了命令子控制器、主控制器、数据子控制器和密钥子控制器对于命令fifo的准确读写。
[0115]
此外,在本实施例中,为了保证命令队列执行的正确性,在取数据时应考虑命令之间的数据相关性。由于命令队列里的命令是按序执行的,所以本实施例中只需要考虑写后读这一种情况。
[0116]
针对写后读,在本实施例中,在数据子控制器和密钥子控制器中,增加硬件判断电路,该硬件判断电路可以在prefetchptr指向的命令和rdptr指向的命令(即算法引擎当前正在执行的命令)存在写后读的数据相关性时,暂停从命令fifo中读取prefetchptr指向的命令。
[0117]
下面,以一个具体的示例过程为例,说明本实施例的协处理器的优势:
[0118]
参见图12所示,图12描述了加解密协处理器工作时的时空图。图12中假设命令队
列具有4条命令,分别为cmd1至cmd4。加解密协处理器依次顺序执行该4条命令,每条命令执行顺序都为:取命令,然后取数据和密钥的同时执行命令。
[0119]
参见图12所示,t1时刻开始取命令,t3时刻所有命令执行完毕。由于取命令、取数据、取密钥、执行命令是相对独立的,所以命令cmd2在开始执行的时候(即t2时刻)已经预取了一部分命令cmd2的数据,因此缩短了命令cmd2的执行时间。同理,命令cmd3和命令cmd4的执行时间也会缩短,从而减少了整个命令队列的执行时间,提升了加解密协处理器的整体性能。
[0120]
以上所描述的实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0121]
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0122]
再者,在本技术各个实施例中的各模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0123]
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
[0124]
在本文中,多个是指两个或两个以上。
[0125]
以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。