累加器硬件的制作方法

未命名 10-25 阅读:72 评论:0

累加器硬件
1.相关申请的交叉引用
2.本技术要求2022年3月31日提交的英国专利申请2204647.8的优先权,该专利申请以全文引用方式并入本文中。
技术领域
3.本公开涉及累加器硬件。


背景技术:

4.当实现卷积神经网络时,需要对值对执行大量乘法,每一对包括输入值和对应的滤波器权重(该滤波器权重也可以称为

系数’),然后对乘法结果求和。为了提高运算速度,这些运算可以在专用硬件逻辑中实现。取决于输入值和权重的位宽,所得到的硬件可能非常大(例如,就面积而言)并且可能消耗大量的功率。
5.下面描述的实施方案仅以举例的方式提供,而不限制解决卷积引擎的已知硬件具体实施的任何或所有缺点的具体实施。


技术实现要素:

6.提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用以限制所要求保护的主题的范围。
7.描述了累加器硬件逻辑。在一个示例中,累加器硬件逻辑包括第一和第二加法逻辑单元以及存储区。第一加法逻辑单元包括第一输入端、第二输入端和输出端,第一和第二输入端中的每一者被布置成在每个时钟周期中接收输入值。第二加法逻辑单元包括直接连接到第一加法逻辑单元的输出端的第一输入端。第二加法逻辑单元还包括第二输入端和输出端。存储区被布置成存储由第二加法逻辑单元输出的结果。累加器硬件逻辑还包括位于存储区与第二加法逻辑单元的第二输入之间的反馈路径中的移位硬件和/或求反硬件。移位硬件被配置为在固定方向上执行固定数量的位位置的移位。
8.第一方面提供累加器硬件逻辑,所述累加器硬件逻辑包括:第一加法逻辑单元,所述第一加法逻辑单元包括第一输入端、第二输入端和输出端,所述第一输入端和所述第二输入端中的每一者被布置成在每个时钟周期中接收输入值;第二加法逻辑单元,所述第二加法逻辑单元包括第一输入端、第二输入端和输出端,并且其中所述第一输入端直接连接到所述第一加法逻辑单元的所述输出端;存储区,所述存储区被布置成存储由所述第二加法逻辑单元输出的结果;以及移位硬件和求反硬件中的至少一者,所述移位硬件和所述求反硬件位于所述存储区与所述第二加法逻辑单元的所述第二输入端之间的反馈路径中,其中所述移位硬件被配置为在固定方向上执行固定数量的位位置的移位。
9.所述累加器硬件逻辑可以包括位于所述反馈路径中的移位硬件。
10.所述第二加法逻辑单元的所述第二输入端可以连接到包括所述移位硬件的所述
反馈路径。
11.所述累加器硬件逻辑可以还包括:选择硬件,所述选择硬件位于所述反馈路径中,并且被配置为在累加运算的第一时钟周期中选择第一零输入,并且在所述累加运算的后续时钟周期中从所述存储区中选择第二输入。
12.所述选择硬件可以位于所述存储区与所述移位硬件之间的所述反馈路径中。
13.所述选择硬件可以位于所述移位硬件与所述第二加法逻辑单元之间的所述反馈路径中。
14.所述累加器硬件逻辑可以还包括:可变移位逻辑,所述可变移位逻辑被配置为在可控方向上执行可控数量的位位置的移位,其中所述可变移位逻辑包括输入端,所述输入端被布置成接收由所述第二加法逻辑单元输出的值。
15.除了累加运算的最终时钟周期之外,对于所述累加运算的每个时钟周期,所述可控数量可以为零。
16.所述可变移位逻辑可以包括到所述存储区的输出,并且所述存储区可以被布置成存储由所述第二加法逻辑单元输出并且从所述可变移位逻辑接收到的所述结果。
17.所述累加器硬件逻辑可以还包括:第二存储区,所述第二存储区被布置成存储由所述可变移位逻辑输出的结果。
18.所述累加器硬件逻辑可以还包括位于所述反馈路径中的移位硬件逻辑和求反硬件逻辑两者。
19.第二方面提供了乘法硬件,所述乘法硬件包括如本文中所描述的累加器硬件逻辑。
20.所述乘法硬件可以被布置成在两个时钟周期内将两个值乘在一起,并且可以还包括:第一乘法器,所述第一乘法器被布置成在每个时钟周期接收第一输入和第二输入,将所述第一输入和所述第二输入乘在一起并且输出结果;第二乘法器,所述第二乘法器被布置成在每个时钟周期接收第三输入和第四输入,将所述第三值输入和所述第四值输入相乘并且将结果输出到所述累加器硬件逻辑的第二输入端;以及左移硬件,所述左移硬件被布置成接收来自所述第一乘法器的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的第一输入端,其中:所述两个值中的每一者被分成高部分和低部分,所述低部分各自包括所述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,在第一时钟周期中,所述第一输入和所述第二输入是所述两个值的所述高部分,并且所述第三输入和所述第四输入是所述两个值中的第一者的所述高部分和所述两个值中的第二者的所述低部分,在第二时钟周期中,所述第三输入和所述第四输入是所述两个值的所述低部分,并且所述第一输入和所述第二输入是所述两个值中的所述第二者的所述高部分和所述两个值中的所述第一者的所述低部分。
21.所述乘法硬件可以被布置成在两个时钟周期内将两个值乘在一起,并且可以还包括:第一多个乘法器,所述第一多个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;第二多个乘法器,所述第二多个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;第三乘法器,所述第三乘法器被布置成在每个时钟周期接收一对输入,将所述一对输入乘在一起并且输出结果;第四乘法器,所述第四乘法器被布置成在每个时钟周期接收一对输
入,将所述一对输入乘在一起并且输出结果;第一多个左移硬件,所述第一多个左移硬件各自被布置成从所述第一多个乘法器中的不同的一个乘法器接收结果并且输出左移结果;第二多个左移硬件,所述第二多个左移硬件各自被布置成从所述第二多个乘法器中的不同的一个乘法器接收结果并且输出左移结果;第一多个求反硬件,所述第一多个求反硬件各自被布置成从所述第一多个左移硬件中的不同的一个左移硬件接收左移结果;第二多个求反硬件,所述第二多个求反硬件各自被布置成从所述第二多个左移硬件中的不同的一个左移硬件接收左移结果;第一加法逻辑,所述第一加法逻辑被布置成接收由所述第一多个求反硬件和所述第三乘法器中的每一者输出的结果并且对所述结果求和;第二加法逻辑,所述第二加法逻辑被布置成接收由所述第二多个求反硬件和所述第四乘法器中的每一者输出的结果并且对所述结果求和,并且将所述结果输出到所述累加器硬件逻辑的所述第二输入端;以及左移硬件,所述左移硬件被布置成接收来自所述第一加法逻辑的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的所述第一输入端,其中:所述两个值中的每一者被分成高部分和低部分,所述低部分各自包括所述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,并且所述高部分和所述低部分中的每一者被进一步分成包括最高有效位的一部分和包括所述部分的所有其他位的一部分,在第一时钟周期中,到所述第三乘法器的所述一对输入是所述两个值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,到所述第一多个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述高部分的部分的其他组合,到所述第四乘法器的所述一对输入是所述输入值中的第一输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的第二输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且到所述第二多个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,在第二时钟周期中,到所述第三乘法器的所述一对输入是所述输入值中的所述第二输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的所述第一输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,到所述第一多个乘法器的所述多对输入包括多个对,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,到所述第四乘法器的所述一对输入是所述两个值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且到所述第二多个乘法器的所述多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述低部分的部分的其他组合。
22.第三方面提供了卷积硬件,所述卷积硬件包括如本文中所描述的累加器硬件逻辑。
23.所述卷积硬件可以被布置成在两个时钟周期内将n对两个值乘在一起,并且可以还包括:n个第一乘法器,所述n个第一乘法器各自被布置成在每个时钟周期接收第一输入和第二输入,将所述第一输入和所述第二输入乘在一起并且输出结果;第一加法逻辑,所述第一加法逻辑被布置成对由所述n个第一乘法器中的每个第一乘法器输出的所述结果求和;n个第二乘法器,所述n个第二乘法器各自被布置成在每个时钟周期接收第三输入和第
四输入,将所述第三值输入和所述第四值输入乘在一起并且输出结果;第二加法逻辑,所述第二加法逻辑被布置成对由所述n个第二乘法器中的每个第二乘法器输出的所述结果求和,并且将所述结果输出到所述累加器硬件逻辑的所述第二输入端;以及左移硬件,所述左移硬件被布置成接收来自所述第一加法逻辑的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的所述第一输入端,其中对于每一对值:所述值中的每一者被分成高部分和低部分,所述低部分各自包括所述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,在第一时钟周期中,到所述第一乘法器中的一个第一乘法器的所述第一输入和所述第二输入是所述两个值的所述高部分,并且到所述第二乘法器中的一个第二乘法器的所述第三输入和所述第四输入是所述两个值中的第一者的所述高部分和所述两个值中的第二者的所述低部分,所述n个第一乘法器中的每个第一乘法器接收来自不同的一对值的部分,在第二时钟周期中,到所述第二乘法器中的所述一个第二乘法器的所述第三输入和所述第四输入是所述两个值的所述低部分,并且到所述第一乘法器中的所述一个第一乘法器的所述第一输入和所述第二输入是所述两个值中的所述第二者的所述高部分和所述两个值中的所述第一者的所述低部分。
24.乘法硬件可以被布置成在两个时钟周期内将n对两个值乘在一起,并且可以还包括:第一多组n个乘法器,所述第一多组n个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;第二多组n个乘法器,所述第二多组n个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;n个第三乘法器,所述n个第三乘法器被布置成在每个时钟周期接收一对输入,将所述一对输入乘在一起并且输出结果;n个第四乘法器,所述n个第四乘法器被布置成在每个时钟周期接收一对输入,将所述一对输入乘在一起并且输出结果;第一多个加法逻辑元件,所述第一多个加法逻辑元件各自被布置成对由所述第一多组n个乘法器中的一组n个乘法器输出的所述结果求和;第二多个加法逻辑元件,所述第二多个加法逻辑元件各自被布置成对由所述第二多组n个乘法器中的一组n个乘法器输出的所述结果求和;第三加法逻辑元件,所述第三加法逻辑元件被布置成对由所述n个第三乘法器输出的所述结果求和;第四加法逻辑元件,所述第四加法逻辑元件被布置成对由所述n个第四乘法器输出的所述结果求和;第一多个左移硬件,所述第一多个左移硬件各自被布置成从所述第一多个加法逻辑元件中的不同的一个加法逻辑元件接收结果,并且输出左移结果;第二多个左移硬件,所述第二多个左移硬件各自被布置成从所述第二多个加法逻辑元件中的不同的一个加法逻辑元件接收结果,并且输出左移结果;第一多个求反硬件,所述第一多个求反硬件各自被布置成从所述第一多个左移硬件中的不同的一个左移硬件接收左移结果;第二多个求反硬件,所述第二多个求反硬件各自被布置成从所述第二多个左移硬件中的不同的一个左移硬件接收左移结果;第一加法逻辑,所述第一加法逻辑被布置成接收由所述第一多个求反硬件和所述第三加法逻辑元件中的每一者输出的结果并且对所述结果求和;第二加法逻辑,所述第二加法逻辑被布置成接收由所述第二多个求反硬件和所述第四加法逻辑元件中的每一者输出的结果并且对所述结果求和,并且将所述结果输出到所述累加器硬件逻辑的所述第二输入端;以及左移硬件,所述左移硬件被布置成接收来自所述第一加法逻辑的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的所述第一输入端,其中对于每一对值:所述两个值中的每一者被分成高部分和低部分,所述低部分各自包括所
述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,并且所述高部分和所述低部分中的每一者被进一步分成包括最高有效位的一部分和包括所述部分的所有其他位的一部分,在第一时钟周期中,到所述n个第三乘法器中的一个第三乘法器的所述一对输入是所述两个值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,到来自所述第一多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述高部分的部分的其他组合,到所述n个第四乘法器中的一个第四乘法器的所述一对输入是所述输入值中的第一输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的第二输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且到来自所述第二多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,在第二时钟周期中,到所述n个第三乘法器中的一个第三乘法器的所述一对输入是所述输入值中的所述第二输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的所述第一输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,到来自所述第一多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的所述多对输入包括多个对,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,到所述n个第四乘法器中的一个第四乘法器的所述一对输入是所述两个值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且到来自所述第二多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述低部分的部分的其他组合。
25.第四方面提供了一种包括如本文中所描述的卷积硬件的神经网络加速器。
26.第五方面提供了一种在硬件逻辑中执行累加的方法,所述方法包括:由第一加法逻辑单元在每个时钟周期中经由第一输入端接收第一输入值,并且经由第二输入端接收第二输入值;由第二加法逻辑单元接收直接来自所述第一加法逻辑单元的输出端的输入和来自源于存储区的反馈路径的输入,所述反馈路径包括移位硬件和求反硬件中的至少一者,其中所述移位硬件被配置为在固定方向上执行固定数量的位位置的移位;以及在存储区中存储由所述第二加法逻辑单元输出的结果。
27.第六方面提供了一种使用本文中所描述的执行累加的方法来执行乘法的方法。
28.第七方面提供了一种使用本文中所描述的执行累加的方法来执行卷积的方法。
29.第八方面提供了一种使用集成电路制造系统来制造如本文中所描述的累加器硬件逻辑、如本文中所描述的乘法硬件、如本文中所描述的卷积硬件或如本文中所描述的神经网络加速器的方法。
30.第九方面提供了一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中被处理时将集成电路制造系统配置为制造如本文中所描述的累加器硬件逻辑、如本文中所描述的乘法硬件、如本文中所描述的卷积硬件或如本文中所描述的神经网络加速器。
31.第十方面提供了一种在其上存储有集成电路的计算机可读描述的非暂时性计算机可读存储介质,所述计算机可读描述当在集成电路制造系统中被处理时使得集成电路制造系统制造如本文中所描述的累加器硬件逻辑、如本文中所描述的乘法硬件、如本文中所描述的卷积硬件或如本文中所描述的神经网络加速器。
32.第十一方面提供了一种集成电路制造系统,所述集成电路制造系统被配置为制造如本文中所描述的累加器硬件逻辑、如本文中所描述的乘法硬件、如本文中所描述的卷积硬件或如本文中所描述的神经网络加速器。
33.第十二方面提供了一种集成电路制造系统,所述集成电路制造系统包括:非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质在其上存储有集成电路的计算机可读描述,所述计算机可读描述描述了如本文中所描述的累加器硬件逻辑、如本文中所描述的乘法硬件、如本文中所描述的卷积硬件或如本文中所描述的神经网络加速器;布局处理系统,所述布局处理系统被配置为处理集成电路描述,以便生成体现累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器的集成电路的电路布局描述;以及集成电路生成系统,所述集成电路生成系统被配置为根据电路布局描述来制造累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器。
34.累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器可以在集成电路上的硬件中实现。可以提供一种在集成电路制造系统处制造累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时将该系统配置为制造累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器。可以提供一种在其上存储有集成电路的计算机可读描述的非暂时性计算机可读存储介质,该计算机可读描述当被处理时使得布局处理系统生成在制造累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器的集成电路制造系统中使用的电路布局描述。
35.可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质在其上存储有描述累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器的计算机可读集成电路描述;布局处理系统,该布局处理系统被配置为处理集成电路描述,以便生成体现累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造累加器硬件逻辑、乘法硬件、卷积硬件或神经网络加速器。
36.可以提供一种用于执行本文中描述的任一方法的计算机程序代码。可提供非暂时性计算机可读存储介质,其上存储有计算机可读指令,当在计算机系统处执行时,所述计算机可读指令促使所述计算机系统执行本文中所描述的方法中的任一种方法。
37.如对本领域的技术人员将显而易见,上述特征可以适当地组合,并且可与本文中所描述的示例的各方面中的任一方面进行组合。
附图说明
38.现在将参考附图详细描述示例,在附图中:
39.图1是改进的累加器硬件逻辑的第一示例的示意图;
40.图2是改进的累加器硬件逻辑的第二示例的示意图;
41.图3是改进的累加器硬件逻辑的第三示例的示意图;
42.图4是改进的累加器硬件逻辑的第四示例的示意图;
43.图5是改进的累加器硬件逻辑的第五示例的示意图;
44.图6是改进的累加器硬件逻辑的第六示例的示意图;
45.图7示出了乘法运算如何被分成多个更小运算的图形表示;
46.图8是包括改进的累加器硬件逻辑的乘法逻辑的示例的示意图;
47.图9是包括改进的累加器硬件逻辑的卷积硬件逻辑的示例的示意图;
48.图10示出了乘法运算如何被分成多个更小运算的另一图形表示;
49.图11示出了乘法运算如何被分成多个更小运算的又一图形表示;
50.图12是乘法逻辑的另一示例的示意图;
51.图13是卷积硬件逻辑的另一示例的示意图;
52.图14示出了可以在其中实现累加器硬件逻辑、乘法逻辑和/或卷积逻辑的计算机系统;并且
53.图15示出了用于生成包括本文中所描述的累加器硬件逻辑、乘法逻辑或卷积逻辑的集成电路的集成电路制造系统。
54.附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
55.借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施方案,并且对所公开实施方案的各种修改对于本领域的技术人员将是明显的。
56.现在将仅借助于示例来描述实施方案。
57.如上文所描述,当实现卷积神经网络时,需要对值对执行大量乘法,每一对包括输入值和对应的滤波器权重,然后对乘法结果求和,并且这些运算可以在硬件逻辑中实现。在输入值和权重的位宽较大(例如,16位或更多)的情况下,所得硬件可能较大。此外,在一些具体实施中,输入值和权重的位宽可能不是固定的,而是可以变化的。在这种情况下,硬件必须被设计为处理最大可能的位宽(例如,16位),但是这可能导致硬件的低效使用,在该低效使用中输入值和权重具有较小的位宽(例如,12位、8位或4位)。
58.为了减小硬件逻辑的大小和/或提高位宽变化时的效率,可以针对可能位宽的至少一个子集(例如,针对可能位宽中的较大/最大的一者)在多于一个时钟周期内执行运算。在多于一个时钟周期内执行运算的情况下,累加器硬件用于存储来自连续时钟周期的部分结果并对该部分结果求和。
59.本文中所描述的是改进的累加器硬件逻辑,该累加器硬件逻辑可用于上文所描述的应用(即,在卷积引擎中存储来自连续时钟周期的部分结果并对该部分结果求和)中或其他应用中。在累加器硬件逻辑是卷积引擎的一部分的情况下,卷积引擎本身可以是神经网络加速器(nna)的一部分。如下面详细描述的,累加器硬件包括第一加法级和第二加法级。
第一加法级取两个输入值并执行加法,并且第二加法级取直接来自第一加法级的输出作为该第二加法级的输入中的一个输入,即在来自第一加法级的输出与到第二加法级的输入之间没有其他硬件逻辑(例如,移位硬件和/或求反逻辑)。到第二加法级的第二输入由反馈路径提供,并且可以是零输入或者是在前一时钟周期中执行的加法的结果。通过使第一和第二加法级彼此直接相邻,使得来自第一加法级的输出直接连接到第二加法级,合成工具(其生成门级网表)可以在门级生成更有效的实现。
60.本文中还描述了改进的乘法硬件,该乘法硬件包括本文中所描述的累加器硬件逻辑,并且在多于一个时钟周期内(例如,两个时钟周期内)计算结果。乘法硬件可以适于接收一系列不同的输入位宽,或者可以对预定义(和固定)位宽的输入进行操作。
61.图1示出了改进的累加器硬件逻辑100的第一示例。累加器硬件逻辑100包括第一加法逻辑单元102和第二加法逻辑单元104、存储区106、选择硬件108和移位硬件110。第一加法逻辑单元102和第二加法逻辑单元104各自具有两个输入端和一个输出端,并且被配置为将两个输入值加在一起并输出结果。可以包括多个寄存器的存储区106被布置成存储接收到的数据,并且此数据可以作为累加器硬件逻辑100本身的输出或者作为到累加器硬件逻辑100内的另一个硬件逻辑元件的输入被输出。选择硬件108具有两个输入端,并且被配置为在输入端中的每个输入端上接收到的输入值之间进行选择,并且输出选定的输入值。选择硬件可以例如实现为多路复用器。在另一个示例中,选择硬件108可以被实现为与门(或等效硬件)的布置,因为输入中的在该输入之间被选择的一个输入是零。在一些示例中,选择硬件108可以具有多于两个输入端。移位硬件110在预定义固定方向上执行预定义固定数量的位的位移位。例如,移位硬件110可以将输入到移位硬件110的位向左移位8个位。
62.如图1所示,来自第一加法逻辑单元102的输出直接连接到第二加法逻辑单元104的输入端中的一个输入端。来自第二加法逻辑单元104的输出被存储在存储区106中。选择硬件108和移位硬件110形成从存储区106到第二加法逻辑单元104的第二输入的反馈路径(也可以称为反馈回路)的一部分。选择硬件108接收从存储区106输出的数据作为第一输入,并且选择硬件110的第二输入端接收全零输入。选择硬件108的输出端连接到移位硬件110,并且移位硬件110的输出端连接到第二加法逻辑单元104的第二输入端。
63.在运算中,第一加法逻辑单元102接收表示为αi和βi的两个输入,并输出这两个输入的和αi+βi,i表示接收到输入的时钟周期(例如,对于第一时钟周期i=0,对于第二时钟周期i=1,等等)。在各种示例中,累加器可以在两个时钟周期(i=0,1)内或多于两个时钟周期内操作。在第一时钟周期(i=0)中,第一加法逻辑单元102接收两个值α0和β0作为输入,并将这两个输入的和α0+β0输出到第二加法逻辑单元104。第二加法逻辑单元104还从包括移位硬件110和选择硬件108的反馈路径接收第二输入。由于这是第一时钟周期,没有存储(与此累加运算相关的)先前的值,因此选择硬件选择零输入,并将该输入输出到移位硬件110。对零执行移位不会影响该值,因此移位硬件110的输入到第二加法逻辑单元104的输出也是全零。因此,第二加法逻辑单元104输出α0+β0和0(α0+β0+0)之和的结果,即α0+β0。这个值被存储在存储区106中。
64.在第二时钟周期(i=1)中,第一加法逻辑单元102接收两个值α1和β1作为输入,并将这两个输入的和α1+β1输出到第二加法逻辑单元104。第二加法逻辑单元104还从包括移位硬件110和选择硬件108的反馈路径接收第二输入。由于这是第二时钟周期,现在有(与此累
加运算相关的)先前的值存储在存储区106中,因此选择硬件选择从存储区106中读取的这个值,而不是零输入,并将该值输出到移位硬件110。移位硬件输出从存储区读取的值的移位版本,表示为(α0+β0)《《s,其中s是移位的位数,并且在此示例中,所执行的移位是左移,但在其他示例中,移位可以可选地向右。在一个示例中,s=8。第二加法逻辑单元104接收移位后的存储值,并输出(α0+β0)《《s和α1+β1之和的结果,即((α0+β0)《《s)+(α1+β1)。这个值然后被存储在存储区106中。如果累加仅在两个时钟周期内,则这个值为输出值。替代地,该过程可以重复一个或多个附加时钟周期(i=2,3,

)。
65.通过在反馈路径中而不是在第一加法逻辑单元102与第二加法逻辑单元104之间具有移位硬件110,移位运算可以是固定移位而不是可变移位,并且使用路由而不是逻辑元件来实现。这减少了执行移位所花费的时间和消耗的功率。此外,即使使用逻辑元件来执行移位,与执行移位相关联的任何延迟也不再处于关键路径中。此外,通过避免在两个加法逻辑单元102、104之间具有任何硬件逻辑,可以更有效地执行硬件合成(即,合成工具可以生成更有效的门级网表)。两个加法逻辑单元之间存在的任何硬件逻辑都会降低合成工具优化硅实现的能力。
66.图2示出了改进的累加器硬件逻辑200的第二示例,该改进的累加器硬件逻辑是图1所示和上文所描述的累加器硬件逻辑的变型。类似于图1所示的累加器硬件逻辑100,图2所示的累加器硬件逻辑200包括第一加法逻辑单元102和第二加法逻辑单元104、存储区106、选择硬件108和移位硬件110。此外,类似于图1所示的累加器硬件逻辑100,图2所示的累加器硬件逻辑200在反馈路径(从存储区106到第二加法逻辑单元104的第二输入端)中而不在两个加法逻辑单元102、104之间具有移位硬件110。然而,与图1所示的累加器硬件逻辑100不同,图2所示的累加器硬件逻辑200具有位于存储区106与选择硬件108之间而不是位于选择硬件108与第二加法逻辑单元104的第二输入端之间的移位硬件110。将移位硬件110放置在选择硬件108之前(如图2所示)避免了任何零移位(例如,在累加运算的第一时钟周期中),并且还使得选择硬件108能够在一些具体实施中具有附加功能(例如,它可以使得能够复用选择硬件108中的附加输入)。
67.除了移位硬件110的位置变化之外,图2所示的累加器硬件逻辑200以与图1所示的累加器硬件逻辑100相同的方式工作。由第二加法逻辑单元104在每个时钟周期中接收相同的输入,唯一的区别是选择硬件108在零输入或在先前时钟周期中存储(在存储区106中)的数据值的移位版本之间选择,而不是在零输入与未移位的存储值之间选择。
68.虽然移位硬件110在图1和图2中被示为分立的逻辑块,但是将了解,这种移位可以通过将位从紧接在前的逻辑元件(例如,选择硬件108或存储区106)路由到紧接在后的逻辑元件(例如,第二加法逻辑单元104或选择硬件108)的方式来实现。这是可能的,因为所实现的移位是固定的(就位位置的数量和方向而言)并且不是可选的(即,在每个时钟周期中对该移位硬件接收到的所有数据执行移位)。例如,由紧接在前的逻辑元件输出的值中的位置x中的位可以被路由到紧接在后的逻辑元件的对应于位位置x+s的输入,从而仅通过路由实现s个位的左移。以这种方式,移位硬件110可以以高效的方式实现,即以不消耗面积或功率的方式实现。
69.在图1和图2所示的示例中,由累加器硬件逻辑100、200输出的数据是在最后一个时钟周期(例如,i=1,其中在两个时钟周期内执行运算)中来自第二加法逻辑单元104的输
出。这个输出值可以在输出之前存储在存储区106中(如图1和图2中的实线箭头所示),或者可以直接从第二加法逻辑单元104输出(如图1和图2中的虚线箭头所示)。
70.通常,累加器硬件逻辑100、200是较大逻辑单元(诸如乘法硬件单元或卷积引擎)的一部分,并且较大逻辑单元内的下一个元件可能期望由累加器硬件逻辑100、200输出的值为特定形式,例如左对齐。因此,可能需要对来自第二加法逻辑单元104的最终输出值(即,在累加运算的最终时钟周期中来自第二加法逻辑单元104的输出值)应用移位。需要应用于输出的移位量可以例如基于输入值的数字格式和/或输入值本身而变化。在移位取决于输入值(而不是数字格式,或者除了数字格式之外)的情况下,累加器硬件逻辑100、200可以包括前导零计数器(lzc),该前导零计数器用于确定要应用于来自第二加法逻辑单元104的最终输出值的移位。替代地,累加器硬件逻辑100、200可以(例如,从累加器硬件逻辑外部的lzc)接收控制信号,该控制信号指示将对来自第二加法逻辑单元104的最终输出值执行的移位量。例如,基于输入值的移位可以帮助使输出结果的可能精度最大化。图3和图4示出了改进的累加器硬件逻辑300、400的两个另外的示例。尽管这些被示为图2所示的变化,使得在反馈路径中移位硬件110在选择硬件108之前而不是之后,但是在另外的示例中,移位硬件110可以以与图1的示例中所示的方式类似的方式被放置在选择硬件108之后。
71.图3所示的示例性累加器硬件逻辑300包括与上文参考图1和图2所描述的其他示例相同的元件,并且另外包括可变移位逻辑302和第二存储区304。可变移位逻辑302以可控(并且因此可变)的量(即,根据位位置的数量)执行位移位,该可控的量可以是零(即,使得不执行移位),并且该可控的量可以在任一方向上(即,移位的方向像位位置的数量一样是可控的,例如左移或右移),以便由累加器硬件输出的值是正确的形式(例如,左对齐)。由于所执行的移位不是固定的(即,它是可控的,并且因此是可变的),所以不使用逻辑元件就不能执行,这不同于移位元件110(上文所描述)。累加器硬件逻辑300如上文参考图1和图2所描述的那样操作,并且此外,可变移位逻辑302在累加运算的最后时钟周期中接收来自第二加法逻辑单元104的输出值作为输入。可变移位逻辑302将可变移位应用于输入值(例如,取决于控制信号或配置参数),并将移位后的值输出到第二存储区304。如上文所提及,用于控制由可变移位逻辑302执行的移位量的控制信号、配置参数或另一信号可以取决于输入值的数字格式和/或输入值本身。将了解,可变移位逻辑302可在累加运算的除最终时钟周期以外的周期中从第二加法逻辑单元104接收输出值;然而,在这些较早的周期中,该值不是有效数据。在一些示例中,为了节省功率,当接收到的输入数据是有效的时,有效信号可以用于向可变移位逻辑302发信号,从而在数据无效的情况下,通过保持来自前一时钟周期的所有信号不变来节省功率。
72.将了解,虽然图3所示的累加器硬件逻辑300包括用于存储输出值的第二存储区304,但是在所示示例的变型中,此第二存储区304可以被省略,并且输出值可以直接从可变移位逻辑302输出(如图3中的虚线箭头所示)。
73.图4所示的示例性累加器硬件逻辑400与图3所示的累加器硬件逻辑的相似之处在于,该示例性累加器硬件逻辑包括与上文参考图1和图2所描述的其他示例相同的元件,并且另外包括可变移位逻辑302;然而,该示例性累加器硬件逻辑不包括图3的示例中存在的第二存储区304。在图4的示例中,可变移位逻辑302接收来自第二加法逻辑单元104的输出值作为输入,并将可变移位应用于该值。对于除累加运算的最终时钟周期以外的每个时钟
周期,可变移位逻辑302不应用移位(即,该可变移位逻辑应用零位位置的移位),使得从可变移位逻辑302输出并存储在存储区106中的值与由第二加法逻辑单元104输出的值相同。然而,在累加运算的最终周期中(例如,在两个时钟周期内执行累加的第二周期中),可变移位逻辑302将可变移位应用于从第二加法逻辑单元104接收到的值(以将该值置于正确的输出形式),并且移位后的值被存储在存储区106中。
74.在两个时钟周期内的示例性累加中,第一加法逻辑单元102接收表示为αi和βi的两个输入,并输出这两个输入的和αi+βi,i表示时钟周期(例如,对于第一时钟周期i=0,对于第二时钟周期i=1)。在各种示例中,累加器可以在两个时钟周期(i=0,1)内或多于两个时钟周期内操作。在第一时钟周期(i=0)中,第一加法逻辑单元102接收两个值α0和β0作为输入,并将这两个输入的和α0+β0输出到第二加法逻辑单元104。第二加法逻辑单元104还从包括移位硬件110和选择硬件108的反馈路径接收第二输入。由于这是第一时钟周期,没有存储(与此累加运算相关的)先前的值,因此选择硬件选择零输入,并将该输入输出到第二加法逻辑单元104。因此,第二加法逻辑单元104输出α0+β0和0(α0+β0+0)之和的结果,即α0+β0。这个值没有由可变移位逻辑302移位,并且被存储在存储区106中。
75.在第二时钟周期(i=1)中,第一加法逻辑单元102接收两个值α1和β1作为输入,并将这两个输入的和α1+β1输出到第二加法逻辑单元104。第二加法逻辑单元104还从包括移位硬件110和选择硬件108的反馈路径接收第二输入。由于这是第二时钟周期,现在有(与此累加运算相关的)先前的值存储在存储区106中,因此选择硬件选择从存储区106中读取并由移位硬件110移位的这个值的移位版本,而不是零输入,并将该移位版本输出到第二加法逻辑单元104。如上文所描述,移位硬件的输出可以表示为(α0+β0)《《s,其中s是移位的位数,并且在此示例中,所执行的移位是左移,但在其他示例中,移位可以可选地向右。在一个示例中,s=8。第二加法逻辑单元104接收移位后的存储值,并输出(α0+β0)《《s和α1+β1之和的结果,即((α0+β0)《《s)+(α1+β1)。然后,这个值在被存储到存储区106之前在可变移位逻辑302中进一步移位一个可变量。如果由可变移位逻辑302应用的移位是《《v,其中v是移位的位数,并且在此示例中,所执行的移位是左移,则存储的值将是((((α0+β0)《《s)+(α1+β1))《《v)。
76.图3和图4所示的累加器硬件逻辑300、400具有与上文参考图1和图2所描述的相同的技术优点。此外,通过将存储区106定位在如图4所示的可变移位逻辑302之后(而不是如图3所示的之前),进一步提高了硬件的效率。这是因为在结果可以被存储(例如,在寄存器中)之前,任何加法运算都需要被完全解析,并且这意味着在存储发生之前,最终的加法运算(执行起来比早期的保留进位运算慢的串行进位运算)必须已经完成。然而,没有必要在(由可变移位逻辑302)移位之前完全解析结果。这意味着与图3所示的硬件布置相比,在图4的硬件布置中有更多的时间来解析加法,因为在结果被输入到任何存储区之前,第二加法逻辑单元输出被输入到可变移位逻辑,并且这又可以增加当生成门级网表时合成工具可用的选项。
77.在图4所示的另一个变型中,可以省略移位硬件110,并且改为由可变移位逻辑302执行固定移位;然而,这可能增加可以在可变移位逻辑302内实现的不同移位量的数量,并且还导致移位从反馈路径移回到关键路径中。
78.虽然图1至图4所示的第一加法逻辑单元102和第二加法逻辑单元104在上文被描
述为执行加法,但是将了解,该第一加法逻辑单元和第二加法逻辑单元可以执行加法,或者改为执行减法运算。替代地,在需要两个值相减的情况下,可以在将适当的值输入到加法逻辑单元(例如,第一加法逻辑单元102)之前对该值求反,使得加法逻辑单元仅执行加法。此外,虽然图1至图4所示的第一加法逻辑单元102和第二加法逻辑单元104被描述为执行两个输入值的加法,但是将了解,任一或两个单元可以执行多于两个输入值的加法(或减法)。例如,该单元可以在单个时钟周期中执行尽可能多的输入值相加(或相减)。
79.在图1至图4所示的示例中,反馈路径包括实现固定移位的移位硬件110(就位数和移位方向两者而言)。另外或替代地,反馈路径可以包括求反硬件510,如图5和图6所示的累加器硬件逻辑500、600。该求反硬件可以被包括在反馈路径中,以避免由于上文所解释的原因将该求反硬件置于第一和第二加法逻辑单元之间,并且可以例如被实现为使用被配置为仅执行加法(而不是减法)的第二加法逻辑单元来执行减法而不是加法。例如,在输入值有符号的情况下,例如在输入α0和β0都为负的情况下,可以使用减法。通过将求反置于反馈路径中并将第二加法逻辑单元限制为仅执行加法(而不是减法),可以更有效地在硬件中实现该求反硬件(例如,就面积和功率而言)。虽然图5和图6被示出为图2的变型,但是将了解,求反硬件510可以代替移位硬件110或者除了该移位硬件之外被包括在图1、图3和图4中的任何一个图中。此外,虽然图6示出了在反馈路径中在移位硬件110之前的求反硬件510,但是将了解,该求反硬件可以替代地放置在反馈路径中在移位硬件110之后。例如,当对对齐的有符号数求和时,可以使用包括仅求反硬件510而不包括移位硬件110的图5的布置。
80.本文中所描述的改进的累加器硬件逻辑可以被实现为乘法硬件的一部分,该乘法硬件被布置成在多于一个时钟周期内(例如,在两个时钟周期内)计算结果。可以使用两个时钟周期来降低硬件要求(就面积和功耗而言),同时降低性能,即乘法需要两个时钟周期而不是一个时钟周期。可以例如是输入值i和权重w的两个输入数的乘法(例如,其中乘法是卷积运算的一部分)可以通过将输入数中的每个输入数分成两个部分而在两个周期内被拆分,第一部分(分别为i
high
,w
high
)包括第一数量的连续msb(最高有效位),并且第二部分(分别为i
low
,w
low
)包括剩余的lsb(最低有效位),使得:
81.i
·
w=((i
high
·whigh
)<<2s)+((i
high
·wlow
)<<s)+((i
low
·whigh
)<<s)+(i
low
·wlow
)
82.其中s是第二(低)部分中的每个第二部分的位数。这在图7中以图形方式示出,象限702中的每个象限代表四个乘法项(i
high
·whigh
)、(i
high
·wlow
)、(i
low
·whigh
)和(i
low
·wlow
)中的一者。
83.在第一时钟周期中,四个乘法项中的两者被计算(上文乘法项中的第一者以及第二或第三乘法项)并在累加器硬件逻辑中加在一起,并且在第二时钟周期中,剩余的两个乘法项被计算(上文乘法项中的最后一者以及在第一时钟周期中未被计算的另一个乘法项)、加在一起并加到在第一时钟周期中生成的结果中。乘法硬件的示例如图8所示,并且包括累加器硬件800、两个乘法器802、804和左移硬件806。乘法器802、804中的每一者接收两个输入值(如图8所示:第一乘法器802的输入ai&bi,以及第二乘法器804的输入ci&di),并将该两个输入值乘在一起。来自第一乘法器802的输出被输入到左移硬件806中并经历左移。来自左移硬件806的输出被输入到累加器硬件逻辑800,并对应于上文图1至图6的解释中的输入αi,并且来自第二乘法器804的输出(该输出未左移)也被输入到累加器硬件逻辑800,并对
应于输入βi。累加器硬件逻辑800可以对应于上文所描述的示例(例如,图1至图6中的任何一个图所示的示例或上文所描述的任何其他变型)中的任何一个示例。
84.左移硬件806对输入给它的值执行固定数量s的位位置的左移。这个值s是每个输入数的第二(低)部分中的位数。例如,如果输入数i和w都是16位数,则它们可以各自被分成两个8位部分(高部分和低部分),并且左移硬件806可以将输入给该左移硬件的值向左移位8位位置(例如,s=8)。累加器硬件逻辑800中的移位硬件110实现与左移硬件806相同的固定移位(例如,在上文示例中向左8位位置)。
85.在两个时钟周期中的每一者中到图8所示的乘法硬件的输入如下表所示:
[0086][0087]
如表中所示,在第一时钟周期中,输入到左移硬件806的到第一乘法器802的两个输入是两个原始输入值的两个高部分,并且到第二乘法器804的两个输入是两个原始输入值中的一者的高部分和另一个原始输入值的低部分。在第二时钟周期中,没有连接到左移硬件806的到第二乘法器804的两个输入是两个原始输入值的两个低部分,并且到第一乘法器802的两个输入是剩余的一对输入部分,该对输入部分中的一个输入部分是原始输入值的高部分,并且另一个输入部分是另一个原始输入值的低部分。
[0088]
这意味着:
[0089]
α0=((i
high
·whigh
)<<s)
[0090]
β0=(i
high
·wlow
)或(i
low
·whigh
)
[0091]
α1=((i
low
·whigh
)<<s)或((i
high
·wlow
)<<s)
[0092]
β1=(i
low
·wlow
)
[0093]
返回参考上文对累加器硬件逻辑800的描述,在第一时钟周期中,该累加器硬件逻辑计算:
[0094]
α0+β0=((i
high
·whigh
)<<s)+(i
high
·wlow
)
[0095]
并且在第二时钟周期中,该累加器硬件逻辑计算:
[0096]
((α0+β0)<<s)+(α1+β1)
[0097]
=((((i
high
·whigh
)<<s)+(i
high
·wlow
))<<s)+(((i
low
·whigh
)<<s)+(i
low
·wlow
))
[0098]
=((i
high
·whigh
)<<2s)+((i
high
·wlow
)<<s)+((i
low
·whigh
)<<s)+(i
low
·wlow
)
[0099]
可以在卷积引擎内使用类似于上文所描述(并且如图8所示)的乘法硬件的硬件。在卷积引擎内,并行执行输入值及其对应权重的多次乘法,并将其加在一起。卷积引擎可以计算:
[0100][0101]
n是可配置参数,并且在示例中,n=64、128等。示例性卷积硬件在图9中示出,并且该卷积硬件包括n个第一乘法器和n个第二乘法器,使得上文参考图8所描述的乘法的n个实例可以并行执行。第n第一乘法器802(其中n=1,

,n)计算a
i,n
·bi,n
,并且第n第二乘法器804计算c
i,n
·di,n
。卷积硬件还包括对第一乘法器802中的每个第一乘法器的输出求和的第一加法逻辑元件902,以及对第二乘法器804中的每个第二乘法器的输出求和的第二加法逻辑元件904。第一加法逻辑元件902的输出在左移硬件806中被左移s个位位置,并且然后被输入到累加器硬件逻辑800,并且对应于上文图1至图6的解释中的输入αi。第二加法逻辑元件904的输出(该输出未被左移)也被输入到累加器硬件逻辑800,并且对应于输入βi。累加器硬件逻辑800可以对应于上文所描述的示例(例如,图1至图6中的任何一个图所示的示例或上文所描述的任何其他变型)中的任何一个示例。
[0102]
如上文参考图8所描述,左移硬件806对输入给它的值执行固定数量s的位位置的左移。这个值s是每个输入数的第二(低)部分中的位数。例如,如果输入数i和w都是16位数,则它们可以各自被分成两个8位部分(高部分和低部分),并且左移硬件806可以将输入给该左移硬件的值向左移位8位位置(例如,s=8)。累加器硬件逻辑800中的移位硬件110实现与左移硬件806相同的固定移位(例如,在上文示例中向左8位位置)。在图9所示的变型中,左移硬件806可以位于第一加法逻辑元件902之前,而不是之后。然而,如果在对n个乘法结果求和之前执行左移,则硬件将需要包括n个左移硬件806。由于移位可以通过路由来实现(因为该移位是固定的),而不是在逻辑元件中实现,所以这不会增加硬件的整体大小。
[0103]
在两个时钟周期中的每一者中到图9所示的硬件中的第n第一乘法器802和第二乘法器804的输入如下表所示:
[0104][0105]
这意味着:
[0106][0107][0108][0109][0110]
返回参考上文对累加器硬件逻辑800的描述,在第一时钟周期中,该累加器硬件逻辑计算:
[0111]
α0+β0[0112]
并且在第二时钟周期中,该累加器硬件逻辑计算:
[0113][0114][0115]
虽然图8的乘法硬件和图9的卷积硬件在上文被描述为通过将输入值中的每个输入值分成两个部分来在多于一个时钟周期内计算结果,但是在上文所描述的变型中,硬件可以适于接收一系列不同的输入位宽,直到最大位宽b
max
。取决于输入值的位宽,可以用零填充输入值以增加该输入值的位宽,或者可以不将该输入值分成两个部分,并且下文描述各种示例。
[0116]
如果输入中的一个输入的位宽不超过固定位移位(即位宽不超过s),但是另一个输入值的位宽不超过固定位移位,则只有具有更大位宽的输入值可以被分成两个。这减少了计算,使得计算可以在单个时钟周期内执行。例如,如果输入i的位宽不超过s,并且输入w的位宽更大,则计算变为:
[0117]i·
w=((i
·whigh
)<<s)+(i
·wlow
)
[0118]
然而,如果两个输入值的位宽都不超过s,则该两个输入值都不能被分成两个部分,并且计算为:
[0119]i·w[0120]
这意味着在两个输入值的位宽都不超过s的情况下,则不需要移位,因此左移硬件806可以被布置成对输入到它的值执行固定数量s的位位置的左移,或者根本不执行任何移位。换句话说,左移硬件806可以被布置成执行零或s个位的可变左移。
[0121]
此外,在原始输入值i和w的输入位宽不是b
max
或s的情况下,输入值可以被映射到
位宽为b
max
或s的值上,并且用零填充最低位,使得填充之后的所得位宽是b
max
或s。例如,如果输入值的位宽为12,b
max
=16并且s=8,则可以通过附加四个零作为lsb来将输入值映射到16位值。类似地,如果输入值的位宽为4,b
max
=16并且s=8,则可以通过附加四个零作为lsb来将输入值映射到8位值。取决于填充量,这可能会使得输入值的低部分(如果该输入值在填充之后一分为二)是全零。在这种情况下,如上文所描述减少了计算,使得计算可以在单个时钟周期内执行。
[0122]
能够适应不同位宽的输入值的这种可变模式硬件因此可以针对输入值的一些位宽在单个时钟周期内计算结果(即,其中输入值对中的至少一个输入值具有小于或等于s的位宽),并且可以针对其他更大的位宽在多于一个时钟周期内计算结果(即,其中两个输入值都具有大于s的位宽)。在结果是在单个时钟周期内计算的情况下,累加器硬件800不执行任何累加,其中累加被定义为使用寄存器随时间推移的迭代求和(即,每运算只有单个时钟周期,i=0)。
[0123]
通过使得硬件能够接收不同位宽的输入值,提高了硬件的效率。因为不需要提供可以在单个时钟周期中以所有可能的输入值的最大位宽b
max
执行乘法的硬件逻辑,所以可以减小硬件的整体大小和功耗。此外,对于不超过阈值s的位宽,可以在单个时钟周期中执行乘法,而吞吐量仅针对位宽超过阈值s的那些输入值被减小。此外,硬件可以被配置为同时执行两次卷积(例如,第一次卷积使用输入a
i,n
和b
i,n
,并且第二次卷积使用输入c
i,n
和d
i,n
,其中所有输入值的位宽都不超过阈值s),以便充分利用2n个乘法器802、804。
[0124]
输入值(i,w)可以是有符号或无符号的值。在该输入值是有符号值的情况下,两个第一高部分可以被视为有符号的(因为其将包括符号位),并且在执行乘法时考虑符号(例如,在必要时,通过对值求反和/或执行减法而不是加法),并且两个第二低部分可以被视为无符号值。例如,给定x位有符号二进制补数,那么最高有效位(有符号位)的权重为-2
x-1
(即负的),并且其余位的权重为正,因此该其余位可以被视为无符号的。
[0125]
在图7中以图形方式示出的示例中,输入值被分成相等长度的两个部分(就位数而言),或者分成近似相等长度的两个部分。例如,16位输入可以被分成包括8个msb的第一高部分和包括剩余8个lsb的第二低部分。在其他示例中,输入值可以被分成不同大小的两个部分,这在图10中以图形方式示出。在这个示例中,每个输入值1001、1002被分成包括单个msb(该单个msb可能是有符号位)的第一高部分1010、1020和包括所有剩余位的第二低部分1012、1022。
[0126]
在另一个示例中,图10所示的布置可以应用于图7中的象限702中的每个象限,以进一步将乘法分解成更小的部分。这可以例如在输入数据是有符号的而不是无符号的数据(即两个输入值都是有符号的)的情况下使用。这在图11中以图形方式示出。每个b
max
位输入值被一分为二,第一高部分(i
high
,w
high
)包括b
max
/2个msb,并且第二低部分(i
low
,w
low
)包括剩余的b
max
/2个lsb。然后,每个部分被分成包括单个msb的第一高子部分(i
high_msb
,w
high_msb
,i
low_msb
,w
low_msb
)和包括剩余(b
max
/2)-1个位的第二低子部分(i
high_rest
,w
high_rest
,i
low_rest
,w
low_rest
)。如果原始b
max
位输入值是有符号值,则这意味着第一高部分的第一高子部分(i
high_msb
,w
high_msb
)包括有符号位,并且剩余的子部分(i
high_rest
,w
high_rest
,i
low_msb
,w
low_msb
,i
low_rest
,w
low_rest
)可以被视为无符号值。
[0127]
这将b
max
xb
max
位乘法(其中例如,b
max
=16)分解成十六个更小的乘法运算,并且对
于两个有符号输入,七个乘法运算需要考虑输入值是有符号的还是无符号的(在图11中以阴影示出的乘法运算1101-1107),并且剩余的九个乘法运算可以总是被视为无符号的(并且因此是正的)。在两个b
max
位输入值(i,w)都是有符号的并且两个输入值中只有一个输入值是负的情况下,六个乘法运算1101-1106中的乘法结果在结果被求和之前被求反。如果两个输入中只有一个输入是有符号的,那么有四个乘法(1101、1102、1103、1107或1106、1105、1104、1107)可能产生负的结果。
[0128]
图12和图13分别是图8和图9所示硬件的变型,在该变型中,(b
max
/2)x(b
max
/2)乘法已经如图11所示被分段。这意味着不是具有两个输入来执行(b
max
/2)x(b
max
/2)乘法(例如,在图8和图9的示例中,ai和bi,或者ci和di),而是现在每个(b
max
/2)x(b
max
/2)乘法(a
i-hi和o
i-vi)有八个输入,使得每时钟周期有16个输入,并且这些输入可能如下表中的一个表中所示。
[0129]
[0130][0131]
这意味着在图12所示的示例中,总共有8个乘法器1201-1208。输入ai和bi以及输入oi和pi总是1位输入,因此乘法器中的两者1201、1205执行1x1乘法。输入gi和hi以及ui和vi总是((b
max
/2)-1)位输入,因此乘法器中的两者1204、1208执行最大乘法:((b
max
/2)-1)x((b
max
/2)-1)乘法(例如,如果b
max
=16,则是7x7乘法)。剩余的乘法器1202、1203、1206、1207接收一个1位输入和一个((b
max
/2)-1)位输入作为输入,并且因此执行1x((b
max
/2)-1)乘法。
[0132]
来自除了最大乘法器1204、1208之外的所有乘法器的输出都被输入到左移硬件1210-1215。将输入ai和bi以及输入oi和pi相乘的结果移位2x(((b
max
/2)-1))个位(在左移硬件1220、1223中),即到最大乘法的输入的位宽的两倍。剩余的左移都是((b
max
/2)-1)个位(在左移硬件1221、1222、1224、1225中),即到最大乘法的输入的位宽。因此,如果b
max
=16,则左移硬件1220、1223执行左移14个位,并且其他左移硬件1221、1222、1224、1225执行左移7个位。
[0133]
来自除了最大乘法器1204、1208之外的所有乘法器的左移结果然后被输入到求反硬件1220-1225,该求反硬件取决于以下来对结果应用可选的求反:输入是否有符号,以及
如果该输入有符号,则正在执行的乘法是否对应于图11中的阴影部分1101-1106中的一个阴影部分以及乘法的结果是否为负(如上文所描述)。然后,在加法逻辑1230、1232中,将一组特定的8个输入(对应于来自图7中的四个象限702中的一个象限的所有位)的所有结果加在一起。硬件的其余部分然后继续类似于图8所示并像图8所示那样操作(如上文所描述)。将了解,对于输入格式的一些组合,可能有一些输入对在乘在一起时总是正的,并且因此取决于可以由硬件容纳的输入格式的范围,可以省略图12所示的求反硬件1220-1225中的一些求反硬件。
[0134]
图13所示的示例是图9所示和上文所描述的示例的变型。该变型以与图12所示硬件相同的方式工作,不同之处在于在每个时钟周期中现在有16xn个输入,并且因此有8xn个乘法器。如图9所示,来自每组n个乘法器的结果在加法逻辑1301-1308中加在一起,并且然后硬件继续类似于图12所示并像图12所示那样操作(如上文所描述)。
[0135]
将了解,在图12和图13所示以及上文所描述的硬件的另一种变型中,累加器硬件可以不使用本文中所描述(例如,如图1至图6所示)的改进的累加器硬件,而是可以使用替代性累加器硬件(例如,常规累加器硬件)。
[0136]
虽然本文中所描述的大多数示例涉及执行乘法,并且因此涉及在两个时钟周期(i=0,1)内的累加,但是在其他示例中,乘法可以在多于两个时钟周期(例如,4个时钟周期)内执行。这可以使得输入值能够被递归地分解成更小的块(例如,b
max
/4),并且以具有更大位宽的输入值的吞吐量降低为代价,进一步减小乘法硬件的大小。
[0137]
将了解,对作为输入值i和权重w的两个输入值的参考仅仅是借助于示例的。在上文所描述的硬件不用于卷积运算的情况下,第二输入w可以不是权重,而可以是任何输入值。
[0138]
如上文所描述,使用上文所描述的技术中的一种或多种技术,可以就面积和功率而言更有效地实现硬件。折衷可能是就吞吐量而言,因为对于具有较大位宽的输入值,用于执行运算的时钟周期数增加。在许多应用中,减小硬件的大小和由硬件消耗的功率是特别重要的,例如在电池供电的设备、小型设备(例如,手持设备)等中。
[0139]
图14示出了可以在其中实现本文中所描述的方法并且可以在其中实现上文所描述的硬件的计算机系统。计算机系统包括cpu 1402、gpu 1404、存储器1406和其他设备1414,诸如显示器1416、扬声器1418和相机1417。计算机系统的部件可通过通信总线1420彼此通信。本文中所描述的累加器硬件可以例如在cpu 1402、gpu 1404内或者在单独的nna块(图14中未示出)内实现。
[0140]
图1至图6的累加器硬件、图8和图12的乘法硬件以及图9和图13的卷积硬件被示为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。将了解,在本文中被描述为由硬件内的元件形成的中间值不需要由硬件在任何点处物理地生成,并且可以仅表示方便地描述由硬件在其输入与输出之间执行的处理的逻辑值。
[0141]
本文中所描述的累加器硬件、乘法硬件和卷积硬件可以包括在集成电路上的硬件中。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件具
体实施的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,该程序代码当在处理器上被执行时执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机访问存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
[0142]
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如c、java或opencl等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0143]
处理器、计算机或计算机系统可以是任何种类的器件、机器或专用电路,或其集合或部分,所述集合或部分具有处理能力以使得其可执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)、物理处理单元(ppu)、无线电处理单元(rpu)、数字信号处理器(dsp)、通用处理器(例如通用gpu)、微处理器、旨在加速cpu之外的任务的任何处理单元等。计算机或计算机系统可包括一个或多个处理器。本领域技术人员将认识到,这种处理能力被结合到许多不同的设备中,并且因此术语

