一种用于执行浮点指数运算的方法及装置

文档序号:25037312发布日期:2021-05-11 17:10阅读:93来源:国知局
一种用于执行浮点指数运算的方法及装置

本发明涉及指数运算的技术领域,具体涉及一种用于执行浮点指数运算的装置和方法。



背景技术:

在现实生活中,很多方面都需要用到指数函数的计算。例如:航空领域的飞行器控制、语音传输和导航等方面;航天领域的图像、实时信息传输等方面;金融领域的计算利息中的复利时也涉及高精度浮点指数函数的计算。提高指数运算的精度和计算速度,对实际应用有着重要的意义。

而在集成电路的设计中,由于制造工艺、芯片面积等条件的限制,传统的浮点指数硬件运算单元架构简单、速度慢,难以满足计算需求,因此在实际中多结合数学变换和软件方法实现浮点指数运算。这种方式容易实现,但是运行效率不高,在高精度的计算要求下将成为难以突破的计算瓶颈。



技术实现要素:

本发明针对上述问题,提供了一种用于执行浮点指数运算的方法及装置,利用新型改进四次预测cordic算法,在一个时钟周期内预测出四个迭代方向值,效率提高了四倍。

本发明的技术方案如下:提供一种用于执行浮点指数运算的方法,步骤为:

s1、预处理:包括异常处理和输入值预处理两部分,先将输入的浮点指数函数m×2e拆分为符号位s、指数e和尾数m,根据指数e检测浮点指数函数是否存在异常,如果输入值不存在异常,假设浮点指数函数m×2e的计算结果尾数部分为x,指数部分为y,所述指数部分y为尾数m乘以(ln2)-1并向左移动e位,根据cordic算法的收敛要求,将尾数部分x通过求2x得到,满足公式根据2x定义148位宽num1,具体为:num1=m×2e-y×ln2+ln2,通过乘法器将num1进行移位拼合得到num2;

s2、指数函数尾数迭代:接收s1预处理得到的num2,通过四次预测cordic算法对输入值num2进行x数据通路、y数据通路和z数据通路的四次预测迭代计算,得到输出136位的x值和y值,将x值和y值输入加法器中运算得到2x的运算结果,进而得到计算结果尾数值x;

s3、浮点规则化:将步骤s1、s2处理得到的尾数值x和指数值y进行前导零检测,然后通过移位运算换成标准浮点格式,最后与符号位s合并进行规格化格式输出。

进一步的,所述步骤s2中四次预测cordic算法的计算公式为:

其中,σi,σi+1,σi+2,σi+3为取值为-1或1的符号因子,代表当次迭代的预测旋转方向,i表示四次预测迭代次数,θi,θi+1,θi+2,θ3表示四个旋转角度,xi,yi,zi表示第i次四次预测迭代x数据通路、y数据通路、z数据同理的初始值,xi+4,yi+4,zi+4表示第i次四次预测迭代x数据通路、y数据通路、z数据通路的迭代结果。

进一步的,所述步骤s2中通过四次预测cordic算法对x数据通路、y数据通路和z数据通路进行四次预测迭代计算的实现过程为:

(1)遍历σi,σi+1,σi+2,σi+3各自取值-1或1,形成共16种σi,σi+1,σi+2,σi+3取值,z数据通路根据16种σi,σi+1,σi+2,σi+3取值计算对应的z值;

(2)通过选取z的16种结果中最逼近0的作为本次四次预测迭代的数值ite_z,而对应的σi,σi+1,σi+2,σi+3作为本次四次预测迭代的预测旋转方向s=[σi,σi+1,σi+2,σi+3]输出到x数据通路和y数据通路,x数据通路和y数据通路根据传递来的旋转方向s=[σi,σi+1,σi+2,σi+3]进行计算,得到本次四次预测迭代的结果x值和y值。

进一步的,步骤s2中通过四次预测cordic算法对x数据通路、y数据通路和z数据通路进行四次预测迭代计算的第二种实现过程为:

(1)遍历σi,σi+1,σi+2,σi+3各自取值-1或1,形成共16种σi,σi+1,σi+2,σi+3取值,x数据通路、y数据通路和z数据通路分别以每个σi,σi+1,σi+2,σi+3取值进行并行计算,同时产生16组迭代结果;

