减少由加载队列满载引起的流水线推迟的处理器和方法与流程

文档序号:11729123阅读:389来源:国知局
减少由加载队列满载引起的流水线推迟的处理器和方法与流程

本发明一般涉及执行加载指令以从处理器中的存储器加载信息的过程,更具体地说,涉及一种减少由加载执行队列的满载引起的处理器中的流水线推迟的系统和方法。



背景技术:

典型的计算机系统包括:用于执行应用程序或软件程序等的指令的处理器;以及耦合到处理器的外部系统存储器,用于存储计算机程序的部分和可应用的数据和信息。本文所用的术语“处理器”是指任何类型的处理单元,包括微处理器、中央处理单元(cpu)、一个或多个处理核心、微控制器等。本文所用的术语“处理器”还包括任何类型的处理器配置,例如集成在芯片或集成电路(ic)上的处理单元,包括集成在芯片上的系统(soc)等中的处理器配置。

处理器设计的趋势是提供消耗更少功率并且更小、更有效和更强大的处理器。在性能、成本和功耗之间往往存在平衡或折中。在现代cpu架构中,soc配置被证明是更重要和有用的,以实现平衡的折中。本发明的公开适用于任何类型的处理器配置,包括并入soc中的那些处理器配置。

传统的处理器设计基于加载执行队列的满载度,或简单地基于加载队列(loadqueue),使处理器流水线架构的前端推迟(stall)。加载队列保存执行加载指令所需的每个加载指令的所有信息。确定加载队列的满载的一种常规方法是对当前处于处理器流水线中的加载指令的总数进行加总,其中包括已经发射(issue)并且当前在调度器内的加载指令的数量、已加载到加载队列中的加载指令的数量、以及已分派(dispatch)但尚未到达加载执行流水线的加载指令的数量。然后,将加载指令的总数量与加载队列的总容量(这意味着加载队列中的加载指令条目的总数)进行比较。这种方式是推测性地计算加载队列为满即使其不是实际满载,从而可能提前推迟前端流水线。当推测性地确定为满时,加载队列成为推迟流水线的瓶颈,这也导致其他功能单元也是空闲的。这已经成为许多传统cpu架构中已经观察到的一个非常常见的问题。

一种可能的解决方案是扩大加载队列以减少流水线推迟的可能性。然而,较大的加载队列消耗了大量额外的面积和功率,并且不能全面解决问题。



技术实现要素:

根据一个实施例,能够减少流水线推迟的处理器包括前端、加载队列、调度器和加载缓冲器。前端在没有提供第一满指示的同时发射指令,否则推迟发射指令。加载队列存储用于存储执行已发射加载指令所需的信息的加载指令条目。加载队列在满载时提供第二满指示。调度器存储已经从前端发射的指令,并分派已发射的指令以执行。调度器在加载队列已满时,将尚未存储到加载队列中的已发射加载指令推迟分派。加载缓冲器在加载队列未满时接收并传送已发射加载指令给加载队列。当加载队列满时,加载缓冲器临时缓冲已发射加载指令,直到加载队列不再满。

当加载队列已满时,向调度器提供推迟指示以推迟尚未存储到加载队列中的已发射加载指令的分派。推迟指示可以标识存储在加载缓冲器中的尚未传送到加载队列的加载指令。或者,推迟指示可以标识存储在加载队列中的加载指令。

加载缓冲器可以具有多个条目,其中每个条目包括源标识符和目的地标识符。加载队列可以具有多个条目,其中每个条目包括源标识符、目的地标识符、存储器地址和用于存储数据的存储器空间。加载缓冲器可以进一步存储标识先前发射的存储指令与每个缓冲的加载指令的信息。在一个实施例中,可以提供包括存储队列的每个条目的有效位的有效列表,并且加载缓冲器包括用于存储有效向量的字段,该有效向量包括当加载指令被推入加载缓冲器时有效列表的有效位。

调度器可以在加载队列已满时(例如,当提供第二满指示时)继续分派存储在加载队列中的加载指令。调度器可以继续分派除被推迟的已发射加载指令之外的其它已发射指令。加载队列可以包括存储组,并且加载缓冲器可以包括多个存储组,其每个存储组是加载队列的存储组的副本。

