执行哈希算法的电路、计算芯片、加密货币矿机和方法与流程

文档序号:30493766发布日期:2022-06-22 03:00阅读:204来源:国知局
执行哈希算法的电路、计算芯片、加密货币矿机和方法与流程

1.本公开总体而言涉及用于执行哈希算法的电路、计算芯片、加密货币矿机和相关方法。


背景技术:

2.比特币是一种p2p(peer-to-peer)形式的虚拟加密数字货币,其概念最初由中本聪在2008年11月1日提出,并于2009年1月3日正式诞生。比特币的独特之处在于,它不依靠特定货币机构发行,而是依据特定算法通过大量运算来产生。比特币交易使用整个p2p网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学设计来确保安全性。从密码学的角度而言,比特币是基于sha-256哈希算法的工作量证明pow(proof of work),其交易完整性取决于sha-256的碰撞性和前映像阻力。哈希算法是一种将可变长度的数据作为输入并产生固定长度的哈希值作为输出的算法,其本质是对信息的提炼。自1993年以来,美国标准与技术研究所先后设计并发布了多个版本的安全哈希算法sha(secure hash algorithm),sha-256正是其中一种哈希长度为256位的安全哈希算法。
3.使用矿机来进行比特币挖矿的核心是根据矿机计算sha-256的运算能力来获得奖励。对于矿机而言,芯片尺寸、芯片运行速度和芯片功耗是决定矿机性能的至关重要的三个因素,其中,芯片尺寸决定芯片成本,芯片运行的速度决定矿机运行速度,即算力,芯片功耗决定耗电程度,即挖矿成本。在实际应用中,衡量矿机最为重要的性能指标是单位算力所消耗的功耗,即功耗算力比。为了提高安全性,在比特币协议中,要进行两次sha-256。因此,对于比特币矿机而言,最重要的就是以较低的功耗算力比来实现哈希算法sha-256。


技术实现要素:

4.根据本公开的第一方面,提供了一种用于执行哈希算法的电路,包括:输入模块,被配置为接收数据;以及运算模块,被配置为基于接收到的数据计算哈希值,该运算模块包括:以流水线结构布置的多个运算级,该多个运算级中的每个运算级包括第0扩展寄存器至第15扩展寄存器,每个扩展寄存器被配置为存储当前运算级的扩展数据;以及多个扩展数据运算逻辑模块,每个扩展数据运算逻辑模块设置在该多个运算级中的相应的相邻两个运算级之间,该相邻两个运算级包括第一运算级和在第一运算级之后的第二运算级,每个扩展数据运算逻辑模块包括:第一子模块,被配置为基于第一运算级的第1扩展寄存器中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器中的扩展数据;以及第二子模块,被配置为基于第一运算级的第0扩展寄存器中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据,其中,用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据是第一运算级的第i扩展寄存器中存储的扩展数据,其中2≤i≤15且i为整数。
5.根据本公开的第二方面,提供了一种用于执行哈希算法的电路,包括:输入模块,被配置为接收数据;以及运算模块,被配置为基于接收到的数据计算哈希值,该运算模块包括:以流水线结构布置的多个运算级,该多个运算级中的每个运算级包括第0扩展寄存器至
第15扩展寄存器以及附加寄存器,每个扩展寄存器被配置为存储当前运算级的扩展数据,附加寄存器被配置为存储用于计算扩展数据的中间数据;以及多个扩展数据运算逻辑模块,每个扩展数据运算逻辑模块设置在所述多个运算级中的相应的相邻两个运算级之间,该相邻两个运算级包括第一运算级和在第一运算级之后的第二运算级,每个扩展数据运算逻辑模块包括:第一子模块,被配置为基于第一运算级的扩展寄存器中存储的扩展数据计算用于存储到第二运算级的附加寄存器中的中间数据;以及第二子模块,被配置为基于第一运算级的附加寄存器中存储的中间数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据,其中,用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据是第一运算级的第i扩展寄存器中存储的扩展数据,其中1≤i≤15且i为整数。
6.根据本公开的第三方面,提供了一种计算芯片,其包括如以上方面所述的电路。
7.根据本公开的第四方面,提供了一种加密货币矿机,其包括一个或多个如以上方面所述的计算芯片。
8.根据本公开的第五方面,提供了一种在用于执行哈希算法的电路中计算扩展数据的方法,该电路包括被配置为接收数据的输入模块和被配置为基于接收到的数据计算哈希值的运算模块,该运算模块包括以流水线结构布置的多个运算级,该多个运算级中的每个运算级包括第0扩展寄存器至第15扩展寄存器,每个扩展寄存器被配置为存储当前运算级的扩展数据,该方法包括:对于该多个运算级中的包括第一运算级和在第一运算级之后的第二运算级的相邻两个运算级:基于第一运算级的第1扩展寄存器中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器中的扩展数据;基于第一运算级的第0扩展寄存器中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据;以及将第一运算级的第i扩展寄存器中存储的扩展数据作为用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据,其中2≤i≤15且i为整数。
9.根据本公开的第六方面,提供了一种在用于执行哈希算法的电路中计算扩展数据的方法,该电路包括被配置为接收数据的输入模块和被配置为基于接收到的数据计算哈希值的运算模块,该运算模块包括以流水线结构布置的多个运算级,该多个运算级中的每个运算级包括第0扩展寄存器至第15扩展寄存器以及附加寄存器,每个扩展寄存器被配置为存储当前运算级的扩展数据,附加寄存器被配置为存储用于计算扩展数据的中间数据,该方法包括:对于该多个运算级中的包括第一运算级和在第一运算级之后的第二运算级的相邻两个运算级:基于第一运算级的扩展寄存器中存储的扩展数据计算用于存储到第二运算级的附加寄存器中的中间数据;基于第一运算级的附加寄存器中存储的中间数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据;以及将第一运算级的第i扩展寄存器中存储的扩展数据作为用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据,其中1≤i≤15且i为整数。
10.通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得更为清楚。
附图说明
11.构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
12.参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
13.图1示出了用于执行sha-256算法的示例性流水线结构的示意图;
14.图2示意性示出了图1中的流水线结构中的相邻两个运算级的扩展寄存器中的扩展数据之间的常规运算逻辑;
15.图3示出了根据本公开的一些实施例的用于执行哈希算法的电路的示意性框图;
16.图4至图7示意性示出了根据本公开的实施例的如图3所示的电路中包括扩展数据运算逻辑模块的部分的示例性配置;
17.图8示出了根据本公开的一些实施例的用于执行哈希算法的电路的示意性框图;
18.图9至图14示意性示出了根据本公开的实施例的如图8所示的电路中包括扩展数据运算逻辑模块的部分的示例性配置;以及
19.图15和图16示出了根据本公开的实施例的用于计算扩展数据的方法的示例性流程图。
20.注意,在以下说明的实施方式中,有时在不同的附图之间共同使用同一附图标记来表示相同部分或具有相同功能的部分,而省略其重复说明。在本说明书中,使用相似的标号和字母表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
21.为了便于理解,在附图等中所示的各结构的位置、尺寸及范围等有时不表示实际的位置、尺寸及范围等。因此,所公开的发明并不限于附图等所公开的位置、尺寸及范围等。此外,附图不必按比例绘制,一些特征可能被放大以示出具体组件的细节。
具体实施方式
22.现在将参照附图来详细描述本公开的各种示例性实施例。应当注意,除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
23.以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。本领域的技术人员将会理解,它们仅仅说明可以用来实施本发明的示例性方式,而不是穷尽的方式。
24.对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
25.为了更为清楚和直观地呈现本公开的发明构思,下文中将简要介绍sha-256算法并以其作为哈希算法的代表示例来描述根据本公开的实施例的用于执行哈希算法的电路和相关方法。本领域技术人员将理解,根据本公开的实施例的用于执行哈希算法的电路和相关方法适用于任何哈希算法,甚至可以进一步应用到任何其它合适的电路和方法中,而不仅限于实现sha-256算法。
26.图1示出了用于执行sha-256算法的示例性流水线结构的示意图。sha-256的输入是最大长度小于2
64
位的数据,输出是256位的数据摘要,即哈希值。输入数据以512位的数据块为单位进行处理。为了实现sha-256算法,需要对于每个512位的数据块要进行64轮重复运算,因此可以采用包括64个运算级的流水线结构来并行运算64组数据。如图1所示,该流水线结构包括第0运算级至第63运算级,每个运算级包括用于存储中间值的8个32位的压缩
寄存器a至h以及用于存储扩展数据的16个32位的扩展寄存器r0至r
15
。第0运算级可以接收输入的数据块,并将其分成8个32位数据分别存入压缩寄存器a至h中,然后对其进行运算处理并提供给第1运算级。之后,每个运算级对其接收到的前一运算级的运算结果进行运算并将自己的运算结果提供给后一运算级。最终在经过64个运算级的运算后,运算核可以输出对输入数据执行过一次sha-256算法的哈希运算结果。
27.下面详细讨论sha-256在每个运算级上进行的一轮运算的内部逻辑。在第t运算级上进行的第t轮运算由如下的运算式定义(t为整数且满足0≤t≤63):
28.t1=h+∑1(e)+ch(e,f,g)+k
t
+w
t