(2)通过选取z数据通路的16种结果中最逼近0的作为本次四次预测迭代的数值ite_z,,然后将ite_z结果对应的σi,σi+1,σi+2,σi+3产生的x数据通路迭代结果x值和y数据通路迭代结果y值直接作为本次四次预测迭代的结果。

本发明的另一方面,提供一种用于执行浮点指数运算的装置,包括:

预处理模块:用于对输入的浮点指数函数进行异常处理和输入值预处理,先将输入的浮点指数函数m×2e拆分为符号位s、指数e和尾数m,根据指数e检测浮点指数函数是否存在异常,如果输入值不存在异常,假设浮点指数函数m×2e的计算结果尾数部分为x,指数部分为y,所述指数部分y为尾数m乘以(ln2)-1并向左移动e位,根据cordic算法的收敛要求,将尾数部分x通过求2x得到,满足公式根据2x定义148位宽num1,具体为:num1=m×2e-y×ln2+ln2,通过乘法器将num1进行移位拼合得到num2;

指数函数尾数迭代模块:用于接收s1预处理得到的num2,通过四次预测cordic算法对输入值num2进行x数据通路、y数据通路和z数据通路的四次预测迭代计算,得到输出136位的x值和y值,将x值和y值输入加法器中运算得到2x的运算结果,进而得到计算结果尾数值x;

浮点规则化模块:用于将步骤s1、s2处理得到的尾数值x和指数值y进行前导零检测,然后通过移位运算换成标准浮点格式,最后与符号位s合并进行规格化格式输出。

进一步的,所述指数函数尾数迭代模块中四次预测cordic算法的计算公式为:

其中,σi,σi+1,σi+2,σi+3为取值为-1或1的符号因子,代表当次迭代的预测旋转方向,i表示四次预测迭代次数,θi,θi+1,θi+2,θ3表示四个旋转角度,xi,yi,zi表示第i次四次预测迭代x数据通路、y数据通路、z数据同理的初始值,xi+4,yi+4,zi+4表示第i次四次预测迭代x数据通路、y数据通路、z数据通路的迭代结果。

进一步的,所述指数函数尾数迭代模块中通过四次预测cordic算法对x数据通路、y数据通路和z数据通路进行四次预测迭代计算的实现过程为:

(1)遍历σi,σi+1,σi+2,σi+3各自取值-1或1,形成共16种σi,σi+1,σi+2,σi+3取值,z数据通路根据16种σi,σi+1,σi+2,σi+3取值计算对应的z值;

(2)通过选取z的16种结果中最逼近0的作为本次四次预测迭代的数值ite_z,而对应的σi,σi+1,σi+2,σi+3作为本次四次预测迭代的预测旋转方向s=[σi,σi+1,σi+2,σi+3]输出到x数据通路和y数据通路,x数据通路和y数据通路根据传递来的旋转方向s=[σi,σi+1,σi+2,σi+3]进行计算,得到本次四次预测迭代的结果x值和y值。

进一步的,所述指数函数尾数迭代模块中通过四次预测cordic算法对x数据通路、y数据通路和z数据通路进行四次预测迭代计算的第二种实现过程为:

(1)遍历σi,σi+1,σi+2,σi+3各自取值-1或1,形成共16种σi,σi+1,σi+2,σi+3取值,x数据通路、y数据通路和z数据通路分别以每个σi,σi+1,σi+2,σi+3取值进行并行计算,同时产生16组迭代结果;

(2)通过选取z数据通路的16种结果中最逼近0的作为本次四次预测迭代的数值ite_z,然后将ite_z结果对应的σi,σi+1,σi+2,σi+3产生的x数据通路迭代结果x值和y数据通路迭代结果y值直接作为本次四次预测迭代的结果。