根据一个实施例,能够减少处理器流水线推迟的方法包括,在没有提供第一满指示的同时发射指令,并且在提供第一满指示的同时推迟所述发射指令;通过加载队列存储多个已发射加载指令和执行多个已发射加载指令中的每一个所需的对应信息,以及当加载队列已满时提供第二满指示;通过调度器分派已发射指令中已准备好执行的那些指令,并且当所述加载队列满时,推迟尚未存储到加载队列中的那些已发射加载指令的分派;在没有提供第二满指示时,通过加载缓冲器接收和转发所述已发射加载指令到所述加载队列,并且在提供所述第二满指示时由所述加载缓冲器缓冲所已发射加载指令;和当加载缓冲器满时,由加载缓冲器提供第一满指示。

该方法可以检测到所述加载队列已满并提供所述第二满指示;和接收第二满指示并提供推迟指示,以便在第二满指示被提供期间,将尚未存储到加载队列中的那些已发射加载指令推迟。该方法可以包括通过标记在调度器中同时也在加载缓冲器中的指令来提供推迟指示。推迟调度可以包括当所述加载队列满时,提供推迟指示以将那些尚未存储到所述加载队列中的所述已发射加载指令推迟。

该方法可以包括在发射每个加载指令时,标识较早的存储指令;将被标识为比所述加载指令更早的存储指令的信息与每个所述加载指令一起存储到加载缓冲器中。该方法可以包括维护标识有效存储指令的多个有效位的有效列表,并且其中所述存储到所述加载缓冲器中的步骤包括当存储每个加载指令到加载缓冲器中时存储包括所述有效列表的多个有效位的有效向量。

该方法可以包括在所述第二满指示被提供期间继续分派位于所述加载队列中的加载指令。该方法可以包括在所述第二满指示被提供期间,继续分派除了被推迟的已发射加载指令之外的其它已发射指令。该方法可以包括为所述加载队列提供存储器组,以及为所述加载缓冲器提供多个存储器组,其中所述加载缓冲器的每个存储器组是所述加载队列的存储器组的副本。

本发明前述能够减少处理器流水线推迟的处理器及其方法提供了若干优点:首先,加载队列的满载与否不是推测地确定的,而是提供了何时加载队列确实已满的实际确定。第二,当加载队列已满时,前端尚未被推迟,加载指令可以继续被发射到调度器并缓存在加载缓冲器中。发射指令不会推迟并且其他指令类型(加载除外)的分派可能会继续。此外,已经在加载队列中的加载指令的分派可以继续。第三,与加载队列相比,加载缓冲器的每个条目可以存储较少的信息,并且可以使其显着更深,加载队列不消耗可观的资源,并且显着地减少了推迟前端的可能性。

附图说明

关于以下描述和附图,将更好地理解本发明的益处、特征和优点,其中:

图1是根据本发明的一个实施例的减少由加载队列满载引起的流水线推迟的超标量流水线处理器的简化框图;

图2是根据本发明的一个实施例实现的图1的加载缓冲器的框图;

图3是示出根据本发明的一个实施例的图1的加载缓冲器和加载队列的控制的框图;和

图4是表示根据本发明的一个实施例的图1的处理器的操作的流程图,用于发射、分派和执行包括图1的加载缓冲器和加载队列的操作的指令。

具体实施方式

发明人已经认识到当加载执行队列(或加载队列)被推测确定为满而导致处理器的前端推迟时处理器的性能和效率的降低。因此,他开发了一种减少由加载队列的满载确定引起的处理器流水线推迟的系统和方法。在前端和加载队列之间插入一个加载缓冲器,用于缓存加载队列的已已发射加载指令。加载队列的尺寸和操作可保持不变。加载缓冲器仅包含加载信息,并且可以显著地深于加载队列,而不会显著地增加尺寸和功耗。当加载队列未满时,将被推入加载缓冲器中的已发射加载指令传递到加载队列。当加载队列实际上被确定为满(而不是推测性地确定为满)时,已发射加载指令可以继续被推入加载缓冲器而不被推入加载队列。已经被推入加载队列的加载指令可以继续从调度器分派,但是尚未被推入加载队列的加载缓冲器中的加载指令暂时推迟分派(dispatch)。前端尚未被推迟,可能会继续发射其他包括加载指令的指令。已经被推入加载队列的其他指令类型和加载指令可能会继续被处理。仅当加载缓冲器也变满时,前端才被推迟,但是此时,调度器仍然保持用于乱序调度的指令,以使处理器流水线保持活动而不空闲。