29.t2=∑0(a)+maj(a,b,c);
30.h=g;
31.g=f;
32.f=e;
33.e=d+t1;
34.d=c;
35.c=b;
36.b=a;
37.a=t1+t2;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(运算式1)
38.其中:
[0039][0040][0041][0042][0043]
其中,rotrn(x)表示对32位的变量x循环右移n位;w
t
为一个32位字,从当前的256位输入数据块导出;kt为一个32位附加常数;+为模2
32
加;and为32位按位与运算;not是取反的操作;为异或运算。
[0044]
接下来描述32位的字w
t
是如何从512位的数据块导出的。w
t
可以按照以下运算式得出:
[0045]
对于0≤t≤15:w
t
直接取自输入的数据块;
[0046]
对于16≤t≤63:
[0047]wt
=σ1(w
t-2
)+w
t-7
+σ0(w
t-15
)+w
t-16
ꢀꢀꢀꢀꢀꢀꢀ
(运算式2)
[0048]
其中:
[0049][0050][0051]
其中,rotrn(x)表示对32位的变量x循环右移n位;shrn(x)表示对32位变量x向右移动n位,左边填充0;为异或运算;+为模2
32
加。
[0052]
注意,以上∑0(x)、∑1(x)、σ0(x)、σ1(x)函数的公式是以sha-256为示例给出的用于处理32位数据的具体形式,本领域技术人员知道在其它sha算法(例如sha-512等)乃至其它哈希算法中这些函数可以适应性地采用其它相应形式用于处理其它大小的数据(例如64
位数据等)。
[0053]
具体地,图2示出了图1中的流水线结构中的相邻两个运算级的扩展寄存器中的扩展数据之间的常规运算逻辑。需要使用每个运算级的扩展寄存器r0、r1、r9和r
14
中的扩展数据来计算要存储在后一运算级的扩展寄存器r
15
中的扩展数据,另外扩展寄存器r1到r
15
中的扩展数据可以直接移位至后一运算级的相应扩展寄存器r0到r
14
中。具体而言,第t+1运算级的扩展寄存器r
15
中的扩展数据w
15

是通过三个加法器add1、add2、add3将第t运算级的扩展寄存器r0中的扩展数据w0、经σ0运算器进行σ0运算后的第t运算级的扩展寄存器r1中的扩展数据σ0(w1)、第t运算级的扩展寄存器r9中的扩展数据w9、经σ1运算器进行σ1运算后的第t运算级的扩展寄存器r
14
中的扩展数据σ1(w
14
)依次相加得到的,即w
15

=w0+σ0(w1)+w9+σ1(w
14
)。可以看到,从第t运算级的扩展寄存器r0、r1、r9和r
14
中的扩展数据w0、w1、w9、w
14
计算要存储在后一运算级的扩展寄存器r
15
中的扩展数据w
15

需要经历的运算逻辑级数高达4级,这带来了显著的计算延时,限制了流水线结构的运算速度,进而难以实现较低的功耗算力比。
[0054]
对此,本技术的发明人注意到,第t+1运算级的扩展寄存器r0与第t运算级的扩展寄存器r1二者之间存在直连关系,即第t运算级的扩展寄存器r1中存储的扩展数据被直接移位至第t+1运算级的扩展寄存器r0。因此,本技术的发明人想到,可以利用扩展寄存器r0、r1的这一直连关系,将用于计算第t+2运算级的扩展寄存器r
15
中要存储的扩展数据的过程中涉及第t+1运算级的扩展寄存器r0中的扩展数据(即第t运算级的扩展寄存器r1中的扩展数据)的部分提前到与用于计算第t+1运算级的扩展寄存器r
15
中要存储的扩展数据的过程同时进行,并存入第t+1运算级的扩展寄存器r0。这样,可以在将用于计算第t+2运算级的扩展寄存器r
15
中要存储的扩展数据的过程进行拆解后,将拆解出的部分与用于计算第t+1运算级的扩展寄存器r
15
中要存储的扩展数据的过程并行地处理。通过并行处理,可以减少每轮运算中计算扩展数据所需要经历的运算逻辑级数。
[0055]
因此,本公开提供了具有改进的扩展数据运算逻辑模块的用于执行哈希算法的电路以及改进的在用于执行哈希算法的电路中计算扩展数据的方法,其能够减少在相邻运算级之间基于前一运算级的扩展数据计算后一运算级的扩展数据所需要经历的运算逻辑级数,显著提高了电路进而包含该电路的计算芯片的运算速度,从而便于实现更低的功耗算力比。
[0056]
图3示出了根据本公开的一些实施例的用于执行哈希算法的电路100的示意性框图,其中箭头表示数据传递方向。电路100可以包括输入模块110和运算模块120。输入模块110可以被配置为接收数据。运算模块120可以被配置为基于接收到的数据计算哈希值。运算模块120可以包括以流水线结构布置的多个运算级120-0、...、120-63,每个运算级可以包括第0扩展寄存器r0至第15扩展寄存器r
15
,每个扩展寄存器可以被配置为存储当前运算级的扩展数据。
[0057]
应理解,虽然在附图中将运算模块120描绘为包括64个运算级,但是如前面已经提到的,本文仅仅以用于执行sha-256算法的电路作为非限制性示例,根据本公开的电路实际上可以适用于执行现在已知的或以后开发的适用于矿机的任何哈希算法(不限于sha系列算法),并且可以包括任何合适数量的运算级。还应理解的是,实际的电路还可以具有附加的其它部件(诸如压缩寄存器等),但是为了避免模糊本公开的要点,附图没有示出并且本文也没有去讨论这些其它部件。
[0058]
通常,运算模块120的最前一个运算级120-0的第0扩展寄存器r0至第15扩展寄存器r
15
中存储的扩展数据例如可以直接取自由输入模块110接收的数据,而从运算级120-1开始的每个运算级的第0扩展寄存器r0至第15扩展寄存器r
15
中要存储的扩展数据例如可以基于前一运算级的第0扩展寄存器r0至第15扩展寄存器r
15
中存储的扩展数据确定。本公开主要讨论的是如何基于前一运算级的第0扩展寄存器r0至第15扩展寄存器r
15
中存储的扩展数据确定后一运算级的第0扩展寄存器r0至第15扩展寄存器r
15
中要存储的扩展数据。
[0059]
运算模块120还可以包括多个扩展数据运算逻辑模块130,每个扩展数据运算逻辑模块130设置在运算模块120的多个运算级120-0、...、120-63中的相应的相邻两个运算级之间。在本文中,可以将相邻两个运算级中在前的运算级称为第一运算级并将相邻两个运算级中在后的运算级称为第二运算级,注意

