用于划分组合逻辑的方法和电路与流程

文档序号:24190451发布日期:2021-03-09 14:56阅读:180来源:国知局
用于划分组合逻辑的方法和电路与流程

1.本公开总体而言涉及电路领域,更具体而言,涉及用于划分组合逻辑的方法和电路。


背景技术:

2.哈希(hash)算法,也称为散列算法,是信息技术领域非常基础也非常重要的技术。它能将任意长度的二进制值(明文)映射为较短的固定长度的二进制值(hash值),并且不同的明文很难映射为相同的hash值。
3.由于比特币将哈希算法作为工作量证明(pow)的重要手段,后续的各种采用pow的数字货币也延续了这种设计,以sha256、md5为代表的算法在设计之初都属于算力敏感型的算法。这意味着计算资源是瓶颈,主频越高的cpu进行哈希的速度也越快。这个设计直接导致后来的矿机出现,采用asic芯片的矿机更是将这种运算能力成倍提升,更多矿场的出现使得当时的比特币面临算力中心化的威胁。
4.为了限制计算能力的依赖,人们开始寻求新的算法,将目光投向了存储依赖,也就是内存依赖。莱特币率先使用内存依赖型的scrypt算法作为pow核心。scrypt算法是程序员兼密码学家colin percival在其2009年的论文《stronger key derivation via sequential memory-hard functions》中提出的。
5.scrypt是一种密钥导出功能(key derivation function)算法,即kdf算法,主要适用于生成密钥,目的是为了避免黑客低成本地大量产生密钥去试探密码。scrypt算法的这个效果正好被用在莱特币的nonce碰撞中,避免了矿厂矿池低成本地挖矿。
6.由于scrypt算法运行中会占用大量内存,而内存的硬件成本较高,从而使得矿厂矿池不可能低成本地大量挖矿。
7.因此,为了降低挖矿的成本,存在对于提高诸如scrypt算法的kdf算法的运算效率的电路和方法的需求。


技术实现要素:

