用于信号流编程的数字信号处理器代码的高效资源管理的系统和方法

文档序号:6521561阅读:171来源:国知局
用于信号流编程的数字信号处理器代码的高效资源管理的系统和方法
【专利摘要】本发明涉及用于信号流编程的数字信号处理器代码的高效资源管理的系统和方法。提供了根据用于信号流编程的数字信号处理器代码的高效资源管理的系统的实施例的方法,该方法包括确定用于电子电路的信号流的示意图中的多个算法元件的连接序列,该连接序列指示算法元件之间的连接和根据这些连接来处理算法元件的序列,该方法还包括确定指示使用多个存储器缓冲器来根据连接序列处理多个算法元件的顺序的缓冲器序列,并且根据缓冲器序列重用多个存储器缓冲器中的至少一些。
【专利说明】用于信号流编程的数字信号处理器代码的高效资源管理的系统和方法
【技术领域】
[0001]本公开概括而言涉及数字处理系统的领域,更具体而言涉及用于信号流编程的数字信号处理器代码的高效资源管理的系统和方法。
【背景技术】
[0002]信号处理涉及对时变或空间变化信号(例如,声音、图像和传感器数据,例如诸如心电图之类的生物数据、控制系统信号、电信传送信号,等等)的操作或对这些信号的测量的分析。具体地,数字信号处理涉及通过通用计算机或通过诸如专用集成电路(ASIC)、现场可编程门阵列或专门的数字信号处理器(DSP)之类的数字电路来处理数字化的离散时间采样信号。在处理期间可在数字化的离散时间采样信号上实现算术(例如,定点和浮点、实值和复值、乘法和加法)和信号处理算法(例如,快速傅立叶变换(FFT)、有限冲击响应(FIR)滤波器、无限冲击响应(IIR)滤波器,等等)。存在各种工具一例如图形编程工具一来促进对信号的适当处理。
【专利附图】