第一



第二

仅是用于区分而非限制性的。例如,如图3所示,相邻两个运算级120-a、120-b之间设置有扩展数据运算逻辑模块130。每个扩展数据运算逻辑模块130可以包括第一子模块131和第二子模块132。
[0060]
扩展数据运算逻辑模块130可以被配置用于基于第一运算级(例如,120-a)的扩展寄存器中存储的扩展数据计算用于存储到第二运算级(例如,120-b)的扩展寄存器中的扩展数据。第一子模块131可以被配置为基于第一运算级的第1扩展寄存器r1中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据。第二子模块132可以被配置为基于第一运算级的第0扩展寄存器r0中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。另外,用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据可以是第一运算级的第i扩展寄存器中存储的扩展数据,其中2≤i≤15且i为整数。也就是说,在电路100中,第二运算级的第0扩展寄存器r0和第15扩展寄存器r
15
中要存储的扩展数据是通过第一运算级的扩展寄存器中存储的扩展数据进行运算而得到的,而第二运算级的第1扩展寄存器r1至第14扩展寄存器r
14
中要存储的扩展数据是通过将第一运算级的第2扩展寄存器r2至第15扩展寄存器r
15
中的每个扩展寄存器中存储的扩展数据直接移位到第二运算级的第1扩展寄存器r1至第14扩展寄存器r
14
中的相应扩展寄存器而得到的。
[0061]
在一些实施例中,第二运算级的后一运算级的第15扩展寄存器r
15
中存储的扩展数据可以是基于第一运算级的第1扩展寄存器r1、第2扩展寄存器r2、第10扩展寄存器r
10
、第15扩展寄存器r
15
中存储的扩展数据确定的。在一些实施例中,第二运算级的后一运算级的第15扩展寄存器r
15
中存储的扩展数据w
15

、第一运算级的第1扩展寄存器r1中存储的扩展数据w1、第一运算级的第2扩展寄存器r2中存储的扩展数据w2、第一运算级的第10扩展寄存器r
10
中存储的扩展数据w
10
以及第一运算级的第15扩展寄存器r
15
中存储的扩展数据w
15
可以满足如下关系:w
15

=w1+σ0(w2)+w
10
+σ1(w
15
),其中σ0、σ1、+的定义同前所述。
[0062]
在一些实施例中,第一子模块131可以被配置为基于第一运算级的第2扩展寄存器r2、第10扩展寄存器r
10
、第15扩展寄存器r
15
中的一者或两者中存储的扩展数据以及第一运算级的第1扩展寄存器r1中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据。
[0063]
在一些实施例中,第二子模块132可以被配置为基于第一运算级的第1扩展寄存器r1、第9扩展寄存器r9、第14扩展寄存器r
14
中的一者或两者中存储的扩展数据以及第一运算级的第0扩展寄存器r0中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0064]
下面结合图4至图7描述根据本公开的实施例的如图3所示的电路中包括扩展数据运算逻辑模块的部分的几种非限制性示例配置。在这些图中,以相邻两个运算级120-a和120-b为例进行说明,可以理解,在运算模块120中的任意相邻两个运算级都可以是以下讨论的运算级120-a和120-b。另外,在这些图中,为了清楚起见,用虚线框指示第一子模块131和第二子模块132,用点线箭头指示直接移位而不经过运算的扩展数据的移动方向,用点划线箭头指示经由第一子模块131处理的扩展数据的移动方向,用实线箭头指示经由第二子模块132处理的扩展数据的移动方向。
[0065]
在一些实施例中,第一子模块131可以被配置为基于第一运算级的第1扩展寄存器r1和第2扩展寄存器r2中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据,以及第二子模块132可以被配置为基于第一运算级的第0扩展寄存器r0、第9扩展寄存器r9和第14扩展寄存器r
14
中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0066]
例如,在一些示例中,如图4所示,运算级120-b的第0扩展寄存器r0中的扩展数据w0′
是通过由第一子模块131处理运算级120-a的第1扩展寄存器r1中存储的扩展数据w1和第2扩展寄存器r2中存储的扩展数据w2得到的。具体地,在这个示例中,第一子模块131包括用于执行σ0运算的σ0运算器和用于执行加法运算的加法器add1,其中扩展数据w2被输入到σ0运算器,σ0运算器的输出以及扩展数据w1被输入到加法器add1,加法器add1的输出被提供给运算级120-b的第0扩展寄存器r0,使得w0′
=w1+σ0(w2)。
[0067]
进一步如图4所示,运算级120-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块132处理运算级120-a的第0扩展寄存器r0中存储的扩展数据w0、第9扩展寄存器r9中存储的扩展数据w9和第14扩展寄存器r
14
中存储的扩展数据w
14
得到的。具体地,在这个示例中,第二子模块132包括用于执行σ1运算的σ1运算器以及用于执行加法运算的全加器faa和加法器add2,其中扩展数据w
14
被输入到σ1运算器,σ1运算器的输出、扩展数据w0以及扩展数据w9被输入到全加器faa,全加器faa的输出被输入到加法器add2,加法器add2的输出被提供给运算级120-b的第15扩展寄存器r
15
,使得w
15

=w0+w9+σ1(w
14
)。
[0068]
进一步如图4所示,运算级120-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级120-b的第(i-1)扩展寄存器中,其中2≤i≤15且i为整数。
[0069]
在图4所示的示例中,第一子模块131所经历的运算逻辑级数为2级,第二子模块132所经历的运算逻辑级数为3级。第一子模块131与第二子模块132可以彼此独立地并行操作,使得最终计算用于运算级120-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0070]
在一些实施例中,第一子模块131可以被配置为基于第一运算级的第1扩展寄存器r1和第10扩展寄存器r10中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据,以及第二子模块132可以被配置为基于第一运算级的第0扩展寄存器r0、第1扩展寄存器r1和第14扩展寄存器r
14
中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0071]
例如,在一些示例中,如图5所示,运算级120-b的第0扩展寄存器r0中的扩展数据w0′
是通过由第一子模块131处理运算级120-a的第1扩展寄存器r1中存储的扩展数据w1和第10扩展寄存器r
10
中存储的扩展数据w
10
得到的。具体地,在这个示例中,第一子模块131包括
用于执行加法运算的加法器add1,其中扩展数据w1和扩展数据w
10
被输入到加法器add1,加法器add1的输出被提供给运算级120-b的第0扩展寄存器r0,使得w0′
=w1+w
10

