一种可编程内插滤波器装置及其实现方法

文档序号:7509712阅读:249来源:国知局
专利名称:一种可编程内插滤波器装置及其实现方法
技术领域
本发明涉及一种集成电路设计领域、FPGA设计领域和通信领域中的装置和方法,具体地说,涉及一种用于软件无线电中数字前端信号处理时基于RAM的可编程内插滤波器的VLSI和FPGA设计的装置和方法。
背景技术
随着集成电路技术的日益发展,在无线通信技术中,数字(或软件)处理的范围不断向射频部分迁移,使以前只能用模拟电路实现的功能逐步用数字电路或软件来实现,从而产生了软件无线电(Software Defined Radio,SDR)这门新兴学科分支。采用软件无线电技术,可以在不改变硬件平台的情况下灵活地在多种通信制式中进行切换,同时具有模拟技术无法比拟的优越性能。
内插滤波器在通信系统的数字前端中有着广泛的应用,其作用是根据实际的需要,将数据的采样频率提高若干倍,同时滤除由于提高数据的采样频率而带来的镜像干扰。
现有技术的整数倍内插滤波器的原理如下设原来的采样率为fs,周期为T,如果将采样率增加到L倍,那么新的采样率fs1和采样周期T1分别为fs1=Lfs,T1=1/fs1=T/L把采样信号x(n)的采样率增加到原来的L倍意味着必须在x(n)的每两个样值之间插入L-1个新的采样值,因此采样值增加的过程在数学上就是内插的过程。
目前现有的内插滤波器主要是固定系数、固定内插倍数的滤波器,实现的方法主要有两种,一是直接在每个输入数据后面插入L-1个0值,用一个运行在Lfs采样频率上的有限冲击响应FIR滤波器来实现,这个FIR滤波器可以是直接型或转置型,具体结构现有技术已经有大量文献描述,在此不再赘述;二是用多相滤波器来实现,在每个输入数据后面不插入0值,而是将整个内插滤波器分解成L相,每相产生一个输出。
当固定了系数和内插倍数时,以上两种结构实现起来还是很方便的,但会占用较大的硬件资源,尤其是在滤波器阶数较高的时候更加不利,而且软件无线电所强调的灵活性在现有技术中无法体现出来。
因此,现有技术还存在缺陷,而有待于改进和发展。