图1是根据本发明的一个实施例的超标量流水线处理器100的简化框图,其减少由加载队列满载引起的流水线推迟。处理器100的宏架构可以是x86宏架构,其中它可以正确地执行被设计为在x86处理器上执行的大多数应用程序。如果获得了预期的结果,则应用程序被正确执行。特别地,处理器100执行x86指令集的指令并且包括x86用户可见的寄存器集。然而,本发明不限于x86架构,其中处理器100可以根据本领域普通技术人员已知的任何替代架构。

在所示实施例中,处理器100具有多阶段的流水线架构,包括发射阶段102、分派阶段104、执行阶段106和回写或回退阶段108。这些阶段用虚线分开表示,每个通常描绘一组用于基于一个或多个时钟信号来控制定时的同步锁存器等。发射阶段102包括前端110,其通常进行操作以从位于外部系统存储器118中的应用或程序撷取高速缓存行,将所撷取的信息解码并转换为指令,并将转换的指令按照程序顺序发射到调度阶段104。前端110可以包括:例如撷取和存储包括程序指令的高速缓存行的指令高速缓存(未示出);指令解码器和转换器(未示出),其将高速缓存行从指令高速缓存转换为指令,用于执行;以及寄存器别名表(rat)(未示出),基于其程序顺序、对其指定的操作数源以及重命名信息来生成针对每个指令的依赖性信息。

前端110将指令及其相关联的依赖信息发射到分派阶段104的调度器112。调度器112可以具有包括统一配置的任何类型的配置。图1中的注释“all”表示包括加载指令的所有指令被发射到调度器112以进行最终执行分派。调度器112包括保持从前端110接收的指令和依赖性信息的一个或多个队列。结合发射指令,前端110的rat还在重排序缓冲器(rob)中分配用于指令的条目,因此,所有已发射的指令按程序顺序分配到rob114中,rob114可被配置为循环队列,以确保指令以程序顺序回退。在某些配置中,rob114内的分配的条目还可以包括用于存储一旦执行的指令的结果的存储器空间,诸如寄存器等。或者,处理器100包括单独的物理寄存器文件(prf)(未示出),其中所分配的条目可以包括指向prf内的分配的寄存器的指针,用于存储结果信息。例如,加载指令从二级(l2)高速缓冲存储器等撷取数据(最终从外部系统存储器撷取),并将数据临时存储到prf中分配的寄存器中。

已发射加载指令(lds)也按程序顺序被提供给加载缓冲器116,当加载队列118未满时,这些加载指令由加载缓冲器116传送或传递到加载队列118。当加载队列118未满时,已发射加载指令被推入加载缓冲器116,并且同一个或不同的加载指令从加载缓冲器116弹出并加载到加载队列118中。如果加载缓冲器116为空,则从加载缓冲器116弹出与推入加载缓冲器116相同的已发射加载指令并将其推入加载队列118。当准备好执行时,调度器112将指令分派给执行阶段106。当其所有依赖关系被解析并且执行单元可用于执行指令时,就意味着准备好可以执行指令。诸如浮点指令(例如,媒体类型指令等)或整数指令等的功能指令被分派到功能执行单元(未示出)。存储器指令(包括加载和存储指令)被分派到执行阶段内的存储器顺序缓冲器(mob)(未示出)。mob包括一个或多个加载和存储流水线,或组合的加载/存储流水线。

所示的配置示出了用于执行加载指令的加载流水线(或“加载管线”)120,其中加载流水线120是mob的一部分。加载指令仅在加载到加载队列118之后从调度器112分派。加载队列118包括用于执行其中存储的每个加载指令的足够信息,包括加载指令的源和目标标识符、从其撷取数据的存储器位置的地址和撷取的数据、用于存储撷取的数据的存储空间(存储器空间例如与数据路径一样宽,例如128或256位)和一些状态位,状态位可以包括例如有效位、锁定位、分派位、完成位、数据有效位、地址有效位、加载指令将被转发(forwarding)到的存储队列索引、加载指令将被转发到的填充队列索引等等其他可能的状态位。