[0072]
进一步如图5所示,运算级120-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块132处理运算级120-a的第0扩展寄存器r0中存储的扩展数据w0、第1扩展寄存器r1中存储的扩展数据w1和第14扩展寄存器r
14
中存储的扩展数据w
14
得到的。具体地,在这个示例中,第二子模块132包括用于执行σ0运算的σ0运算器、用于执行σ1运算的σ1运算器以及用于执行加法运算的全加器faa和加法器add2,其中扩展数据w1被输入到σ0运算器,扩展数据w
14
被输入到σ1运算器,σ0运算与σ1运算例如可以同时进行。然后,σ0运算器的输出、σ1运算器的输出以及扩展数据w0被输入到全加器faa,全加器faa的输出被输入到加法器add2,加法器add2的输出被提供给运算级120-b的第15扩展寄存器r
15
,使得w
15

=w0+σ0(w1)+σ1(w
14
)。
[0073]
进一步如图5所示,运算级120-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级120-b的第(i-1)扩展寄存器中,其中2≤i≤15且i为整数。
[0074]
在图5所示的示例中,第一子模块131所经历的运算逻辑级数为1级,第二子模块132所经历的运算逻辑级数为3级。第一子模块131与第二子模块132可以彼此独立地并行操作,使得最终计算用于运算级120-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0075]
在一些实施例中,第一子模块131可以被配置为基于第一运算级的第1扩展寄存器r1、第2扩展寄存器r2和第10扩展寄存器r
10
中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据,以及第二子模块132可以被配置为基于第一运算级的第0扩展寄存器r0和第14扩展寄存器r
14
中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0076]
例如,在一些示例中,如图6所示,运算级120-b的第0扩展寄存器r0中的扩展数据w0′
是通过由第一子模块131处理运算级120-a的第1扩展寄存器r1中存储的扩展数据w1、第2扩展寄存器r2中存储的扩展数据w2和第10扩展寄存器r
10
中存储的扩展数据w
10
得到的。具体地,在这个示例中,第一子模块131包括用于执行σ0运算的σ0运算器以及用于执行加法运算的全加器faa和加法器add1,其中扩展数据w2被输入到σ0运算器,σ0运算器的输出、扩展数据w1和扩展数据w
10
被输入到全加器faa,全加器faa的输出被输入到加法器add1,加法器add1的输出被提供给运算级120-b的第0扩展寄存器r0,使得w0′
=w1+σ0(w2)+w
10

[0077]
进一步如图6所示,运算级120-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块132处理运算级120-a的第0扩展寄存器r0中存储的扩展数据w0和第14扩展寄存器r
14
中存储的扩展数据w
14
得到的。具体地,在这个示例中,第二子模块132包括用于执行σ1运算的σ1运算器以及用于执行加法运算的加法器add2,其中扩展数据w
14
被输入到σ1运算器,σ1运算器的输出以及扩展数据w0被输入到加法器add2,加法器add2的输出被提供给运算级120-b的第15扩展寄存器r
15
,使得w
15

=w0+σ1(w
14
)。
[0078]
进一步如图6所示,运算级120-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级120-b的第(i-1)扩展寄存器中,其中2≤i≤15且i为整数。
[0079]
在图6所示的示例中,第一子模块131所经历的运算逻辑级数为3级,第二子模块132所经历的运算逻辑级数为2级。第一子模块131与第二子模块132可以彼此独立地并行操
作,使得最终计算用于运算级120-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0080]
在一些实施例中,第一子模块131可以被配置为基于第一运算级的第1扩展寄存器r1和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据,以及第二子模块132可以被配置为基于第一运算级的第0扩展寄存器r0、第1扩展寄存器r1和第9扩展寄存器r9中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0081]
例如,在一些示例中,如图7所示,运算级120-b的第0扩展寄存器r0中的扩展数据w0′
是通过由第一子模块131处理运算级120-a的第1扩展寄存器r1中存储的扩展数据w1和第15扩展寄存器r
15
中存储的扩展数据w
15
得到的。具体地,在这个示例中,第一子模块131包括用于执行σ1运算的σ1运算器以及用于执行加法运算的加法器add1,其中扩展数据w
15
被输入到σ1运算器,σ1运算器的输出和扩展数据w1被输入到加法器add1,加法器add1的输出被提供给运算级120-b的第0扩展寄存器r0,使得w0′
=w1+σ1(w
15
)。
[0082]
进一步如图7所示,运算级120-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块132处理运算级120-a的第0扩展寄存器r0中存储的扩展数据w0、第1扩展寄存器r1中存储的扩展数据w1和第9扩展寄存器r9中存储的扩展数据w9得到的。具体地,在这个示例中,第二子模块132包括用于执行σ0运算的σ0运算器以及用于执行加法运算的全加器faa和加法器add2,其中扩展数据w1被输入到σ0运算器,σ0运算器的输出、扩展数据w0以及扩展数据w9被输入到全加器faa,全加器faa的输出被输入到加法器add2,加法器add2的输出被提供给运算级120-b的第15扩展寄存器r
15
,使得w
15

=w0+σ0(w1)+w9。
[0083]
进一步如图7所示,运算级120-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级120-b的第(i-1)扩展寄存器中,其中2≤i≤15且i为整数。
[0084]
在图7所示的示例中,第一子模块131所经历的运算逻辑级数为2级,第二子模块132所经历的运算逻辑级数为3级。第一子模块131与第二子模块132可以彼此独立地并行操作,使得最终计算用于运算级120-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0085]
在一些实施例中,第一子模块131可以被配置为基于第一运算级的第1扩展寄存器r1、第2扩展寄存器r2和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据,以及第二子模块132可以被配置为基于第一运算级的第0扩展寄存器r0和第9扩展寄存器r9中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。具体地,在一些示例中,运算级120-b的第0扩展寄存器r0中的扩展数据w0′
可以通过由第一子模块131处理运算级120-a的第1扩展寄存器r1中存储的扩展数据w1、第2扩展寄存器r2中存储的扩展数据w2和第15扩展寄存器r
15
中存储的扩展数据w
15
得到,运算级120-b的第15扩展寄存器r
15
中的扩展数据w
15

可以通过由第二子模块132处理运算级120-a的第0扩展寄存器r0中存储的扩展数据w0和第9扩展寄存器r9中存储的扩展数据w9得到,使得w0′
=w1+σ0(w2)+σ1(w
15
),w
15

=w0+w9。
[0086]
在一些实施例中,第一子模块131可以被配置为基于第一运算级的第1扩展寄存器r1、第10扩展寄存器r
10
和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器r0中的扩展数据,以及第二子模块132可以被配置为基于第一运算级的第
0扩展寄存器r0和第1扩展寄存器r1中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据。具体地,在一些示例中,运算级120-b的第0扩展寄存器r0中的扩展数据w0′
可以通过由第一子模块131处理运算级120-a的第1扩展寄存器r1中存储的扩展数据w1、第10扩展寄存器r
10
中存储的扩展数据w
10
和第15扩展寄存器r
15
中存储的扩展数据w
15
得到,运算级120-b的第15扩展寄存器r
15
中的扩展数据w
15