计算机’包括机顶盒、媒体播放器、数字收音机、pc、服务器、移动电话、个人数字助理和许多其他设备。
[0144]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如hdl(硬件描述语言)软件,如用于设计集成电路,或者用于配置可编程芯片以实施所需功能。也就是说,可以提供一种计算机可读存储介质,该计算机可读存储介质在其上编码有集成电路定义数据集形式的计算机可读程序代码,该计算机可读程序代码当在集成电路制造系统中处理(即运行)时将该系统配置为制造包括本文中所描述的任何装置的nn硬件。集成电路定义数据集可以是例如集成电路描述。
[0145]
因此,可以提供一种在集成电路制造系统处制造本文中所描述的累加器硬件、乘法硬件或卷积硬件的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中处理时使得执行制造累加器硬件、乘法硬件或卷积硬件的方法。
[0146]
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包括作为寄存器传送级(rtl)代码、作为高级电路表示,诸如verilog或vhdl,以及作为低级电路表示,诸如oasis(rtm)和gdsii。在逻辑上定义集成电路的更高级表示法(诸如rtl)可以在被配置为用于在软件环境的上下文中产生集成电路的制造定义的计算机系统处处理,该软件环境包括电路元件的定义以及用于组合这些元件以便产生由表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成用于生成集成电路的制造定义,以执行定义集成电路以便生成该集成电路的制造定义的代码。
[0147]
现在将参考图15描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造累加器硬件、乘法硬件或卷积硬件的示例。
[0148]
图15示出了集成电路(ic)制造系统1502的示例,该ic制造系统被配置为制造如本文示例中的任何一个示例中所描述的累加器硬件、乘法硬件、卷积硬件或nna。特别地,ic制造系统1502包括布局处理系统1504和集成电路生成系统1506。ic制造系统1502被配置为接收(例如,定义如本文示例中的任何一个示例中所描述的累加器硬件、乘法硬件、卷积硬件或nna的)ic定义数据集,处理ic定义数据集,并根据ic定义数据集生成ic(例如,该ic包括如本文示例中的任何一个示例中所描述的累加器硬件、乘法硬件、卷积硬件或nna)。ic定义数据集的处理将ic制造系统1502配置为制造包括如本文示例中的任何一个示例中所描述的累加器硬件、乘法硬件或卷积硬件的集成电路。
[0149]
布局处理系统1504配置成接收并处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1504已经确定电路布局时,其可将电路布局定义输出到ic生成系统1506。电路布局定义可以是例如电路布局描述。
[0150]
如所属领域中已知,ic生成系统1506根据电路布局定义来生成ic。举例来讲,ic生成系统1506可实施生成ic的半导体设备制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1506的电路布局定义可呈计算机可读代码的形式,ic生成系统1506可使用所述计算机可读代码来形成用于生成ic的合适掩码。
[0151]
由ic制造系统1502执行的不同过程可全部在一个位置例如由一方来实现。替代地,ic制造系统1502可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0152]
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将该系统配置为在不处理ic定义数据集以确定电路布局的情况下制造累加器硬件、乘法硬件或卷积硬件。例如,集成电路定义数据集可以定义可重新配置的处理器(诸如fpga)的配置,并且对该数据集的处理可以将ic制造系统配置成(例如通过将配置数据加载到fpga)生成具有该定义配置的可重新配置的处理器。
[0153]
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的设备。举例来说,通过集成电路制造定义数据集,以上文关于图15描述的方式对集成电路制造系统的配置,可制造出如本文中所描述的设备。
[0154]
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图15所示的示例中,ic生成系统可由
集成电路定义数据集进一步被配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
[0155]
本领域技术人员将认识到用来存储程序指令的存储设备可分布在网络上。例如,远程计算机可将所描述的过程的示例存储为软件。本地或终端计算机可访问远程计算机,并且下载软件的一部分或全部以运行程序。替代地,本地计算机可根据需要下载软件的片段,或者在本地终端处执行一些软件指令,并且在远程计算机(或计算机网络)处执行一些软件指令。本领域技术人员还将认识到,通过利用本领域技术人员已知的常规技术,软件指令的全部或一部分可由诸如dsp、可编程逻辑阵列等专用电路实行。
[0156]
本文中所描述的方法可由配置有存储在有形存储介质上的机器可读形式的软件的计算机执行,例如,软件呈包括用于将计算机配置成执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或呈包括计算机程序代码装置的计算机程序的形式,当程序在计算机上运行时以及在计算机程序可在计算机可读存储介质上实施的情况下,所述代码装置适于执行本文中所描述的方法中的任一种方法的所有步骤。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,并且不包括传播信号。软件可适于在并行处理器或串行处理器上执行,使得所述方法步骤可以任何合适的次序实行或同时实行。
[0157]
本文中所描述的硬件部件可由其上编码有计算机可读程序代码的非暂时性计算机可读存储介质产生。
[0158]
存储用于实施所公开方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,诸如sram或dram。可用以实施非易失性存储器的技术的示例包括光学和磁存储器技术、闪存存储器、相变存储器、电阻ram。
[0159]
对“逻辑”的特定引用是指执行功能(function/functions)的结构。逻辑的示例包括被布置成执行这些功能的电路系统。例如,这种电路系统可包括在制造过程中可用的晶体管和/或其他硬件元件。借助于示例,这种晶体管和/或其他元件可用以形成实施和/或含有存储器的电路系统或结构,诸如寄存器、触发器或锁存器;逻辑运算器,诸如布尔(boolean)运算;数学运算器,诸如加法器、乘法器;或移位器和互连线。这类元件可作为定制电路或标准单元库、宏来提供,或在其他抽象层级处提供。这类元件可以特定布置来互连。逻辑可包括作为固定功能的电路系统,并且电路系统可被编程以执行一个或多个功能;可从固件或软件更新或控制机制中提供这种编程。被标识为执行一个功能的逻辑还可包括实施组成功能或子过程的逻辑。在一个示例中,硬件逻辑具有实施一个或多个固定功能操作、状态机或过程的电路系统。
[0160]
与已知的具体实施相比,在本技术中阐述的概念在设备、装置、模块和/或系统中(以及在本文中所实现的方法中)的具体实施可引起性能改进。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这类设备、装置、模块和系统(例如在集成电路中)期间,可在性能提高与物理具体实现之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知具体实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起设备、装置、模块和
系统的物理具体实施的改进(诸如硅面积减小)的概念可进行权衡以获得性能提高。这例如可通过在预定义面积预算内制造模块的多个实例来完成。
[0161]
如对本领域技术人员显而易见,可延长或改变本文中给出的任何范围或设备值而不丧失所寻求的效果。
[0162]
将了解,上文所描述的益处和优点可涉及一个实施方案,或可涉及若干实施方案。实施方案不限于解决所陈述问题中的任一问题或全部问题的实施方案,或具有所陈述益处中的任一益处或全部益处的实施方案。
[0163]