8.根据本公开的第一方面,提供了一种用于划分组合逻辑的方法。该方法包括接收算法的输入参数。该方法还包括基于所述输入参数,循环地并且顺序地执行所述算法包括的第一运算、第二运算和第三运算。这里,第n次循环中的第一运算与第n-1次循环中的第三运算被划分为一个第一组合逻辑并且n为大于1的整数,并且第二运算被划分为至少一个第二组合逻辑。
9.根据本公开的第二方面,提供了一种用于划分组合逻辑的电路。该电路包括输入模块,所述输入模块被配置为接收算法的输入参数。该电路还包括运算模块,所述运算模块被配置为基于所述输入参数,循环地并且顺序地执行所述算法包括的第一运算、第二运算和第三运算。该电路还包括控制模块,所述控制模块被配置为将第n次循环中的第一运算与第n-1次循环中的第三运算划分为一个第一组合逻辑并且将第二运算划分为至少一个第二
组合逻辑,其中n为大于1的整数。
10.根据本公开的第三方面,提供了一种计算芯片。所述计算芯片包括一个或多个如上所述的电路。
11.根据本公开的第四方面,提供了一种加密货币挖矿机。所述加密货币挖矿机包括一个或多个如上所述的计算芯片。
12.通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得清楚。
附图说明
13.构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
14.参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
15.图1示出了scrypt算法的步骤的说明图;
16.图2示出了图1中的scrypt算法中使用的scryptromix算法的步骤的说明图;
17.图3示出了图2中的scryptromix算法中使用的scryptblockmix算法的步骤的说明图;
18.图4示出了图3中的scryptblockmix算法中使用的salsa算法的详细说明图;
19.图5示出了根据本发明的实施例的用于划分组合逻辑的方法的流程图;
20.图6示出了根据本发明的一个实施例的用于划分组合逻辑的电路600的功能框图。
21.注意,在以下说明的实施方式中,有时在不同的附图之间共同使用同一附图标记来表示相同部分或具有相同功能的部分,而省略其重复说明。在本说明书中,使用相似的标号和字母表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
22.为了便于理解,在附图等中所示的各结构的位置、尺寸及范围等有时不表示实际的位置、尺寸及范围等。因此,所公开的发明并不限于附图等所公开的位置、尺寸及范围等。此外,附图不必按比例绘制,一些特征可能被放大以示出具体组件的细节。
具体实施方式
23.现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
24.以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。也就是说,本文中的用于实现散列算法的电路和方法是以示例性的方式示出,来说明本公开中的电路或方法的不同实施例,而并非意图限制。本领域的技术人员将会理解,它们仅仅说明可以用来实施本发明的示例性方式,而不是穷尽的方式。
25.对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
26.scrypt算法包括以下的输入参数:p,s,n,r,p和dklen。这里,p是密码短语,是一个字节串;s是盐,是一个字节串;n是cpu/内存消耗参数,必须大于1,是2的n次幂并且小于2^
(128*r/8);r是块大小参数;p是并行化参数,是一个小于等于((2^32-1)*hlen)/mflen的正整数,其中hlen为32,mflen是128*r;dklen是期望输出的导出密钥的字节长度,是一个小于等于(2^32-1)*hlen的正整数,其中hlen为32。
27.scrypt算法包括输出dk。dk是导出密钥,其长度为dklen个字节。
28.在本公开的上下文中,所述的字节只是8比特的字节,其含义与八位组(octet)相同。
29.图1示出了scrypt算法的步骤的说明图。
30.在图1的步骤1中,初始化一个阵列b,该阵列b由p个块构成,每个块的大小为128*r个字节。例如,b[0]表示第一个块,b[1]表示第二个块,b[p-1]表示第p个块。在步骤1中调用了pbkdf2-hmac-sha256算法。该算法是一个已知的算法,例如可参见“password-based cryptography specification version 2.0”(b.kaliski,network working group,ietf,informational,rfc 2898,section 5.2,september 2000)以了解其细节。
[0031]
在图1的步骤2中,对于阵列b的每个块,调用了scryptromix算法来进行计算。
[0032]
在图1的步骤3中,将在步骤2中计算出的阵列b作为盐,再次调用pbkdf2-hmac-sha256算法,从而得到导出密钥dk作为输出。
[0033]
简而言之,scrypt算法被用来将人类可读的密码短语p变换成长度为dklen个字节的导出密钥。
[0034]
在scrypt算法中被调用的scryptromix算法包括以下的输入参数:r,b和n。这里,r是块大小参数;b是输入的长度为128*r个字节的块;n是cpu/内存消耗参数,必须大于1,是2的n次幂并且小于2^(128*r/8)。
[0035]
scryptromix算法包括输出b’。b’是长度为128*r个字节的输出块。
[0036]
图2示出了图1中的scrypt算法中使用的scryptromix算法的步骤的说明图。
[0037]
在图2的步骤1中,建立一个变量x,并赋值为输入的块b。
[0038]
在图2的步骤2中,在一个循环中,调用scryptblockmix算法(即,块混合算法)n次,并将每次调用scryptblockmix算法返回的x备份在数组v的元素v[0]至v[n-1]中。
[0039]
在图2的步骤3中,在一个循环中,将x与备份数组v中的一个随机元素v[j]进行异或运算,并将运算结果作为输入参数调用scryptblockmix算法。该过程执行n次。这里,integerify(b[0]...b[2*r-1])被定义为将b[2*r-1]转换为小端整数。也就是说,integerify函数的作用是取输入块x的最后64字节转换成小端整数。j等于该小端整数除以n得到的余数。从而数组v中的第j个元素被取出与x进行异或操作。
[0040]
在scryptromix算法中被调用的scryptblockmix算法包括字节串b作为输入,该字节串b的长度为128*r个字节,其对应于scryptromix算法中的块b,但是在scryptblockmix算法中被当作2*r个64字节的块来处理,记作b[0]||b[1]||...||b[2*r-1],其中的每个元素是一个64字节的块。
[0041]
scryptblockmix算法包括输出b’[0]||b’[1]||...||b’[2*r-1],这2*r个64字节块的串接形成一个长度为128*r个字节的字节串。
[0042]
图3示出了图2中的scryptromix算法中使用的scryptblockmix算法的步骤的说明图。
[0043]
在图3的步骤1中,定义临时变量x,并取出输入字节串b中的最后一个块b[2*r-1]
赋值给x。
[0044]
在图3的步骤2中,在一个循环中,将所有块分别与上一个salsa的结果进行异或运算,第一个块b[0]则跟最后一个块b[2*r-1]进行异或运算。然后,使用异或运算的结果作为输入来调用salsa算法。最后,将salsa算法的结果保存在数组y中。上述循环执行2*r次,即针对每个64字节块执行一次。
[0045]
在图3的步骤3中,如图3所示地交叉地组合数组y的各元素从而输出字节串b’。
[0046]
图4示出了图3中的scryptblockmix算法中使用的salsa算法的详细说明图。
[0047]
在图4的salsa算法中,输入的64字节块被划分为16个字in0.…
in[15],其中每个字是一个32位的无符号整数。输出的64字节块同样也是由作为无符号整数的16个字out0.…
out[15]形成的。图4中的函数r(a,b)的作用是将a(一个32位的字)向左移位b位,并且将a向右移位(32-b)位,之后将两次移位的结果进行或运算。
[0048]
在图4中的第一个for循环中,将输入的16个字赋值给临时变量x0.…
x[15]。
[0049]
在图4中的第二个for循环中,该循环一共被执行4次,每一次循环将方框401~408中的每个方框中的四个算式都计算一次。
[0050]
在图4的第三个for循环中,将输入的字in[i]与中间变量中的对应字x[i]相加,从而得到要输出的字out[i]。
[0051]
以上是对scrypt算法的简要介绍。
[0052]
目前,除了使用通用计算机之外,还广泛使用专用芯片来执行scrypt算法,诸如在矿机中使用的asic芯片或fpga芯片。此外,在芯片的一个运算级中,组合逻辑从一组寄存器取得操作数,进行运算,然后把运算结果输出到另一组寄存器。芯片的最高工作频率由芯片中的寄存器到寄存器之间的最长的组合逻辑路径决定。这个最长组合逻辑路径越长,芯片的最高工作频率越低。根据scrypt算法,其最长的组合逻辑例如由方框401中的算式x[4]^=r(x[0]+x[12],7)所决定,因为该算式形成了最长的组合逻辑。该算式包括:一次加法运算,一次循环移位运算、以及一次异或运算。而图4的方框401-408中的其余31个算式包括同样的三种运算。因此,通常芯片会将组合逻辑(加法+循环移位+异或)的执行时间作为一个执行周期,从而确定其工作频率。
[0053]
以上面介绍的scrypt算法为例来说明本发明。为了简化说明,假定算法中的参数n=1024,r=1并且p=1。由图1至图4可以看出,scrypt算法的核心为scryptblockmix算法,主要体现在图3和图4中。
[0054]
本发明的发明人发现,scryptblockmix算法的一次执行所需的时间为:
[0055]
(1个周期(图3中第3行的x xor b[i]消耗的时间)+salsa算法执行时间)*2r。
[0056]
在r=1的情况下,scryptblockmix算法将仅执行两次循环(参见图3的步骤2)。需要注意的是,算法中的赋值操作只涉及读写操作并不涉及运算操作,所以赋值操作消耗的时间可以忽略。
[0057]
本发明的发明人发现,salsa算法中的计算存储如下的依赖性。即,方框401-408中的每一个方框中的四个算式需要顺序地执行,即,每一个算式依赖于同一方框中的前面的算式的计算结果。同时,作为循环的下半部分的方框405-408的计算依赖于作为上半部分的方框401-404的计算结果,需要等待方框401-404中的计算全部完成。此外,循环的上半部分的方框401-404的计算之间不存在依赖关系,并且循环的下半部分的方框405-408的计算之
间也不存在依赖关系。
[0058]
以方框401中的算式为例,x[8]的计算要等待x[4]的计算完成之后才能开始,x[12]的计算要等待x[8]的计算完成之后才能开始,x[0]的计算要等待x[12]的计算完成之后才能开始。另一方面,例如,方框402中的x[9]的计算、方框403中的x[14]的计算以及方框404中的x[3]的计算不依赖于其他方框中的算式的计算,因而可以立即开始。
[0059]
如上所述,由于芯片的周期是由算法中的最长组合逻辑(即,最复杂算式)决定的,因此图4中的各个算式都能够在一个周期内执行完成。因此,方框401中的四个算式可以在4个周期内完成,而方框402-404中的算式可以与方框401中的算式并行完成,从而方框401-404中的算式的执行总计耗时4个周期。同样地,循环的下半部分的方框405-408中的算式的执行也将耗时4个周期。
[0060]
由于图4中的第二个for循环将执行四次,因此总共将耗时4*(4+4)=32个周期。最后,在salsa算法的末尾处存在一个加法计算,该加法计算将会消耗一个周期。
[0061]
综上所述,在n=1024,r=1并且p=1的情况下,一次完整地执行scryptblockmix算法将需要(1+((4+4)*4)+1)*2=68个周期。
[0062]
图5示出了根据本发明的实施例的用于划分组合逻辑的方法的流程图。该方法例如可以由电路、芯片或者挖矿机执行。如图5所示,该方法包括步骤510,在步骤510中,接收算法的输入参数。例如,在scrypt算法的例子中,步骤510包括接收p、s、n、r、p、dklen等参数。
[0063]
在步骤520中,基于所述输入参数,循环地并且顺序地执行所述算法包括的第一运算、第二运算和第三运算。根据本发明的一个实施例,所述算法包括scrypt算法的一部分,例如为scryptblockmix算法。
[0064]
根据本发明的一个实施例,所述算法的第n次循环中的第一运算与第n-1次循环中的第三运算被划分为一个第一组合逻辑并且n为大于1的整数,并且其中第二运算被划分为至少一个第二组合逻辑。在scryptblockmix算法的例子中,第一运算对应于图3的代码第3行中的异或运算,第二运算对应于图4的salsa算法中的第二个for循环中的运算,而第三运算对应于图4的salsa算法的末尾部分的加法运算。也就是说,本公开提出了将一个算法的第n次循环中的首个运算与第n-1次循环中的末尾运算划分为一个组合逻辑。
[0065]
根据本发明的一个实施例,所述第一组合逻辑中的第一运算和第三运算可以被配置为在一个时钟周期中执行。
[0066]
在scryptblockmix算法的例子中,根据本发明,(x[i]+in[i])将被配置成与下一次循环的开头处的(x xor b[i])在同一个周期内完成执行。通过这样做,scryptblockmix算法的执行所需的时间将从
[0067]
1+((4+4)*4)+1+1+((4+4)*4)+1=68
[0068]
变成
[0069]
1+((4+4)*4)+1+((4+4)*4)+1=67
[0070]
从而,运算效率提高了68/67-1=1.493%。
[0071]
在另一个例子中,例如当p=1且r=2时,由于需要执行四次循环,可以节省三个周期,从而运算效率提高了(34*4)/(34*4-3)-1=2.256%。本发明的发明人发现,当循环次数越多时,运算效率提升得也越多。
[0072]
根据本发明的一个实施例,所述第二组合逻辑的执行时间大于或等于所述第一组合逻辑的执行时间。在scryptblockmix算法的例子中,因为salsa算法中的例如算式x[4]^=r(x[0]+x[12],7)的单次运算的组合逻辑为(加法+循环移位+异或)的执行时间明显大于合并到同一周期中的组合逻辑(加法+异或)的执行时间,所以芯片的周期或频率没有改变,从而没有增加额外的硬件开销。
[0073]
根据本发明的一个实施例,所述时钟周期取决于所述第二组合逻辑的执行时间。例如,在scryptblockmix算法的例子中,时钟周期取决于组合逻辑(加法+循环移位+异或)的执行时间,例如可以等于或略大于组合逻辑(加法+循环移位+异或)的执行时间。
[0074]
根据本发明的一个实施例,所述至少一个第二组合逻辑中的每一个可以被配置为在一个所述时钟周期中执行。在scryptblockmix算法的例子中,第二运算可以包括多个运算(即,第二个for循环中的算式),并且每个运算可以形成一个组合逻辑。
[0075]
根据本发明的一个实施例,所述算法还可以包括第四运算,所述第四运算在第一运算之后并且在第三运算之前执行。也就是说,除了决定芯片的周期的第二运算之外,在第一运算和第三运算之间,算法还可以包括其他的运算。
[0076]
图6示出了根据本发明的一个实施例的用于划分组合逻辑的电路600的功能框图。该电路600包括输入模块610、运算模块620以及控制模块630。根据本发明的一个实施例,输入模块610被配置为接收算法的输入参数。根据本发明的一个实施例,运算模块620被配置为基于所述输入参数,循环地并且顺序地执行所述算法包括的第一运算、第二运算和第三运算。根据本发明的一个实施例,控制模块630被配置为将第n次循环中的第一运算与第n-1次循环中的第三运算划分为一个第一组合逻辑并且将第二运算划分为至少一个第二组合逻辑,其中n为大于1的整数。
[0077]
根据本发明的一个实施例,所述运算模块执行的所述算法包括scrypt算法的一部分。
[0078]
根据本发明的一个实施例,所述控制模块将所述第一组合逻辑中的第一运算和第三运算配置为在一个时钟周期中执行。
[0079]
根据本发明的一个实施例,所述第二组合逻辑的执行时间大于或等于所述第一组合逻辑的执行时间。
[0080]
根据本发明的一个实施例,所述时钟周期取决于所述第二组合逻辑的执行时间。
[0081]
根据本发明的一个实施例,所述控制模块将所述至少一个第二组合逻辑中的每一个配置为在一个所述时钟周期中执行。
[0082]
根据本发明的一个实施例,所述算法还包括第四运算,所述第四运算在第一运算之后并且在第三运算之前执行。
[0083]
根据本公开的实施例,如上所述的用于划分组合逻辑的电路可以被实施为一种计算芯片。
[0084]
本领域技术人员将理解,可以通过用诸如verilog或vhdl的硬件描述语言(hdl)来实现根据本公开的电路和/或芯片。可以针对给定集成电路制造技术设计的单元库合成hdl描述,并可以出于定时、功率和其他原因修改,以获得最终的设计数据库,可以将最终的设计数据库传输到工厂以通过半导体制造系统生产集成电路。半导体制造系统可通过(例如在可包括掩膜的晶片上)沉积半导体材料、移除材料、改变所沉积材料的形状、(例如通过掺
杂材料或利用紫外处理修改介电常数)对材料改性等等来生产集成电路。集成电路可以包括晶体管并还可以包括其他电路元件(例如,诸如电容器、电阻器、电感器等无源元件)以及晶体管和电路元件之间的互连。
[0085]
根据本公开的实施例,如上所述的计算芯片可以包括在一种计算设备中,该计算设备优选地用于执行加密货币的挖掘。该计算设备例如可以是加密货币挖矿机,诸如莱特币挖矿机。
[0086]
尽管以上利用scrypt算法对本发明的思想进行了说明,但是scrypt算法仅仅是一个用于说明的例子,本发明不限于应用于scrypt算法,而是同样可以应用于其他算法,只要能够使得算法中的多个运算被划分到同一个时钟周期从而缩短了运算时间即可。
[0087]
通过采用本发明的技术方案,由于没有改变芯片的原有周期或频率,没有降低芯片的原有性能,也没有增加硬件开销,从而能够提高运算效率。
[0088]
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
[0089]
在说明书及权利要求中的词语“前”、“后”、“顶”、“底”、“之上”、“之下”等,如果存在的话,用于描述性的目的而并不一定用于描述不变的相对位置。应当理解,这样使用的词语在适当的情况下是可互换的,使得在此所描述的本公开的实施例,例如,能够在与在此所示出的或另外描述的那些取向不同的其他取向上操作。
[0090]
如在此所使用的,词语“示例性的”意指“用作示例、实例或说明”,而不是作为将被精确复制的“模型”。在此示例性描述的任意实现方式并不一定要被解释为比其它实现方式优选的或有利的。而且,本公开不受在上述技术领域、背景技术、发明内容或具体实施方式中所给出的任何所表述的或所暗示的理论所限定。
[0091]
如在此所使用的,词语“基本上”意指包含由设计或制造的缺陷、器件或元件的容差、环境影响和/或其它因素所致的任意微小的变化。词语“基本上”还允许由寄生效应、噪音以及可能存在于实际的实现方式中的其它实际考虑因素所致的与完美的或理想的情形之间的差异。
[0092]
上述描述可以指示被“连接”或“耦合”在一起的元件或节点或特征。如在此所使用的,除非另外明确说明,“连接”意指一个元件/节点/特征与另一种元件/节点/特征在电学上、机械上、逻辑上或以其它方式直接地连接(或者直接通信)。类似地,除非另外明确说明,“耦合”意指一个元件/节点/特征可以与另一元件/节点/特征以直接的或间接的方式在机械上、电学上、逻辑上或以其它方式连结以允许相互作用,即使这两个特征可能并没有直接连接也是如此。也就是说,“耦合”意图包含元件或其它特征的直接连结和间接连结,包括利用一个或多个中间元件的连接。
[0093]
还应理解,“包括/包含”一词在本文中使用时,说明存在所指出的特征、整体、步骤、操作、单元和/或组件,但是并不排除存在或增加一个或多个其它特征、整体、步骤、操作、单元和/或组件以及/或者它们的组合。
[0094]
本领域技术人员应当意识到,在上述操作之间的边界仅仅是说明性的。多个操作可以结合成单个操作,单个操作可以分布于附加的操作中,并且操作可以在时间上至少部分重叠地执行。而且,另选的实施例可以包括特定操作的多个实例,并且在其他各种实施例中可以改变操作顺序。但是,其它的修改、变化和替换同样是可能的。因此,本说明书和附图
应当被看作是说明性的,而非限制性的。
[0095]
虽然已经通过示例对本公开的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。在此公开的各实施例可以任意组合,而不脱离本公开的精神和范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本公开的范围和精神。本公开的范围由所附权利要求来限定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1