可以通过由第二子模块132处理运算级120-a的第0扩展寄存器r0中存储的扩展数据w0和第1扩展寄存器r1中存储的扩展数据w1得到,使得w0′
=w1+w
10
+σ1(w
15
),w
15

=w0+σ0(w1)。
[0087]
相应地,本公开也提供了在用于执行哈希算法的电路中计算扩展数据的方法。图13示出了根据本公开的实施例的在用于执行哈希算法的电路中计算扩展数据的方法300的示例性流程图。这样的电路可以包括被配置为接收数据的输入模块和被配置为基于接收到的数据计算哈希值的运算模块,其中运算模块可以包括以流水线结构布置的多个运算级,每个运算级可以包括第0扩展寄存器至第15扩展寄存器,每个扩展寄存器可以被配置为存储当前运算级的扩展数据。对于运算模块的多个运算级中的包括第一运算级和在第一运算级之后的第二运算级的相邻两个运算级,方法300可以包括:在s301处,基于第一运算级的第1扩展寄存器中存储的扩展数据计算用于存储到第二运算级的第0扩展寄存器中的扩展数据;在s302处,基于第一运算级的第0扩展寄存器中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据;以及在s303处,将第一运算级的第i扩展寄存器中存储的扩展数据作为用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据,其中2≤i≤15且i为整数。注意,s301-s303并不需要以顺序次序执行,而是可以以任何次序执行,或者可以至少部分地并行执行。
[0088]
在一些实施例中,计算用于存储到第二运算级的第0扩展寄存器中的扩展数据与计算用于存储到第二运算级的第15扩展寄存器中的扩展数据可以是同时进行的。
[0089]
在一些实施例中,第二运算级的后一运算级的第15扩展寄存器中存储的扩展数据可以是基于第一运算级的第1扩展寄存器、第2扩展寄存器、第10扩展寄存器、第15扩展寄存器中存储的扩展数据确定的。
[0090]
方法300还可以采用以上关于第一子模块131和第二子模块132描述的各种方式来计算扩展数据,在此不再赘述。方法300可以减少在用于执行哈希算法的电路中计算扩展数据导致的计算延时,从而大幅提高电路进而包含该电路的计算芯片的运算速度,从而实现更低的功耗算力比。
[0091]
此外,在根据本公开的上述实施例的电路和方法中,使用扩展寄存器r0来存储提前进行的在原本用于计算后续运算级的扩展寄存器r
15
中要存储的扩展数据的过程中涉及先前运算级的扩展寄存器r1中的扩展数据的部分。在一些替代实施例中,也可以使用附加的寄存器来替代地实现扩展寄存器r0在上述实施例中所起到的作用。而且,当使用附加的寄存器时,不仅可以用于提前进行在原本用于计算后续运算级的扩展寄存器r
15
中要存储的扩展数据的过程中涉及先前运算级的扩展寄存器r1中的扩展数据的部分,而且可以提前进行在原本用于计算后续运算级的扩展寄存器r
15
中要存储的扩展数据的过程的任何合适部分。
[0092]
图8示出了根据本公开的另外一些实施例的用于执行哈希算法的电路200的示意性框图。其中箭头表示数据传递方向。电路200可以包括输入模块210和运算模块220。输入
模块210可以被配置为接收数据。运算模块220可以被配置为基于接收到的数据计算哈希值。运算模块220可以包括以流水线结构布置的多个运算级220-0、...、220-63,每个运算级可以包括第0扩展寄存器r0至第15扩展寄存器r
15
以及附加寄存器x,每个扩展寄存器可以被配置为存储当前运算级的扩展数据,附加寄存器可以被配置为存储用于计算扩展数据的中间数据。在一些实施例中,最前一个运算级220-0的附加寄存器x中存储的中间数据与最前一个运算级220-0的第0扩展寄存器r0中存储的扩展数据可以相同。
[0093]
运算模块220还可以包括多个扩展数据运算逻辑模块230,每个扩展数据运算逻辑模块230设置在运算模块220的多个运算级220-0、...、220-63中的相应的相邻两个运算级之间。在本文中,可以将相邻两个运算级中在前的运算级称为第一运算级并将相邻两个运算级中在后的运算级称为第二运算级,注意

第一



第二

仅是用于区分而非限制性的。例如,如图8所示,相邻两个运算级220-a、220-b之间设置有扩展数据运算逻辑模块230。每个扩展数据运算逻辑模块230可以包括第一子模块231和第二子模块232。
[0094]
扩展数据运算逻辑模块230可以被配置用于基于第一运算级(例如,220-a)的扩展寄存器中存储的扩展数据和第一运算级(例如,220-a)的附加寄存器中存储的中间数据计算用于存储到第二运算级(例如,220-b)的扩展寄存器中的扩展数据和用于存储到第二运算级的附加寄存器中的中间数据。第一子模块231可以被配置为基于第一运算级的扩展寄存器中存储的扩展数据计算用于存储到第二运算级的附加寄存器中的中间数据。第二子模块232可以被配置为基于第一运算级的附加寄存器中存储的中间数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据。另外,用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据可以是第一运算级的第i扩展寄存器中存储的扩展数据,其中1≤i≤15且i为整数。也就是说,在电路200中,第二运算级的第15扩展寄存器r
15
中要存储的扩展数据是通过第一运算级的附加寄存器中存储的中间数据进行运算而得到的,而第二运算级的第0扩展寄存器r0至第14扩展寄存器r
14
中要存储的扩展数据是通过将第一运算级的第1扩展寄存器r1至第15扩展寄存器r
15
中的每个扩展寄存器中存储的扩展数据直接移位到第二运算级的第0扩展寄存器r0至第14扩展寄存器r
14
中的相应扩展寄存器而得到的。
[0095]
在一些实施例中,第二运算级的后一运算级的第15扩展寄存器r
15
中存储的扩展数据可以是基于第一运算级的第1扩展寄存器r1、第2扩展寄存器r2、第10扩展寄存器r
10
、第15扩展寄存器r
15
中存储的扩展数据确定的。在一些实施例中,第二运算级的后一运算级的第15扩展寄存器r
15
中存储的扩展数据w
15

、第一运算级的第1扩展寄存器r1中存储的扩展数据w1、第一运算级的第2扩展寄存器r2中存储的扩展数据w2、第一运算级的第10扩展寄存器r
10
中存储的扩展数据w
10
、第一运算级的第15扩展寄存器r
15
中存储的扩展数据w
15
可以满足如下关系:w
15

=w1+σ0(w2)+w
10
+σ1(w
15
),其中σ0、σ1、+的定义同前所述。
[0096]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第1扩展寄存器r1、第2扩展寄存器r2、第10扩展寄存器r
10
、第15扩展寄存器r
15
中的两者或三者中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据。
[0097]
在一些实施例中,第二子模块232可以被配置为基于第一运算级的第0扩展寄存器r0、第1扩展寄存器r1、第9扩展寄存器r9、第14扩展寄存器r
14
中的一者或两者中存储的扩展数据以及第一运算级的附加寄存器x中存储的中间数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0098]
下面结合图9至图14描述根据本公开的实施例的如图8所示的电路中包括扩展数据运算逻辑模块的部分的几种非限制性示例配置。在这些图中,以相邻两个运算级220-a和220-b为例进行说明,可以理解,在运算模块220中的任意相邻两个运算级都可以是以下讨论的运算级220-a和220-b。另外,在这些图中,为了清楚起见,用虚线框指示第一子模块231和第二子模块232,用点线箭头指示直接移位而不经过运算的扩展数据的移动方向,用点划线箭头指示经由第一子模块231处理的扩展数据的移动方向,用实线箭头指示经由第二子模块232处理的扩展数据的移动方向。
[0099]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第1扩展寄存器r1和第2扩展寄存器r2中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第9扩展寄存器r9和第14扩展寄存器r
14
中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0100]
例如,在一些示例中,如图9所示,运算级220-b的附加寄存器x中的中间数据w
x

