数据处理的制作方法

文档序号:14033594阅读:148来源:国知局
数据处理的制作方法

本发明涉及数据处理,尤其涉及将指令传送到处理元件的并行功能单元。



背景技术:

附图中的图1示出了具有处理元件10的数据处理装置1。每个处理元件10根据接收到的指令12接收待处理的数据11。处理元件10接收用于使接收到的指令进行同步操作和执行的时钟信号输入13。处理元件10在对数据11执行指令12之后输出结果14。处理元件10可以布置为提供任何适当的一个或多个功能。

附图中的图2示出了包括具有各自独立功能的多个功能单元16(16a至16f)的示例性处理元件10。例如,功能单元可以提供内存读取功能、内存写入功能、加法功能、除法功能或乘法功能。多个功能单元16可以布置为提供所期望的范围的功能。将容易理解,每个功能单元可以具有任何适当的功能,并且可以提供任何适当的功能组合。

数据输入17将待处理的数据传送到处理元件10,以及多路复用器18根据正在接收的数据的内容将该数据路由到正确的功能单元。使能信号和时钟信号(为了清楚起见,在图2中未示出)被提供到功能单元。当使能信号被提供到功能单元时,功能单元然后在接下来的一个或多个时钟周期对所接收的数据执行其功能。众所周知,执行特定功能所采用的周期数取决于该功能。

在执行该功能之后,功能单元16提供经处理的数据作为输出20(20a至20f)。将这些输出20(20a至20f)作为输入提供到多路复用器21,该多路复用器21被操作成选择所述输出20中的一个输出作为输出22用于从处理元件10输出。

对于在前面所考虑的处理元件而言,指令按照其接收的顺序被连续地执行使得在任一时刻多个功能单元中只有一个功能单元运行。该执行顺序由在处理装置1上执行的程序而决定。在这样的布置中,在任一时刻只有一个输出20是有效的,并且多路复用器21选择该输出20作为处理元件10的输出。

为了提供增强的处理能力,以及为了减少对外部存储器写入和读取操作(这增加了处理的延迟和等待时间)的需要,并且为了增加一个周期中并行执行的指令的数量,针对处理元件已经提出了一种经处理的数据反馈体系结构。附图中的图3示意性地示出了这种结构。图3的处理元件10'包括用于将待处理的数据提供到功能单元16的输入多路复用器24。与图2的示例相比,处理元件10'的输入多路复用器24被连接成接收功能单元16a至16f的输出22a至22f。以这种方式,输入多路复用器能够根据正在执行的程序将一个功能单元的结果反馈给功能单元之一用于进一步处理。以这种方式,可以执行一系列指令而不需要进行外部存储器输入/输出处理,并且增加了一个周期中并行执行的指令的数量。这种技术使得能够更快地以及以更低的延迟来处理一系列的指令。

但是,当程序包含多个指令序列时,按照单个系列执行指令会导致不必要的延长延迟。为了解决这个问题,麻省理工学院(mit)电力工程与计算机服务(eecs)系的j.p.grossman在一篇题为““cheapout-of-orderexecutionusingdelayedissue(使用延迟问题的廉价乱序执行)”(0-7695-0801-4/00)的文章中提出了一种技术,其中相互独立的指令序列是交错的。在这样的技术中,指令被执行以使得多个功能单元并行操作,这要求给定序列的指令按照正确顺序执行。grossman通过建议延迟向功能单元发布指令并控制这些指令的执行顺序来实现这一点。grossman还讨论了将这种技术应用于循环指令序列。以这种方式,可以减少独立指令序列的总体执行时间。

然而,这种技术仍然会在处理指令序列时导致不必要的延迟,特别是如果那些序列包括循环指令。即使该问题并不必要,但是该问题对于需要低延迟的数据处理应用而言尤其严重。这种应用的一个示例是在无线电信领域,其中在保持数据包顺序和低丢包率的同时,数据包流必须以低延迟进行处理。



技术实现要素:

本发明试图解决现有技术的问题。