每个加载指令包括指定的地址和指定的数据长度。加载流水线120将加载指令的地址转换为虚拟地址(va),虚拟地址(va)最终被转换为用于直接访问高速缓冲存储器的物理地址(pa)。物理地址从转换后备缓冲器(tlb)或作为表行走处理的结果等。加载队列118存储虚拟地址,然后一旦物理地址确定则由物理地址替换。加载流水线120使用物理地址从存储在存储器(l2高速缓存或系统存储器)中的高速缓存行访问数据,并且将结果临时存储到通过加载指令对应的条目的存储器空间中的加载队列118中。将result(结果)反馈以存储到rob114中,或者存储到分配的prf和/或转发到另一个执行单元以供另一个指令等使用。rob114最终回退加载指令并更新处理器100的架构状态。

在没有加载缓冲器116的常规配置中,加载指令在发射时直接加载到加载队列118中。当加载队列118被推测地确定为满时,前端110推迟进一步发出指令,并且许多执行单元暂时空闲,从而降低了效率和性能。

然而,在如处理器100所示的当前实施方式中,当加载队列118实际上变满载加载指令时,加载队列118提供满指示ful2。ful2被提供给加载缓冲器116,则在发射时不向加载队列118推入额外的加载指令。相反,当提供ful2时,从前端110已发射加载指令被临时缓存在加载缓冲器116中。而且,在所示实施例中,加载缓冲器116向调度器112声明(assert)加载推迟指示l_st以推迟已发射的还没有被推入到加载队列118中的加载指令的分派。在另一个实施例中,当加载队列118实际变满时,代替地由加载队列118声明加载推迟指示l_st。调度器112可以继续分派已发射的已经加载到加载队列118中的加载指令。

当加载流水线120完成加载指令时,它将清空加载队列118中的对应条目。当加载队列118中的条目被清空时,缓冲在加载缓冲器116中的加载指令可以按顺序传送到加载队列118。当加载缓冲器116中缓冲的加载指令被传送到加载队列118时,加载缓冲器116更新l_st,使得只有不在加载队列118中的已发射加载指令可能继续被推迟分派。如果在将缓冲的加载指令传送到加载队列118之后,加载缓冲器116变空,则不再提供l_st,或者不再推迟所已发射加载指令的分派。注意,已经加载到加载队列118中的已发射加载指令的分派不受l_st的声明的影响。

用于推迟加载指令分派的l_st的功能可以以几种方式中的任何一种来实现。l_st可以指示当加载队列118变满时刚刚缓冲到加载缓冲器116中但尚未被传送到加载队列118的第一加载指令。调度器112推迟分派所指示的加载指令和任何后来已发射加载指令。然而,应注意的是,虽然向调度器112发出了指令,但是它们可能被乱序地分派,使得调度器112可以隐含地不跟踪加载指令排序。或者,l_st可以包括多个指针,其中每个指针指向调度器112中也位于加载缓冲器116中的加载指令。如果位于加载缓冲器116中,则加载指令尚未加载到加载队列118中并且为该加载指令推迟分派。另一方面,每个指针可以指向已经加载到加载队列118中的那些加载指令,使得它们可以被分派。或者,l_st用于标记要推迟的每个加载指令。在一个实施例中,例如,可以为调度器112中的每个条目提供一个推迟位等,其中该推迟位被置位以推迟加载指令或被清除以允许将分派的加载指令。当加载指令另外准备好用于分派时,如果它被标识为由加载缓冲器116推迟,则调度器112推迟调度,直到针对该加载指令的推迟指示被移除。因此,推迟位较简单地变成一个加载指令准备好被分派执行之前必须满足的另一个条件。

加载缓冲器116的提供具备了若干优点。首先,ful2指示不被推测地确定,而是提供了何时加载队列118确实已满的实际确定。第二,当加载队列118已满时,前端110尚未推迟,因为加载指令可以继续被发射到调度器112并缓存在加载缓冲器116中。发射指令不会推迟并且其他指令类型(加载除外)的分派可能会继续。此外,已经在加载队列118中的加载指令的分派可以继续。第三,与加载队列118相比,加载缓冲器116的每个条目可以存储较少的信息,并且可以使其显着更深。在一个实施例中,例如,加载缓冲器116的每个条目仅需要存储相应的加载指令的源和目的地标识符以及包括顺序信息的一存储有效向量(这里进一步针对图2来描述)。加载缓冲器116可以存储附加信息,但不需要存储在加载队列118中存储的所有相同信息。以这种方式,加载队列118不消耗可观的资源,并且显着地减少了推迟前端的可能性。