发明内容
本发明的目的在于提供一种可编程内插滤波器装置及其实现方法,针对上述现有技术的不足,通过将采样数据和滤波器的系数各自保存在一定大小的RAM中,从而可灵活改变内插倍数、滤波器的阶数和调整滤波器的系数数值,同时采用流水线和时分复用技术,可大大减少所占用的硬件资源。
本发明的技术方案包括一种可编程内插滤波器装置,其中,所述装置包括一输入数据产生单元、一系数产生单元、一计算单元和一输出单元;所述输入数据单元用于将输入的采样数据保存在数据RAM中,并提供给计算单元处理;所述系数单元用于寻址,产生系数给所述计算单元;所述计算单元用于完成内插滤波器的乘加运算;所述输出单元用于根据设置的抽取倍数对内插的数据进行抽取,产生所需的采样率的输出数据。
所述的装置,其中,所述内插滤波器的内插用多相滤波器实现,用于实现不同内插倍数、不同系数个数及系数数值的内插滤波。
所述的装置,其中,所述计算单元包括至少两个相同结构的乘加器,用于提高该滤波器的计算能力,处理阶数更高的滤波计算。
所述的装置,其中,所述输入数据产生单元包括有两个输入双口RAM和对应的输入存取控制逻辑电路;所述输入双口RAM用于缓存来自外部的采样数据,每个输入双口RAM分为两侧端口,一侧用于接收来自外部的数据实现只写功能,另一侧则用于输出数据实现只读功能;所述输入存取控制逻辑电路包括一个计数器,当来自外部的采样数据保存到输入双口RAM时,用该计数器对输入的采样数据个数进行计数,并根据计数器的数值分奇偶轮流写入到所述两输入双口RAM中;所述输入存取控制逻辑电路还包括一个已写标志位的处理电路,用于表明该位是否被赋过确定的数值。
所述的装置,其中,所述系数产生单元包括有两个系数双口RAM和系数存取控制逻辑电路;
所述系数双口RAM用于存放系数,其输出分别送到所述计算单元的两个乘加器;每个系数双口RAM包括两侧端口,外部通过一侧端口对该内插滤波器的系数进行配置;另一侧端口由该内插滤波器内部访问,只有读操作;所述系数存取控制逻辑电路对两个系数双口RAM的访问进行读写控制。
所述的装置,其中,所述系数的写入顺序为线性写入,即按照地址从小到大写入;所述系数的读出顺序是二维,先从左到右,再从上到下。
所述的装置,其中,所述计算单元还包括加法器、流水线控制逻辑电路;所述乘加器包括乘法器和累加器,所述乘法器用于完成数据和系数的相乘,两个乘加器并行计算;所述加法器用于将两个乘加器的计算结果相加,产生一个有效的输出值,同时要将这两个累加器清零;所述流水线控制逻辑电路使所述计算单元实现流水线操作,用于在每个时钟周期,将输入一组对应的系数和数据,通过流水线的控制逻辑中的寄存器以及相关的节拍计数器,实现流水线操作。
所述的装置,其中,所述输出单元包括抽取逻辑电路和输出控制逻辑电路;所述抽取逻辑电路用于完成预定倍数抽取,当每个乘加器完成了半数次运算后,将内插滤波器产生一个控制信号,输出单元响应此控制信号,并根据抽取倍数,在每倍数个数据中取一个输出;所述输出控制逻辑电路用于在抽取逻辑电路产生输出时,产生适当的控制信号,告诉外界有新的数据输出。
一种可编程内插滤波器装置的实现方法,基于RAM,其包括以下步骤A、完成配置内插倍数、抽取倍数和多相滤波器的每相系数个数,并将系数个数写入到两个系数双口RAM中;B、输入1个数据,所述输入双口RAM之一的地址初值指针加1,并将该数据保存到该输入双口RAM中,另一输入双口RAM中的内容保持不变,地址初值指针也保持不变;C、从系数双口RAM之一中取出系数,该系数双口RAM的地址指针加内插倍数,从所述输入双口RAM之一中取出数据送到乘加器之一的计算单元进行乘加运算,所述输入双口RAM的地址指针减一;D、从另一系数双口RAM中取出系数,该另一系数双口RAM的地址指针加内插倍数,对应从另一输入双口RAM中取出数据送到计算单元的另一乘加器进行乘加运算,该另一输入双口RAM的地址指针减一;
E、重复步骤C、步骤D次数不超过系数个数的一半;F、将两个乘加器计算得到的累加结果输出,产生控制信号通知输出单元,并对该累加器清零。
所述的方法,其中,所述步骤F中,所述输出单元根据抽取倍数值确定是否输出该值,如果所述计算单元输出的数据个数未达到内插倍数,则继续重复步骤C到步骤F。
所述的方法,其中,还包括G、如果再有新的数据输入时,则交替使用两个输入双口RAM,两个系数双口RAM。
本发明所提供的一种可编程内插滤波器装置及其实现方法,与现有的技术相比,由于是基于RAM的设计,并采用了流水线和时分复用技术,大大节省了硬件资源,也能使芯片运行的时钟频率超过100MHz,达到150MHz以上,当应用到通信系统的数字前端系统中,可提高系统的性能以及设计的灵活性。