进一步的,所述指数函数尾数迭代模块包括:四次预测z数据通路计算单元;单次迭代z数据通路计算单元;四次预测x数据通路计算单元;单次迭代x数据通路计算单元;四次预测y数据通路计算单元;单次迭代y数据通路计算单元;迭代循环控制单元,利用计数器进行迭代循环控制,用于确定每次的迭代方式为四次预测迭代还是单次迭代;查找表单元,根据迭代循环控制单元的输出计算所需要的迭代角度值;选择器单元,所述选择器单元对四次预测z数据通路计算单元计算结果和单次迭代z数据通路计算单元计算结果进行选择输出,所述选择器单元对四次迭代x数据通路计算单元计算结果和单次迭代x数据通路计算单元计算结果进行选择输出,所述选择器单元对四次迭代y数据通路计算单元计算结果和单次迭代y数据通路计算单元计算结果进行选择输出。

本发明提供的一种用于执行浮点指数运算的方法及装置,实现了128位高精度浮点指数函数运算,其有益效果是:

1、使用改进的四次预测cordic算法进行浮点数的指数运算,一次时钟预测四次迭代方向,大幅度减小了迭代次数,缩减了指数函数的计算周期。

2、实现了浮点指数函数运算装置设计,在输入输出为128位浮点数的情况下,可以满足113位满精度输出。

附图说明

图1为本发明实施例中浮点指数函数运算流程示意图;

图2为本发明实施例中浮点指数函数运算实现装置的简化结构示意图;

图3为本发明实施例中预处理模块流程示意图;

图4为本发明实施例中四次预测cordic算法迭代的逻辑控制方法示意图;

图5为本发明实施例中指数函数尾数迭代模块结构示意图;

图6为本发明实施例中四次预测cordic算法迭代x数据通路流程示意图;

图7为本发明实施例中浮点规则化模块结构示意图。

具体实施方式

为进一步对本发明的技术方案作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的步骤。

根据浮点函数标准规则iee754,本发明实施例中需要计算的指数浮点数为m×2e,假设计算结果的尾数部分为x,指数部分为y。则对应的指数函数计算结果如式(1):

其中0.5<x<1,即则有:

对式(2)变形可得式(3):

由于y为整数,则可以通过式(3)求得y值,只需要求得x的值,求x的值需要进行预处理,假设:

2y=ez(4)

则可以得到:

z=yln2(5)

可以得到x的表达式,即式(6):

其中y通过式(3)得到,x的取值范围有:0.5<x<1。

由指数函数范围可知:m×2e-yln2一定会落在cordic的收敛区域[-1.1182,1.1182]内。本实施例利用本发明技术新型改进四次预测cordic算法来计算x,四次预测cordic算法基于cordic算法的双曲坐标下的旋转矢量,对应的cordic双曲迭代公式为:

旋转方向σi的判断为:

设立初始迭代条件:其中θ为需要旋转的角度。

因此,经过n次迭代后可得:

其中,k为旋转补偿因子,通过双曲函数的定义可知:

eθ=coshθ+sinhθ(10)

将迭代后的x,y值相加再乘上修正系数即可算出eθ值。

双曲坐标下的cordic算法在高精度条件下存在迭代次数过大的缺点,本发明中针对双曲坐标系采用了一种新型四次预测cordic算法。有效减少了cordic的迭代次数,缩小了运算指数时长。改进的算法可以在一个时钟周期内预测出四个迭代方向值,效率提高了四倍,并且可以根据四个预测角度值和z值差值来判断每个方向值,从而有效地减少了误差。

在传统cordic模型方程式上,一个时钟周期上预测四个σ值(每个时钟向后预测四个σi,σi+1,σi+2,σi+3值),依次带入可求得四次预测cordic算法计算公式(11):

由于σi,σi+1,σi+2,σi+3各自的取值只有-1,1,情况分支只有有限的16种,因此在旋转模式第一种迭加方式为:将16种对应的z值进行计算,若此时为旋转模式,则通过选取z的16种结果中最逼近0的作为当次迭代的z结果。而对应的σi,σi+1,σi+2,σi+3作为当次迭代的预测旋转方向,x数据通路和y数据通路根据传递来的旋转方向s=[σi,σi+1,σi+2,σi+3]进行计算,得到本次四次预测迭代的结果x值和y值,完成本次四次预测迭代。

当σi,σi+1,σi+2,σi+3为1时,向正方向旋转,即逼近要求的角度,此时有:

zi+1=zi-σiθi(12)