是通过由第一子模块231处理运算级220-a的第1扩展寄存器r1中存储的扩展数据w1和第2扩展寄存器r2中存储的扩展数据w2得到的。具体地,在这个示例中,第一子模块231包括用于执行σ0运算的σ0运算器和用于执行加法运算的加法器add1,其中扩展数据w2被输入到σ0运算器,σ0运算器的输出以及扩展数据w1被输入到加法器add1,加法器add1的输出被提供给运算级220-b的附加寄存器x,使得w
x

=w1+σ0(w2)。
[0101]
进一步如图9所示,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块232处理运算级220-a的附加寄存器x中存储的中间数据w
x
、第9扩展寄存器r9中存储的扩展数据w9和第14扩展寄存器r
14
中存储的扩展数据w
14
得到的。具体地,在这个示例中,第二子模块232包括用于执行σ1运算的σ1运算器以及用于执行加法运算的全加器faa和加法器add2,其中扩展数据w
14
被输入到σ1运算器,σ1运算器的输出、中间数据w
x
以及扩展数据w9被输入到全加器faa,全加器faa的输出被输入到加法器add2,加法器add2的输出被提供给运算级220-b的第15扩展寄存器r
15
,使得w
15

=w
x
+w9+σ1(w
14
)。
[0102]
进一步如图9所示,运算级220-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级220-b的第(i-1)扩展寄存器中,其中1≤i≤15且i为整数。
[0103]
在图9所示的示例中,第一子模块231所经历的运算逻辑级数为2级,第二子模块232所经历的运算逻辑级数为3级。第一子模块231与第二子模块232可以彼此独立地并行操作,使得最终计算用于运算级220-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0104]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第1扩展寄存器r1和第10扩展寄存器r10中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第1扩展寄存器r1和第14扩展寄存器r
14
中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0105]
例如,在一些示例中,如图10所示,运算级220-b的附加寄存器x中的中间数据w
x

是通过由第一子模块231处理运算级220-a的第1扩展寄存器r1中存储的扩展数据w1和第10扩展寄存器r
10
中存储的扩展数据w
10
得到的。具体地,在这个示例中,第一子模块231包括用
于执行加法运算的加法器add1,其中扩展数据w1和扩展数据w
10
被输入到加法器add1,加法器add1的输出被提供给运算级220-b的附加寄存器x,使得w
x

=w1+w
10

[0106]
进一步如图10所示,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块232处理运算级220-a的附加寄存器x中存储的中间数据w
x
、第1扩展寄存器r1中存储的扩展数据w1和第14扩展寄存器r
14
中存储的扩展数据w
14
得到的。具体地,在这个示例中,第二子模块232包括用于执行σ0运算的σ0运算器、用于执行σ1运算的σ1运算器以及用于执行加法运算的全加器faa和加法器add2,其中扩展数据w1被输入到σ0运算器,扩展数据w
14
被输入到σ1运算器,σ0运算与σ1运算例如可以同时进行。然后,σ0运算器的输出、σ1运算器的输出以及中间数据w
x
被输入到全加器faa,全加器faa的输出被输入到加法器add2,加法器add2的输出被提供给运算级220-b的第15扩展寄存器r
15
,使得w
15

=w
x
+σ0(w1)+σ1(w
14
)。
[0107]
进一步如图10所示,运算级220-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级220-b的第(i-1)扩展寄存器中,其中1≤i≤15且i为整数。
[0108]
在图10所示的示例中,第一子模块231所经历的运算逻辑级数为1级,第二子模块232所经历的运算逻辑级数为3级。第一子模块231与第二子模块232可以彼此独立地并行操作,使得最终计算用于运算级220-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0109]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第1扩展寄存器r1、第2扩展寄存器r2和第10扩展寄存器r
10
中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第14扩展寄存器r
14
中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0110]
例如,在一些示例中,如图11所示,运算级220-b的附加寄存器x中的中间数据w
x

是通过由第一子模块231处理运算级220-a的第1扩展寄存器r1中存储的扩展数据w1、第2扩展寄存器r2中存储的扩展数据w2和第10扩展寄存器r
10
中存储的扩展数据w
10
得到的。具体地,在这个示例中,第一子模块231包括用于执行σ0运算的σ0运算器以及用于执行加法运算的全加器faa和加法器add1,其中扩展数据w2被输入到σ0运算器,σ0运算器的输出、扩展数据w1和扩展数据w
10
被输入到全加器faa,全加器faa的输出被输入到加法器add1,加法器add1的输出被提供给运算级220-b的附加寄存器x,使得w
x

=w1+σ0(w2)+w
10

[0111]
进一步如图11所示,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块232处理运算级220-a的附加寄存器x中存储的中间数据w
x
和第14扩展寄存器r
14
中存储的扩展数据w
14
得到的。具体地,在这个示例中,第二子模块232包括用于执行σ1运算的σ1运算器以及用于执行加法运算的加法器add2,其中扩展数据w
14
被输入到σ1运算器,σ1运算器的输出以及中间数据w
x
被输入到加法器add2,加法器add2的输出被提供给运算级220-b的第15扩展寄存器r
15
,使得w
15

=w
x
+σ1(w
14
)。
[0112]
进一步如图11所示,运算级220-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级220-b的第(i-1)扩展寄存器中,其中1≤i≤15且i为整数。
[0113]
在图11所示的示例中,第一子模块231所经历的运算逻辑级数为3级,第二子模块232所经历的运算逻辑级数为2级。第一子模块231与第二子模块232可以彼此独立地并行操作,使得最终计算用于运算级220-b的扩展数据所需要经历的运算逻辑级数减少至3级,大
大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0114]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第1扩展寄存器r1和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第1扩展寄存器r1和第9扩展寄存器r9中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0115]
例如,在一些示例中,如图12所示,运算级220-b的附加寄存器x中的中间数据w
x

是通过由第一子模块231处理运算级220-a的第1扩展寄存器r1中存储的扩展数据w1和第15扩展寄存器r
15
中存储的扩展数据w
15
得到的。具体地,在这个示例中,第一子模块231包括用于执行σ1运算的σ1运算器以及用于执行加法运算的加法器add1,其中扩展数据w
15
被输入到σ1运算器,σ1运算器的输出和扩展数据w1被输入到加法器add1,加法器add1的输出被提供给运算级220-b的附加寄存器x,使得w
x

=w1+σ1(w
15
)。
[0116]
进一步如图12所示,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块232处理运算级220-a的附加寄存器x中存储的中间数据w
x
、第1扩展寄存器r1中存储的扩展数据w1和第9扩展寄存器r9中存储的扩展数据w9得到的。具体地,在这个示例中,第二子模块232包括用于执行σ0运算的σ0运算器以及用于执行加法运算的全加器faa和加法器add2,其中扩展数据w1被输入到σ0运算器,σ0运算器的输出、中间数据w
x
以及扩展数据w9被输入到全加器faa,全加器faa的输出被输入到加法器add2,加法器add2的输出被提供给运算级220-b的第15扩展寄存器r
15
,使得w
15