根据本发明的一个方面,提供了一种使用指令控制器将指令传送给处理元件的方法,该处理元件具有多个彼此并行布置的功能单元,该指令控制器具有多条指令流水线,多条指令流水线与处理元件的相应功能单元相关联,该方法包括:接收包含多个指令的指令字,每个指令属于指令序列并且具有时序值,该时序值指示在指令所属的指令序列中执行该指令的相对时序;根据相关指令的功能将指令提供到指令控制器的相应指令流水线,指令被提供到相应指令流水线内的相应初始位置,该初始位置通过相关指令的时序值以及指令序列之间的相对时序来确定;以及通过指令流水线将这样的指令传播到处理元件的相应功能单元,使得指令序列的指令按照由该指令序列中的该指令的时序值所确定的顺序被传送到相关联的功能单元用于执行。

在一个示例中,指令被提供到指令流水线,使得相邻指令序列中的微指令的处理之间的延迟最小化。

在一个示例中,初始时序位置被确定,使得在任何一个处理通道上相邻的指令序列在时间不上重叠。

在一个示例中,其中,处理通道包括一队列的存储单元,其中,该一队列的存储单元中的每个存储单元可操作成将指令存储预定数量的系统时钟周期,并且其中该方法包括:在预定数量的系统时钟周期之后,针对队列中除了最后一个单元之外的每个单元,将所存储的指令传送给该队列中的下一个单元,并且针对该队列中的最后一个单元,将指令传送给处理元件中与相关处理通道相关联的处理单元。

在一个示例中,指令序列之间的相对时序通过以下方式确定:检测属于第一指令序列的指令在至少一条指令流水线中的位置;检测来自第二指令序列的指令是否被指定为与来自第一指令序列的指令在同一个功能单元中被执行;以及如果检测到来自第二指令序列的指令被指定与来自所述第一指令序列的指令在同一个功能单元中被执行,则在流水线中确定一位置使得第二指令序列与第一指令序列在时间上不重叠。

根据本发明的另一方面,提供了一种用于将指令提供给处理元件的指令控制器,该处理元件具有多个功能单元,多个功能单元能够操作成根据所接收的彼此并行的指令执行相应的功能,该控制器包括:多个功能单元,多个功能单元能够操作成根据所接收的彼此并行的指令执行相应的功能;以及多条指令流水线,每条指令流水线与功能单元相关联,并且能够操作成将指令传送到相关处理元件的相关联的功能单元以供相关联的功能单元执行,每个指令具有指示属于该指令所属指令序列的序列值,并且具有时序值,该时序值指示在该指令所属的指令序列中执行该指令的相对时序,其中,每条指令流水线包括多个存储单元、时序控制器以及指令处理器,多个存储单元被布置成队列并且可操作成在其中存储指令,队列中除了最后一个存储单元以外的每个存储单元可操作成将指令传送到该队列中的下一个单元,该队列中的最后一个单元可操作成将指令传送到与相关指令流水线相关联的处理元件的相关联的功能单元;时序控制器可操作成接收关于所接收的指令的时序信息,并确定该执行将要加载到的初始存储单元,该初始存储单元通过相关指令的时序值和指令序列之间的相对时序来确定;指令处理器可操作成接收针对与相关指令流水线相关联的功能单元的指令,并将该指令加载到由时序控制器所确定的存储单元中;并且其中,每条指令流水线可操作成将来自由时序控制器所确定的初始存储单元的指令传播到与相关流水线相关联的功能单元。

在一个示例中,时序控制器可操作成确定指令的初始存储单元,以使得指令被提供到指令流水线,从而使得相邻指令序列中指令的执行之间的延迟最小化。

在一个示例中,每条指令流水线包括位置检测器,该位置检测器可操作成确定相关指令流水线中的指令的位置,并且将位置信息发送到指令流水线的时序控制器,并且其中,时序控制器可操作成使用接收的位置信息来确定指令初始存储单元。

在一个示例中,每条流水线的时序控制器可操作成通过以下方式确定指令序列之间的相对时序:检测属于第一指令序列的指令的至少一条指令流水线中的位置;检测来自第二指令序列的指令是否被指定与来自第一指令序列中的指令在同一个功能单元中被执行,并且如果检测到来自第二指令序列的指令被指定与来自所述第一指令序列的指令在同一个功能单元中被执行,则在流水线中确定一位置,使得第二指令序列与所述第一指令序列在时间上不重叠。

附图说明

现在将仅以举例的方式并参照附图来描述本发明的实施例,在附图中:

图1示意性地示出了简单的数据处理器;