一’项目的任何引用都是指这些项目中的一个或多个项目。术语

包括’在本文中用以意指包括所标识的方法块或元件,但这类块或元件不包括排他列表,并且装置可包括额外块或元件,并且方法可包括额外操作或元件。此外,并不暗示块、元件和操作本身是封闭的。
[0164]
本文中所描述的方法的步骤可以任何合适的次序或在适当时被同时实行。图中的框之间的箭头展示方法步骤的一个示例序列,但并不旨在排除其他序列或并行执行多个步骤。另外,在不脱离本文中所描述的主题的精神和范围的情况下,可从方法中的任一方法中删除各个块。上文所描述的示例中的任一示例的各方面可与所描述的其他示例中的任一示例的各方面组合以形成其他示例而不会丧失所寻求的效果。在图的元件被展示为通过箭头连接的情况下,将了解,这些箭头仅展示元件之间的通信(包括数据和控制消息)的一个示例流动。元件之间的流动可在任一方向上或在两个方向上。
[0165]
申请人据此独立地公开了本文中所描述的每个单独特征以及两个或更多个这类特征的任何组合,到达的程度使得这类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管这类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可在本发明的范围内进行各种修改。

技术特征:
1.一种累加器硬件逻辑,所述累加器硬件逻辑包括:第一加法逻辑单元,所述第一加法逻辑单元包括第一输入端、第二输入端和输出端,所述第一输入端和所述第二输入端中的每一者被布置成在每个时钟周期中接收输入值;第二加法逻辑单元,所述第二加法逻辑单元包括第一输入端、第二输入端和输出端,并且其中所述第一输入端直接连接到所述第一加法逻辑单元的所述输出端;存储区,所述存储区被布置成存储由所述第二加法逻辑单元输出的结果;以及移位硬件和求反硬件中的至少一者,所述移位硬件和所述求反硬件位于所述存储区与所述第二加法逻辑单元的所述第二输入端之间的反馈路径中,其中所述移位硬件被配置为在固定方向上执行固定数量的位位置的移位。2.根据权利要求1所述的累加器硬件逻辑,所述累加器硬件逻辑包括位于所述反馈路径中的移位硬件。3.根据权利要求2所述的累加器硬件逻辑,其中所述第二加法逻辑单元的所述第二输入端连接到包括所述移位硬件的所述反馈路径。4.根据权利要求2所述的累加器硬件逻辑,所述累加器硬件逻辑还包括:选择硬件,所述选择硬件位于所述反馈路径中,并且被配置为在累加运算的第一时钟周期中选择第一零输入,并且在所述累加运算的后续时钟周期中从所述存储区中选择第二输入。5.根据权利要求4所述的累加器硬件逻辑,其中所述选择硬件位于所述存储区与所述移位硬件之间的所述反馈路径中。6.根据权利要求4所述的累加器硬件逻辑,其中所述选择硬件位于所述移位硬件与所述第二加法逻辑单元之间的所述反馈路径中。7.根据权利要求2所述的累加器硬件逻辑,所述累加器硬件逻辑还包括:可变移位逻辑,所述可变移位逻辑被配置为在可控方向上执行可控数量的位位置的移位,其中所述可变移位逻辑包括输入端,所述输入端被布置成接收由所述第二加法逻辑单元输出的值。8.根据权利要求7所述的累加器硬件逻辑,其中除了累加运算的最终时钟周期之外,对于所述累加运算的每个时钟周期,所述可控数量为零。9.根据权利要求7所述的累加器硬件逻辑,其中所述可变移位逻辑包括到所述存储区的输出,并且所述存储区被布置成存储由所述第二加法逻辑单元输出并且从所述可变移位逻辑接收到的所述结果。10.根据权利要求7所述的累加器硬件逻辑,所述累加器硬件逻辑还包括:第二存储区,所述第二存储区被布置成存储由所述可变移位逻辑输出的结果。11.根据权利要求1所述的累加器硬件逻辑,所述累加器硬件逻辑还包括位于所述反馈路径中的移位硬件逻辑和求反硬件逻辑两者。12.一种乘法硬件,所述乘法硬件包括根据前述权利要求中任一项所述的累加器硬件逻辑。13.根据权利要求12所述的乘法硬件,所述乘法硬件被布置成在两个时钟周期内将两个值乘在一起,并且还包括:
第一乘法器,所述第一乘法器被布置成在每个时钟周期接收第一输入和第二输入,将所述第一输入和所述第二输入乘在一起并且输出结果;第二乘法器,所述第二乘法器被布置成在每个时钟周期接收第三输入和第四输入,将所述第三值输入和所述第四值输入相乘并且将结果输出到所述累加器硬件逻辑的第二输入端;以及左移硬件,所述左移硬件被布置成接收来自所述第一乘法器的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的第一输入端,其中:所述两个值中的每一者被分成高部分和低部分,所述低部分各自包括所述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,在第一时钟周期中,所述第一输入和所述第二输入是所述两个值的所述高部分,并且所述第三输入和所述第四输入是所述两个值中的第一者的所述高部分和所述两个值中的第二者的所述低部分,在第二时钟周期中,所述第三输入和所述第四输入是所述两个值的所述低部分,并且所述第一输入和所述第二输入是所述两个值中的所述第二者的所述高部分和所述两个值中的所述第一者的所述低部分。14.根据权利要求12所述的乘法硬件,所述乘法硬件被布置成在两个时钟周期内将两个值乘在一起,并且还包括:第一多个乘法器,所述第一多个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;第二多个乘法器,所述第二多个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;第三乘法器,所述第三乘法器被布置成在每个时钟周期接收一对输入,将所述一对输入乘在一起并且输出结果;第四乘法器,所述第四乘法器被布置成在每个时钟周期接收一对输入,将所述一对输入乘在一起并且输出结果;第一多个左移硬件,所述第一多个左移硬件各自被布置成从所述第一多个乘法器中的不同的一个乘法器接收结果并且输出左移结果;第二多个左移硬件,所述第二多个左移硬件各自被布置成从所述第二多个乘法器中的不同的一个乘法器接收结果并且输出左移结果;第一多个求反硬件,所述第一多个求反硬件各自被布置成从所述第一多个左移硬件中的不同的一个左移硬件接收左移结果;第二多个求反硬件,所述第二多个求反硬件各自被布置成从所述第二多个左移硬件中的不同的一个左移硬件接收左移结果;第一加法逻辑,所述第一加法逻辑被布置成接收由所述第一多个求反硬件和所述第三乘法器中的每一者输出的结果并且对所述结果求和;第二加法逻辑,所述第二加法逻辑被布置成接收由所述第二多个求反硬件和所述第四乘法器中的每一者输出的结果并且对所述结果求和,并且将所述结果输出到所述累加器硬件逻辑的所述第二输入端;以及
左移硬件,所述左移硬件被布置成接收来自所述第一加法逻辑的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的所述第一输入端,其中:所述两个值中的每一者被分成高部分和低部分,所述低部分各自包括所述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,并且所述高部分和所述低部分中的每一者被进一步分成包括最高有效位的一部分和包括所述部分的所有其他位的一部分,在第一时钟周期中,到所述第三乘法器的所述一对输入是所述两个值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,到所述第一多个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述高部分的部分的其他组合,到所述第四乘法器的所述一对输入是所述输入值中的第一输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的第二输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且到所述第二多个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,在第二时钟周期中,到所述第三乘法器的所述一对输入是所述输入值中的所述第二输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的所述第一输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,到所述第一多个乘法器的所述多对输入包括多个对,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,到所述第四乘法器的所述一对输入是所述两个值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且到所述第二多个乘法器的所述多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述低部分的部分的其他组合。15.一种卷积硬件,所述卷积硬件包括根据权利要求1至11中任一项所述的累加器硬件逻辑。16.根据权利要求15所述的卷积硬件,所述卷积硬件被布置成在两个时钟周期内将n对两个值乘在一起,并且还包括:n个第一乘法器,所述n个第一乘法器各自被布置成在每个时钟周期接收第一输入和第二输入,将所述第一输入和所述第二输入乘在一起并且输出结果;第一加法逻辑,所述第一加法逻辑被布置成对由所述n个第一乘法器中的每个第一乘法器输出的所述结果求和;n个第二乘法器,所述n个第二乘法器各自被布置成在每个时钟周期接收第三输入和第
四输入,将所述第三值输入和所述第四值输入乘在一起并且输出结果;第二加法逻辑,所述第二加法逻辑被布置成对由所述n个第二乘法器中的每个第二乘法器输出的所述结果求和,并且将所述结果输出到所述累加器硬件逻辑的所述第二输入端;以及左移硬件,所述左移硬件被布置成接收来自所述第一加法逻辑的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的所述第一输入端,其中对于每一对值:所述值中的每一者被分成高部分和低部分,所述低部分各自包括所述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,在第一时钟周期中,到所述第一乘法器中的一个第一乘法器的所述第一输入和所述第二输入是所述两个值的所述高部分,并且到所述第二乘法器中的一个第二乘法器的所述第三输入和所述第四输入是所述两个值中的第一者的所述高部分和所述两个值中的第二者的所述低部分,所述n个第一乘法器中的每个第一乘法器接收来自不同的一对值的部分,在第二时钟周期中,到所述第二乘法器中的所述一个第二乘法器的所述第三输入和所述第四输入是所述两个值的所述低部分,并且到所述第一乘法器中的所述一个第一乘法器的所述第一输入和所述第二输入是所述两个值中的所述第二者的所述高部分和所述两个值中的所述第一者的所述低部分。17.根据权利要求15所述的卷积硬件,乘法硬件被布置成在两个时钟周期内将n对两个值乘在一起,并且还包括:第一多组n个乘法器,所述第一多组n个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;第二多组n个乘法器,所述第二多组n个乘法器各自被布置成在每个时钟周期接收不同的一对输入,将所述一对输入乘在一起并且输出结果;n个第三乘法器,所述n个第三乘法器被布置成在每个时钟周期接收一对输入,将所述一对输入乘在一起并且输出结果;n个第四乘法器,所述n个第四乘法器被布置成在每个时钟周期接收一对输入,将所述一对输入乘在一起并且输出结果;第一多个加法逻辑元件,所述第一多个加法逻辑元件各自被布置成对由所述第一多组n个乘法器中的一组n个乘法器输出的所述结果求和;第二多个加法逻辑元件,所述第二多个加法逻辑元件各自被布置成对由所述第二多组n个乘法器中的一组n个乘法器输出的所述结果求和;第三加法逻辑元件,所述第三加法逻辑元件被布置成对由所述n个第三乘法器输出的所述结果求和;第四加法逻辑元件,所述第四加法逻辑元件被布置成对由所述n个第四乘法器输出的所述结果求和;第一多个左移硬件,所述第一多个左移硬件各自被布置成从所述第一多个加法逻辑元件中的不同的一个加法逻辑元件接收结果,并且输出左移结果;第二多个左移硬件,所述第二多个左移硬件各自被布置成从所述第二多个加法逻辑元件中的不同的一个加法逻辑元件接收结果,并且输出左移结果;
第一多个求反硬件,所述第一多个求反硬件各自被布置成从所述第一多个左移硬件中的不同的一个左移硬件接收左移结果;第二多个求反硬件,所述第二多个求反硬件各自被布置成从所述第二多个左移硬件中的不同的一个左移硬件接收左移结果;第一加法逻辑,所述第一加法逻辑被布置成接收由所述第一多个求反硬件和所述第三加法逻辑元件中的每一者输出的结果并且对所述结果求和;第二加法逻辑,所述第二加法逻辑被布置成接收由所述第二多个求反硬件和所述第四加法逻辑元件中的每一者输出的结果并且对所述结果求和,并且将所述结果输出到所述累加器硬件逻辑的所述第二输入端;以及左移硬件,所述左移硬件被布置成接收来自所述第一加法逻辑的输出,执行预定数量的位的左移,并且将结果输出到所述累加器硬件逻辑的所述第一输入端,其中对于每一对值:所述两个值中的每一者被分成高部分和低部分,所述低部分各自包括所述值的所述预定数量的最低有效位,并且所述高部分各自包括所述值的所有剩余位,并且所述高部分和所述低部分中的每一者被进一步分成包括最高有效位的一部分和包括所述部分的所有其他位的一部分,在第一时钟周期中,到所述n个第三乘法器中的一个第三乘法器的所述一对输入是所述两个值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,到来自所述第一多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述高部分的部分的其他组合,到所述n个第四乘法器中的一个第四乘法器的所述一对输入是所述输入值中的第一输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的第二输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且到来自所述第二多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,在第二时钟周期中,到所述n个第三乘法器中的一个第三乘法器的所述一对输入是所述输入值中的所述第二输入值的所述高部分的包括除了所述最高有效位之外的所有位的所述部分,以及所述输入值中的所述第一输入值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,到来自所述第一多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的所述多对输入包括多个对,所述多个对包括来自一个输入值的所述高部分的一部分与来自另一个输入值的所述低部分的一部分的其他组合,到所述n个第四乘法器中的一个第四乘法器的所述一对输入是所述两个值的所述低部分的包括除了所述最高有效位之外的所有位的所述部分,并且
到来自所述第二多组n个乘法器中的每组n个乘法器的所述乘法器中的一个乘法器的多对输入包括一对和多个对,所述一对包括每个输入值的所述高部分的所述最高有效位,所述多个对包括所述两个值的所述低部分的部分的其他组合。18.一种包括卷积硬件的神经网络加速器,所述卷积硬件包括根据权利要求1至11中任一项所述的累加器硬件逻辑。19.一种在硬件逻辑中执行累加的方法,所述方法包括:由第一加法逻辑单元在每个时钟周期中经由第一输入端接收第一输入值,并且经由第二输入端接收第二输入值;由第二加法逻辑单元接收直接来自所述第一加法逻辑单元的输出端的输入和来自源于存储区的反馈路径的输入,所述反馈路径包括移位硬件和求反硬件中的至少一者,其中所述移位硬件被配置为在固定方向上执行固定数量的位位置的移位;以及在存储区中存储由所述第二加法逻辑单元输出的结果。20.一种方法,所述方法使用集成电路制造系统来制造根据权利要求1至11中任一项所述的累加器硬件逻辑、包括根据权利要求1至11中任一项所述的累加器硬件逻辑的乘法硬件,或包括根据权利要求1至11中任一项所述的累加器硬件逻辑的神经网络加速器。

技术总结
描述了累加器硬件逻辑。在一个示例中,累加器硬件逻辑包括第一和第二加法逻辑单元以及存储区。第一加法逻辑单元包括第一输入端、第二输入端和输出端,第一和第二输入端中的每一者被布置成在每个时钟周期中接收输入值。第二加法逻辑单元包括直接连接到第一加法逻辑单元的输出端的第一输入端。第二加法逻辑单元还包括第二输入端和输出端。存储区被布置成存储由第二加法逻辑单元输出的结果。累加器硬件逻辑还包括位于存储区与第二加法逻辑单元的第二输入之间的反馈路径中的移位硬件和/或求反硬件。移位硬件被配置为在固定方向上执行固定数量的位位置的移位。定数量的位位置的移位。定数量的位位置的移位。


技术研发人员:K
受保护的技术使用者:想象技术有限公司
技术研发日:2023.03.29
技术公布日:2023/10/19
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

航空商城 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

评论

相关推荐