=w
x
+σ0(w1)+w9。
[0117]
进一步如图12所示,运算级220-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级220-b的第(i-1)扩展寄存器中,其中1≤i≤15且i为整数。
[0118]
在图12所示的示例中,第一子模块231所经历的运算逻辑级数为2级,第二子模块232所经历的运算逻辑级数为3级。第一子模块231与第二子模块232可以彼此独立地并行操作,使得最终计算用于运算级220-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0119]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第1扩展寄存器r1、第2扩展寄存器r2和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第9扩展寄存器r9中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。具体地,在一些示例中,运算级220-b的附加寄存器x中的中间数据w
x

可以通过由第一子模块231处理运算级220-a的第1扩展寄存器r1中存储的扩展数据w1、第2扩展寄存器r2中存储的扩展数据w2和第15扩展寄存器r
15
中存储的扩展数据w
15
得到,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

可以通过由第二子模块232处理运算级220-a的附加寄存器x中存储的中间数据w
x
和运算级220-a的第9扩展寄存器r9中存储的扩展数据w9得到,使得w
x

=w1+σ0(w2)+σ1(w
15
),w
15

=w
x
+w9。
[0120]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第1扩展寄存器r1、第10扩展寄存器r10和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第1扩展寄存器r1中存储的扩展数据计算用
于存储到第二运算级的第15扩展寄存器中的扩展数据。具体地,在一些示例中,运算级220-b的附加寄存器x中的中间数据w
x

可以通过由第一子模块231处理运算级220-a的第1扩展寄存器r1中存储的扩展数据w1、第10扩展寄存器r
10
中存储的扩展数据w
10
和第15扩展寄存器r
15
中存储的扩展数据w
15
得到,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

可以通过由第二子模块232处理运算级220-a的附加寄存器x中的中间数据w
x
和运算级220-a的第1扩展寄存器r1中存储的扩展数据w1得到,使得w
x

=w1+w
10
+σ1(w
15
),w
15

=w
x
+σ0(w1)。
[0121]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第2扩展寄存器r2和第10扩展寄存器r10中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第0扩展寄存器r0和第14扩展寄存器r
14
中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0122]
例如,在一些示例中,如图13所示,运算级220-b的附加寄存器x中的中间数据w
x

是通过由第一子模块231处理运算级220-a的第2扩展寄存器r2中存储的扩展数据w2和第10扩展寄存器r
10
中存储的扩展数据w
10
得到的。具体地,在这个示例中,第一子模块231包括用于执行σ0运算的σ0运算器以及用于执行加法运算的加法器add1,其中扩展数据w2被输入到σ0运算器,σ0运算器的输出和扩展数据w
10
被输入到加法器add1,加法器add1的输出被提供给运算级220-b的附加寄存器x,使得w
x

=σ0(w2)+w
10

[0123]
进一步如图13所示,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块232处理运算级220-a的附加寄存器x中存储的中间数据w
x
、第0扩展寄存器r0中存储的扩展数据w0和第14扩展寄存器r
14
中存储的扩展数据w
14
得到的。具体地,在这个示例中,第二子模块232包括用于执行σ1运算的σ1运算器以及用于执行加法运算的全加器faa和加法器add2,其中扩展数据w
14
被输入到σ1运算器,σ1运算器的输出、中间数据w
x
以及扩展数据w0被输入到全加器faa,全加器faa的输出被输入到加法器add2,加法器add2的输出被提供给运算级220-b的第15扩展寄存器r
15
,使得w
15

=w
x
+w0+σ1(w
14
)。
[0124]
进一步如图13所示,运算级220-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级220-b的第(i-1)扩展寄存器中,其中1≤i≤15且i为整数。
[0125]
在图13所示的示例中,第一子模块231所经历的运算逻辑级数为2级,第二子模块232所经历的运算逻辑级数为3级。第一子模块231与第二子模块232可以彼此独立地并行操作,使得最终计算用于运算级220-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0126]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第2扩展寄存器r2、第10扩展寄存器r
10
和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第0扩展寄存器r0中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。
[0127]
例如,在一些示例中,如图14所示,运算级220-b的附加寄存器x中的中间数据w
x

是通过由第一子模块231处理运算级220-a的第2扩展寄存器r2中存储的扩展数据w2、第10扩展寄存器r
10
中存储的扩展数据w
10
和第15扩展寄存器r
15
中存储的扩展数据w
15
得到的。具体地,在这个示例中,第一子模块231包括用于执行σ0运算的σ0运算器、用于执行σ1运算的σ1运
算器以及用于执行加法运算的全加器faa和加法器add1,其中扩展数据w2被输入到σ0运算器,扩展数据w
15
被输入到σ1运算器,σ0运算和σ1运算可以同时进行。然后,σ0运算器的输出、σ1运算器的输出和扩展数据w
10
被输入到全加器faa,全加器faa的输出被输入到加法器add1,加法器add1的输出被提供给运算级220-b的附加寄存器x,使得w
x

=σ0(w2)+w
10
+σ1(w
15
)。
[0128]
进一步如图14所示,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

是通过由第二子模块232处理运算级220-a的附加寄存器x中存储的中间数据w
x
和第0扩展寄存器r0中存储的扩展数据w0得到的。具体地,在这个示例中,第二子模块232包括加法器add2,其中中间数据w
x
以及扩展数据w0被输入到加法器add2,加法器add2的输出被提供给运算级220-b的第15扩展寄存器r
15
,使得w
15

=w
x
+w0。
[0129]
进一步如图14所示,运算级220-a的第i扩展寄存器中存储的扩展数据被直接移位到运算级220-b的第(i-1)扩展寄存器中,其中1≤i≤15且i为整数。
[0130]
在图14所示的示例中,第一子模块231所经历的运算逻辑级数为3级,第二子模块232所经历的运算逻辑级数为1级。第一子模块231与第二子模块232可以彼此独立地并行操作,使得最终计算用于运算级220-b的扩展数据所需要经历的运算逻辑级数减少至3级,大大降低了计算延时,使得流水线结构的运算速度得到大幅提升。
[0131]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第2扩展寄存器r2和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第0扩展寄存器r0和第9扩展寄存器r9中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。具体地,在一些示例中,运算级220-b的附加寄存器x中的中间数据w
x

可以通过由第一子模块231处理运算级220-a的第2扩展寄存器r2中存储的扩展数据w2和第15扩展寄存器r
15
中存储的扩展数据w
15
得到,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

可以通过由第二子模块232处理运算级220-a的附加寄存器x中的中间数据w
x
以及运算级220-a的第0扩展寄存器r0中存储的扩展数据w0和第9扩展寄存器r9中存储的扩展数据w9得到,使得w
x

=σ0(w2)+σ1(w
15
),w
15

=w
x
+w0+w9。
[0132]
在一些实施例中,第一子模块231可以被配置为基于第一运算级的第10扩展寄存器r
10
和第15扩展寄存器r
15
中存储的扩展数据计算用于存储到第二运算级的附加寄存器x中的中间数据,以及第二子模块232可以被配置为基于第一运算级的附加寄存器x中存储的中间数据以及第一运算级的第0扩展寄存器r0和第1扩展寄存器r1中存储的扩展数据计算用于存储到第二运算级的第15扩展寄存器r
15
中的扩展数据。具体地,在一些示例中,运算级220-b的附加寄存器x中的中间数据w
x

