一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

存储器中的数据操控的制作方法

2021-12-08 02:10:00 来源:中国专利 TAG:


1.本发明涉及存储器中的数据操控。


背景技术:

2.在存储器中操控数据是数据处理系统中的关键赋能(enabling)任务。它在机器学习领域中尤其相关,其中数据——例如,一层神经网络的输入或输出数据——可能包括大型多维数组。
3.最终,物理存储器是作为一维线性结构被访问的。因此,为了存储在物理存储器中,必须将任何多维数组写为值的一维序列。这些值可以存储在存储器的一个连续块中的相继位置处。(出于本公开的目的,可以忽略碎片化效应。)
4.多维数组可以通过多种方式写入一维存储器中。然而,在不同时间,不同结构和格式在不同情况下可能是有用的。这样就产生了操控存储在存储器中的数据的需要。
5.在神经网络工作负荷的上下文中(但不限于此上下文),可能有必要以各种方式操控此类数组中的数据。这可以包括变换数组的不同维度、使数组大小调整或级联、将数组转换为不同格式(例如,用于输入、输出或处理),以及诸如深度到空间、空间到深度、批次到空间或空间到批次的转换。
6.常规上,每当需要此类操作时,cpu(软件)与存储器交互以执行它们。


技术实现要素:

7.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
8.公开了一种用于操控存储在存储器中的数据的硬件单元。所述硬件单元包括:内部缓冲器;存储器读取块,其被配置成从所述存储器读取数据且将所述数据写入所述内部缓冲器;存储器写入块,其被配置成从所述内部缓冲器读取所述数据且将所述数据写入所述存储器。硬件单元任选地还包括所述存储器读取块和所述存储器写入块之间的控制通道,其中,所述存储器读取块和所述存储器写入块被配置成经由所述控制通道进行通信,以分别在向所述内部缓冲器写入所述输入以及从所述内部缓冲器读取数据时在它们之间保持同步。硬件单元可以被配置成将一个或多个变换应用于存储器中的多维数据。所述硬件单元可以被配置成使用多个嵌套循环遍历多维数组。
9.根据一方面,提供了一种用于操控存储在存储器中的数据的硬件单元,所述硬件单元包括:内部缓冲器;存储器读取块,其被配置成从所述存储器读取数据并将所述数据写入内部缓冲器;存储器写入块,其被配置成从内部缓冲器读取数据并将所述数据写入存储器;以及存储器读取块和存储器写入块之间的控制通道,其中,所述存储器读取块和所述存储器写入块被配置成通过控制通道通信以分别在将所述数据写入内部缓冲器并从内部缓冲器读取所述数据时维持它们之间的同步。
10.存储器通常是硬件单元外部的外部存储器。每个存储器访问块(即,存储器读取块和存储器写入块)都可以访问外部存储器。
11.存储器读取块和存储器写入块可以被共同配置,使得当数据由存储器写入块写入到存储器时,相对于由存储器读取块读取的数据而被变换。该变换可以包括以下一种或多种:变换数组的不同维度,使数组大小调整或级联,将数组转换为不同格式,以及诸如深度到空间、空间到深度、批次到空间和空间到批次的转换。
12.所述数据可以包括多维数组,所述多维数组包括多个数据元,其中,所述存储器读取块和所述存储器写入块中的至少一个被配置成使用多个嵌套循环遍历所述多维数组,每个循环具有与其相关联的所述多维数组的数据元之间的对应步幅。
[0013]“嵌套”循环意指至少一个内层循环在至少一个外层循环的每次迭代内迭代多次。
[0014]
所述多个嵌套循环中的至少一个循环任选地被配置成取决于如下至少一项而迭代不同次数:(a)所述多个嵌套循环中的至少一个其它循环的循环索引;以及(b)软件可配置标志。
[0015]
这可以允许至少一个循环基于在所执行的操作中如何遍历不同数据维度而动态地(在运行时)改变其大小。这可以在存储器读取块或存储器写入块中发生。与循环相关联的循环索引指示该循环的当前迭代的次数。在一些实施例中,设置软件可配置标志允许当前循环根据其它循环的循环索引而迭代不同次数。也就是说,所述循环可以被配置成根据至少一个其它循环的循环索引和软件可配置标志迭代不同次数。
[0016]
多个循环中的每个循环任选地被配置成执行可变次数的迭代,所述可变次数是在运行时从包括以下各项的组中选择的:当所述多个嵌套循环中的一个或多个外层循环不在其末端迭代时要执行的第一迭代次数;当所述多个嵌套循环中的一个或多个外层循环处于其末端迭代时要执行的第二迭代次数;以及任选地,当未设置软件可配置标志时要执行的第三迭代次数。“末端”迭代通常是最后一次迭代。不过,可以采取逆向方式,由此“末端”迭代是第一次迭代。第一迭代次数和第二迭代次数的使用可以取决于正在设置的软件可配置标志。
[0017]
所述存储器读取块任选地被配置成以离散突发串从存储器读取数据,和/或所述存储器写入块任选地被配置成以离散突发串将所述数据写入到所述存储器,所述离散突发串具有预定第一大小,其中,所述存储器读取块任选地被配置成将所述数据以离散单元写入所述内部缓冲器,和/或所述存储器写入块任选地被配置成以离散单元从所述内部缓冲器读取所述数据,所述离散单元具有第二大小,其中,所述第二大小不同于所述第一大小。
[0018]
每个突发串通常具有固定大小,其通常由硬件实施方式确定。待操控的多维数组的维度通常不与突发串大小整齐地对齐。例如,每个维度中的数组大小通常不是突发串大小的整数倍。硬件单元的内部缓冲器可以被配置成以比与存储器的事务中使用的突发串大小更小的单位来索引数据。也就是说,第二大小可以小于第一大小。例如,第二大小可以是一个字节。
[0019]
所述数据可以包括多维数组,所述多维数组包括多个数据元,其中,所述存储器读取块和所述存储器写入块中的至少一个任选地被配置成使用多个嵌套循环遍历所述多维数组,每个循环具有与其相关联的多维数组的数据元之间的对应步幅,其中,当读取或写入多维数组的所需区段时,所述至少一个块任选地被配置成基于所述所需区段的大小与第一
大小之间的关系选择至少一个循环中的迭代次数。
[0020]
所述至少一个块可以被配置成:基于所述关系确定待读取或写入的离散突发串包含额外数据,所述额外数据是对期望区段而言附加的,并且计划在所述多个循环中的至少一个循环的稍晚迭代中被读取或写入;并且作为响应,根据针对所述稍晚迭代计划的操作,在当前迭代中对所述额外数据进行操作。为了这样做,对至少一个循环的迭代次数进行修改(特别是增加),以对额外数据进行操作。具有此修改的迭代次数的循环被称为与突发串“对齐”,或“突发串对齐”。
[0021]
多个循环中的至少一个环的稍晚迭代可以是该循环的下一次迭代。
[0022]
对额外数据进行操作可以特别意指在当前迭代中处理突发串中的最后数据元。即,操作继续到突发串结束。
[0023]
存储器读取块和/或存储器写入块的循环可以被配置成从(或向)存储器读取(或写入)数据突发串,以对多维数组的所需区段进行操作。硬件单元可以确定突发串包含除所需区段之外的数据。由于这可能在循环中的至少一个循环的稍晚迭代中是需要的,因此硬件单元可以在读取或写入相关突发串的循环迭代期间提前操控额外数据。
[0024]
以待读取的离散突发串来操作额外数据可以包括将其写入与所述稍晚迭代中将写入的相同位置的内部缓冲器。以待写入的离散突发串来操作额外数据可以包括从内部缓冲器从与所述稍晚迭代中将读取的相同位置读取它。对于末端迭代,通常不执行对额外数据的此操作,因为假设对于末端迭代,不存在额外数据。因此,当多个嵌套循环中的一个或多个外层循环不在其末端迭代中时,实现突发串对齐所必需的修改的迭代次数是要执行的第一迭代次数的示例。
[0025]
所述数据可以包括多维数组,所述多维数组包括多个数据元,其中,所述多维数组以具有预定第三大小的存储单元的存储格式存储在所述存储器中,其中,所述多维数组的一个或多个维度不是所述第三大小的整数倍。
[0026]
有时,可能需要以指定具有特定大小的存储单元的存储格式存储多维数组。多维数组的维度可能与这些特定大小不匹配或整齐地分成它们。在这些情况下,多维数组维度的末尾可能与存储格式的单元不对齐。
[0027]
所述存储器读取块和所述存储器写入块中的至少一个可以被配置成使用多个嵌套循环遍历所述多维数组,每个循环具有与其相关联的所述多维数组的数据元之间的对应步幅,其中,所述至少一个块任选地被配置成对于所述多个嵌套循环中的至少一个循环,当一个或多个外层循环在其末端迭代中时,与所述一个或多个外层循环不在其末端迭代时所述至少一个循环的迭代次数相比,选择不同的迭代次数。此不同的迭代次数是“第二”迭代次数的示例,如上文所论述。
[0028]
任选地,当一个或多个外层循环在其末端迭代中时所选择的不同迭代次数小于当一个或多个外层循环在其它迭代中时的迭代次数。可以选择更小的迭代次数以避免超越多维数组末端之外的冗余读取或写入操作。
[0029]
任选地,当一个或多个外层循环在其末端迭代中时所选择的不同迭代次数大于当一个或多个外层循环在其它迭代中时的迭代次数。可以选择更大的迭代次数以合并一个或多个外层循环的最终两次或更多次迭代。例如,可以放大迭代次数,使得在外层循环的倒数第二次迭代中,至少一个(内层)循环还执行其在外层循环的最后迭代中通常将执行的操
作。换句话说,本来是倒数第二次迭代的实际会成为最后一次迭代。
[0030]
存储器读取块和存储器写入块之间的同步(由通过控制通道的通信提供)可以确保存储器读取块在存储器写入块仍需要时不会在内部缓冲器中盖写数据。此外,同步可以确保数据不会由存储器写入块从内部缓冲器读取,直到其已被存储器读取块有效写入内部缓冲器。所述存储器读取块和所述存储器写入块中的每一个可以具有相应的同步计数器,所述块被配置成经由所述控制通道彼此传达其同步计数器,其中,所述硬件单元被配置成通过比较所述同步计数器来维持所述块之间的同步。
[0031]
为了保持同步,如果相应同步计数器之间的差异超过预定阈值,则可以暂停一个块的操作。每个同步计数器可以由预定循环的每次迭代中的相应块递增。
[0032]
同步计数器之间的比较可以由存储器读取块和/或存储器写入块执行。替代地,控制通道可以包括用于执行此比较的逻辑电路。
[0033]
所述数据可以包括多维数组,所述多维数组包括多个数据元,其中,所述存储器读取块和所述存储器写入块中的每一个被配置成使用相应多个嵌套循环遍历所述多维数组,每个循环具有与其相关联的所述多维数组的数据元之间的对应步幅,其中,存储器读取块的同步计数器可以与其多个循环的第一循环相关联,存储器写入块的同步计数器可以与其多个循环的第二循环相关联。
[0034]
第一循环和第二循环可以处于循环的相应嵌套的相同或不同层级。
[0035]
还提供了一种硬件实现的操控存储在存储器中的数据的方法,所述数据包括多维数组,所述多维数组包括多个数据元,所述方法包括:(i)从所述存储器读取数据并将所述数据写入内部缓冲器;和(ii)从所述内部缓冲器读取所述数据并将所述数据写入所述存储器,其中,所述步骤(i)和(ii)中的至少一个是使用多个嵌套循环执行,每个循环具有与其相关联的多维数组的数据元之间的对应步幅。
[0036]
所述方法可以是用于硬件单元的方法。存储器可以在硬件单元外部。当将数据写入内部缓冲器以及从内部缓冲器读取数据时,优选地在步骤(i)和(ii)之间维持同步。同步可以确保步骤(i)在步骤(ii)仍需要数据时,内部缓冲器中不会盖写任何数据。此外,同步可以确保直到其已通过步骤(i)有效写入内部缓冲器,才在步骤(ii)从内部缓冲器读取数据。
[0037]
步骤(ii)可以在步骤(i)完成之前开始。具体而言,步骤(ii)可以在步骤(i)仅部分完成时开始,即当数据中的仅一部分已从存储器读取且写入内部缓冲器时开始。
[0038]
所述多个嵌套循环中的至少一个循环可以被配置成取决于如下至少一项而迭代不同次数:(a)所述多个嵌套循环中的至少一个其它循环的循环索引;以及(b)软件可配置标志。
[0039]
多个循环中的每个循环可以被配置成执行可变次数的迭代,所述可变次数是在运行时从包括以下各项的组中选择的:当所述多个嵌套循环中的一个或多个外层循环不在其末端迭代时要执行的第一迭代次数;当所述多个嵌套循环中的一个或多个外层循环处于其末端迭代时要执行的第二迭代次数;以及任选地,当未设置软件可配置标志时要执行的第三迭代次数。
[0040]
任选地,以离散突发串从存储器读取数据;和/或以离散突发串将所述数据写入到所述存储器,所述离散突发串具有预定第一大小,其中,将所述数据以离散单元写入所述内
部缓冲器;和/或以离散单元从所述内部缓冲器读取所述数据,所述离散单元具有第二大小,其中,所述第二大小不同于所述第一大小。
[0041]
所述方法可以包括,当分别从或向存储器读取或写入所述多维数组的期望区段时,基于所述期望区段的大小与所述第一大小之间的关系来选择至少一个循环中的迭代次数。
[0042]
所述方法可以包括:基于所述关系确定待从存储器读取或向存储器写入的离散突发串包含额外数据,所述额外数据是对期望区段而言附加的,并且计划在所述多个循环中的至少一个循环的稍晚迭代中被读取或写入;并且作为响应,根据针对所述稍晚迭代计划的操作,在当前迭代中对所述额外数据进行操作。
[0043]
所述多维数组可以以具有预定第三大小的存储单元的存储格式存储在所述存储器中,其中,所述多维数组的一个或多个维度不是所述第三大小的整数倍。
[0044]
所述方法可以包括:对于所述多个嵌套循环中的至少一个循环,当多个循环中的一个或多个外层循环处于其末端迭代时,与当所述一个或多个外层循环不处于其末端迭代时所述至少一个循环的迭代次数相比,选择不同的迭代次数。
[0045]
具体而言,可以选择不同迭代次数,以便在一个或多个外层循环的末端迭代中避免冗余(不必要的)迭代。
[0046]
所述方法还可以包括:维持与所述多个循环中执行步骤(i)的第一循环相关联的第一同步计数器,其中,所述第一同步计数器随着所述第一循环的每次迭代而递增;维持与所述多个循环中执行步骤(ii)的第二循环相关联的第二同步计数器,其中,所述第二同步计数器随着所述第二循环的每次迭代而递增;将所述第一同步计数器的当前值与所述第二同步计数器的当前值进行比较;以及基于所述比较的结果控制步骤(i)和或步骤(ii)的进展。
[0047]
如果第一同步计数器超过第二同步计数器超过预定阈值,则所述方法可以包括暂停步骤(i)。如果第二同步计数器超过第一同步计数器超过预定阈值,则所述方法可以包括暂停步骤(ii)。
[0048]
还提供了一种神经网络加速器系统,所述神经网络加速器系统被配置为执行如上概述的方法。
[0049]
如上所述的硬件单元或神经网络加速器系统可以包含在集成电路上的硬件中。
[0050]
还提供了一种使用集成电路制造系统来制造如上概述的硬件单元或神经网络加速器系统的方法。
[0051]
还提供了一种使用集成电路制造系统制造如上所述的硬件单元或神经网络加速器系统的方法,所述方法包括:使用布局处理系统处理所述硬件单元或神经网络加速器系统的计算机可读描述,以便生成包含所述硬件单元或神经网络加速器系统的集成电路的电路布局描述;以及使用集成电路生成系统根据所述电路布局描述制造所述硬件单元或神经网络加速器系统。
[0052]
还提供了一种计算机可读代码,所述计算机可读代码被配置成使得当代码被运行时执行如上概述的方法。
[0053]
还提供了一种计算机可读存储介质,在其上编码有所述计算机可读代码。
[0054]
还提供了一种集成电路定义数据集,当在集成电路制造系统中处理时,该集成电
路定义数据集配置该集成电路制造系统以制造如上概述的硬件单元或神经网络加速器系统。
[0055]
还提供了一种非暂态计算机可读存储介质,其上存储有如上概述的硬件单元或神经网络加速器系统的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时使集成电路制造系统制造包含硬件单元或神经网络加速器系统的集成电路。
[0056]
还提供了一种非暂态计算机可读存储介质,其上存储有如上概述的硬件单元或神经网络加速器系统的计算机可读描述,当在集成电路制造系统中处理所述计算机可读描述时,使集成电路制造系统:使用布局处理系统处理所述硬件单元或神经网络加速器系统的计算机可读描述,以便生成包含所述硬件单元或神经网络加速器系统的集成电路的电路布局描述;以及使用集成电路生成系统根据所述电路布局描述制造所述硬件单元或神经网络加速器系统。
[0057]
还提供了一种被配置成制造如上概述的硬件单元或神经网络加速器系统的集成电路制造系统。
[0058]
还提供了一种集成电路制造系统,包括:非暂态计算机可读存储介质,其上存储有如上概述的硬件单元或神经网络加速器系统的计算机可读描述;布局处理系统,其被配置成处理所述计算机可读描述,以便生成包含所述硬件单元或神经网络加速器系统的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据所述电路布局描述制造所述硬件单元或神经网络加速器系统。
[0059]
该布局处理系统可以被配置成确定从计算机可读描述导出的电路的逻辑部件的位置信息,以便生成包含硬件单元或神经网络加速器系统的集成电路的电路布局描述。
[0060]
所述硬件单元可以包含于集成电路上的硬件中。可以提供一种在集成电路制造系统处制造硬件单元的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时配置该系统以制造硬件单元。可以提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有硬件单元的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时,使得所述集成电路制造系统制造包含硬件单元的集成电路。
[0061]
还提供了一种集成电路制造系统,包括:非暂态计算机可读存储介质,其上存储有硬件单元的计算机可读描述;布局处理系统,其被配置成处理所述计算机可读描述,以便生成包含所述硬件单元的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据所述电路布局描述制造所述硬件单元。
[0062]
可以提供一种用于执行本文中描述的任一方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文中描述的任何方法。
[0063]
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
[0064]
现在将参考附图详细描述示例,在附图中:
[0065]
图1a示出了被转置的二维数组的第一示例;
[0066]
图1b示出了被转置的图1a的数组的第二示例;
[0067]
图2是根据示例的存储器操控模块的框图;
[0068]
图3是例示根据示例由存储器操控模块执行的方法的流程图;
[0069]
图4示出了处于具有预定大小的存储单元的存储格式中的数据的逻辑布置;
[0070]
图5a示出了从外部存储器读取数据的区段的一系列读取操作,以便将数据变换为不同的形式;
[0071]
图5b示出了在变换之后数据区段的逻辑布置;
[0072]
图6示出了在其中实现根据示例的硬件单元的计算机系统;以及
[0073]
图7示出了用于生成包含根据示例的硬件单元的集成电路的集成电路制造系统。
[0074]
附图示出各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。
具体实施方式
[0075]
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于所属领域的技术人员而言将是显而易见的。
[0076]
现在仅通过示例的方式来描述实施例。
[0077]
图1a和图1b示出了在存储器中操控数据的示例。参考图1a的左侧,4x4数组110以列优先格式存储在存储器中。也就是说,存储在存储器中的前四个数据元是数组的第一列的数据元;存储在存储器中的后四个元素是数组的第二列的数据元。上部表示是数组的二维表示;下部表示示出了存储器中数据元的一维布置。沿着一维表示的标记“rn,cn”(行n,列n)指示每个数据元在二维数组中的位置。存储器中的第一数据元是行0列0处的元素,第二数据元是行1列0处的元素,以此类推。
[0078]
希望转置数组110,使得原始数组的每一行成为转置数组120的列,并且原始数组的每一列成为转置数组120的行。在图1a的右上方,示出了转置数组120的二维表示。其下方是转置数组的一维表示(如存储器中所展示的)。原始数组110的第一行112的数据元以对角线阴影图案示出。这些数据元将形成经变换(转置)数组120的第一列。
[0079]
示意图下部的箭头表示将这些元素从原始数组110移动到转置数组120的一种方式。如图1a所示,可以使用原始数组中4的步幅和输出(转置)数组中1的步幅来执行转置操作。从输入数组的第一存储器位置读取r0,c0处的元素。它被写入到输出数组的第一存储器位置。读取指针向前移动四个存储器位置(步幅=4)。从第五存储器位置读取r0,c1处的元素。写入指针向前移动一个存储器位置(步幅=1)。来自输入数组中的r0,c1的元素被写入到输出数组中的第二存储器位置。这对应于列优先格式的r1,c0。重复所述流程,直到输入数组110的第一行112的所有四个元素已写入输出数组的第一列124。然后针对输出数组120的其它三列(类似地,输入数组110的其它三行)中的每一个重复整个流程,直到最终填充整个输出数组。
[0080]
图1a的示例中的操作序列当然不是唯一的可能序列。图1b示出了许多可能的备选
序列中的一种。在图1b中,任务是相同的,即,将输入数组110转置以生成输出数组120。然而,在此,使用1的步幅遍历输入数组,而使用4的步幅遍历输出数组。从输入数组的第一存储器位置读取r0,c0处的元素。它被写入到输出数组的第一存储器位置。(这与图1a中的第一步相同。)读取指针然后向前移动一个存储器位置(步幅=1)。从第二存储器位置读取输入数组110中的r1,c0处的元素。写入指针向前移动四个存储器位置(步幅=4)。来自输入数组中的r1,c0的元素被写入到输出数组中的第五存储器位置。这对应于列优先格式的r0,c1。重复所述流程,直到输入数组110的第一列的所有四个元素已写入输出数组的第一行。然后针对输出数组的其它三行中的每一个重复整个流程,直到最终填充整个输出数组。
[0081]
尽管上文已将图1a和图1b中的操作描述为转置操作,但相同的步骤序列可以同等地用于将存储器中的列优先存储格式转换为行优先存储格式。
[0082]
本发明人已认识到,像这些存储器操作可能会对cpu造成重大负担。根据示例,因此,建议提供一种专用硬件单元以处置对存储器中的数据操控。此“存储器操控模块”或mmm可以消除cpu的负担,并且可以被设计成对数据有效地执行变换。
[0083]
根据示例,mmm将数据视为多维数组,以特定方式通过一组具有相关联步幅(数据之间的跳跃)的嵌套循环来遍历多维数组。从概念上讲,每个循环都链接到维度(行、列、平面、组等),并且被配置成迭代与其所覆盖的维度相关的特定次数。mmm的一个潜在有益特征是它允许根据一个或多个其它循环的状态将一循环执行不同次数的迭代。具体而言,根据一个或多个循环不在结束迭代中还是在结束迭代中,它们可以通过不同方式影响另一个循环迭代多少次。例如,可以修改迭代次数以将循环操作与存储器读/写突发串对齐,或避免在数据结构结束之后浪费读/写操作。此功能适用于执行读取操作的所有循环以及执行写入操作的那些循环。
[0084]
提供了一个或多个软件可配置的标志。当这些标志中的一个被设置时,使得迭代次数能够变化。每个循环可以被配置为使得其迭代次数为a、b或c:
[0085]