当加载队列118变满并提供完全指示ful2时,已发射加载指令可以继续缓冲在加载缓冲器116中。如果加载缓冲器116也变满,使得它不能接受更多加载指令,则加载缓冲器116提供满指示ful1以使前端110推迟。响应于由加载缓冲器116提供的ful1,前端110推迟发出所有指令,直到不再提供ful1。虽然这种情况看起来类似于前端被推迟的常规配置,但是处理器100提供了显著的优点。首先,所述满载确定不是推测性地确定的。第二,加载缓冲器116允许调度器112拥有大量更多的已发射的指令用于乱序分派。因此,与常规配置相比,执行阶段106可以保持繁忙的处理指令较长的时间段。当加载指令由加载流水线120完成时,相应的条目在加载队列118中被释放,并且加载缓冲器116中的缓冲加载指令可被推入加载队列118中,并且最终由调度器112分派。

图2是根据本发明的一个实施例实现的加载缓冲器116的框图。虽然未示出,但是处理器100包括一个与加载队列118以相似方式配置的存储队列(storequeue)。存储队列保持执行分派的存储指令所需的信息。每次发射加载指令时,需要确定在该加载指令之前“在先发射”的存储指令的数量。有效列表202(stval)包括存储队列的每个条目的有效位。以这种方式,当加载指令被发射时,有效列表202的当前状态标识出在先发射的存储指令。因此,有效列表202的当前状态被输出为一个存储有效向量(svv),其与已发射加载指令一起存储。如图所示,例如,当将一个加载指令(如ld_x所示)存储到加载缓冲器116的条目204中时,从有效列表202撷取相应的svv(如svv_x所示),并将其存储在加载缓冲器116的条目204中。svv_x提供该加载指令ld_x被推入加载缓冲器116的时刻下,该加载指令ld_x相对于已发射的存储指令的顺序信息,以标识哪个存储指令比该加载指令ld_x更早。

图3是示出根据本发明的一个实施例的加载缓冲器116和加载队列118的控制的框图。加载缓冲器116包括由加载缓冲器(lb)控制器306提供或以其他方式控制的推送指针302和弹出指针304。lb控制器306使用和/或更新推入指针302以将条目从前端110加载到加载缓冲器116中,并且当被推入加载队列118中时从加载缓冲器116弹出项目时,使用和/或更新弹出指针304。lb控制器306使用指针值来确定加载缓冲器116何时满载以提供ful1指示。lb控制器306还为当加载队列118提供ful2的每个周期提供和/或更新l_st,使得只有已经加载到加载队列118中的那些加载指令可以由调度器112分派。

加载队列118包括由加载队列(lq)控制器312提供或以其他方式控制的推入指针308和弹出指针310。当从加载缓冲器116弹出时,lq控制器312使用和/或更新推入指针308以将条目加载到加载队列118中,并且当由加载流水线120完成时,使用和/或更新弹出指针310以从加载队列118弹出条目。lq控制器312使用指针值来确定何时加载队列118满,以提供ful2指示。如前所述,在某些实施例中l_st可以被配置由lq控制器312而不是lb控制器306。在一个实施例中,加载队列118的存储器空间包括例如一个存储器组(bank)而加载缓冲器116的存储器空间包括多个存储器组,其每个存储器组是加载队列118的存储器组的副本。在这种情况下,加载队列118的推入指针308等于加载缓冲器116的弹出指针304。当加载缓冲器116已满,加载队列118的弹出指针310也等于加载缓冲器116的推入指针302。

图4是示出根据本发明的一个实施例的用于发射、调度和执行包括加载缓冲器116和加载队列118的操作的指令的处理器100的操作的流程图。流程图以串行或顺序格式示出,适用于每个指令(例如,以单数示出)。然而,应当理解,一个或多个块可以一次适用于多个指令。例如,大多数处理器,包括处理器100,一次发出、调度和执行多个指令。此外,这些块被分成发射、分派和执行操作,其中应当理解,这些不同的操作在流水线处理器配置中并行执行。

第一组块402-414通常表示发射操作。在第一块402处,如前所述,前端110转换来自高速缓存行的指令。在下一个块404,查询是否提供指示加载缓冲器116已满的ful1。如果是这样,则操作循环回到块402,并且前端110只要能够在不向处理器管线发射指令的情况下继续转换处理。如果ful1指示在块404处确定的加载缓冲器116未满,则操作改为进行发射指令的块406。在许多配置中,可以一次发出多个指令。在下一个块408,查询针对每个指令查询指令是否为加载指令。如果不是,则操作循环回到块402以继续进行转换和/或发射处理。