当σi,σi+1,σi+2,σi+3为-1时,向反方向旋转,即远离要求的角度,此时有:

zi+1=zi+σiθi(13)

在位宽为n的数据计算情况中,传统cordic算法需要n次迭代次数,通过四次预测cordic算法,预计需要的迭代次数缩减为n/4。这使得cordic算法最大的缺陷即延时问题得到了解决,极大程度的缩小计算用时。

在本发明一种用于执行浮点指数运算的方法的实施例中,如图1所示为浮点指数函数运算流程示意图,浮点指数函数的输入和最后结果都应为浮点数,当输入一个128位浮点数num_in时,首先进入预处理模块,对输入浮点进行异常判断,若输入浮点数不满足浮点数标准,抛出异常,此时sign信号为0;若输入信号无误,sign为1,进入预处理模块,将输入的128位浮点数num_in根据浮点表示规范,拆分为符号位s、指数部分e、尾数m三个部分,如公式(14)所示:

本发明主要设计思想就是算出y的值,然后根据y值、m值、e值计算x的值。由上文推导可知x的取值范围为[0.5,1]。根据指数函数性质,此时旋转向量对应横坐标为负,不满足cordic算法的收敛要求。而2x取值为[1,2],此时旋转向量落在cordic的收敛区域,因此这里计算2x的值,2x的表达式如公式(15)所示:

定义148位宽num1:

num1=m×2e-y×ln2+ln2(16)

为了保证计算精度,查找表位宽定义为128位,考虑到符号位和进位,故将num1设为130位的尾数迭代输入值num2。

将num2输入尾数迭代部分,经过尾数迭代运算输出136位的x,y的值,由于要进行迭代过程中需要进行移位运算,将128位字长x,y前面加上8位补偿位宽,防止移位造成丢失精度。根据cordic双曲模型定理,此时有公式(17):

将x,y输入加法器,可以得到mx的公式如公式(18)所示:

mx位宽为128,因为此时计算得到的2x值不一定为浮点规则中的标准尾数,可能存在前导零。故需通过前导零检测单元检测前面零个数,通过移位运算换成标准浮点格式,此时多余的位宽可以减少在移位过程中发生的精度损失。对y进行相对应的移位运算,保证浮点数整体不变。

实际上在ieee浮点规范中128位浮点数只有112位尾数,需要对移位处理过后的数据进行舍入截断为112位,再与y、s进行规格化格式输出标准浮点数。

本发明提供的一种用于执行浮点指数运算的装置如图2所示,包括预处理模块:用于对输入的浮点指数函数进行异常处理和输入值预处理,先将输入的浮点指数函数m×2e拆分为符号位s、指数e和尾数m,根据指数e检测浮点指数函数是否存在异常,如果输入值不存在异常,假设浮点指数函数m×2e的计算结果尾数部分为x,指数部分为y,所述指数部分y为尾数m乘以(ln2)-1并向左移动e位,根据cordic算法的收敛要求,将尾数部分x通过求2x得到,满足公式根据2x定义148位宽num1,具体为:num1=m×2e-y×ln2+ln2,将num1进行移位拼合得到num2。

具体实施方式:预处理模块流程示意图如3所示,首先,对于输入的128位浮点数进行异常判断处理。对于指数函数来说,输入的异常情况只有两种,分别是:nan和∞,这两种情况都需要先对e进行判断,如图3所示,其中,f-nan表示输入值不存在,f-no代表输入值是无穷大,这两种是输入错误的情况;当输入没有问题时,进入到y计算模块,计算得到y值后利用乘法器算出num2的值,预处理模块结束。

所述y值计算具体为:由上述推导可知,y值为尾数m乘上(ln2)-1向左移动e位,将与ln2的除法运算变为和(ln2)-1的乘法运算。

尾数m加上隐藏精度位实际为113位,将(ln2)-1记作参数a。

为了避免精度损失,令226位宽的数据numm定义为:

根据上文推导可得:

y-1<numm×2e<y(21)

此时求y只需要将numm移动e位取整数部分再加上1即可得到,由于y的位宽为15位,对指数e进行分情况讨论:

(1)e>0时:需要将小数点右移e位,此时y的位宽为15,如果小数点移到(225-14),则小数点前整数部分的取值无法被y取到,会损失精度,导致结果错误。故为了保证精度,规定e<13。这里规定e的范围是为了保证计算的精度,在小范围内规定。采用不同的数据扩展办法会影响到e的取值范围。令b=numm[225:(224-e)],则y=b+1,尾数部分为numm[(225-e):0];

(2)e=0时,输出numm的小数点前两位即为整数部分,此时令c=numm[225:224],则y=c+1。尾数部分为numm[223:0];

(3)e=-1时,小数点左移一位,令d=numm[225],则y=d+1,尾数为numm[224:0];

(4)e≤-2时,小数点前没有有效位数,此时y=1。尾数有效位numm[225:0],前面有(e+2)个有效零。

输入值e的输入上限为16396,求出y值后,下一步需要求出的指数部分,输入进尾数迭代部分求x的值。因为2x属于(1,2),我们求2x的指数部分,定义为148位精度的数字num1则:

num1=m×2e-y×ln2+ln2(22)

将num1进行移位拼合得到num2,预处理结束。

指数函数尾数迭代模块:接收预处理模块得到的num2,对num2实现四步并行分支cordic算法运算,具体为:通过四次预测cordic算法对x数据通路、y数据通路和z数据通路进行四次预测迭代计算,得到输出136位的x值和y值,将x值和y值输入加法器中运算得到2x的运算结果,进而得到计算结果尾数值x。

具体实施方式为:尾数迭代模块接收预处理模块结果num2,并且利用硬件实现了四次预测cordic算法。通过迭代x、y、z进行计算,最终得到输入值num2对应的coshnum2、sinhnum2的值,并将结果传递给加法合并模块进行加法运算,得到num2对应的指数值,即为2x值。

优选实施例中,在四次预测cordic算法中,为了减小迭代算法的计算延时,对z数据通路采用了并行计算的方式,通过并行计算16种旋转方向σ的可能取值,并且选取其中使得z最逼近0的σi,σi+1,σi+2,σi+3值来进行x数据通路、y数据通路的迭代运算,从而能够达到一次运算预测四次旋转方向的效果。

优选实施例中,在四次预测cordic算法旋转模式下,由z的值来决定x和y的迭代方向,因而需要等待z的计算结果。假定对单个坐标四步迭代的计算延时为tite,那么至少需要2tite来完成一次完整的全坐标迭代运算。虽然相比于传统的cordic算法,这种方式已经大大减少了计算所需的延时,但依然存在优化空间。为了进一步降低运算延时,提高计算效率,在z进行计算并且获取本次迭代σi,σi+1,σi+2,σi+3值的同时,对x、y也分别以相同的方式进行16组并行计算,x、y、z同时产生16组迭代结果。x、y的最终迭代结果由z的计算完毕后产生的σ值进行多路选择直接获得。这样就将原本需要的两次计算延时2tite压缩为一次计算延时加一次多路选择器的延时,多路选择器的延时相对于复杂的计算电路延时可以忽略不计。相当于将2tite压缩为tite,减少了一半的计算延时,有效的提高了计算效率。

所述四次预测cordic算法迭代的逻辑控制方法如图4所示,为了保证算法收敛,在i=1,4,13,40,3k+1...(k为上次i值)处进行重复迭代。算法中使用计数器cnt,cnt初始为1,每次时钟上升沿cnt=cnt+4,故cnt(代码中i)取值为1,5,9,13,…129时进行四次预测cordic算法。在cnt=5、13、41、121的时候取值最为接近理想迭代i值,故选择在cnt=5、13、41、121的时候重复迭代可以保证收敛。

代码中迭代由i=1开始,129结束。可使用状态机来实现上述迭代功能。假设四个状态:

00:初始状态:赋予初值令x=k,y=0,z=num2,i=1,清空x_next,y_next,z_next;

01:四次预测cordic迭代过程:令时钟i=i+4,如果i=5或者i=41,则状态进入10;如果i=13或121,则状态进入11;如果i=129,则结束迭代,输出迭代后的x,y,z值。