图2示意性地示出了处理元件;

图3示意性地示出了第二处理元件;

图4示出了压缩指令字;

图5示出了来自图4的压缩指令字的指令;

图6示出了与图2的功能单元一起使用的指令流水线;

图7示出了多个指令序列;

图8是示出了体现本发明另一方面的方法中的步骤的流程图;

图9至图21示出了来自图7的序列的指令被传送到相应功能单元;以及

图22示出了单指令多数据(simd)体系结构。

具体实施方式

如上所述,图3示出了包括多个功能单元16(16a至16f)的处理元件10',该功能单元16(16a至16f)被连接成经由输入多路复用器24来接收相应的数据项19(19a至19f),以及被连接成输出相应的经处理的数据项22a到22。功能单元的输出22a至22f可以提供到输入多路复用器24,用于提供到功能单元16a到16f以便根据处理元件10'接收到的指令序列进行进一步处理。输出22a至22f中的一个或多个可以作为处理元件10'的输出从处理元件10'中提供。

在本发明的实施例中,功能单元16a至16f的输出22a至22f可以从输出被生成开始直到相关的功能单元执行另一个指令为止在功能单元的输出处得到。以这种方式,可以在处理元件内本地得到经处理的数据直到需要为止。在另一示例性实施例中,功能单元可以提供一个或多个寄存器或本地存储元件,用于在处理元件中本地保存经处理的数据。

功能单元16a至16f布置为接收指令序列以执行总体期望的功能。在本发明的一个示例性实施例中,这些指令以压缩指令字的形式提供,如图4所示。

图4中的压缩指令字30包括用于处理元件10'的每个功能单元16a至16f的指令30a至30f。对于任何给定的指令序列,指令字段30a至30f可以包括指令或者可以是空的。

图5示出了图4压缩指令字中的用于一个功能单元的指令的示例。该指令包括使能/类型字段31,第一数据字段33和第二数据字段34,以及时序字段35。将容易理解的是,图5中所示的结构仅仅是示例性的,并且旨在使得能够解释本发明的原理。其他指令字段格式和内容可以适当地使用。

当被提供到与指令相关的功能单元16时,使能/类型字段31使功能单元16变得有效,并限定待执行功能的特定类型。例如,乘法函数可能涉及“简单”乘法或浮点乘法。使能/类型字段31在被单元接收之后由功能单元16解码。

每条指令属于由正在执行的总体程序所确定的指令序列。

第一数据字段33和第二数据字段34指示用于指令执行的数据。字段33和字段34可以包括数据本身或者可以包括对诸如数据的存储器位置或寄存器位置之类的数据位置的引用。

时序字段35包括与指令在特定指令所属的指令序列中的相对时序相关的信息。

图6示意性地示出了体现本发明一个方面的指令控制器40与具有多个功能单元16的处理元件的结合。指令控制器40操作成接收压缩指令、展开和调度这些压缩指令以及传送指令到功能单元16a到16f用于执行。指令控制器40被布置成多列-一列对应于功能单元16a至16f中的一个。这些列在图6中标记为a到f。

为了清楚起见,图6示出了布置为向单个处理元件传送指令的控制器40。然而,可以理解的是,指令控制器也能够将相同的指令传送到多个处理元件,从而提供simd(单指令多数据)处理体系结构。尽管下面关于控制器40的操作描述是参照单个处理元件而言的,但也适用于simd体系结构。

指令控制器40的各列彼此相同。列包括指令被输入到其中的指令寄存器41。由于使用压缩指令字来提供指令用于执行,因此每个列的指令寄存器会同时被加载下一个指令字段用于处理。

列还包括指令流水线42,该指令流水线42可操作用于将指令传送到相关的功能单元16。指令流水线42包括多个串联连接的存储单元43。在图6中,每个流水线42包括九个存储单元43,但是可以提供任何数量的单元。除了序列中的最后一个存储单元之外,序列中的每个存储单元43可操作用于存储指令,并在接收到时钟脉冲信号时将该指令传送到序列中的下一个单元。序列中的最后一个存储单元43可操作用于将指令传送给与流水线42相关联的功能单元16。