当在块408确定已经发射加载指令时,则在块410,加载指令被推入加载缓冲器116,并且ful1被更新。注意,可以通过加载缓冲器116的内容的每次改变来检查或更新ful1。在更新期间,只要加载缓冲器116未满,ful1保持不变。然而,如果在加载指令被推入时,加载缓冲器116变满,则ful1被修改以指示加载缓冲器116已经变满。此时也可以更新到调度器112的加载推迟指示l_st,因为新推入的加载指令连同尚未传送到加载队列118的加载缓冲器116中的任何其他加载指令可能尚未被分派。然后,操作进行到块412,其中查询ful2是否指示加载队列118已满。如果是这样,则加载缓冲器116中的加载指令可能尚未被传送到加载队列118,并且操作循环回到块402以继续转换和/或发射操作。注意,在替代配置中,提供给调度器112的l_st可以在这一点被更新,以推迟已经发出但尚未被推入到加载队列118中的任何加载指令的分派。如果相反,ful2不是在块412处指示,然后操作进行到块414,其中至少一个加载指令从加载缓冲器116弹出并被推入加载队列118。此时可以更新指示ful1、ful2和l_st。注意,每当改变加载队列118的内容时,可以检查和/或修改ful2。操作然后循环回到块402以进行继续的转换/发射操作。

块416-424通常是指分派操作。返回参考块406,当指令正被发射并加载到调度器112中时,调度器112开始准备每个发射的指令以便分派,如块416所示。这可以简单地意味着检查和/或更新确定该指令是否准备好执行所必须的任何参数。在下一个块418,查询指令是否准备好被分派执行。否则,操作循环回到块416。否则,操作进行到块420,其中确定指令是否是加载指令,如果是,是否已经推迟了加载指令被分派(例如由l_st指示所指示的,包括响应于l_st指示而设置的任何位)。如果不是加载指令,或者指令是尚未推迟的加载指令,则操作进行到其中分派指令的块422,并且操作返回到块416。否则,如果指令是推迟的加载指令,则操作进行到块424,其中加载指令的分派暂时推迟,并且操作循环回到块416。

随着指令被分派到执行单元,如块426所示执行指令。块426-432通常表示执行操作。当在块428确定指令仍在执行而不完成时,操作循环回到块426直到完成。如在块428确定的指令的执行完成时,操作进行到块430,其中查询该指令是否是加载指令。如果不是,则操作循环回到块426。如果是已经完成的加载指令,则操作转而转到块432,其中加载指令的条目从加载队列118被移除(或弹出),以及ful2和l_st被更新。然后,操作返回到块426以继续执行操作。

如块414所示,推入到加载缓冲器116中的加载指令可以在不满时传送到加载队列118。当块412所确定的加载队列118已满时,已发射加载指令可以继续加载到加载缓冲器116中,如块416所示。如果加载缓冲器116如块404所示变满,则临时暂停发射操作。当加载队列118变满时,l_st被更新以标识尚未被推入加载队列118的已发出的加载指令。在分派操作期间,可以分派准备好分派的指令,除非它是被指示为如块422和424所示被分派推迟的加载指令。当加载队列118变满并且加载指令开始在加载缓冲器116中缓冲时,则尚未传送到加载队列118的已发出的加载指令被暂时推迟分派。然而,可以分派已经传送到加载队列118的已发射加载指令。

已经提出了前述描述,以使本领域普通技术人员能够在特定应用及其要求的背景下提供和使用本发明。虽然已经参考其某些优选的形式相当详细地描述了本发明,但是其他的形式和变化是可能的和预期的。对优选实施例的各种修改对于本领域技术人员将是显而易见的,并且本文定义的一般原理可以应用于其他实施例。例如,本文描述的电路可以以包括逻辑设备或电路等的任何合适的方式来实现。

本领域技术人员应当理解,在不脱离本发明的精神和范围的情况下,它们可以容易地使用所公开的概念和特定实施例作为设计或修改用于实施本发明的相同目的的其它结构的基础。因此,本发明不旨在限于本文所示和所描述的具体实施例,而是符合与本文公开的原理和新颖特征一致的最广范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1