图1是本发明的可编程内插滤波器的组成结构示意图;图2是本发明方法的系数二维矩阵示意图;图3是本发明装置和方法的计算单元结构示意图。
具体实施例方式
以下结合附图,将对本发明的各较佳实施例进行较为详细的说明。
本发明方法的核心构思为,在内插滤波器中,设L为内插倍数,M为抽取倍数,只要L>M,且分数L/M不可约分,则该滤波器可以方便实现L/M倍内插,从而实现整数倍和大于1的小数倍内插滤波。
本发明可编程内插滤波器装置的操作步骤包括该可编程的内插滤波器先完成L倍内插,再完成M倍抽取。L倍内插用多相滤波器来实现内插,每相产生一个输出,共L相。M倍抽取是从M个数据中抽取一个数据作为输出。
该内插滤波器包括4个部分,分别是输入数据产生单元、系数产生单元、计算单元和输出单元,如图1所示。其中,所述输入数据产生单元将输入的采样数据保存在数据RAM中,并提供给计算单元处理;所述系数产生单元正确寻址,产生系数给所述计算单元;计算单元完成内插滤波器的乘加运算,它由两个相同结构的乘加器(MAC)组成,分别叫MAC1和MAC2,之所以用两个MAC单元,主要是为提高该滤波器的计算能力,能处理阶数更高的滤波计算。如果要获得更大的计算能力,只需要将MAC的个数简单扩展即可;所述输出单元根据设置的抽取倍数M对内插的数据进行抽取(在M=1时不抽取),产生所需的采样率的输出数据。
该内插滤波器的L倍内插采用多相滤波器来实现,但可以实现不同内插倍数、不同系数个数及系数数值的内插滤波。
所述输入数据产生单元是为计算单元提供输入数据,它包含有两个输入双口RAM和输入存取控制逻辑电路。
输入双口RAM用于缓存来自外部的采样数据,分别记为DRAM1和DRAM2。在每个DRAM分为PORTA、PORTB两侧,PORTA侧接收来自外部的数据(只写),PORTB侧输出数据(只读)。
所述输入存取控制逻辑电路包括一个计数器,当来自外部的采样数据保存到DRAM时,用计数器对输入的采样数据个数进行计数。然后根据计数器的数值分奇偶轮流写入到这两块DRAM中,先DRAM1后DRAM2。MAC1和MAC2的输入数据取自DRAM的PORTB侧,每个时钟周期取一个。
所述输入存取控制逻辑电路还包括一个dirty标志位的处理电路。因为是用RAM来实现对数据的保存,该电路上电复位后RAM中的初始值不确定,因此需要给每个存储单元增加一个已写标志位即dirty,表明该位是否被赋过确定的数值。它的初始值为0,读出某个存储单元时,也要读出该dirty标志位,如果为0,则表明相应的存储单元中未有确定值,则给相应的MAC发送0值,否则发送该存储单元数值,写该存储单元时,同时将相应的dirty标志位置1。
本发明所述系数产生单元用于为计算单元提供系数,它包含有两个系数双口RAM和系数存取控制逻辑电路。所述系数产生单元中的两个系数双口RAM用来存放系数,分别记为CRAM1和CRAM2,其输出分别送到计算单元的MAC1和MAC2。每个CRAM分为PORTA、PORTB两侧,外部通过CRAM的PORTA对该滤波器的系数进行配置;PORTB是由滤波器内部访问,只有读操作。
所述系数存取控制逻辑电路对CRAM1和CRAM2的访问进行控制。对CRAM1和CRAM2的写操作比较简单,在内插滤波器开始运行之前将系数写入到CRAM1和CRAM2即可,而要从CRAM1和CRAM2中取出系数相对要复杂一些。
对所述系数的读出是基于以下原理因为该内插滤波器是用多相滤波器实现多倍内插,假设倍数为L,因此该多相滤波器共有L相,每相有N个系数,因此这个多相滤波器的系数可以构建二维系数矩阵,该矩阵的行数L即是内插的倍数,列数可以看做每相的系数个数,每相的系数有N个,则该多相滤波器的总系数个数为L×N,即构成L×N的矩阵,本发明所述系数的二维矩阵见图2所示,其中阴影部分和非阴影部分系数分别保存在CRAM2和CRAM1中。
在本发明装置和方法的PORTB侧取出系数时,与PORTA侧写入的顺序不同,在PORTA侧写入的顺序是线性写入的,即按照地址从小到大写入。而PORTB侧读出的顺序是二维的,根据图2所示,系数读出顺序是先从左到右(按照k值读取),再从上到下(按照m值读取),即每当有采样数据输入,启动滤波器运算时,先从矩阵的第一行的第一个元素(元素0)开始,从左到右取完第一行,再从矩阵的第二行开始仍是从左到右取完第二行,依此类推。
根据不同的L和N值,可以产生不同的二维系数矩阵,从而实现了不同内插倍数和系数个数的可编程内插滤波器中的L倍内插。
本发明所述的计算单元是用于将来自DRAM和CRAM的数据相乘,并与前一个时钟周期的MAC计算得到的累加值进行累加。该计算单元由两个MAC(乘加器)单元、加法器、流水线控制逻辑电路以及一些其它控制逻辑电路组成。
所述乘加器单元MAC由乘法器和累加器组成,乘法器完成数据和系数的相乘,数据和系数都是有符号数,相乘的结果也是有符号数。每个MAC结构相同,并行计算。如前面所述,每相的系数个数为N,这说明每个输出要经过N次MAC(乘加)运算。
加法器用来将MAC的计算结果相加。当每个MAC累加到N/2次时,因为有两个MAC同时运算,只是各自取不同的数据和系数,但两个MAC加起来要运算N次,将两个MAC的累加器的输出由加法器相加,将产生一个有效的输出值,同时要将这两个累加器清零。
所述流水线控制逻辑电路使MAC计算单元实现了流水线操作,在每个时钟周期,将输入一组对应的系数和数据,通过流水线的控制逻辑中的寄存器以及相关的节拍计数器,从而实现了流水线操作。
当多相滤波器的每相的系数个数N为奇数时,MAC2将比MAC1少运算一次,此时要将送到MAC2的系数值要赋为0值,两个MAC单元仍同时计算,只是MAC2的运算没有实际用处,这样会减少设计的复杂度。
本发明的输出单元包括抽取逻辑电路和输出控制逻辑电路。所述抽取逻辑电路用于完成M倍抽取,当每个MAC单元完成了N/2次运算后,将内插滤波器产生一个控制信号,输出单元响应此控制信号,并根据抽取倍数(M值),在每M个数据中取1个输出。
在抽取逻辑电路产生输出时,用输出控制逻辑电路产生适当的控制信号,告诉外界有新的数据输出。
本发明所述可编程内插滤波器实现方法基于RAM,其具体实现步骤包括A、完成配置内插倍数L、抽取倍数M和多相滤波器的每相系数个数N,并将系数写入到CRAM1和CRAM2中;B、输入1个数据,DRAM1的地址初值指针加1,并将该数据将保存到DRAM1中,DRAM2中的内容保持不变,地址初值指针也保持不变;C、从CRAM1中取出系数,CRAM1的地址指针加L。从DRAM1中取出数据送到MAC1计算单元进行乘加运算,DRAM1的地址指针减一(循环寻址);D、从CRAM2中取出系数,CRAM2的地址指针加L。从DRAM2中取出数据送到MAC2计算单元进行乘加运算,DRAM2的地址指针减一(循环寻址);E、如果步骤C、D重复的次数小于N/2次,则继续重复这两步,否则进入步骤F;F、将两个MAC单元计算得到的累加结果输出,产生控制信号通知输出单元,并对该累加器清零。所述输出单元根据M值确定是否输出该值。如果计算单元输出的数据个数未达到L个,则继续重复步骤C到步骤F,否则进入步骤G;G、如果有新的数据输入,则处理过程类似步骤B到步骤F,所不同的是在步骤B中,DRAM2的地址指针初值增一,将数据写入到DRAM2中,DRAM1的地址初值指针仍保持原值,同时将DRAM1的输出与CRAM2的输出相乘,如此交替进行,如果没有新的数据,则等待。
本发明方法的可编程内插滤波器的时分复用表现在两个方面一是多相滤波器的每相的时分复用,对于L倍的内插滤波,用多相滤波器来实现则共有L相,而在具体实现这L相运算时,用一个计算单元来完成,每计算完一相并输出一个数据后,将取出新的一组系数和输入采样数据,计算新的一相,共重复L次;二是计算单元用2个MAC完成N次乘加运算,其中N为多相滤波器的每相系数个数,其中每个MAC单元进行N/2次运算。
经过上面两次时分复用,本发明方法的所有L×N次乘加运算只用两个乘加计算单元(MAC1和MAC2)来完成,不过前提是内插滤波器的运行时钟频率是输入数据的采样频率的T×N/2倍,因此,又将用到流水线技术使该滤波器工作在较高的时钟频率上。
如图1所示的实现了本发明方法的一个可编程内插滤波器,在实现前面描述的可编程内插滤波器时,数据RAM的深度可以设为32,由于有两个MAC计算单元,则多相滤波器的每相系数个数最大可以设为64(32×2)。系数RAM(CRAM)实际使用时可以将其总深度设为256,每个CRAM深度为128,根据内插倍数的不同,实现不同的二维系数矩阵。限定L为16,M值也限定为16,则该滤波器的内插倍数1≤L/M≤16。因此,内插滤波器最大抽头数为256,即用两个MAC计算单元完成255阶内插滤波器的计算。
下面描述的本发明装置和方法的较佳实施例中,所述可编程的内插滤波器用于CDMA基站中,将下行链路基带信号(相对中频而言)进行上变频,将输入的信号采样频率由1.2288MHz通过该内插滤波器的4倍内插上变频到4.9152MHz,每相系数个数N为20,因此该内插滤波器的总抽头数是80(20×4),滤波器的时钟频率为49.152MHz,则意味着所述多相滤波器的每相系数个数N=20,内插倍数L=4,抽取倍数M=1;每40个时钟周期输入一个数据;每10个时钟周期内插滤波器要产生一个输出;每个输出要经过20次MAC单元的计算;每个MAC计算10次。
如果觉得时钟频率过高,可以增加MAC单元的数量,比如MAC增加为4个,则时钟频率下降一半,该内插滤波器的结构可以方便地进行扩展。
根据图2所示,对本发明方法的系数矩阵进行分配,则此时为4×20的矩阵,第1、3、5、…19列分配到CRAM1中,第2、4、6、…20列分配到CRAM2中。
在每次有数据输入到可编程内插滤波器的时候,将输入一个data_valid指示信号,通知内插滤波器接收数据;而内插滤波器输出的时候也将产生一个类似的data_valid信号,表明有结果从内插滤波器输出。
计算单元按照图3所示结构来实现,计算单元的MAC用四级流水线来实现,每个时钟周期流水线前进一拍。当输入数据出现在计算单元的输入端时,将延迟4个时钟周期后,计算结果保存在累加器中。当完成了10次累加后,将累加器的内容送到加法器中相加,相加得到的结果即是计算单元的一个输出结果,同时要将累加器的内容清空。如图3中所示的寄存器起到节拍划分的作用,共有四级处理第1级,完成系数和数据的取绝对值运算,并提取符号位;第2级,完成无符号的乘法运算;第3级,将得到的乘积转换成有符号数;第4级,完成累加运算。
其中,CRAM1与MAC1对应,CRAM2与MAC2对应,且对应关系固定。此时参数N为偶数,MAC1和MAC2运算次数相同,均为10次。由于此时M=1,完成的是整数倍内插,无抽取操作,输出单元直接将来自计算单元的结果输出到内插滤波器的外部。
本发明的可编程内插滤波器装置及其实现方法,与现有的技术相比,由于是基于RAM的设计,并采用了流水线和时分复用技术,大大节省了硬件资源,也能使芯片运行的时钟频率超过100MHz,达到150MHz以上,当应用到通信系统的数字前端系统中,可提高系统的性能以及设计的灵活性。
应当理解的是,上述针对具体实施例的描述较为详细,并不能因此而理解为本发明专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。
权利要求
1.一种可编程内插滤波器装置,其特征在于,所述装置包括一输入数据产生单元、一系数产生单元、一计算单元和一输出单元;所述输入数据单元用于将输入的采样数据保存在数据RAM中,并提供给计算单元处理;所述系数单元用于寻址,产生系数给所述计算单元;所述计算单元用于完成内插滤波器的乘加运算;所述输出单元用于根据设置的抽取倍数对内插的数据进行抽取,产生所需的采样率的输出数据。
2.根据权利要求1所述的装置,其特征在于,所述内插滤波器的内插用多相滤波器实现,用于实现不同内插倍数、不同系数个数及系数数值的内插滤波。
3.根据权利要求2所述的装置,其特征在于,所述计算单元包括至少两个相同结构的乘加器,用于提高该滤波器的计算能力,处理阶数更高的滤波计算。
4.根据权利要求3所述的装置,其特征在于,所述输入数据产生单元包括有两个输入双口RAM和对应的输入存取控制逻辑电路;所述输入双口RAM用于缓存来自外部的采样数据,每个输入双口RAM分为两侧端口,一侧用于接收来自外部的数据实现只写功能,另一侧则用于输出数据实现只读功能;所述输入存取控制逻辑电路包括一个计数器,当来自外部的采样数据保存到输入双口RAM时,用该计数器对输入的采样数据个数进行计数,并根据计数器的数值分奇偶轮流写入到所述两输入双口RAM中;所述输入存取控制逻辑电路还包括一个已写标志位的处理电路,用于表明该位是否被赋过确定的数值。
5.根据权利要求4所述的装置,其特征在于,所述系数产生单元包括有两个系数双口RAM和系数存取控制逻辑电路;所述系数双口RAM用于存放系数,其输出分别送到所述计算单元的两个乘加器;每个系数双口RAM包括两侧端口,外部通过一侧端口对该内插滤波器的系数进行配置;另一侧端口由该内插滤波器内部访问,只有读操作;所述系数存取控制逻辑电路对两个系数双口RAM的访问进行读写控制。
6.根据权利要求5所述的装置,其特征在于,所述系数的写入顺序为线性写入,即按照地址从小到大写入;所述系数的读出顺序是二维,先从左到右,再从上到下。
7.根据权利要求6所述的装置,其特征在于,所述计算单元还包括加法器、流水线控制逻辑电路;所述乘加器包括乘法器和累加器,所述乘法器用于完成数据和系数的相乘,两个乘加器并行计算;所述加法器用于将两个乘加器的计算结果相加,产生一个有效的输出值,同时要将这两个累加器清零;所述流水线控制逻辑电路使所述计算单元实现流水线操作,用于在每个时钟周期,将输入一组对应的系数和数据,通过流水线的控制逻辑中的寄存器以及相关的节拍计数器,实现流水线操作。
8.根据权利要求7所述的装置,其特征在于,所述输出单元包括抽取逻辑电路和输出控制逻辑电路;所述抽取逻辑电路用于完成预定倍数抽取,当每个乘加器完成了半数次运算后,将内插滤波器产生一个控制信号,输出单元响应此控制信号,并根据抽取倍数,在每倍数个数据中取一个输出;所述输出控制逻辑电路用于在抽取逻辑电路产生输出时,产生适当的控制信号,告诉外界有新的数据输出。
9.一种可编程内插滤波器装置的实现方法,基于RAM,其包括以下步骤A、完成配置内插倍数、抽取倍数和多相滤波器的每相系数个数,并将系数个数写入到两个系数双口RAM中;B、输入1个数据,所述输入双口RAM之一的地址初值指针加1,并将该数据保存到该输入双口RAM中,另一输入双口RAM中的内容保持不变,地址初值指针也保持不变;C、从系数双口RAM之一中取出系数,该系数双口RAM的地址指针加内插倍数,从所述输入双口RAM之一中取出数据送到乘加器之一的计算单元进行乘加运算,所述输入双口RAM的地址指针减一;D、从另一系数双口RAM中取出系数,该另一系数双口RAM的地址指针加内插倍数,对应从另一输入双口RAM中取出数据送到计算单元的另一乘加器进行乘加运算,该另一输入双口RAM的地址指针减一;E、重复步骤C、步骤D次数不超过系数个数的一半;F、将两个乘加器计算得到的累加结果输出,产生控制信号通知输出单元,并对该累加器清零。
10.根据权利要求9所述的方法,其特征在于,所述步骤F中,所述输出单元根据抽取倍数值确定是否输出该值,如果所述计算单元输出的数据个数未达到内插倍数,则继续重复步骤C到步骤F。
11.根据权利要求10所述的方法,其特征在于,还包括G、如果再有新的数据输入时,则交替使用两个输入双口RAM,两个系数双口RAM。
全文摘要
本发明公开了一种可编程内插滤波器装置及其实现方法,所述装置包括一输入数据产生单元、一系数产生单元、一计算单元和一输出单元;所述输入数据单元用于将输入的采样数据保存在数据RAM中,并提供给计算单元处理;所述系数单元用于寻址,产生系数给所述计算单元;所述计算单元用于完成内插滤波器的乘加运算;所述输出单元用于根据设置的抽取倍数对内插的数据进行抽取,产生所需的采样率的输出数据。本发明装置及其实现方法由于是基于RAM的设计,并采用了流水线和时分复用技术,大大节省了硬件资源,当应用到通信系统的数字前端系统中,可提高系统的性能以及设计的灵活性。
文档编号H03H17/02GK1992517SQ200510132579
公开日2007年7月4日 申请日期2005年12月26日 优先权日2005年12月26日
发明者叶辉 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1