指令处理器44可操作用于从指令寄存器41中为相关列检索指令,并通过指令传送总线45将检索到的指令传送到流水线42的存储单元43中适当的一个存储单元。时序控制器46检测指令的时序信息(35,图5),以及时序控制器46可操作成使指令处理器44将指令传送到流水线42中正确的存储单元43。位置检测器48向时序控制器46提供同步信息以能够跨越不同的指令序列向流水线42同步传送指令。下面将更详细地描述流水线42的操作。

指令作为一系列压缩指令字被提供到指令寄存器。图7示出了这样一个系列,为了清楚起见,将每条指令简化。每条指令包括图5中所陈述的指令字段,然而为了清楚起见,图7的表示仅示出了时序字段35和指令所属的指令序列。

在图7中,指令序列由字母v、w、x、y、z表示,并且时序字段35由整数1至4表示。将容易理解的是,这里所示的序列和时序的表示纯粹是示例性的,并且为了清楚描述本发明的原理,已经将其简化。还将容易理解的是,可以将任何数量的序列提供给处理元件,并且这些序列中的每一个可以具有任何深度。图7中所示的序列仅是示例性的。图7的示例给出了五个待处理的序列。根据处理元件的总体处理的要求,单独的指令可以是任何适当类型的指令。在这个示例中,序列以x、y、z、w、v的顺序传送到指令寄存器41。

在图7所示的示例中,前三个序列x、y、z是相同的,并且实际上形成循环序列。形成循环序列的另一种方法是重复单个指令序列。序列x、y和z形成超级序列,并且为了时序和同步的目的而被如此识别,这将在下文进行说明。

图8是示出了体现本发明的方法中步骤的流程图,该方法用于加载和传播来自压缩指令字的指令到功能单元,并且还将参考图9至图21。

与第一序列(x)相关的压缩指令字加载(步骤100)到指令寄存器41中。在下一个时钟周期,相应指令加载(步骤101)到指令处理器44中。时序字段35由时序控制器46读取(102)。根据时序字段35的内容,启用(103)流水线42中适当的存储单元43,使得指令处理器44能够经由传送总线45将指令加载(104)到存储单元43中。假设将指令加载到存储单元43中需要一个时钟周期。在加载到存储单元43之后,后续的时钟周期使指令通过流水线42a至42f传播(105)直到加载(106)到功能单元16a到16f中为止。

一旦已经将来自一个序列的指令加载到适当的存储单元43中,则可以加载下一个序列。在这种加载期间,执行到达功能单元16的指令并提供输出。

图9到图21示出了图7的指令序列中的指令传播到功能单元16a至16f。图9示出了关于第一序列x的压缩指令字被加载到指令寄存器41中准备传送到流水线42。图10示出了一个时钟周期之后x序列指令被加载到指令处理器44中和时序字段35被加载到时序控制器46中。关于第二序列y的指令被加载到指令寄存器41中。在示例中,x序列的第一指令x1将由功能单元16a执行,并因此进入指令控制器40的a列。

在一个时钟周期之后,根据时序信息x序列指令被加载到适当的存储单元43中,y序列指令被加载到指令处理器44和时序控制器46中,并且z序列指令被加载到指令寄存器41中。时序控制器46利用位置检测器48提供的位置信息并结合序列和时序信息来确定流水线42中指令将被加载到其中的位置。

在图11所示的示例中,第一x序列指令x1被加载到存储单元43a1中,即最靠近功能单元16a的列a中的单元43。第二指令x2被加载到存储单元43c2中,第三指令x3被加载到单元43b3中,以及第四指令x4被加载到单元43f4中。这些指令以这种方式加载以便将这些指令传送到功能单元16,并且因此以相关序列的正确顺序而执行。该简化的示例假定执行每条指令都需要一个时钟周期。

如图12所示,在又一个时钟周期之后,第一x序列指令x1被传送到适当的功能单元(16a),以及其它x序列指令中的每个指令沿着流水线42移动一个位置更靠近功能单元16。因此,第二x序列指令x2移动到位置43c1,x3移动到43b2,以及x4移动到43f3。在下一个时钟周期,可以由功能单元16a处理第一x序列指令x1。

y序列的指令加载到流水线42中合适的位置。在这个示例中,y序列指令的位置与x序列指令的位置一致,以及因此y序列指令被放置于流水线42中、排在相应的x序列指令后面。在这种情况下,这导致第一y序列指令y1加载到位置43a1中,第二y序列指令y2加载到位置43c2中,第三指令y3加载到43b3中以及第四指令y4加载到43f4中。关于z序列的指令加载到指令处理器44和时序控制器46中。