【附图说明】
[0003]为了提供对本公开及其特征和优点的更完整理解,参考以下结合附图的描述,附图中相似的标号表示相似的部件,其中:
[0004]图1是示出用于信号流编程的数字信号处理器代码的高效资源管理的系统的示例性实施例的简化框图;
[0005]图2是示出可与系统的实施例相关联的示例性细节的简化框图;
[0006]图3是示出与系统的实施例相关联的其他示例性细节的简化图;
[0007]图4A - 4B是示出与系统的实施例相关联的其他示例性细节的简化图;
[0008]图5是示出可与系统的实施例相关联的示例性操作的简化流程图;
[0009]图6是示出可与系统的实施例相关联的另外的示例性操作的简化流程图;
[0010]图7是示出根据实施例的系统的示例性细节的简化框图;
[0011]图8是示出根据实施例的系统的示例性细节的简化图;
[0012]图9是示出可与系统的实施例相关联的示例性操作的简化流程图;并且
[0013]图10是示出根据实施例的系统的示例性细节的简化框图;
[0014]图11是示出系统的实施例的示例性细节的简化框图;
[0015]图12是示出实施例的另外的示例性细节的简化图;
[0016]图13是示出可与系统的实施例相关联的示例性操作的简化流程图。
【具体实施方式】
[0017]概要
[0018]提供了根据用于信号流编程的数字信号处理器代码的高效资源管理的系统的实施例的方法,该方法包括确定用于电子电路的信号流的示意图中的多个算法元件的连接序列,该连接序列指示算法元件之间的连接和根据这些连接来处理算法元件的序列,该方法还包括确定指示使用多个存储器缓冲器来根据连接序列处理多个算法元件的顺序的缓冲器序列,并且根据缓冲器序列重用多个存储器缓冲器中的至少一些。
[0019]在特定实施例中,确定缓冲器序列包括按顺序对连接、算法元件和存储器缓冲器编号。对于每个连接,可识别在任何其他算法元件之前在该连接上生成输出的第一算法元件。还可识别在所有其他算法元件之后在该连接上接收输出作为输入的第二算法元件。可按分配顺序布置所有连接的第一算法元件,该分配顺序包括第一算法元件号码的升序。可根据该分配顺序生成每个连接的缓冲器索引,连接的缓冲器索引与重用连接的另一缓冲器索引相同。重用连接的第二算法元件可与连接的第一算法元件相同。缓冲器序列可包括根据分配顺序布置的所有连接的缓冲器索引。
[0020]在各种实施例中,确定缓冲器序列可包括构造存储器寿命矩阵(MLM),其中包括关于算法元件和连接序列的信息。在特定实施例中,MLM可包括表示N个算法元件的N行和表示算法元件之间的M个连接的M列。该方法在各种实施例中可包括其他特征。[0021]示例性实施例
[0022]转到图1,图1是示出系统10的简化框图。系统10包括图形模拟器12,该图形模拟器12可用于设计信号流并将其编程到诸如数字信号处理器(DSP)之类的电子电路上。用于电子电路的信号流的示例性示意图(例如图形表示)13 (一般由箭头指示)被显示在图形模拟器12上。示意图13包括一个或多个算法元件(AE) 14⑴-14(7)(例如,AE14(1)
(S), AE14(2) (S2)…AE14(7) (S7))。这里使用的术语“算法元件(algorithm element)” 包括用于电子电路的信号流的示意图中的组件。组件根据预定的算法处理一个或多个输入信号以提供一个或多个输出信号。每个AE14(1) -14(7)可表示被配置为执行(例如处理、实现等等)特定算法的功能电子组件(例如音频输入、滤波器、动态处理器、频率调制器、振荡器等等)的模拟(例如,匹配;拷贝动作、功能等等;模仿;摹拟;再现;等等)。用户(例如DSP编程者、电路设计者等等)可例如通过利用可用AE和其他图形工件构建示意图13来在图形模拟器12上手动生成示意图13。用户可将AE14(1) -14(7)与图形模拟器12中预配置的SPA相关联,或者根据需要生成定制的SPA。
[0023]AE14(1) - 14(7)可通过连接16(1) - 16(6)与彼此连接以实现特定的信号处理算法(SPA)。连接16(1) - 16(6)可指示到每个AE14(1) - 14(7)的输入和从每个AE14 (I)-14(7)的输出。连接16(1) - 16(6)可表示仿真通过示意图13的信号流的连接序列(CS)。这里使用的术语“连接序列”包括根据示意图中的AE的相应连接来处理这些AE的序列(例如,顺序、进展、串、演变,等等)。在示例性示意图中,AE14(1)接收输入信号,对其进行处理,并在连接16(1)上提供输出信号。连接16(1)上的来自AE14(1)的输出信号可被输入到AE14 ⑵和 14(6)。
[0024]当连接被多于一个AE使用时,连接上的信号的值在这些AE各自的处理期间可被这些AE所共享。AE14⑵和14(6)因此直到AE14(1)已被处理为止不能被处理。连接16 (2)上的来自AE14⑵的输出信号可被输入到AE14(3)和14(4)。AE14(3)直到AE14(4)和14(5)已被处理为止不能被处理,因为来自AE14(5)的输出被输入到AE14(3)。连接16(3)上的来自AE14(4)的输出信号可被输入到AE14(5)。连接16(4)上的来自AE14(5)的输出信号可被输入到AE14(3)。AE14(3)可在连接16(5)上生成输出信号,该输出信号可被输入到AE14(6)。连接16(6)上的来自AE14(6)的输出信号可被输入到AE14(7),AE14(7)可生成输出。
[0025]图形模拟器12可与存储器寿命矩阵(MLM)模块20通信。MLM模块20可与存储器元件22交互,存储器元件22可包括一个或多个存储器缓冲器24(例如缓冲器24 (I) - 24(4))。存储器缓冲器24 (I) -24(4)可用于在AE14(1) - 14(7)的处理期间存储连接16 (I) - 16(6)上的信号的值。“使用”存储器缓冲器可包括从缓冲器读取,和/或向缓冲器写入。MLM模块20还可酌情与处理器26交互。
[0026]在各种实施例中,MLM模块20可促进以存储器高效的方式在图形模拟器12上模拟示意图(例如示意图13)。MLM模块20可(从图形模拟器12)接收关于连接16(1) - 16(6)和相应的AE14⑴-14(7)的信息。AE14⑴-14(7)的特定CS和存储器要求可被MLM模块20用来生成最佳存储器分配方案,其方式例如是通过在不影响图形模拟器12中表示的信号流的功能的情况下对AElMl) - 14(7)和连接16⑴-16(6)重用存储器缓冲器24(1) - 24(4)。MLM模块20可适当地使用缓冲器24 (I) -24(4)来减少在AE14(1) - 14(7)的处理期间被系统10的实施例使用的存储器的量。
[0027]示意图13是示例,只是为了易于例示而示出的,而并不是限制。几乎任意数目的AE都可按任何方式被连接来利用图形模拟器12生成适当的示意图。例如,示意图可涉及执行与可编程DSP相关联的快速傅立叶变换(FFT)、诸如音量控制、定音调等等之类的音频处理的电子电路的一部分。在一般意义上,系统10可用于生成目标代码来在DSP上实现,使得输入到DSP的信号被根据由系统10定义的SPA来处理。
[0028]为了例示系统10的技术,理解比如图1中所示的体系结构那样的给定系统的操作是重要的。以下基本信息可被视为基础,根据该基础可以适当地说明本公开。这种信息只是为了说明而热心提供的,因此不应当以任何方式被解释为限制本公开的宽广范围及其潜在应用。
[0029]具有交互式绘图和可视化能力的图形框图模拟工具可加速DSP信号处理设计。若干种不同的方法可用于图形DSP编程,例如仿真和系统建模;计算机上的有限实时开发;仿真,随后是源代码生成,以及最终交叉编译到DSP ;以及直接DSP对象代码生成。一些DSP编程方法使用框图来开发DSP应用。框图设计被实现在主机计算机上并且允许了设计者在生成或不生成DSP可执行程序的情况下开发DSP应用。
[0030]用于从图形途径开发DSP应用的另一种方法是使用允许在计算机上构造并实现有限实时DSP应用的声卡和视频相机。用于经由图形手段的DSP编程的另一种方法是使用基于计算机的框图,例如图1的示例性示意图,来构造在主机计算机上执行的DSP算法。在已构造了 DSP算法并且仿真产生期望的结果之后,整个框图设计可用于生成在特定目标(例如DSP)上实现仿真的设计的目标代码。
[0031]用于DSP 编程的不例性图形工具是 Analog Device SigmaStudio?。SigmaStudio图形开发工具可对特定的DSP软件进行编程、开发和调整。例如,音频处理块可在示意图中被连线在一起,并且编译器可生成DSP就绪代码和用于设定并调整参数的控制表面。SigmaStudio包括巨大的算法库,其中包括基本的低级别DSP功能和控制块以及诸如滤波、混频和动态处理之类的高级音频处理功能。每个处理器可用的AE被显示在“ToolBox”中并且AE可被拖放到示意图中。每个AE可包含一个或多个引脚(例如输入引脚、输出引脚、控制引脚)以将AE连接在一起。输出引脚可连接到输入引脚,反之亦然。可酌情向AE添加算法(例如将算法与AE相关联),或者从AE中去除算法(或者将算法与AE解除关联)。在创建示意图之后,点击“编译”按钮可使得该工具根据用户输入模拟信号流,并且生成目标代码。
[0032]通常,示意图利用CS中的AE和连接所表示的SPA的目的是处理去到各种AE的有限数目的输入通道以产生有限数目的输出通道。图形工具捕捉该SPA作为信号流。可应对的SPA的复杂度通常受到目标代码要在其上运行的目标DSP的资源的限制。例如,目标DSP的最大存储器、最大中央处理单元(CPU)每秒百万个指令(MIPS)和最大资源时间可限制特定计算系统可应对的最大复杂度。
[0033]例如,SigmaStudio使用基于指针的链接来管理用于处理SPA的存储器要求。在基于指针的链接方案中,每个信号的值被利用唯一指针保存到不同的存储器缓冲器。缓冲器一般用于向和从进程传递数据和在本地存储信息。存储器缓冲器的寿命周期跨越从缓冲器被创建时到其被删除时的时间。如果要在这种典型图形工具中处理图1的示意图13,则去到AE14(1)的输入信号的值将被保存在缓冲器Buff [O]中,该缓冲器Buff [O]将经由指针Ptr [O]来访问。图形模拟器12将根据关联的算法来处理去到AE14(I)的输入信号,并且将连接16(1)上的输出信号的值写入到经由另一指针Ptr[l]可访问的另一缓冲器Buff [I]中。保存到Buff [I]中的值将被用作由AE14(2)指定的算法中的输入,并且连接16(2)上的相应输出信号将被写入到经由另一指针Ptr[2]可访问的另一 Buff [2],等等依此类推。每个信号将与利用唯一指针可访问的唯一缓冲器相关联。
[0034]在一些图形工具版本中,唯一指针可通过将每个缓冲器的大小相继加到BasePointer 值来得出。从而,Ptr [O]可与 BasePointer 相同;Ptr[l]可等于 BasePointer与Buff[0]的大小 的总和;Ptr [2]可等于BasePointer、Buff [O] Buff [I]的总和;等等依此类推。在一些其他图形工具版本中,可额外地使用偏量缓冲器,其可包含到实际缓冲器的偏量。从偏量缓冲器获得的每个偏量与缓冲器的大小(BlockSize)相乘以给出到每个缓冲器的差分指针。实际指针可通过将BasePointer与所得到的值相加来获得。
[0035]一般地,AE j可利用Hi」个输入执行预定的算法Aj以产生η」个输出,消耗Pj的MIPS并且占用1^_的资源。仅关注缓冲器存储器,AE j可被表示为的函数Aj Onj, η」)。考虑U={A」},j=l:N,系统10支持的所有算法的集合。A可表示U的子集
【权利要求】
1.一种方法,包括: 确定用于电子电路的信号流的示意图中的多个算法元件的连接序列,其中所述连接序列指示所述算法元件之间的连接和根据所述连接来处理所述算法元件的序列; 确定缓冲器序列,该缓冲器序列指示使用多个存储器缓冲器来根据所述连接序列处理所述多个算法元件的顺序;以及 根据所述缓冲器序列重用所述多个存储器缓冲器中的至少一些。
2.如权利要求1所述的方法,其中对于每个算法元件,在该算法元件处接收至少一个输入并且由该算法元件生成至少一个输出,其中该至少一个输出可以是去到至少一个其他算法元件的另一输入,其中一个连接提供去到该算法元件的输入,并且另一连接接受来自该算法元件的输出并将该输出作为该另一输入提供给该至少一个其他算法元件,并且其中每个连接与所述存储器缓冲器之一相关联,其中该另一连接上的输出被写入到存储器缓冲器,并且被该至少一个其他算法元件读取作为该另一输入。
3.如权利要求2所述的方法,其中所述缓冲器序列包括根据来自所述算法元件的输出中的每一个被写入到每个存储器缓冲器的序列布置的所述存储器缓冲器的编号列表,其中所述缓冲器序列中的重复的存储器缓冲器号码指示相应存储器缓冲器的缓冲器重用。
4.如权利要求1所述的方法,其中确定所述缓冲器序列包括: 按顺序对所述连接、所述算法元件和所述存储器缓冲器编号; 对于每个连接,识别在任何其他算法元件之前在该连接上生成输出的第一算法元件,并且识别在所有其他算法元件之后在该连接上接收该输出作为输入的第二算法元件;按分配顺序布置所有连接的第一算法元件,其中所述分配顺序包括第一算法元件号码的升序; 根据所述分配顺序生成每个连接的缓冲器索引,其中该连接的缓冲器索引与重用连接的另一缓冲器索引相同,其中该重用连接的第二算法元件与该连接的第一算法元件相同,并且其中所述缓冲器序列包括根据所述分配顺序布置的所有连接的缓冲器索引。
5.如权利要求1所述的方法,其中确定所述缓冲器序列包括: 构造包括N行和M列的第一存储器寿命矩阵(MLM),其中N是使用所述存储器缓冲器的算法元件的数目,并且M是所述连接的数目,其中每一行是根据相应算法元件的号码来命名的,并且每一列是根据相应连接的号码来命名的; 在所述N行中按升序布置N个算法元件,并且在所述M列中按升序布置M个连接;对于所述第一 MLM中的每个单元,如果与该单元的行相对应的算法元件在与该单元的列相对应的连接上生成输出,则标记第一符号,并且如果与该单元的行相对应的算法元件在与该单元的列相对应的连接上接收输入,则标记第二符号;以及 通过重布置所述第一 MLM中的行以使得在任何给定列中所述第一符号出现在所述第二符号之前,来生成第二 MLM。
6.如权利要求5所述的方法,还包括: 生成第一分配列表,该第一分配列表包括一行和与所述MLM的M列相对应的M列,其中所述分配列表中的每个单元包括具有所述第一符号的所述第二 MLM的列所对应的行号;通过根据分配顺序重布置所述第一分配列表的M列来生成第二分配列表,所述分配顺序包括所述第一分配列表中的 行号的升序;生成第一空闲列表,该第一空闲列表包括一行和与所述MLM的M列相对应的M列,其中所述空闲列表中的每个单元包括具有所述第二符号的所述第二 MLM的列所对应的最高行号;以及 通过根据所述分配顺序重布置所述第一空闲列表的M列来生成第二空闲列表。
7.如权利要求6所述的方法,还包括: 对于所述第二分配列表中的每个条目,确定在所述第二空闲列表中是否找到该条目; 识别与所述第二空闲列表中的该条目相对应的连接号码; 释放与所识别的连接相对应的存储器缓冲器;以及 将所释放的存储器缓冲器中的至少一个分配给与所述第二分配列表中的该条目相对应的另一连接。
8.如权利要求1所述的方法,其中确定所述连接序列包括: 识别向一些算法元件提供输入的连接; 识别从一些其他算法元件接受输出的连接;以及 确定在这些算法元件处接收输入和生成输出的顺序。
9.如权利要求1所述的方法,其中所述示意图是在计算设备上利用图形仿真器生成的。
10.如权利要求1所述的方法,其中每个算法元件表示对电子电路的功能组件的模拟,该功能组件被配置为根据预`定算法处理一个或多个输入以生成一个或多个输出。
11.一种编码在非暂态介质中的逻辑,包括供执行的指令,并且所述指令在被处理器执行时能够执行操作,所述操作包括: 确定用于电子电路的信号流的示意图中的多个算法元件的连接序列,其中所述连接序列指示所述算法元件之间的连接和根据所述连接来处理所述算法元件的序列; 确定缓冲器序列,该缓冲器序列指示使用多个存储器缓冲器来根据所述连接序列处理所述多个算法元件的顺序;以及 根据所述缓冲器序列重用所述多个存储器缓冲器中的至少一些。
12.如权利要求11所述的逻辑,其中确定所述缓冲器序列包括: 按顺序对所述连接、所述算法元件和所述存储器缓冲器编号; 对于每个连接,识别在任何其他算法元件之前在该连接上生成输出的第一算法元件,并且识别在所有其他算法元件之后在该连接上接收该输出作为输入的第二算法元件;按分配顺序布置所有连接的第一算法元件,其中所述分配顺序包括第一算法元件号码的升序; 根据所述分配顺序生成每个连接的缓冲器索引,其中该连接的缓冲器索引与重用连接的另一缓冲器索引相同,其中该重用连接的第二算法元件与该连接的第一算法元件相同,并且其中所述缓冲器序列包括根据所述分配顺序布置的所有连接的缓冲器索引。
13.如权利要求11所述的逻辑,其中确定所述缓冲器序列包括: 构造包括N行和M列的第一 MLM,其中N是使用所述存储器缓冲器的算法元件的数目,并且M是所述连接的数目,其中每一行是根据相应算法元件的号码来命名的,并且每一列是根据相应连接的号码来命名的; 在所述N行中按升序布置N个算法元件,并且在所述M列中按升序布置M个连接;对于所述第一 MLM中的每个单元,如果与该单元的行相对应的算法元件在与该单元的列相对应的连接上生成输出,则标记第一符号,并且如果与该单元的行相对应的算法元件在与该单元的列相对应的连接上接收输入,则标记第二符号;以及 通过重布置所述第一 MLM中的行以使得在任何给定列中所述第一符号出现在所述第二符号之前,来生成第二 MLM。
14.如权利要求13所述的逻辑,其中确定所述缓冲器序列还包括: 生成第一分配列表,该第一分配列表包括一行和与所述MLM的M列相对应的M列,其中所述分配列表中的每个单元包括具有所述第一符号的所述第二 MLM的列所对应的行号;通过根据分配顺序重布置所述第一分配列表的M列来生成第二分配列表,所述分配顺序包括所述第一分配列表中的行号的升序; 生成第一空闲列表,该第一空闲列表包括一行和与所述MLM的M列相对应的M列,其中所述空闲列表中的每个单元包括具有所述第二符号的所述第二 MLM的列所对应的最高行号;以及 通过根据所述分配顺序重布置所述第一空闲列表的M列来生成第二空闲列表。
15.如权利要求14所述的逻辑,其中确定所述缓冲器序列还包括: 对于所述第二分配列表中的每个条目,确定在所述第二空闲列表中是否找到该条目; 识别与所述第二空闲列表中的该条目相对应的连接号码; 释放与所识别的连接相对应的存储器缓冲器;以及 将所释放的存储器缓冲器中的至少一个分配给与所述第二分配列表中的该条目相对应的另一连接。`
16.一种装置,包括: 用于存储数据的存储器元件,其中所述存储器元件包括多个存储器缓冲器;以及可操作用于执行与所述数据相关联的指令的处理器,其中所述处理器和所述存储器元件协作,使得所述装置被配置用于: 确定用于电子电路的信号流的示意图中的多个算法元件的连接序列,其中所述连接序列指示所述算法元件之间的连接和根据所述连接来处理所述算法元件的序列; 确定缓冲器序列,该缓冲器序列指示使用所述多个存储器缓冲器来根据所述连接序列处理所述多个算法元件的顺序;以及 根据所述缓冲器序列重用所述多个存储器缓冲器中的至少一些。
17.如权利要求16所述的装置,其中确定所述缓冲器序列包括: 按顺序对所述连接、所述算法元件和所述存储器缓冲器编号; 对于每个连接,识别在任何其他算法元件之前在该连接上生成输出的第一算法元件,并且识别在所有其他算法元件之后在该连接上接收该输出作为输入的第二算法元件;按分配顺序布置所有连接的第一算法元件,其中所述分配顺序包括第一算法元件号码的升序; 根据所述分配顺序生成每个连接的缓冲器索引,其中该连接的缓冲器索引与重用连接的另一缓冲器索引相同,其中该重用连接的第二算法元件与该连接的第一算法元件相同,并且其中所述缓冲器序列包括根据所述分配顺序布置的所有连接的缓冲器索引。
18.如权利要求16所述的装置,其中确定所述缓冲器序列包括:构造包括N行和M列的第一 MLM,其中N是使用所述存储器缓冲器的算法元件的数目,并且M是所述连接的数目,其中每一行是根据相应算法元件的号码来命名的,并且每一列是根据相应连接的号码来命名的; 在所述N行中按升序布置N个算法元件,并且在所述M列中按升序布置M个连接;对于所述第一 MLM中的每个单元,如果与该单元的行相对应的算法元件在与该单元的列相对应的连接上生成输出,则标记第一符号,并且如果与该单元的行相对应的算法元件在与该单元的列相对应的连接上接收输入,则标记第二符号;以及 通过重布置所述第一 MLM中的行以使得在任何给定列中所述第一符号出现在所述第二符号之前,来生成第二 MLM。
19.如权利要求18所述的装置,其中确定所述缓冲器序列还包括: 生成第一分配列表,该第一分配列表包括一行和与所述MLM的M列相对应的M列,其中所述分配列表中的每个单元包括具有所述第一符号的所述第二 MLM的列所对应的行号;通过根据分配顺序重布置所述第一分配列表的M列来生成第二分配列表,所述分配顺序包括所述第一分配列表中的行号的升序; 生成第一空闲列表,该第一空闲列表包括一行和与所述MLM的M列相对应的M列,其中所述空闲列表中的每个单元包括具有所述第二符号的所述第二 MLM的列所对应的最高行号;以及 通过根据所述分配顺序重布置所述第一空闲列表的M列来生成第二空闲列表。
20.如权利要求19所述的装置,其中确定所述缓冲器序列还包括: 对于所述第二分配列表中的每个条目,确定在所述第二空闲列表中是否找到该条目; 识别与所述第二空闲列表中的该条目相对应的连接号码; 释放与所识别的连接相对应的存储器缓冲器;以及 将所释放的存储 器缓冲器中的至少一个分配给与所述第二分配列表中的该条目相对应的另一连接。
【文档编号】G06F9/50GK103870335SQ201310631327
【公开日】2014年6月18日 申请日期:2013年12月2日 优先权日:2012年11月30日
【发明者】M·查利尔, J·约瑟夫 申请人:美国亚德诺半导体公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1