可以通过由第一子模块231处理运算级220-a的第10扩展寄存器r
10
中存储的扩展数据w
10
和第15扩展寄存器r
15
中存储的扩展数据w
15
得到,运算级220-b的第15扩展寄存器r
15
中的扩展数据w
15

可以通过由第二子模块232处理运算级220-a的附加寄存器x中的中间数据w
x
以及运算级220-a的第0扩展寄存器r0中存储的扩展数据w0和第1扩展寄存器r1中存储的扩展数据w1得到,使得w
x

=w
10
+σ1(w
15
),w
15

=w
x
+w0+σ0(w1)。
[0133]
相应地,本公开也提供了在用于执行哈希算法的电路中计算扩展数据的方法。图14示出了根据本公开的实施例的在用于执行哈希算法的电路中计算扩展数据的方法400的
示例性流程图。这样的电路可以包括被配置为接收数据的输入模块和被配置为基于接收到的数据计算哈希值的运算模块,其中运算模块可以包括以流水线结构布置的多个运算级,每个运算级可以包括第0扩展寄存器至第15扩展寄存器以及附加寄存器,每个扩展寄存器可以被配置为存储当前运算级的扩展数据,附加寄存器可以被配置为存储用于计算扩展数据的中间数据。在一些实施例中,最前一个运算级的附加寄存器中存储的中间数据与最前一个运算级的第0扩展寄存器中存储的扩展数据可以相同。对于运算模块的多个运算级中的包括第一运算级和在第一运算级之后的第二运算级的相邻两个运算级,方法400可以包括:在s401处,基于第一运算级的扩展寄存器中存储的扩展数据计算用于存储到第二运算级的附加寄存器中的中间数据;在s402处,基于第一运算级的附加寄存器中存储的中间数据计算用于存储到第二运算级的第15扩展寄存器中的扩展数据;以及在s403处,将第一运算级的第i扩展寄存器中存储的扩展数据作为用于存储到第二运算级的第(i-1)扩展寄存器中的扩展数据,其中1≤i≤15且i为整数。注意,s401-s403并不需要以顺序次序执行,而是可以以任何次序执行,或者可以至少部分地并行执行。
[0134]
在一些实施例中,计算用于存储到第二运算级的附加寄存器中的中间数据与计算用于存储到第二运算级的第15扩展寄存器中的扩展数据可以是同时进行的。
[0135]
在一些实施例中,第二运算级的后一运算级的第15扩展寄存器中存储的扩展数据可以是基于第一运算级的第1扩展寄存器、第2扩展寄存器、第10扩展寄存器、第15扩展寄存器中存储的扩展数据确定的。
[0136]
方法400还可以采用以上关于第一子模块231和第二子模块232描述的各种方式来计算扩展数据,在此不再赘述。方法400可以减少在用于执行哈希算法的电路中计算扩展数据导致的计算延时,从而大幅提高电路进而包含该电路的计算芯片的运算速度,从而实现更低的功耗算力比。
[0137]
本公开还可以提供了包括如以上任一实施例所述的电路的计算芯片。本公开还可以提供包括一个或多个如上所述的计算芯片的加密货币矿机。根据本公开的加密货币矿机可以具有实现更低的功耗算力比,从而以更低的成本并且更高效地执行挖矿过程。
[0138]
说明书及权利要求中的词语







































等,如果存在的话,用于描述性的目的而并不一定用于描述不变的相对位置。应当理解,这样使用的词语在适当的情况下是可互换的,使得在此所描述的本公开的实施例,例如,能够在与在此所示出的或另外描述的那些取向不同的其它取向上操作。例如,在附图中的装置倒转时,原先描述为在其它特征

之上

的特征,此时可以描述为在其它特征

之下

。装置还可以以其它方式定向(旋转90度或在其它方位),此时将相应地解释相对空间关系。
[0139]
在说明书及权利要求中,称一个元件位于另一元件

之上



附接

至另一元件、

连接

至另一元件、

耦合

至另一元件、或

接触

另一元件等时,该元件可以直接位于另一元件之上、直接附接至另一元件、直接连接至另一元件、直接耦合至另一元件或直接接触另一元件,或者可以存在一个或多个中间元件。相对照的是,称一个元件

直接

位于另一元件

之上



直接附接

至另一元件、

直接连接

至另一元件、

直接耦合

至另一元件或

直接接触

另一元件时,将不存在中间元件。在说明书及权利要求中,一个特征布置成与另一特征

相邻

,可以指一个特征具有与相邻特征重叠的部分或者位于相邻特征上方或下方的部分。
[0140]
如在此所使用的,词语

示例性的

意指

用作示例、实例或说明

,而不是作为将被精确复制的

模型

。在此示例性描述的任意实现方式并不一定要被解释为比其它实现方式优选的或有利的。而且,本公开不受在技术领域、背景技术、发明内容或具体实施方式中所给出的任何所表述的或所暗示的理论所限定。如在此所使用的,词语

基本上

意指包含由设计或制造的缺陷、器件或元件的容差、环境影响和/或其它因素所致的任意微小的变化。词语

基本上

还允许由寄生效应、噪声以及可能存在于实际的实现方式中的其它实际考虑因素所致的与完美的或理想的情形之间的差异。
[0141]
另外,仅仅为了参考的目的,还可以在本文中使用

第一



第二

等类似术语,并且因而并非意图限定。例如,除非上下文明确指出,否则涉及结构或元件的词语

第一



第二

和其它此类数字词语并没有暗示顺序或次序。还应理解,

包括/包含

一词在本文中使用时,说明存在所指出的特征、整体、步骤、操作、单元和/或组件,但是并不排除存在或增加一个或多个其它特征、整体、步骤、操作、单元和/或组件以及/或者它们的组合。在本公开中,术语

提供

从广义上用于涵盖获得对象的所有方式,因此

提供某对象

包括但不限于

购买



制备/制造



布置/设置



安装/装配

、和/或

订购

对象等。
[0142]
如本文所使用的,术语

和/或

包括相关联的列出项目中的一个或多个的任何和所有组合。本文中使用的术语只是出于描述特定实施例的目的,并不旨在限制本公开。如本文中使用的,单数形式





一个





也旨在包括复数形式,除非上下文另外清楚指示。
[0143]
本领域技术人员应当意识到,在上述操作之间的边界仅仅是说明性的。多个操作可以结合成单个操作,单个操作可以分布于附加的操作中,并且操作可以在时间上至少部分重叠地执行。而且,另选的实施例可以包括特定操作的多个实例,并且在其它各种实施例中可以改变操作顺序。但是,其它的修改、变化和替换同样是可能的。可以以任何方式和/或与其它实施例的方面或元件相结合地组合以上公开的所有实施例的方面和元件,以提供多个附加实施例。因此,本说明书和附图应当被看作是说明性的,而非限制性的。
[0144]
虽然已通过示例对本公开的一些特定实施例进行了详细说明,但本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。在此公开的各实施例可以任意组合,而不脱离本公开的精神和范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本公开的范围和精神。本公开的范围由所附权利要求来限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1