如图13所示,在又一个时钟周期之后,功能单元16a的输出处可以得到x序列指令x1的执行结果rx1。所有其他指令移动了一个位置更靠近功能单元,其中x序列指令x2加载到功能单元16c中用于在下一个时钟周期执行,以及y序列指令y1加载到功能单元16a中用于在下一个时钟周期执行。与x序列指令和y序列指令相同的z序列指令加载到流水线42中适当的位置,如图13所示。如图13所示,由于x序列、y序列和z序列形成单个超级序列,指令能够加载到流水线中,并由此由功能单元执行,从而指令之间的延迟最小。

w序列指令被加载到指令处理器44和时序控制器46中,并且v序列指令被加载到寄存器41中。

在又一个时钟周期之后,如图14所示,在功能单元16c的输出处可以得到第二x序列指令x2的执行结果rx2。在第一功能单元16a的输出处可以得到第一y序列指令y1的处理结果ry1。第三x序列指令x3、第二y序列指令y2和第一z序列指令z1加载到相应功能单元16b、功能单元16c和功能单元16a中,用于在下一个时钟周期执行。所有其他排队的指令在流水线42中移动了一个位置更靠近功能单元16。

w序列指令w1和w2被放置在流水线中适当的位置。w序列不是xyz超级序列中的一部分,以及因此时序控制器46必须注意位置检测器48提供的位置信息以在流水线42中为w序列指令确定适当位置。在这种情况下,指令w1和w2使用不执行x序列、y序列和z序列中的指令的功能单元。因此,位置检测器48不生成任何位置信息。

因此,指令处理器44能够插入指令w1和w2将其尽可能地靠近指令控制器的d列和e列中适当的功能单元(16d和16e)。以这种方式,可以在执行其他序列中的非干扰指令之前执行来自w序列的指令,从而减少w序列执行的等待时间。

在该相同的时钟周期中,v序列指令被加载到指令处理器44中以及时序信息被加载到时序控制器46中。

如图15所示,在又一个时钟周期之后,在功能单元16b的输出处可以得到第三x序列指令x3的执行结果rx3,在功能单元16c的输出处可以得到第二y序列指令的处理结果ry2,在功能单元16a的输出处可以得到第一z序列指令的处理结果rz1。所有其他排队的指令靠近功能单元16移动一个位置或移动到功能单元本身内,导致第四x序列指令x4准备在功能单元16f中执行,第三y序列指令y3准备在功能单元16b中执行,以及第二z序列指令z2准备在功能单元16c中执行。另外,第一w序列指令w1准备好在功能单元16d中执行。应该注意的是,w序列处理与x、y和z序列处理交错,并且这是可能的,因为w序列指令不使用其他序列使用的功能单元。

v序列指令v1、v2和v3被放置在相应功能单元16c、16e和16f的流水线中适当的点。然而,与w序列指令不同的是,v序列指令利用由另一序列使用的至少一个功能单元(在这种情况下,序列x、y和z以及功能单元16f)。由于v序列不是xyz超级序列中的一部分,指令序列彼此不重叠是很重要的,因为这样的重叠可能导致数据冲突问题。

为了检测和控制潜在的重叠的序列指令的定位,每条流水线和每列都包括位置检测器48。位置检测器48存储相关列中包含指令的最新位置,并将该位置广播到其他列中每列的位置检测单元48。当接收到新的指令时,位置检测器确定在其相关的流水线列中是否存在已经排队的指令,以及如果是,则将该指令指示给时序控制器46。检测到指令的每个位置检测器48报告该指令的位置,从而可以确定现有序列在流水线中的最高位置。然后必须将新的指令序列放置在比该最高位置还要高至少一个位置的位置上,以便能够将新的序列放置在流水线内适当的非干扰位置上。

在这种情况下,来自待处理的x、y和z序列的最后一个指令是功能单元16f上的指令z4。换句话说,z序列的第四指令z4被放置在流水线中的最高位置。在将v序列指令放置到流水线中时,指令z4保存在位置43f2,并且因此v序列中的第一指令v1不能放置在小于或等于z序列的第四指令z4的位置。因此,将v序列的第一指令v1放置在位置3以获得其适当的功能单元。因此,在这个示例中,将v1放置在位置43f3。该定位确保了v序列的第一指令与xyz超级序列中的任何指令都不重叠。这确保了通过v序列可以得到的数据和结果不会与可以得到并且用于xyz超级序列的数据和结果冲突。