a是标准迭代次数。可以在不适用特殊条件时执行此迭代次数。具体而言,这是当未设置软件可配置标志时执行的迭代次数。
[0086]

b是读取或写入到完整突发串结束时必须执行的迭代次数。当一个或多个外层循环(在嵌套循环的上下文中)不在其末端(例如,最后)迭代时这样做。
[0087]

c是当一个或多个外层循环达到末端(例如,最后)迭代时其进行的迭代次数。
[0088]
想法是,根据如何遍历不同数据维度,循环可以改变其迭代次数,使得整体操作(置换、变维等)更有效率地完成。最容易的方式是通过想象通过数组从第一个元素到最后一个元素步进来考虑迭代次数的变化。在这种情况下,上文做出的选项b和c在处于其最后迭代的循环或未处于其最后迭代的循环之间作出区分。然而,应当理解,所述方法也可以反向应用,反向步进通过数组。在这种情况下,关键区分在第一次迭代与除第一次迭代之外的迭代之间。本文将使用对“末端”迭代的一般性引用来涵盖两种可能性——即,“末端”迭代可以是第一次或最后一次迭代。示例可以指“最后”迭代的事实并不意味着本公开的范围限于此可能性。注意,数字b和c不是固定数字——它们在不同迭代中可以不同,这取决于一个或多个外层循环的条件以及突发串大小与数据维度之间的关系。
[0089]
图2是根据示例的硬件单元(存储器操控模块)200的框图。mmm经由总线250耦接到存储器,即外部存储器205。mmm 200包括存储器读取块220、内部缓冲器210和存储器写入块
230。控制通道240用于协调由存储器读取块220和存储器写入块230执行的操作。存储器读取块220和存储器写入块230两者都耦接到总线250。存储器读取块220的输出耦接到内部缓冲器210的输入。存储器写入块230的输入耦接到内部缓冲器210的输出。
[0090]
图3是示出由图2的mmm执行的方法的流程图。在步骤310中,存储器读取块220从外部存储器205读取数据。在步骤320中,存储器读取块220将(从外部存储器205读取的)数据写入内部缓冲器210。在步骤330中,存储器写入块230从内部缓冲器210读取数据;并且在步骤340中,存储器写入块230将(从内部缓冲器210读取的)数据写回外部存储器205。
[0091]
通过由存储器读取块220和存储器写入块230执行的操作的组合,数据得到变换。当将数据从存储器205移动到内部缓冲器210时可能发生变换,或者当将数据从内部缓冲器210移动到存储器205时可能发生变换。在一些情况下,变换可以部分地发生在存储器205与内部缓冲器210之间,并且部分地发生在内部缓冲器210与存储器205之间。
[0092]
由于存储器读取块220和存储器写入块230是作为单独的硬件块提供的,因此它们能够并行操作。也就是说,当存储器写入块230正在执行步骤330和340时,存储器读取块220可以正在执行步骤310和320。控制通道240提供存储器读取块220与存储器写入块230之间的通信,以维持两个块之间至少松散的同步。如果没有这种同步,就可能出现竞争条件——存储器写入块230可能在存储器读取块220已将数据写入到缓冲器之前尝试从内部缓冲器210读取数据;或者存储器读取块220可能在存储器写入块230已读取数据之前盖写内部缓冲器210中的数据。经由控制通道240的同步可以通过暂停“前面”的操作(即,块)直到其它操作/块已经追上来避免这种情况。
[0093]
从外部存储器205读取并写入到外部存储器的数据是包括多个数据元的多维数组(如图1a的二维示例)。每个存储器访问块(即,存储器读取块220和存储器写入块230)被配置成使用一组嵌套循环来遍历多维数组。所述一组嵌套循环中的每个循环具有与其相关联的多维数组的数据元之间的步幅。使用上文所描述的图1a的二维示例,存储器读取块220的最内循环正在步进通过一行的元素(即,其在列上迭代)。由于数组110是逐列存储在存储器中的,存储器读取块220的该内层循环具有四的步幅。存储器写入块230的最内循环步进通过一列的元素;因此,其具有一的步幅。
[0094]
在每个块220、230中,该组嵌套循环中的每个循环在其外部的循环的每次迭代内迭代多次。在图1a的二维示例中,每个块220、230中的该组嵌套循环由两个循环组成——内层循环和外层循环。存储器读取块220处的外层循环在行上迭代。存储器写入块230处的外层循环在列上迭代。
[0095]
每个循环都有与其关联的循环索引。循环索引指示该循环的当前迭代。每个块220、230还具有与其多个循环中的至少一个相关联的同步计数器。同步计数器与相关层级的循环相关联以维持同步。注意,存储器读取块220的同步计数器可以与和存储器写入块230的同步计数器不同的层级的循环相关联。通常,在第一层级(即,最高/最外层级)完成同步,对于第一层级,在同步层级之外的所有循环具有相同含义,并且在两个存储器访问块中以相同方式遍历数组。假设以相同方式遍历数据的循环固有地同步,并且不需要经由同步计数器来控制同步。软件可以确定同步的适当层级。在一些情况下,有可能在较低层级(即,在此层级上方/外部具有存储器读取块和存储器写入块不针对其以相同方式遍历数组的至少一个层级)进行同步。在这样的层级同步将起作用,条件是同步计数器保持足够大的偏
移,以迫使落后的存储器访问块进行充分多的处理。例如,取逐个读取12个数据值的存储器读取块220的循环,而存储器输出块230的循环则每四个值写入一次。这在以下表1中示出。顶行表示读取操作的循环索引;底行表示写入操作的对应循环索引。读取迭代11需要在写入操作2之前发生;因此,为了经由单个偏移同步这些循环,应当使用至少为9的偏移。
[0096]
表1:具有同步偏移的读取和写入
[0097]
01234567891011
ꢀꢀꢀ0ꢀꢀꢀ1ꢀꢀꢀ2[0098]
如图3所示,存储器读取块22的读取和写入数据的步骤310和320由一组嵌套循环迭代地执行。在每次迭代中,在步骤325处,至少递增当前循环的循环索引。当给定循环完成其最终迭代时,控制被返回到下一层级的循环(即,当前循环之外的循环),以用于该循环的下一次迭代。当控制同步的循环的循环索引递增时,同步计数器也递增。
[0099]
类似地,在存储器写入块230处,读取和写入数据的步骤330和340由另一组嵌套循环迭代地执行。在每次迭代中,在步骤345中,至少递增当前循环的循环索引。在当前循环完成其最终迭代时,控制被返回到下一最低(最内)层级的循环,以用于该循环的下一次迭代。对于控制同步的层级处的循环,每次当循环索引递增时,存储器写入块230的同步计数器也递增。
[0100]
为了避免出现竞争条件,当在步骤320中将数据写入内部缓冲器210之前,存储器读取块220将其同步计数器与存储器写入块230的同步计数器进行比较。这在图4中由步骤350指示。如果存储器写入块230的同步计数器在存储器读取块220的同步计数器后面太远,存储器读取块暂停其操作,直到存储器写入块230的同步计数器增加(即,直到存储器写入块230“追上”)。类似地,当在步骤330中从内部缓冲器210读取数据之前,存储器写入块230将其同步计数器与存储器读取块220的同步计数器进行比较。如果存储器读取块220的同步计数器在存储器写入块230的同步计数器后面太远,存储器写入块暂停其操作,直到存储器读取块220的同步计数器增加(即,直到存储器读取块220“追上”)。一个块是否在另一个块“后面太远”取决于同步计数器之间的偏移,这又取决于正在执行的操作。它还可以取决于内部缓冲器的大小。因此,它不是固定迭代次数,而是根据具体情况而变化。
[0101]
如上所述,每个块220、230的多个嵌套循环中的一个或多个循环可以被配置成根据至少一个其它循环的循环索引执行不同次数的迭代。现在将参考图4描述这种情况的示例。
[0102]
图4示意性地示出了以具有预定大小的存储单元的存储格式存储在存储器205中的数据。具体而言,该存储格式包括h=5行,其中l=3,每行三个组(组0,组1,组2),并且每组中n=10个值。数据未完全填充此存储格式。最后一行仅包含两个组,后一个组仅包含m=5(而不是n=10)个值。
[0103]
为了从存储器读取数据,存储器读取块220实施以下三个嵌套循环的集合:
[0104][0105]
在基本实施方式中,最内循环(超过值n)将总是迭代10次,中间循环(超过组l)将总是迭代三次。然而,这将导致冗余读取操作,从而从多维数组末端之外的值组读取。(这些潜在冗余读取操作的逻辑位置在图4中用虚线表示。)根据本示例,在最外循环的最终迭代中,最内循环和中间循环被截短,以避免这些冗余读取操作。具体而言,当最外循环(超过行h)在其最终迭代中(即,在处理最后一行时)时,中间循环(超过组l)被设置为仅迭代2次,而不是3次。当最外循环在其最终迭代中且中间循环在其最终迭代中时,最内循环(超过值)被设定成迭代m=5次而不是10次(与n相反)。这样确保不执行冗余读取操作。在此示例中,中间循环(超过组l)的操作由最外循环(超过行h)控制。并且最内循环(超过值)的操作由最外循环和中间循环的组合控制。这显示了调整迭代次数的能力如何能够提高系统效率的一个有用示例。
[0106]
尽管图4的以上示例是结合由存储器读取块220执行的读取操作呈现的,但应当理解,相同原理适用于由存储器写入块230执行的写入操作。
[0107]
修改循环中的迭代次数的能力在其它情况下也可能有用。图5a和图5b示出了期望将数据行重构成一组矩形数组的示例。图5a示出了存储在存储器205中的原始数据行。第一行(行1)和第三行(行3)不加阴影示出;第二行(行2)显示为灰色阴影,以便于区分。图5b示出了填充矩形数组(由虚线指示)的重构数据的逻辑表示。这是内部缓冲器中数据的逻辑表示;然而,在实践中,数据通常不以这种精确方式布置在缓冲器中。内部缓冲器不断被重复使用——存储器写入块将已经处理的数据写入外部存储器,然后存储器读取块将新数据(盖)写到内部缓冲器中进行替换。出于本示例的目的,假设以离散突发串从存储器205读取数据,每个突发串由128个值组成。数据以离散单元被写入内部缓冲器。在此示例中,离散单元由一个值组成。还假设数据被重新布置成高度为128个值(即每列128个值)的矩形。然而,每一行中的数据值的数量不是128的整数倍。这意味着,尽管第一矩形的第一列与128值突发串对齐,但后续列不与突发串对齐。
[0108]
在此示例中,存储器读取块220中存在三个循环。最外循环在每行内的位置上迭代;中间循环在不同行上迭代;最内循环在个体数据值上迭代。在最内循环的每次迭代中,可以读取数据突发串(如果需要),并将数据值写入内部缓冲器210。
[0109]
第一任务是在最外循环的第一次迭代中执行中间循环的第一次迭代。在示例中,这将涉及最内循环的128次迭代。为此,在第一读取操作(“读取1”)中,在最内循环的第一次迭代中,存储器读取块220在一个突发串中读取310由来自行1的前128个值组成的区段(参见图5a)。在最内循环的第一次迭代中,将第一值写入320内部缓冲器210。在最内循环的其
余127次迭代中,将该区段中的其它127个值写入320到内部缓冲器210,以填充顶部矩形的第一列(图5b)。注意,在此示例中,在最内循环的后127次迭代中不需要读取操作,因为在第一次迭代中,已经在单次读取操作中获得所有128个值。在图5b中,数字“1”表示在读取1中读取的数据。下一个任务(中间循环的第二次迭代)是开始用来自行2的数据填充顶部矩形的第二列。然而,行2的开始不与存储器读取突发串对齐。因此,必须执行两个读取操作以将行2的前128个值放入缓冲器210中。因此,在第二读取操作(“读取2)中,存储器读取块220读取310包括行2的开始的数据突发串。此突发串包括在行2开始时的期望区段2b以及区段2a中的被丢弃的一些不需要的数据值。(这些丢弃的数据值在图5a中以字母“x”表示。)所需区段2b的值(即,除那些丢弃的x之外的值)被写入320到顶部矩形的第二列顶部的缓冲器310。丢弃不需要的数据值涉及在读取2之后仅在区段2b开始处开始最内循环。
[0110]
为了读取行2中前128个数据值的其余部分(以完成中间循环的第二次迭代),在第三读取操作(“读取3”)中,在最内循环的稍后迭代中,存储器读取块220从存储器205读取下一数据突发串。这包括值的所需区段3a(第二行的前128个值的其余部分)。然而,由于突发串和列之间未对齐,它还包含区段3b中的额外数据值(用字母“e”表示)。在基本实施方式中,这些额外值e将被丢弃。然而,保留它们是有益的,因为在后续迭代中将需要它们,以填充重构数据中的后续矩形(参见图5b中的中间矩形)。
[0111]
根据本示例,存储器读取块220将额外数据e写入320缓冲器210的正确位置——即在将在稍后迭代中放置其的位置。这涉及修改存储器读取块220处最内循环的迭代次数,以增加将值写入缓冲器210的迭代的次数。并非仅将区段2b 3a写入缓冲器(这将是写入中间循环的此迭代所涉及的块所需的全部),存储器读取块将区段2b 3a 3b写入。
[0112]
此时,已填充第一(顶部)矩形中的第二列(参见图5b)。另外,第二(中间)矩形的第二列的一部分已经用区段3b填充。所述示例在中间循环的第三次迭代中继续填充第一矩形的第三列。这再次需要读取两个突发串,因为第三行的开始与存储器205中的数据突发串不对齐。在读取4中,存储器读取块220读取包含行3开始处的所需区段4b的数据突发串。此数据突发串还包括区段4a中的若干不需要的值x,所述值被相应地丢弃。区段4b被写入第三列顶部的内部缓冲器210。读取5读取行3的前128个值中的其余值(在区段5a中),以及额外值e(在区段5b中)。与行2一样,存储器读取块220会将所有已读取的值写入内部缓冲器210。也就是说,它增加了最内循环的迭代次数以超过128,以便除了区段4b和5a之外还写入区段5b。区段5a填充第一(顶部)矩形中的第三列的其余部分。区段5b填充第二(顶部)矩形中的第三列的其余部分。所述方法继续进行中间循环的进一步迭代,直到每一行的第一部分已被读取(在该过程中填充虚线顶部矩形的其余部分)。
[0113]
当已填充第一(顶部)矩形的每一列时,最外循环的第一次迭代完成。所述方法继续进行最外循环的第二次迭代,其中存储器读取块220前进以填充第二(中间)矩形。事实上,所述系统检测到第三(底部)矩形小于突发串大小,并且作为响应,第二矩形和第三矩形的处理被合并到最外循环的第二次迭代中。换句话说,最外循环的第二次迭代也将是最后迭代,并且最内循环的迭代次数被调整(尤其是增加)以完成第二和第三矩形。可以由控制硬件单元的软件预先处理这种状况的检测(即第三矩形的高度小于突发串大小)。或者,它可以由硬件单元本身处理。第二矩形的第一读取操作在图5a中表示为“读取n”。存储器读取块220现在处于中间循环的第一次迭代中(在最外循环的第二次迭代中)。读取n从存储器
205中的第一行读取310第二组128个值。这组值与可从存储器205读取的单个数据突发串对齐,因此不需要特殊处理。(在最内循环的前128次迭代中)将所有128个值简单地写入320内部缓冲器210中的第二矩形的第一列。然后,最内循环的迭代继续进行读取n 1,并且在第三(底部)矩形中将其数据值写入缓冲器。接下来,在中间循环的第二次迭代中,存储器读取块220希望读取行2的其余部分,以填充第二(中间)矩形和第三(底部)矩形的第二列。然而,由于存储了在读取3中读取的额外数据值e,所以在处理第一矩形时已填充此列的顶部。因此,其余的只是在读取n 2中读取此列的剩余数据值。与中间循环的第一次迭代一样,最内循环的迭代继续,直到第三矩形的相关列已被填充。在读取n 2中,超过第二行末端之外,还有一些额外的数据值被读取,这些数据值被丢弃。(如图表中所示,这些实际上对应于第三行的开始。)
[0114]
接下来,在中间循环的第三次迭代中(仍然在最外循环的第二次迭代之内),存储器读取块220希望填充第二(中间)矩形和第三(底部)矩形的第三列。在读取5之后,这已经被区段5b部分填充。因此,所需的第一读取操作是读取n 3。一旦(在最内循环的多次迭代中)将此写入缓冲器,存储器读取块(在最内循环的后续迭代中)执行读取n 4。读取n 4读取含有行3的最后部分的突发串,其被按时写入第三矩形。这是中间循环的第三次迭代的末端。所述方法继续中间循环的进一步迭代,直到每一行的相关部分已被读取并且第二(中间)矩形和第三(底部)矩形均已满为止。
[0115]
在图5a中,可以注意到读取n 1复制了读取2。读取n 1中所需的数据区段对应于读取2之后丢弃的值x。原则上,存储器读取块220可能已经在读取2之后将这些值存储在内部缓冲器210中。然而,在本示例中,mmm仅被配置成存储下一次迭代(下一矩形)中将需要的额外值,而不存储更晚迭代中将需要的额外值。例如,这可能是因为,如果内部缓冲器尝试为更多更晚的迭代存储数据,那么内部缓冲器可能会耗尽空间。还发现以这种方式限制额外数据的存储在希望避免重复读取操作同时避免设计过度复杂之间提供了良好的折衷。
[0116]
这同样适用于读取n 2和读取4。读取n 2中所需的数据区段对应于读取4中的丢弃的值x。原则上,可以在读取4之后将这些值存储在内部缓冲器210中,而不是丢弃它们。然而,这增加了额外的复杂性。因此,本示例仅在突发串结束时存储额外数据;其在突发串开始时丢弃“额外”数据。其它示例可以选择在突发串开始时存储额外数据。
[0117]
还应注意,在读取n 1、读取n 2和读取n 4之后,存储器读取块220不需要将从存储器读取的完整数据突发串写入内部缓冲器210。所需区段小于突发串大小,因为未完全填充第三矩形。
[0118]
如本示例中所示,通过减少冗余读取操作,存储器读取块220可以增加通往外部存储器205的有效带宽。对于在存储器中对多维数组的给定操控,这样可以帮助减少功耗和执行时间。另外,通过消除对内部缓冲器210的不必要的/冗余的写入操作,存储器读取块220可以潜在地有助于进一步减少功耗和/或执行时间。
[0119]
应当认识到,示例借助于突发串大小和矩形数组高度是相同值而得到简化。例如,如果数组高度小于突发串大小,那么将存在将读取延伸到突发串末端的更多情况(即,在先前给出的替代方案列表中的类型

b’的操作)。
[0120]
根据本示例,给定迭代中额外数据的存储/处理不同于其它策略,例如数据的高速缓存。缓存数据涉及提供额外的存储。这种额外的存储和管理它所需的逻辑可能在ic设计
中占据相当大的面积。使用高速缓存通常在读取操作期间增加延时,并且不会辅助写入操作(与本方法不同,其可以同等地应用于读取和写入)。与高速缓存不同,本示例的方法根据当前步幅和/或正执行的数据变换将额外元素放置在内部缓冲器210中其正确位置处。
[0121]
再次,尽管上文图5a和图5b的示例参考了存储器读取块220,但相同原理也可以应用于存储器写入块230。在存储器写入块230处,通过在当前迭代中从内部缓冲器210读取额外数据值e,为了提前为更晚迭代处理数据,存储器写入块可能形成并写入完整数据突发串。写入完整数据突发串可能是特别有益的,因为它可以避免对写入掩蔽的需求。当写入部分数据突发串时,在许多存储器架构中,写入掩蔽是必要的。写入掩蔽避免了存储器中数据值的意外盖写(即,其避免了超出预期部分数据突发串的数据值之外的数据值盖写)。在许多存储器架构中,写入掩蔽可能是缓慢/昂贵的过程。因此,在许多实施方式中,在存储器写入块230处的当前迭代中处理额外数据可以特别提高执行速度,增加存储器带宽以及节省电力。
[0122]
可以根据架构和应用程序来选择内部缓冲器210的大小。在一个示例中,本发明人已发现,当存储器以128b突发串读取/写入数据时,32kb的内部缓冲器效果良好。也就是说,内部缓冲器是突发串大小的256倍。有利的是,缓冲器是突发串大小(以字节为单位)的平方的两倍,因为这允许一个区域的双重缓冲,可以在一个维度上写入并且在另一个维度上读取。
[0123]
已经发现上述示例的包括存储器读取块和存储器写入块之间的内部缓冲器的mmm架构对于操控数据的大数组/张量是特别有利的。大于内部缓冲器210的大小的多维数组可以通过连续循环、反复地重复利用(即,盖写)内部缓冲器来处理。块220和230之间的同步确保了当存储器写入块230仍需要数据时,数据不会被盖写。以此方式,不需要限制待处理的多维数组的大小。
[0124]
mmm是灵活的,因为它可以通过重新配置存储器读取块220和存储器写入块230中的多个嵌套循环来执行各种通常期望的操控。同时,它消除了cpu执行最常见操控的负担。
[0125]
图6示出了其中可实施如本文中所描述的硬件单元的计算机系统。计算机系统包括cpu 902、gpu 904、存储器906和其它装置914,诸如显示器916、扬声器918和相机919。处理块910(对应于mmm 200)实现于计算机系统中。在其它示例中,处理块910可以在cpu 902上实现。所述计算机系统的部件可以通过通信总线920(对应于总线250)彼此通信。储存库912(对应于外部存储器205)被实现为存储器906的一部分。
[0126]
虽然图6示出了计算机系统的一种实施方式,但是应理解,可以针对人工智能加速器系统(或者称为神经网络加速器系统)绘制类似的框图—例如,通过用神经网络加速器(nna)替代cpu 902或gpu 904,或者通过添加nna作为额外单元。在这种情况下,处理块910可以实现于nna中。
[0127]
图2的硬件单元200被示出为包括许多功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,在本文中被描述为由硬件单元形成的中间值不需要由所述硬件单元在任何时间点物理地生成,并且可以仅仅表示方便地描述由所述硬件单元在其输入和输出之间执行的处理的逻辑值。
[0128]
本文中所描述的硬件单元可以在集成电路上包含在硬件中。本文中所描述的硬件
单元可以被配置成执行本文所描述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
[0129]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0130]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、nna、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0131]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种计算机可读存储介质,所述计算机可读存储介质上编码有呈集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中处理(即,运行)时,所述集成电路定义数据集将系统配置成制造被配置成执行本文所描述的任何方法的硬件单元,或者制造包括本文所描述的任何设备的硬件单元。集成电路定义数据集可以是例如集成电路描述。
[0132]
因此,可以提供一种在集成电路制造系统处制造如本文所描述的硬件单元的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中处理时使制造硬件单元的方法被执行。
[0133]
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0134]
现在将参考图7描述在集成电路制造系统中处理集成电路定义数据集以便配置该系统来制造硬件单元的示例。
[0135]
图7示出了集成电路(ic)制造系统1002的示例,该集成电路制造系统被配置为制造如本文中任何示例中描述的硬件单元。具体来说,ic制造系统1002包括布局处理系统1004和集成电路生成系统1006。ic制造系统1002被配置为接收ic定义数据集(例如,定义如本文的任何示例中描述的硬件单元),处理ic定义数据集,并根据ic定义数据集来生成ic(例如,其包含如本文任何示例中所述的硬件单元)。ic定义数据集的处理将ic制造系统1002配置成制造包含如本文的任一示例中所描述的硬件单元的集成电路。
[0136]
布局处理系统1004被配置成接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip

flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到ic生成系统1006。电路布局定义可以是例如电路布局描述。
[0137]
如本领域已知的,ic生成系统1006根据电路布局定义来生成ic。举例来讲,ic生成系统1006可实现生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1006的电路布局定义可呈计算机可读代码的形式,ic生成系统1006可使用所述计算机可读代码来形成用于生成ic的合适掩模。
[0138]
由ic制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1002可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩模来制造集成电路。
[0139]
在其它示例中,在集成电路制造系统处对集成电路定义数据集进行处理可将系统配置成制造硬件单元,而无需对ic定义数据集进行处理来确定电路布局。例如,集成电路定义数据集可以定义例如fpga的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。
[0140]
在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集以上文参考图7描述的方式对集成电路制造系统进行配置,可以制造出如本文描述的设备。
[0141]
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图7所示的示例中,ic产生系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
[0142]
与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0143]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献