10:-1重复迭代状态:通过判断modulez_pre的输出值s的低位第二位s[1],确定第四次迭代的符号,令i=i-1,重复迭代一次。若s[1]为1,则第三次迭代的σ为1,若s[1]为0,则第三次迭代σ为-1。使用基本单次迭代公式进行重复,迭代重复迭代后回到01状态。

11:重复迭代状态:通过判断modulez_pre的输出值最低位s[0],确定第四次迭代的符号,令i=i,重复迭代一次。若s[0]为1,则第四次迭代的σ为1,若s[0]为0,则第四次迭代σ为-1。使用基本单次迭代公式进行重复迭代,重复迭代完成后回到01状态。

指数函数尾数迭代模块结构图如5所示,本发明面向四倍精度的浮点数据进行。实施例中输入数据的最大位宽为128位,尾数指数运算单元的输入值位宽为113位。但是在计算中由于需要进行乘法及移位运算,因而对x、y的位宽提出了更高的要求。经过对迭代过程中16个并行运算的分析,最大的乘法因子为35,再补充1位符号位,需要在输入的尾数数值前至少补充8位才能够满足计算的需要。查找表精度为128位,取128位的x,y初值,前面加上8位前导零,一共取x,y为136位数据进行迭代。进行了补充后,整个计算流程理论上则需要(128/4)+4+1=37次迭代。其中128为原始迭代次数,1为四次预测还需要最后的129多了一次迭代,4代表在迭代次数为4,13,40,121时共进行了4次单次迭代。因而最终为了实现113位计算精度,共需要37个时钟周期。

在四次预测cordic算法中,为了进一步减少计算延时,除了z,对x,y也都采用16组并行计算的方式,再通过z计算结果的最小值对x,y进行选择输出。由循环控制单元根据时钟确定每次的迭代方式为四次预测迭代还是单次重复迭代,其中四次预测计算单元采用四次预测cordic算法,单次迭代计算单元采用基础cordic算法进行单次重复迭代,查找表单元根据逻辑控制输出计算所需要的迭代角度值。

在具体实施中,z数据通路将每四次预测的角度值进行运算,得到最小的一项作为本次四次迭代的数值ite_z,并且输出最小值对应的s=[σi,σi+1,σi+2,σi+3]到x数据通路和y数据通路。令[σi,σi+1,σi+2,σi+3]依次从[-1,-1,-1,-1]到[1,1,1,1],选择16个计算结果的绝对值最小值进行输出,输出最小值对应的s=[σi,σi+1,σi+2,σi+3]。

x数据通路和y数据通路对x,y值进行迭代运算,预测出四次迭代的x,y值。以x来举例(y与x类似),如图6所示,输入首先进入常数乘法器计算单元。用到的x的系数分别为2-(4i+6)、2-(2i+5)这一列系数,用到的y系数分别为2-(i+3)、2-(3i+6)一列系数。通过系数表整合:需要用到的结果分别为:x,9x,15x,19x,21x,35x和y,3y,5y,7y,9y,11y,13y,15y。将输入的x,y值进行常数计算后输入到移位单元。常数计算单元采用移位的方法,例35x为32x、2x、x的和,其中32x为x左移5位,2x为x左移1位。

output计算单元:output0—output15分别为对应为[σi,σi+1,σi+2,σi+3]=[-1,-1,-1,-1]的迭代结果。例如:output0的计算公式如公式(23)所示:

在移位运算单元,x×2-(4i+6)为x右移(4i+6)位,以此类推。并行计算16组所有可能结果值,最后由地址选择器输入的s值选择输出这一轮四次预测的结果。

浮点规则化模块接受尾数迭代部分x,y的加法结果得到2x值,将移位后得到的x的值,与符号位s,指数部分y,需要对着三个数据进行处理,输出标准浮点数。

浮点规则化模块具体结构如图7所示,主要步骤有:

(1)尾数迭代部分的结果x值可能存在先导零,对x进行先导零检测,得到先导零的个数n,将x左移n位消除前导零,对应的y应该右移n位。

(2)实际上128位浮点数只有112位尾数,需要对移位处理过后的数据进行舍入截断为112位。

(3)将舍入后的尾数部分m与y、s进行规格化格式输出标准浮点数,y的规则化计算为y+16383。

在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的步骤、方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种步骤、方法所固有的要素。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

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