本发明涉及集成电路领域,更确切地说,涉及人工智能(ai)使用的神经网络处理器(neuro-processor)。
背景技术:
::人工智能将引领下一波计算浪潮。人工神经网络(简称为神经网络)提供了一种强大的人工智能工具。图1是一个神经网络的例子。它含有输入层32、隐层34和输出层36。输入层32含有i个神经元22,其输入数据x1、…xi构成输入矢量20。输出层36含有k个神经元26,其输出数据y1、y2、…yk构成输出矢量30。隐层34介于输入层32和输出层36之间。它含有j个神经元24,每个神经元24与输入层32中的第一神经元耦合,同时也与输出层36中的第二神经元耦合。神经元之间的耦合强度由突触权重wij和wjk表示。美国专利6,199,057(发明人:tawel;授权日:2001年3月6日)披露了一种神经网络处理器。如图2a所示,它含有一突触权重(ws)ram40x、一输入神经元(nin)ram40y和一神经处理单元(npu)50。在操作过程中,突触权重42从wsram40x中读出,输入数据46从ninram40y中读出;npu50将它们相乘,所得乘积累加后通过激活函数(activationfunction)获得输出数据nout48。注意到,在tawel中,wsram40x的容量很小,只有2kx16。目前,神经网络的规模日益增加。大多数神经网络含有十亿到百亿级的ws参数。显然,这些gb级的ws参数无法存储在wsram40x中。为了解决这个问题,采用传统冯诺依曼架构的神经网络计算机将ws参数存储在外部ram(主存)中。但是,神经网络的计算量太大了,需要频繁地从主存中读取或写入ws参数。这些频繁的主存访问成为性能瓶颈。由于频繁的主存访问,神经网络处理器的性能下降至少一个数量级。为了解决上述主存频繁访问的问题,陈云霁等提出一种含有多个神经网络加速器芯片的机器学习超级计算机(参见陈云霁等著《dadiannao:amachine-learningsupercomputer》,ieee/acminternationalsymposiumonmicro-architecture,5(1),第609-622页,2014年)。如果每个神经网络加速器芯片含足够多的ram,那么超级计算机中的所有ram就能装下整个神经网络,故超级计算机不需要主存。图2b是神经网络加速器60的芯片布局图。每个芯片60含有16个内核70。这些内核70通过一个树状连接相互耦合。在芯片60中央是为输入神经元和输出神经元设计的edram块66。由于输入神经元数据比ws参数少几个数量级,输入神经元数据——而非ws参数——在芯片间传输。神经网络加速器60中的内核70具有相同的架构。图2c披露了一个内核架构。每个内核70含有一个npu50和四个edram块40。npu50进行神经计算,它含有256+32个16位乘法器和256+32个16位加法器。edram40存储ws参数,其存储容量为2mb。由于edram40与npu50位置接近,数据传输距离短,这样能节省传输时间和传输能耗。由于具有较大的内部带宽和较少的外部通讯,该神经网络加速器比gpu快450.65倍。此外,基于该神经网络加速器的超级计算机(64个节点)的能耗下降150.31倍。虽然有诸多优点,陈云霁的神经网络加速器仍有进步的空间。首先,从系统角度来看,由于edram40是一个易失存储器,它只能临时存储ws参数。因此,该神经网络加速器仍然需要外部存储来长久存储突触权重。在运行前,ws参数需要被上载到edram40中,这需要花费时间。其次,每个神经网络加速器芯片60中有32mbedram可用于存储ws参数。虽然这个容量远大于tawel,仍远远低于实际需要。一个典型神经网络含有数十亿个ws参数。要把它们存储在edram40中,需要上百个神经网络加速器芯片60。比如说,存储10亿个32位ws参数需要125个神经网络加速器芯片60。这对于移动设备来说是太多了。因此,神经网络加速器60并不适合运动应用。再次,神经网络加速器60的架构设计重点向存储倾斜——在每个内核中,edram40占用了80%的面积,而npu50只占用了不到10%。因此,单位面积(指单位芯片面积,后同)的计算能力受到很大限制。上述问题的根本原因是edram40和npu50之间的集成是二维集成,它们均形成在衬底中。二维集成带来一个两难问题:在芯片中可通过牺牲存储容量来提高计算能力,但这带来的、额外的外部存储访问又会抵消掉计算能力的提高。只要采用二维集成,这个两难问题都会存在。为了弥补上述缺陷,我们希望能找到一种完全不同的集成方式。技术实现要素:本发明的主要目的是促使神经网络的进步。本发明的另一目的是提高神经网络处理器的单位面积计算能力。本发明的另一目的是提高神经网络处理器的单位面积存储容量。本发明的另一目的是提供一种能用于移动设备的神经网络处理器。为了实现这些以及别的目的,本发明提出一种含有三维存储(three-dimensionalmemory,简称为3d-m)阵列的集成神经网络处理器:它不仅能进行神经计算,还能在内部存储神经计算所需的突触权重。一个集成神经网络处理器芯片含有多个储算单元,每个储算单元含有一神经计算电路和至少一3d-m阵列。神经计算电路进行神经计算,3d-m阵列存储突触权重。3d-m阵列垂直堆叠在神经计算电路上方。这种垂直堆叠被称为三维集成。3d-m阵列通过多个接触通道孔与神经计算电路电耦合。这些接触通道孔被统称为储算连接。三维集成能大幅提升单位面积的计算能力。由于3d-m阵列垂直堆叠在神经计算电路上方,储算单元的面积约等于神经计算电路的面积。这比现有技术(如神经网络加速器)要小很多。由于现有技术采用二维集成,内核70(等效于储算单元)的面积约等于edram40(等效于3d-m阵列)和npu50(等效于神经计算电路)面积之和。由于npu50只占不到10%的内核70面积、而edram40占了80%的内核面积,当存储突触权重的存储器从旁边移到顶上后,储算单元的面积比现有技术的内核70减少~10倍。因此,集成神经网络处理器中储算单元的数目比现有技术中内核的数目多~10倍。集成神经网络处理器的单位面积计算能力是现有技术的~10倍,它支持超大规模的平行计算。三维集成还能极大地增加单位面积的存储容量。由于3d-m存储元的面积是~4f2、而edram存储元的面积>100f2(f为该技术节点的特征尺寸,如14nm),加上3d-m含有多个存储层(如4个存储层)、而edram只含一个存储层,集成神经网络处理器的单位面积存储容量是现有技术的~100倍以上。以3d-xpoint为例,其芯片的存储容量为128gb。相应地,基于3d-xpoint的集成神经网络处理器可以存储多达16gb的突触权重,这对于大多数人工智能应用来说是足够了。由于仅需一个或少数几个芯片就能存储整个神经网络的突触权重,集成神经网络处理器适合移动应用。相应地,本发明提出一种集成神经网络处理器(200),其特征在于含有:一含有多个晶体管的半导体衬底(0);多个形成在在该半导体衬底(0)上的储算单元(100aa-100mn),每个储算单元(100ij)含有至少一三维存储(3d-m)阵列(170)和一神经计算电路(180),其中:所述3d-m阵列(170)堆叠在该神经计算电路(180)上方,该3d-m阵列(170)存储至少一突触权重;所述神经计算电路(180)位于该衬底(0)中,该神经计算电路(180)利用该突触权重进行神经计算;所述3d-m阵列(170)和所述神经计算电路(180)通过多个接触通道孔(1av,3av)电耦合。本发明还提出一种集成神经网络处理器(200),其特征在于含有:一含有多个晶体管的半导体衬底(0);多个形成在在该半导体衬底(0)上的储算单元(100aa-100mn),每个储算单元(100ij)含有至少一三维存储(3d-m)阵列(170)和一神经计算电路(180),其中:所述3d-m阵列(170)堆叠在该神经计算电路(180)上方,该3d-m阵列(170)存储至少一突触权重;所述神经计算电路(180)位于该衬底(0)中,该神经计算电路(180)含有一乘法器(152),该突触权重是该乘法器(152)的一个输入(142);所述3d-m阵列(170)和所述神经计算电路(180)通过多个接触通道孔(1av,3av)电耦合。本发明进一步提出一种多类三维存储器(3d-m)模块(300),其特征在于含有:一含有多个晶体管的半导体衬底(0);一堆叠在该半导体衬底上的第一3d-m阵列(196),该第一3d-m阵列(196)与该衬底(0)电耦合;一堆叠在该第一3d-m阵列(196)上的第二3d-m阵列(170),该第一3d-m阵列(196)与该衬底(0)电耦合;所述第一和第二3d-m阵列(196,170)为不同类型的3d-m。附图说明图1是一种神经网络的示意图。图2a是一种神经网络处理器(现有技术)的电路框图;图2b是一种神经网络加速器(现有技术)的芯片布局图;图2c是该神经网络加速器的内核架构。图3是一种集成神经网络处理器的示意图。图4a-图4c是三种储算单元的电路框图;图5a是一种含有三维可写存储器(three-dimensionalwritablememory,简称为3d-w)阵列的储算单元之截面图;图5b是一种含有三维印录存储器(three-dimensionalprintedmemory,简称为3d-p)阵列的储算单元之截面图。图6是一种储算单元的透视图。图7a-图7c是三种储算单元的衬底电路布局图。图8是在一种神经计算电路的电路框图。图9a-图9b是两种计算部件的电路框图。图10a是一种采用3d-romlut激活函数电路的电路框图;图10b是含有该激活函数电路的储算单元之简要截面图。图11a是第一种多类3d-m模块的简要截面图;图11b是该实施例的详细截面图;图11c是第二种多类3d-m模块的简要截面图。图12a是第三种多类3d-m模块的简要截面图;图12b显示该实施例中所有3d-m阵列在衬底上的投影。注意到,这些附图仅是概要图,它们不按比例绘图。为了显眼和方便起见,图中的部分尺寸和结构可能做了放大或缩小。在不同实施例中,数字后面的字母后缀表示同一类结构的不同实例;相同的数字前缀表示相同或类似的结构。在本说明书中,“存储器”泛指任何基于半导体的信息存储设备,它可以长久或临时存储信息。“存储体”泛指任何长久存储信息的存储设备。“衬底中”是指一电路的核心功能部件(如晶体管)形成在衬底中(如衬底表面上);这些晶体管的互连线可以形成在衬底上方,不与衬底接触。“衬底上”是指一电路的核心功能部件(如存储元)形成在衬底上方,不在衬底中,不与衬底接触。在其他公开文本中,“神经处理单元(npu)”又被称为“神经功能单元(nfu)”等,它们都有同样意义;“神经网络处理器”又被称为“神经处理器”、“神经网络加速器”、“机器学习加速器”等,它们都有同样意义。符号“/”表示“与”和“或”的关系。具体实施方式图3表示一种集成神经网络处理器芯片200,它不仅能进行神经计算,还能在存储神经计算所需的突触权重。集成神经网络处理器芯片200形成在一个半导体衬底0中,它含有mxn个储算单元100aa-100mn。每个储算单元都与一输入110和一输出120电耦合。注意到,一个集成神经网络处理器芯片200可以含有成千上万个储算单元100aa-100mn。例如说,一个含有128gb存储容量的集成神经网络处理器芯片200含有64,000个储算单元。数量众多的储算单元保证超大规模平行神经计算。图4a-图4c是三种储算单元100ij的电路框图。每个储算单元100ij都含有一神经计算电路180和至少一3d-m阵列170(或170a-170d、170w-170z),它们之间通过储算连接160(或160a-160d、160w-160z)进行电耦合。神经计算电路180进行神经计算,3d-m阵列170存储神经计算所需的突触权重。在这些实施例中,一个神经计算电路180与数量不等的3d-m阵列170耦合。图4a中的神经计算电路180与一个3d-m阵列170耦合;图4b中的神经计算电路180与四个3d-m阵列170a-170d耦合;图4c中的神经计算电路180与八个存储阵列170a-170d和170w-170z耦合。从图7a-图7c可以看出,与较多3d-m阵列耦合的神经计算电路180具有较强的计算功能。图5a-图6显示不同种类的3d-m。这些3d-m已在以往专利中披露,如美国专利5,835,396(发明人:张国飙;授权日:1998年11月10日)。3d-m芯片含有多个垂直堆叠的存储层,每个存储层含有多个3d-m阵列。3d-m阵列是在一个存储层中所有共享了至少一条地址线的存储元之集合。此外,一3d-m芯片含有多个3d-m模块。每个3d-m模块的顶存储层只含有一顶3d-m阵列、该顶3d-m阵列的边界就是该3d-m模块的边界。3d-m分为3d-ram(三维随机访问存储器)和3d-rom(三维只读存储器)。在本说明书中,ram泛指任何临时存储信息的半导体存储器,包括但不局限于寄存器、sram和dram;rom泛指任何长久存储信息的半导体存储器,它可以电编程、也可以非电编程。大多数3d-m是3d-rom。3d-rom进一步分为3d-w和3d-p。3d-w存储的信息通过电编程的方式录入。根据其可编程的次数,3d-w又分为三维一次编程存储器(three-dimensionalone-time-programmablememory,简称为3d-otp)和三维多次编程存储器(three-dimensionalmultiple-time-programmablememory,简称为3d-mtp)。顾名思义,3d-otp只能写一次,3d-mtp能写多次(包括重复编程)。一种常见的3d-mtp是3d-xpoint。其它3d-mtp包括memristor、阻变存储器(rram)、相变存储器(pcm)、programmablemetallizationcell(pmc)、conductivebridgingrandom-accessmemory(cbram)等。3d-p存储的信息是在工厂生产过程中采用印刷方式录入的(印录法)。这些信息是永久固定的,出厂后不能改变。印录法可以是光刻(photo-lithography)、纳米压印法(nano-imprint)、电子束扫描曝光(e-beamlithography)、duv扫描曝光、激光扫描曝光(laserprogramming)等。常见的3d-p有三维掩膜编程只读存储器(3d-mprom),它通过光刻法经过掩膜编程录入数据。由于它没有电编程的要求,3d-p存储元在读的时候可以偏置在更高的电压。因此,3d-p的读速度比3d-w快。图5a是一种基于3d-w的储算单元100ij的截面图。该储算单元100ij含有一形成在衬底0中的衬底电路层0k。存储层16a堆叠在衬底电路0k之上,存储层16b堆叠在存储层16a之上。衬底电路层0k含有存储层16a、16b的周边电路,它包括晶体管0t及互连线0m。每个存储层(如16a)含有多条第一地址线(如2a,沿y方向)、多条第二地址线(如1a,沿x方向)和多个3d-w存储元(如1aa)。存储层16a、16b分别通过接触通道孔1av、3av与衬底0耦合。由于接触通道孔1av、3av将3d-m阵列170和神经计算电路180电耦合,它们被统称为储算连接160。3d-w存储元5aa含有一层编程膜12和一层二极管膜14。编程膜12可以是反熔丝膜(能写一次,可用于3d-otp),也可以是其它多次编程膜(用于3d-mtp)。二极管膜14具有如下的广义特征:在读电压下,其电阻较小;当外加电压小于读电压或者与读电压方向相反时,其电阻较大。二极管膜可以是p-i-n二极管,也可以是金属氧化物(如tio2)二极管等。图5b是一种基于3d-p的储算单元100ij的截面图。除了存储元不同,它与图5a类似。3d-p含有至少两种存储元6aa、7aa——高阻存储元6aa和低阻存储元7aa。低阻存储元7aa含有一层二极管膜14,高阻存储元6aa则含一层高阻膜13。高阻膜13是一层绝缘膜,如一层二氧化硅膜。在工艺流程中,位于低阻存储元7aa处的高阻膜13被物理移除。图6从另一个角度显示储算单元100ij的结构。3d-m阵列170堆叠在神经计算电路180上方,神经计算电路180位于衬底0中,并被3d-m阵列170至少部分覆盖。它们之间通过大量接触通道孔1av、3av电耦合。三维集成将3d-m阵列170和神经计算电路180移得更近。由于接触通道孔1av、3av数量众多(最少数千个)且长度很短(微米级),储算连接160具有超大带宽。这个带宽远高于现有技术的带宽。由于现有技术采用二维集成,edram40和npu50在衬底0中肩并肩排列,它们之间的连接数量有限(最多数百个)且较长(百微米级)。图7a-图7c披露了三种储算单元100ij。图7a的实施例对应于图4a中储算单元100ij。神经计算电路180与一个3d-m阵列170耦合,它被3d-m阵列170完全覆盖。在该实施例中,3d-m阵列170含有四个周边电路,包括x解码器15、15`和y解码器(包括读出电路)17、17`,神经计算电路180位于这四个周边电路之间。由于3d-m阵列170位于衬底电路0k上方,不在衬底电路0k中,图7a(及之后的图)仅用虚线表示3d-m阵列170在衬底0上的投影。在本实施例中,神经计算电路180被局限在四个周边电路之间,其面积不能超过3d-m阵列170的面积。由于其面积较小,神经计算电路180功能有限。该实施例是一种简单神经网络处理器。很明显,复杂神经网络处理器需要在3d-m阵列170下腾出更大的衬底面积。图7b-图7c披露了两种复杂神经计算电路180。图7b的实施例对应于图4b中储算单元100ij。在该实施例中,一个神经计算电路180与四个3d-m阵列170a-170d耦合。每个3d-m阵列(如170a)只有两个周边电路(如x解码器15a和y解码器17a)。在这四个3d-m阵列170a-170d下方,衬底电路0k可以自由布局,形成一复杂神经计算电路180。很明显,图7b中复杂神经计算电路180可以是图7a中简单神经计算电路的四倍大,它能实现较复杂的神经计算功能。图7c的实施例对应于图4c中储算单元100ij。在该实施例中,一个神经计算电路180与八个3d-m阵列170a-170d和170w-170z耦合。这八个3d-m阵列分为两组150a、150b。每组(如150a)包括四个3d-m阵列(如170a-170d)。在第一组150a的四个3d-m阵列170a-170d下方,衬底电路可以自由布局,形成第一神经计算电路组件a180a。类似地,在第二组150b的四个3d-m阵列170w-170z下方,衬底电路也可以自由布局,形成第二神经计算电路组件b180b。第一神经计算电路组件180a和第二神经计算电路组件180b构成神经计算电路180。在本实施例中,在相邻周边电路之间(如相邻x解码器15a,15c之间;在相邻的y解码器17a,17b之间;在相邻的y解码器17c,17d之间)留有间隙(如g),以形成布线通道182,184,186,供不同神经计算电路组件150a,150b之间、或不同神经计算电路之间实现通讯。很明显,图7c中的神经计算电路180可以是图7a的八倍大,它能实现更复杂的神经处理功能。三维集成能大幅提升单位面积计算能力。由于3d-m阵列170垂直堆叠在神经计算电路180上方,储算单元100ij的面积约等于神经计算电路180的面积。这比现有技术(如神经网络加速器)要小很多。由于现有技术采用二维集成,内核70(等效于储算单元)的面积约等于edram40(等效于3d-m阵列)和npu50(等效于神经计算电路)面积之和。由于npu50只占不到10%的内核70面积、而edram40占了80%的内核面积,当存储突触权重的存储器从旁边移到顶上后,储算单元的面积比现有技术的内核70减少~10倍。因此,集成神经网络处理器中储算单元的数目比现有技术中内核的数目多~10倍。集成神经网络处理器的单位面积计算能力是现有技术的~10倍,它支持超大规模的平行计算。三维集成还能极大地增加单位面积的存储容量。由于3d-m存储元的面积是~4f2、而edram存储元的面积>100f2(f为该技术节点的特征尺寸,如14nm),加上3d-m含有多个存储层(如4个存储层)、而edram只含一个存储层,集成神经网络处理器的单位面积存储容量是现有技术的~100倍以上。以3d-xpoint为例,其芯片的存储容量为128gb。相应地,基于3d-xpoint的集成神经网络处理器可以存储多达16gb的突触权重,这对于大多数人工智能应用来说是足够了。由于仅需一个或少数几个芯片就能存储整个神经网络的突触权重,集成神经网络处理器适合移动应用。图8-图9b披露了一种神经计算电路180及其计算部件150的细节。在图8的实施例中,神经计算电路180含有一突触权重(ws)ram140a、一输入神经元(nin)ram140b和一计算部件150。wsram140a是一个缓存,它临时存储来自3d-m阵列170的突触权重142;ninram140b也是一个缓存,它临时存储来自输入110的输入数据146。计算部件150进行神经计算,并产生输出数据148。在图9a的实施例中,计算部件150含有一乘法器152、一加法器154、一寄存器156和一激活函数电路190。乘法器152将突触权重wij与输入数据xi相乘,加法器154和寄存器156对乘积(wij×xi)进行累加,累加值被送到激活函数电路190,所得结果为输出数据yj。在图9b的实施例中,图9a中的乘法器152被一乘加器(mac)152`替代。当然,乘加器152`也含有乘法器。wsram140a不仅输出突触权重wij(通过端口142w),还输出偏置bj(通过端口142b)。乘加器152`对输入数据xi、突触权重wij和偏置bj实施偏置乘操作(wij×xi+bj)。激活函数是指输出被控制在一定范围内(如0到1、或-1到+1)的函数,包括sigmod函数、signum函数、阈值函数、分段线性函数、阶跃函数、tanh函数等。激活函数的电路实现较难。tawel提出了一个基于查找表(lut)的激活函数电路。它含有一个存储激活函数lut值的rom。类似其它现有技术,存储lut的rom形成在衬底中。也就是说,rom与其他部件(如ram40x、40y和npu50)之间是二维集成。这种二维集成面临与其它现有技术同样的难题:额外的rom(用于存储lut)将增加npu50的面积,这会降低单位面积计算能力,同时还会减少单位面积存储容量(用于存储突触权重)。将本发明的精神继续发扬光大,3d-m阵列不仅可以用于存储突触权重,还可以用于存储激活函数的lut。由于希望能长久存储激活函数,3d-m阵列最好采用3d-rom。图10a-图10b披露一种基于3d-romlut的激活函数电路190。从图10a的电路框图可以看出,该激活函数电路190含有一预处理电路192、一x解码器194、一3d-rom阵列196和一y解码器198。3d-rom阵列196存储激活函数的lut。解码器192首先将累加值158转化成3d-rom阵列196的地址,然后x解码器194在3d-rom阵列中选择相应的存储元,这些存储元中的数据通过y解码器198读出。图10b是含有激活函数电路190的储算单元100ij的简要截面图。储算单元100ij含有一形成在衬底0中的神经计算电路180、一堆叠在神经计算电路180上方的第一3d-rom阵列196、以及一堆叠在第一3d-rom阵列196上方的第二3d-rom阵列170。第一3d-rom阵列196存储激活函数的lut,第二3d-rom阵列170存储突触权重。为了图像清晰,该简要截面图(包括以后的简要截面图)仅用虚线画出了这些电路部件(包括神经计算电路、第一和第二3d-rom阵列)的大致边界,这些电路部件的细节并未画出。在通过3d-rom阵列196实现激活函数后,计算部件150变得极其简单——它仅需实现加法和乘法,但不需要实现激活函数。因此,基于3d-romlut的计算部件150比采用其它方法实现激活函数的计算部件面积要小很多。相应地,神经计算电路180可以采用图7a中的简单神经计算电路。很明显,较小的计算部件150能带来更强大的单位面积计算能力。这是采用3d-romlut的另一个优势。在图10b中,3d-rom阵列170、196存储两种数据:突触权重和激活函数的lut。这两种数据对3d-rom阵列有不同要求。lut一般需要较高的读速度,它较适合存储在3d-p阵列中;而突触权重一般需要改写,它较适合存储在3d-w阵列中。相应地,本发明还提出一种多类3d-m模块。在多类3d-m模块的不同存储层中,存储有不同类型的数据。如前所述,每个3d-m模块的顶存储层只含有一顶3d-m阵列、该顶3d-m阵列的边界就是该3d-m模块的边界。图11a是第一种多类3d-m模块300的简要截面图。其第一3d-rom阵列196是一3d-p阵列,第二3d-rom阵列170是一3d-w阵列,第二3d-rom阵列170堆叠在第一3d-rom阵列196上方。图11b是该实施例的详细截面图。在第一存储层16a中的3d-p阵列196含有两种存储元:高阻3d-p存储元6aa和低阻3d-p存储元7aa(参见图5b)。在第二存储层16b中的3d-w阵列170只含有一种存储元:3d-w存储元5aa(参见图5a)。图11c是第二种多类3d-m模块300的简要截面图。它含有三个存储层16a-16c。在存储层16a中的3d-rom阵列196是一3d-p阵列,在存储层16b、16c中的3d-rom阵列170a、170b是3d-w阵列。存储层16a、16b、16c从下到上依次堆叠。对于熟悉本专业的人士来说,更多的存储层、或其它类型的3d-p、3d-w组合也是可行的。图12a-图12b披露第三种多类3d-m模块300。该3d-m模块300含有两个存储层16a、16b。存储层16b是顶存储层,它含有一个3d-w阵列170。存储层16a是一个中间存储层,它含有至少两个肩并肩排列的3d-p阵列196a、196b(图12a)。从图12b的投影图可以看出,3d-w阵列170完全覆盖3d-p阵列196a-196f。该实施例使用小3d-p阵列196a-196f,这是因为较小的阵列具有较快的速度。应该了解,在不远离本发明的精神和范围的前提下,可以对本发明的形式和细节进行改动,这并不妨碍它们应用本发明的精神。因此,除了根据附加的权利要求书的精神,本发明不应受到任何限制。当前第1页12当前第1页12