其余的v序列指令v2和v3则具有相对于第一v序列指令v1而确定的初始位置,以便保持v序列的时序,并确保v序列与指令流水线中存在的独立序列不重叠。因此,第二v序列指令v2放置在43e4,以及第三v序列指令放置在43c5。该放置确保v序列指令以适当的顺序执行,而不会干扰xyz超级序列。

图15中所示的v序列是示出了本发明原理的简化示例。在更复杂的示例中,v序列作为一个整体可能与指令流水线中存在的一个或多个序列在时间上重叠,而不是在关于特定功能单元的单个流水线中重叠。v序列的时序由确保任一流水线中的指令不在该流水线中重叠或变得交错所需的时序来决定。

如图16所示,在又一个时钟周期之后,在功能单元16f的输出处可以得到第四x序列指令x4的执行结果rx4。另外,在功能单元16b的输出处可以得到第三y序列指令y3的执行结果ry3,在功能单元16c的输出处可以得到指令z2的执行结果rz2,以及在功能单元16d的输出处可以得到第一w序列指令w1的执行结果rw1。第四y序列指令y4、第三z序列指令z3和第二w序列指令w2被放置在适当的功能单元上以由此执行。其余排队的指令在流水线42中朝向功能单元又移动一个位置。

图17示出了在又一个时钟周期之后的指令的位置,并且在功能单元16f的输出处可以得到第四y序列指令y4的执行结果ry4,在功能单元16b的输出处可以得到第三z序列指令的执行结果rz3,以及在功能单元16e的输出处可以得到第二w序列指令的执行结果rw2。第四z序列指令z4可用于由功能单元16f执行,并且v序列指令v1、v2和v3被移动更靠近功能单元16。

图17示出了v序列指令如何不与x、y和z序列指令的处理重叠,因为第一v序列指令v1紧接着第四z序列指令之后排队用于执行,该第四z序列指令是在x,y和z序列中的最后一个指令。

图18示出了在又一个时钟周期之后的位置,其中在功能单元16f的输出处可以得到第四z序列指令z4的执行结果rz4。

第一v序列指令v1可以在功能单元16f的下一个时钟周期用于执行,以及第二v序列指令v2和第三v序列指令v3沿流水线42向其各自的功能单元移动。因此,直到执行xyz超级序列的最后一条指令之后才执行用于v序列的第一条指令。

图19示出了一个时钟周期之后的情况,其中在功能单元16c的输出处可得到第一v序列指令v1的执行结果rv1。指令v2被放置在功能单元16e中用于执行,以及指令v3移动一个位置以更靠近功能单元16c。

图20示出了又一个时钟周期之后的情况,其中在功能单元16e的输出处可以得到第二v序列指令v2的执行结果rv2,第三v序列指令v3可以由功能单元16c在下一个时钟周期进行处理。

最后,图21示出了第三v序列指令v3已经被执行,并且在功能单元16c的输出处可以得到结果rv3。虽然图9至图21示出了五个指令序列的处理,但是将容易理解的是,该技术适用于任何数量的指令序列。

如上所述,已经参照单个控制器向单个处理元件提供指令描述了本发明的原理。将容易理解的是,控制器可以将指令提供到多个处理元件。图22示意性地示出了这种技术的一种可能配置,并提供了单指令多数据(simd)的指令架构。包括指令寄存器52和多条指令流水线54的单个指令控制器50以上述方式通过流水线传送指令。流水线54被连接以经由指令总线56将指令并行地传送到多个处理元件60a至60e的相应功能单元62。将理解的是,图22中所示的处理元件60、功能单元62和流水线54的数量仅是示例性的,并且本发明的原理适用于任何数量的这些单元。以这种方式,本发明的实施例能够提供多个指令序列的较低延迟处理。

虽然已经参考附图中所示的实施例描述了本发明的各方面,但是应该理解的是,本发明不限于所示的精确实施例,并且可以在没有进一步的创造性技能和努力的情况下进行各种改变和修改。

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