Gpdsp中多功能simd结构浮点融合乘加运算装置制造方法

文档序号:6550952阅读:255来源:国知局
Gpdsp中多功能simd结构浮点融合乘加运算装置制造方法
【专利摘要】本发明公开一种GPDSP中多功能SIMD结构浮点融合乘加装置,包括:操作数准备模块,用于将输入的各操作数的符号、指数和尾数进行分离;尾数乘法模块,用于接收操作数准备模块输出的高位、低位乘法操作数的尾数并采用4个单精度乘法器并行执行各组尾数的尾数乘法,输出各尾数乘法结果至乘加计算模块;乘加计算模块,用于根据各个操作数的指数执行对阶移位,并根据加法操作数的尾数以及各尾数乘法结果执行乘加运算的尾数计算,得到尾数结果并输出。本发明支持SIMD结构的浮点乘加运算并能够直接支持点积和复数乘法运算,具有实现方法简单、延迟小、计算精度高且浮点运算效率高的优点。
【专利说明】GPDSP中多功能SIMD结构淳点融合乘加运算装置

【技术领域】
[0001] 本发明涉及数字信号处理领域,尤其涉及一种GPDSP中多功能SMD结构浮点融合 乘加运算装置。

【背景技术】
[0002] 在3D图像处理、雷达信号处理和现代通信等应用领域中通常需要超高性能的 数字信号处理器(DSP)对大量数据进行处理,因此对数字信号处理器DSP的计算精度 和计算速度都提出更高要求。目前,越来越多DSP芯片集成浮点FMAC(Fused Multiply ACumulators,融合乘加运算)部件,实现IEEE-754标准单精度和双精度浮点融合乘加操 作,以支持通用科学计算和数字信号处理应用。
[0003] 在某些信号处理系统中,同时还经常需要高性能的浮点点积和复数运算操作,例 如FFT算法中核心运算单元是执行蝶形运算,完成一个N点FFT需要进行(N/2) log2N次蝶 形运算,每个蝶形运算包括一个复数乘法和两个复数加法,卷积等算法中核心操则为点积 运算。因此浮点复数和点积运算操作的运算性能也直接影响这些算法的运算效率。
[0004] 现有技术中,DSP芯片上的FMAC部件中只有实现单/双精度浮点乘法、乘加指令, 而没有单独实现点积和复数操作的指令。如TI C66XX DSP芯片,只能通过浮点乘法和浮点 加法操作组合完成复数运算,运算过程中需要进行三次舍入操作,分别为2次乘法结果尾 数的舍入和1次浮点加法操作的舍入。因此,传统DSP芯片上的FMAC结构在处理包含大量 点积和复数操作的运算时存在以下问题:
[0005] 1)浮点点积运算由两个乘法和一个加法操作完成、复数乘法操作时执行两个 乘法和两个加法操作,因此处理浮点点积和复数操作时的运算效率低,很难满足高性能 GPDSP (General-Purpose DSP,通用数字信号处理器)芯片对各种算法的高效支持;
[0006] 2)存在多次舍入操作,导致计算精度的降低;
[0007] 3)应用编程代码量大,代码访存导致的cache缺失增加;
[0008] 4)硬件复用率低,功能单一,利用浮点融合乘加结构,仅实现了浮点的乘法、加法 和乘加运算功能。
[0009] 综上所述,需要尽可能的复用传统浮点乘加装置,提供一种可直接支持点积和复 数乘法运算的SIMD结构浮点乘加运算装置。


【发明内容】

[0010] 本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一 种支持SIMD结构的浮点乘加运算并能够直接支持点积和复数乘法运算、实现方法简单、计 算精度高、浮点运算效率高的GPDSP中多功能SMD结构浮点融合乘加运算装置。
[0011] 为解决上述技术问题,本发明提出的技术方案为:
[0012] 一种GPDSP中多功能SMD结构浮点融合乘加运算装置,包括:
[0013] 操作数准备模块,用于将输入的各操作数的符号、指数和尾数进行分离,分别获取 高位、低位乘法操作数的尾数并输出至尾数乘法模块,将各个操作数的指数以及加法操作 数的尾数输出至乘加计算模块;
[0014] 尾数乘法模块,用于接收操作数准备模块输出的高位、低位乘法操作数的尾数并 采用4个单精度乘法器并行执行各组尾数的尾数乘法,输出各尾数乘法结果至乘加计算模 块;
[0015] 乘加计算模块,用于根据所述各个操作数的指数执行对阶移位,并根据所述加法 操作数的尾数以及所述各尾数乘法结果执行乘加运算的尾数计算,得到尾数结果并输出。
[0016] 作为本发明的进一步改进:所述乘加计算模块包括双精度复用乘加计算单元、单 精度复用乘加计算单元和结果尾数加法单元,所述双精度复用乘加计算单元执行双精度乘 加运算、SIMD单精度乘加运算中高位部分或复数乘法运算中实部的尾数计算,输出第一尾 数中间结果;所述单精度复用乘加计算单元执行SIMD单精度乘加运算中低位部分、点积运 算或复数乘法运算中虚部的尾数计算,输出第二尾数中间结果;所述结果尾数加法单元接 收所述第一尾数中间结果、第二尾数中间结果分别执行尾数的加法运算,根据所执行的运 算类型得到乘加运算的尾数结果。
[0017] 作为本发明的进一步改进:所述双精度复用乘加计算单元包括依次连接的第一阶 差计算子单元、第一对阶移位子单元以及结果压缩子单元,所述第一阶差计算子单元输入 双精度乘加运算、SIMD单精度乘加运算中高位部分或复数乘法运算中实部的各操作数的指 数,根据所述各操作数的指数计算指数阶差;所述第一对阶移位子单元根据计算出的所述 指数阶差对所述加法操作数的尾数进行对阶移位,得到对阶移位后的结果;所述结果压缩 子单元接收所述对阶移位后的结果以及所述尾数乘法模块输出的所述尾数乘法结果并执 行一级部分积压缩,得到第一尾数中间结果并输出至结果尾数加法单元。
[0018] 作为本发明的进一步改进:所述单精度复用乘加计算单元包括依次连接的第二 阶差计算子单元、尾数交换子单元以及第二对阶移位子单元;所述第二阶差计算子单元输 入SIMD单精度乘加运算中低位部分、点积运算或复数乘法运算中虚部的各操作数的指数, 根据所述各操作数的指数计算指数阶差;所述尾数交换子单元根据所述指数阶差将SIMD 单精度乘加运算中低位部分对应的尾数乘法结果与加法操作数进行尾数交换,或所述尾数 交换子单元根据所述指数阶差将点积运算中两个尾数乘法结果进行尾数交换,或所述尾数 交换子单元根据所述指数阶差将复数乘法运算中虚部对应的两个尾数乘法结果进行尾数 交换,将指数较小的尾数输出至所述第二对阶移位子单元并根据所述指数阶差进行对阶移 位,得到对阶移位后的结果,指数较大的尾数及所述对阶移位后的结果输出至结果尾数加 法单元。
[0019] 作为本发明的进一步改进:所述第一阶差计算子单元、第二阶差计算子单元复用 一个阶差计算部件,所述阶差计算部件包括高位部分和低位部分,所述高位部分复用计算 SIMD单精度乘加运算中高部分或复数乘法运算中虚部的指数阶差,所述低位部分复用计算 双精度乘加运算、SIMD单精度乘加运算中低位部分、点积或复数乘法运算中实部的指数阶 差。
[0020] 作为本发明的进一步改进:所述第一对阶移位子单元采用161位对阶移位器,所 述第二对阶移位子单元采用50位对阶移位器。
[0021] 作为本发明的进一步改进:所述结果尾数加法单元包括2个54位的复合加法器和 一个54位的加法器;执行双精度乘加运算时,所述2个54位的复合加法器接收双精度复用 乘加计算单元输出的第一尾数中间结果的低108位,进行加法运算得到低108位的尾数结 果,并由所述54位的加法器根据第108位的进位计算高54位的尾数结果,得到双精度运算 的尾数结果;执行SMD单精度乘加运算时,所述2个54位的复合加法器分别接收双精度 复用乘加计算单元输出的第一尾数中间结果的低108位、单精度复用乘加计算单元输出的 指数较大的尾数、对阶移位后的结果,执行加法运算后得到SIMD单精度乘加运算的尾数结 果。
[0022] 作为本发明的进一步改进:所述尾数乘法模块中每个所述单精度乘法器包括部 分积产生单元、4级压缩单元以及尾数加法器单元;部分积产生单元接收一组尾数并通过 Booth编码产生15个部分积,经2级压缩单元将所述15个部分积压缩成6个部分积,再经 过2级压缩单元将所述6个部分积压缩成2个部分积,所述2个部分积输出至尾数加法器 单元进行加法运算,得到尾数乘法结果。
[0023] 作为本发明的进一步改进:还包括与乘加计算模块连接的规格化处理模块,所述 规格化处理模块包括前导〇预测单元、规格化移位单元、指数修正单元以及舍入计算单元, 所述前导〇预测单元计算出乘加计算模块输出的尾数结果的前导〇的个数,所述指数修正 单元根据所述前导〇个数对所述尾数结果的指数进行修正,所述规格化移位单元根据所述 前导0个数对所述尾数结果进行规格化移位,规格化移位后的尾数结果由所述舍入计算单 元根据舍入模式进行舍入计算,得到最终的尾数结果并写回。
[0024] 作为本发明的进一步改进:所述前导0预测单元包括108位前导0预测子单元与 51位前导0预测子单元,规格化移位单元包括108位规格化移位器和50位规格化移位器; 双精度乘加运算、SIMD单精度乘加运算中低位部分、点积运算、复数乘法运算中实部复用 108位前导0预测子单元计算前导0个数,根据前导0个数由108位规格化移位器进行移 位;SIMD单精度运算中高位部分和复数乘法运算中虚部复用51位前导0预测子单元计算 前导〇的个数,根据前导〇个数由50位规格化移位器进行规格化移位。
[0025] 与现有技术相比,本发明的优点在于:
[0026] 1)本发明通过复用一个尾数乘法模块实现双精度、单精度操作以及点积和复数乘 法的尾数乘法,复用乘加计算模块实现双精度、单精度操作以及点积和复数乘法的尾数计 算,使得在GPDSP中可直接实现点积、复数乘法运算,从而支持包括双精度浮点乘法、双精 度浮点融合乘加/减、SIMD单精度浮点乘法、SIMD单精度浮点乘加/减、单精度浮点点积和 复数乘法运算的8种IEEE-754标准浮点运算操作,能够有效提高浮点运算的计算精度及效 率。
[0027] 2)本发明采用4个单精度乘法器并行计算各尾数乘法,代替传统的双精度53*53 尾数乘法器,使得能够复用尾数乘法模块实现复数乘法中所需的四个单精度乘法运算,从 而能够在复用传统的浮点乘加部件的基础上支持点积和复数乘法运算并降低硬件的开销。
[0028] 3)本发明将单精度复用乘加计算单元中第二对阶移位子单元设置于尾数交换子 单元后,先进行尾数交换产生乘法尾数后再进行对阶移位操作,使得能够复用单精度复用 乘加计算单元实现点积、复数乘法操作和单精度操作中对阶移位,实现点积、复数乘法操作 的尾数计算同时降低硬件开销。

【专利附图】

【附图说明】
[0029] 图1是本实施例GPDSP中多功能SMD结构浮点融合乘加运算装置结构示意图。
[0030] 图2是本实施例中操作数准备模块具体实现原理示意图。
[0031] 图3是本实施例中各类型运算的尾数乘法组成原理示意图。
[0032] 图4是本实施例中尾数乘法模块结构示意图。
[0033] 图5是本实施例中双精度复用乘加计算单元结构示意图。
[0034] 图6是本实施例中单精度复用乘加计算单元的结构示意图。
[0035] 图7是本实施例中阶差计算部件结构示意图。
[0036] 图8是本实施例中结果尾数计算部件结构示意图。
[0037] 图9是本实施例中结果尾数计算部件具体结构示意图。
[0038] 图10是本实施例中双精度操作的结果尾数计算原理示意图。
[0039] 图11是本实施例中规格化处理模块结构示意图。
[0040] 图12是本发明具体实施例中SMD结构浮点融合乘加运算装置具体结构示意图。
[0041] 图例说明
[0042] 1、操作数准备模块;2、尾数乘法模块;3、乘加计算模块;31、双精度复用乘加计算 单元;311、第一阶差计算子单元;312、第一对阶移位子单元;313、结果压缩子单元;32、单 精度复用乘加计算单元;321、第二阶差计算子单元;322、尾数交换子单元;323、第二对阶 移位子单元;33、结果尾数加法单元;4、规格化处理模块;41、前导0预测单元;42、规格化 移位单元;43、指数修正单元;44、舍入计算单元。

【具体实施方式】
[0043] 以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而 限制本发明的保护范围。
[0044] 如图1所示,本实施例GPDSP中多功能SMD结构浮点融合乘加运算装置,包括:
[0045] 操作数准备模块1,用于将输入的各操作数的符号、指数和尾数进行分离,分别获 取高位、低位乘法操作数的尾数并输出至尾数乘法模块2,将各个操作数的指数以及加法操 作数的尾数输出至乘加计算模块3 ;
[0046] 尾数乘法模块2,用于接收操作数准备模块1输出的高位、低位乘法操作数的尾数 并采用4个单精度乘法器并行执行所需的各组尾数的尾数乘法,输出各尾数乘法结果至乘 加计算模块;
[0047] 乘加计算模块3,用于根据各个操作数的指数执行对阶移位,并根据加法操作数的 尾数以及各尾数乘法结果执行乘加运算的尾数计算,得到尾数结果并输出。
[0048] 本实施例中SMD结构融合乘加运算装置位于处理器的一条执行流水线上,其中 处理器中的寄存器文件能够为该执行流水线提供3个读端口和1个写端口。输入双精度 或SMD单精度操作数A、B、C可执行双精度乘加运算或SMD单精度乘加运算,其中A和B 为执行乘法操作的乘法操作数,C为执行加法操作的加法操作数,乘减与乘加运算的实现原 理相同,因此可执行包括乘减运算在内的双精度乘加/减(A*B±C)、SMD单精度乘加/减 (A2*B2土C2、A1*B1±C1)运算,其中A1、A2分别为SMD单精度操作中操作数A的高位、低位 操作数尾数,B1、B2分别为SMD单精度操作中操作数B的高位、低位尾数,且当加法操作数 C为0时可执行双精度乘法(A*B)、SMD单精度乘法(A2*B2、A1*B1)运算。本实施例中SMD 结构融合乘加运算装置通过复用传统的浮点乘加部件还能够执行点积(A2*B2+A1*B1)或 复数乘法(A2*B2-A1*B1、A2*B1+A1*B2)运算,即可实现双精度浮点乘法、SMD单精度浮点 乘法、双精度浮点融合乘加/减、SIMD单精度浮点乘加/减、单精度浮点点积和复数乘法运 算的8种IEEE-754标准的浮点运算操作。
[0049] 本实施例中,由操作数准备模块1对输入的双精度或单精度操作数A、B、C进行预 处理,分离出符号、指数以及尾数并获取高位、低位尾数。操作数准备模块具体实现原理如 图2所示,对于双精度操作数,分离出双精度操作数A、B和C的符号S、指数exp及尾数man, 再将乘法操作数A、B分离出的53位尾数man进行高位补零扩展成54位,将操作数A的尾 数manA的低27位输入到A1,获取到操作数A的低位尾数A1 ;将操作数A的尾数manA的高 27位输入到A2,获取到操作数A的高位尾数A2 ;操作数B的处理方法与操作数A相同,获取 操作数B的尾数manB的低27位输入到B1、高27位输入到B2 ;对于SIMD单精度的操作数, 分离出高/低位单精度操作数A、B和C的符号S1/S2、指数expl/exp2及尾数manl/man2, 再将分离出的高/低位乘法操作数A和B的manl/man2分别由24位进行高位补零扩展成 27位,获取低27位的操作数A的尾数manAl输入到A1、高27位的操作数A的尾数manA2输 入到A2,获取低27位的操作数B的尾数manBl输入到B1、高27位的操作数B的尾数manB2 输入到B2。
[0050] 浮点乘加运算实现过程中,尾数乘法所占用的逻辑比较大,各类型浮点运算的 尾数乘法组成原理如图3所示,对于双精度操作(双精度乘加/减法A*B±C、双精度乘 法A*B),尾数乘法为manA*manB,需要4个27*27位乘法器完成尾数计算;对于单精度操 作和点积运算(A2*B2+A1*B1),其中单精度操作包括SMD单精度乘加/减(A2*B2土C2、 A1*B1±C1)和 SMD单精度乘法(A2*B2、A1*B1),尾数乘法包括manA2*manB2、manAl*manBl, 需要2个27*27位乘法器完成尾数计算;对于复数乘法操作(A2*B2-A1*B1、A2*B1+A1*B2), 尾数乘法包括:manA2*manB2、manA2*manBl、manAl*manB2、manAl*manBl,需要 4 个 27*27 位 乘法器完成尾数计算。
[0051] 本实施例中,通过复用尾数乘法模块2计算双精度操作、单精度操作、点积运算以 及复数乘法操作中所需的各组尾数的尾数乘法,尾数乘法模块结构如图4所示,包括4个 27*27 位同构乘法器 HH、HL、LH 和 LL,并行执行 manA2*manB2、manA2*manBl、manAl*manB2、 manAl*manBl的尾数乘法计算,输出4个尾数乘法结果mul_HL、mul_LH以及mul_ LL,其中将操作数准备模块1输出的尾数A2和B2输入到高位乘法器HH、A2和B1输入到乘 法器HL、A1和B2输入到乘法器LH、A1和B1输入到低位乘法器LL。对于双精度操作和复数 操作,乘法器HH、HL、LH 以及 LL均有效,分别完成manA2*manB2、manA2*manBl、manAl*manB2、 manAl*manBl组合的尾数乘法计算;对于单精度操作以及点积运算,由于只需2个27*27位 乘法器,则仅高位乘法器HH和低位乘法器LL乘法器有效,其余乘法器输入为0,具体为:使 用高位乘法器HH完成SMD单精度乘法运算中高位部分(A2*B2),SMD单精度乘加/减运 算中高位部分(A2*B2土C2)、点积运算(A2*B2+A1*B1)的尾数乘法manA2*manB2的计算,使 用低位乘法器LL完成SMD单精度乘加/减运算中低位部分(A1*B1±C1),SMD单精度乘 法运算中低位部分(A1*B1),点积运算(A2*B2+A1*B1)中尾数乘法manAl*manBl的计算。
[0052] 本实施例采用4个27*27位单精度乘法器并行计算各组尾数乘法,代替传统的双 精度53*53尾数乘法器,使得能够复用尾数乘法模块2实现复数乘法中所需的四个单精度 乘法运算,从而能够在复用传统的浮点乘加部件的基础上支持点积和复数乘法运算并降低 硬件的开销。
[0053] 本实施例中,每一个27*27位乘法器具体包括部分积产生单元、第一?四级压缩 单元以及尾数加法器单元,27*27位乘法器具体结构如图4所示,尾数加法器单元采用54位 加法器。输入的各组尾数在部分积产生单元通过booth编码产生15个部分积,经第一、二 级压缩单元将部分积压缩成6个,压缩后的6个部分积再经过第三、四级压缩单元压缩成2 个,输出至64位加法器计算出乘法结果。
[0054] 本实施例中,各条浮点运算指令占用同一流水线,每一周期仅执行其中一条指令, 通过设计六级流水(E1?E6)分别实现双精度浮点乘法、双精度浮点融合乘加/减、SMD单 精度浮点乘法、SIMD单精度浮点乘加/减、单精度浮点点积和复数乘法运算。
[0055] 本实施例中,尾数乘法模块2位于执行栈的第一(E1)和第二(E2)栈,通过4个 27*27位乘法器并行执行乘法操作数的尾数乘法计算,其中booth编码和第一、二级压缩位 于E1栈,第三、四级压缩和尾数加法位于E2栈。每个乘法器的具体执行流程为:在E1栈通 过booth编码产生15个部分积,并通过第一、二级压缩将15个部分积压缩为6个;在E2栈 对E1栈得到的6个部分积进行第三、四级压缩,得到2个部分积并输入到加法器中完成尾 数乘法的计算。
[0056] 本实施例中,乘加计算模块3包括双精度复用乘加计算单元31、单精度复用乘加 计算单元32和结果尾数加法单元33,由双精度复用乘加计算单元31执行双精度乘加/减 运算、双精度乘法运算、SMD单精度乘加/减运算中的高位部分、SMD单精度乘法运算中的 高位部分或复数乘法运算中实部(A2*B2-A1*B1)的尾数计算,根据各个操作数的指数执行 对阶移位后对加法操作数和各尾数乘法结果进行压缩求和,输出第一尾数中间结果;由单 精度复用乘加计算单元32执行SMD单精度乘加/减运算中的低位部分、SMD单精度乘法 运算中的低位部分、点积运算或复数乘法运算中虚部的尾数计算,根据各操作数的指数大 小进行尾数交换后对指数较小的尾数执行对阶移位,输出第二尾数中间结果;结果尾数加 法单元33接收第一尾数中间结果、第二尾数中间结果分别执行尾数的加法运算,根据所执 行的运算类型得到乘加运算的尾数结果。
[0057] 本实施例中,双精度复用乘加计算单元结构如图5所示,包括依次连接的第一阶 差计算子单元311、第一对阶移位子单元312以及结果压缩子单元313。第一阶差计算子 单元311输入双精度乘加/减运算、双精度乘法运算、SIMD单精度乘加/减运算的高位部 分、SIMD单精度乘法运算中的高位部分或复数乘法运算中实部的各操作数的指数exp,根 据各操作数的指数计算指数阶差expdiff ;第一对阶移位子单元312根据计算出的指数阶 差expdiff完成加法操作数C与A*B的对阶移位,得到加法操作数C对阶移位后的结果 shiftmanC ;结果压缩子单元313接收对阶移位后的结果shiftmanC以及尾数乘法模块2输 出的4个尾数乘法结果(mul_HH、mul_HL、mul_LH以及mul_LL),执行一级部分积压缩,得到 尾数中间结果Dsum、Dcarry,尾数中间结果Dsum、Dcarry通过结果尾数加法单元33进行相 加得到乘加运算的尾数结果。
[0058] 本实施例中,第一对阶移位子单元312采用161位对阶移位器,将对阶移位量和加 法操作数C送入对阶移位器完成对阶,其中当指数阶差大于0时对阶移位量等于0,当指数 阶差小于0时,将加法操作数C右移;当指数阶差小于-161时,由于加法操作数C已全部移 出移位器作为粘结位,对阶移位量为161。由于指数阶差计算时,乘法的指数多加了 56,将 乘法尾数右移56位相当于将乘法尾数规定在161位对阶移位器的低106位,因此只需要对 加法操作数C的尾数右移完成对阶。
[0059] 本实施例中,结果压缩子单元313采用CSA4:2进位节省加法器构成的压缩单元, 为压缩计算延时,将4个尾数乘法结果(mul_HH、mul_HL、mul_LH以及mul_LL)和对阶移位 后的结果shiftmanC组成四个部分积输入CSA4:2压缩单元进行一级压缩,得到两个尾数 中间结果Dsum、Dcarry,其中由对阶移位后的结果shiftmanC作为一个部分积输入、mul_ HH和mul_LL组成一个部分积输入、mul_LH和mul_HL为另2个部分积输入,即四个部分积 分别为{mul_HH、mul_LL}、{mul_HL、27,bO}、{mul_LH、27,bO}、shiftmanC。为了复用双 精度复用乘加计算单元31实现SIMD单精度浮点乘加/减运算中高位部分的尾数计算,将 SMD单精度浮点乘加/减运算中高位部分中尾数乘法结果mul_HH和对阶移位后的结果 shiftmanC组成输入CSA4:2压缩单元的四个部分积,四个部分积分别为{mul_HH、54' b0}、 {0}、{0}、shiftmanC ;为了复用双精度复用乘加计算单元31实现复数乘法运算中实部的尾 数计算,将复数乘法运算中实部的两个尾数乘法结果mul_LL和对阶移位后的结果 shiftmanC组成输入CSA4:2压缩单元的四个部分积,进行一级压缩得到两个尾数中间结果 Dsum、Dcarry,其中四个部分积分别为、{mul_LL}、{0}、shiftmanC。
[0060] 本实施例中,双精度复用乘加计算单元31位于执行栈的第一(El)、第二(E2)和第 三(E3)栈,具体执行流程为:在E1栈完成双精度、SMD单精度中高位部分和复数乘法运算 中实部的操作数的指数阶差计算,在E2栈根据计算得出的指数阶差完成加法操作数C的对 阶移位,得到对阶移位后的结果shiftmanC ;在E3栈根据尾数乘法模块2输出的4个尾数 乘法结果和shiftmanC执行第五级压缩,得到两个尾数中间结果Dsum、Dcarry。
[0061] 执行双精度操作(双精度乘加/减运算、双精度乘法运算)计算时,第一阶差计 算子单元311根据操作数的指数expA、expB和expC在E1栈计算指数阶差且指数阶差为: expdiff = expC-(expA+expB-1023+56);指数阶差计算完成之后直接在E2栈由161位对 阶移位器对双精度加法操作数C进行对阶移位操作,对阶移位后的结果shiftmanC与4个 尾数乘法结果在E3栈由CSA4:2压缩单元执行第五级压缩,即进行求和运算:A2*B2*254+ Al*Bl+Al*B2*227+A2*Bl*227+shiftmanC,得到两个压缩部分积 Dsum、Dcarry。CSA4:2 压 缩单元由4个尾数乘法结果和对阶移位后的结果shiftmanC组成四个部分积{mul_HH、 mul_LL}、{mul_HL、27, b0}、{mul_LH、27, b0}、shiftmanC,分别对应于 A2*B2*254+A1*B1、 A1*B2*227、' A2*B1*227 和 shiftmanC。
[0062] 执行SIMD单精度浮点乘加/减中的高位部分计算时,第一阶差计算子单元311在 E1栈计算指数阶差且指数阶差为:expdiff = expC2-(expA2+expB2_127+56),在E2栈由 161位对阶移位器对单精度加法操作数C进行对阶移位操作,在E3栈由CSA4:2压缩单元 对SIMD单精度乘法中A2*B2尾数乘法(mul_HH)和对阶移位结果shiftmanC进行求和,即 计算A2*B2*2 54+shiftmanC,其中CSA4:2压缩单元由尾数乘法结果mul_HH和对阶移位结果 shiftmanC 组成输入 CSA4:2 压缩单元的四个部分积{mul_HH、54'bO}、{0}、{0}、shiftmanC, 进行一级压缩得到的两个中间结果Dsum、Dcarry。
[0063] 执行复数乘法运算中实部(A2*B2_A1*B1)运算时,第一阶差计算子单元311在 El栈计算指数阶差且指数阶差为:expdiff = expAl+expBl-(expA2+expB2+56),在E2栈 由161位对阶移位器进行对阶移位操作,CSA4:2压缩单元对单精度乘法中A2*B2的尾数乘 法(mul_HH)、单精度乘法中A1*B1的尾数乘法中(mul_LL)和shiftmanC进行求和,即计算 mul_HH+mul_LL+shiftmanC,其中CSA4:2压缩单兀由两个尾数乘法结果mul_HH、mul_LL和 对阶移位后的结果shiftmanC组成四个部分积、{mul_LL}、{0}、shiftmanC,进行 一级压缩得到的两个中间结果Dsum、Dcarry。
[0064] 本实施例中,通过单精度复用乘加计算单元32完成SIMD单精度乘加/减运算中 的低位部分、SIMD单精度乘法运算中的低位部分、点积、复数乘法运算中虚部的尾数计算。 由于相对于双精度复用乘加计算单元31,单精度复用乘加计算单元32的计算位宽较小和 计算延时较小,因此本实施例中单精度复用乘加计算单元32先进行阶差计算,然后对尾数 进行交换,再进行对阶移位操作。单精度复用乘加计算单元结构如图6所示,包括依次连 接的第二阶差计算子单元321、尾数交换子单元322以及第二对阶移位子单元323。第二阶 差计算子单元321输入SMD单精度乘加/减运算中低位部分、SMD单精度乘法运算中的 低位部分、点积运算或复数乘法运算中虚部的各操作数的指数,包括低位尾数的指数(exp) 和高位尾数的指数(Hexp),根据各操作数的指数计算指数阶差;尾数交换子单元322根据 计算得出的指数阶差进行尾数交换,当执行SMD单精度乘加/减运算时,将SMD单精度乘 加/减运算的低位部分对应的尾数乘法结果与加法操作数C进行尾数交换,当执行点积运 算或复数乘法运算时,将点积运算或复数乘法运算中虚部对应的两个单精度乘法尾数结果 进行尾数交换,其中指数较小的尾数输出至第二对阶移位子单元323,由第二对阶移位子单 元323根据指数阶差进行对阶移位,输出对阶移位后的结果;指数较大的尾数、对阶移位后 的结果输出至结果尾数加法单元33进行加法运算,得到乘加运算的尾数结果。
[0065] 本实施例中,单精度复用乘加计算单元32位于执行栈的第一(E1)、第二(E2)和第 三(E3)栈,具体执行流程为:在E1栈完成点积、复数乘法的虚部或SMD单精度操作的阶差 计算,在E2栈完成点积或复数乘法操作的两个单精度乘法尾数交换,或SIMD单精度乘加/ 减运算的尾数乘法结果与加法操作数C尾数交换,在E3栈完成对指数较小的操作数的对阶 移位。
[0066] 对于SIMD单精度乘加/减运算的低位部分,指数阶差expdiff = expAl+expBl-expCl ;对于点积运算,指数阶差 expdiff = expA2+expB2_expAl_expBl ;对 于复数乘法中虚部,指数阶差expdiff = expA2+expBl-expAl_expB2。本实施例中,第一阶 差计算子单元311、第二阶差计算子单元321复用一个阶差计算部件,即双精度操作和单 精度操作复用一个阶差计算部件在E1栈执行指数阶差的计算,阶差计算部件结构如图7 所示,阶差计算部件包括高位部分和低位部分,其中阶差计算部件的低位部分为双精度、单 精度操作复用,执行双精度操作(双精度乘加/减、双精度乘法)、SIMD单精度操作(SIMD 单精度乘加/减、SIMD单精度乘法)中低位部分、点积或复数乘法运算中实部的结果指数 和指数阶差的计算;阶差计算部件的高位部分执行SMD单精度操作(SMD单精度乘加/ 减、SIMD单精度乘法)中高位部分、复数乘法运算中虚部的结果指数和指数阶差的计算。 具体为:双精度操作(双精度乘法、双精度乘加/减运算)时,由阶差计算部件的低位部 分计算指数阶差expdiff = expC-expAB,且乘法操作的指数expAB = expA+expB+const, const为常量56-1023 ;SMD单精度操作(SMD单精度乘法、SMD单精度乘加/减运算) 时,复用阶差计算部件的低位部分计算低位部分的指数阶差expdiff = expCl-expAl*Bl, 由阶差计算部件的高位部分计算高位部分的指数阶差Hexpdiff = HexpC-HexpAB,其中乘 法操作的指数阶差HexpAB = expA2+expB2+const,HexpC为操作数C的高位尾数的指数 expC2, const为常量-127 ;复数乘法运算时,复用阶差计算部件的低位部分计算实部的指 数阶差 expdiff = expA2*B2_expAl*Bl,其中 expA2*B2 = expA2+expB2+const,expAl*Bl =expAl+expBl+const,const为常量-127,由阶差计算部件的高位部分计算虚部的指数阶 差 Hexpdiff = expA2*Bl_expAl*B2,其中 expA2*Bl = expA2+expBl+const,expAl*B2 = expAl+expB2+const,const为常量-127 ;点积运算时,复用阶差计算部件的低位部分计算 指数阶差 expdiff = expA2*B2_expAl*Bl。
[0067] 本实施例中,尾数交换子单元322完成SIMD单精度操作的低位部分、点积运算、 复数乘法运算中实部的尾数交换,其中SIMD单精度乘加/减运算中是将尾数乘法结果与 加法操作数C进行尾数交换,点积、复数乘法操作中则是将两个单精度乘法的尾数乘法结 果进行尾数交换,若低位指数阶差满足expdiff = expTl-expT2>0, T1、T2为进行尾数交换 的操作数,将低位部分中指数较大的Τ1尾数输入到manl,指数较小的Τ2尾数输入到pre_ shiftmanl,否则将T2尾数输入到manl,T1输入到pre_shiftmanl。
[0068] 本实施例中,第二对阶移位子单元323采用50位对阶移位器,对尾数交换子单元 322输出的指数较小的尾数进行对阶移。由于点积和复数乘法操作需要进行对阶移位的两 个尾数都是来自乘法器,因此单精度复用乘加计算单元32中对阶移位器设置于乘法尾数 产生后,使得能够实现点积、复数乘法操作和单精度操作对阶移位的硬件复用。
[0069] 执行SMD单精度乘/加减中低位部分计算时,第二阶差计算子单元321在E1栈 根据低部分的指数expAl、expBl和expCl计算指数阶差expdiff = expAl+expBl-expCl ; 尾数交换子单元322在E2栈接收低位部分的单精度尾数乘法A1*B1的尾数结果mul_LL以 及加法操作数C1并根据指数阶差进行尾数交换,若尾数结果mul_LL的指数大于加法操作 数C1的指数大小,将加法操作数C1的尾数输入到pre_shiftmanl,尾数结果mul_LL输入到 manl,否则将尾数结果mul_LL输入到pre_shiftmanl、加法操作数C1的尾数输入到manl ; 第二对阶移位子单元323在E3栈对指数较小的尾数pre_shiftmanl进行对阶移位。
[0070] 执行点积运算时,第二阶差计算子单元321在E1栈根据指数计算指数阶差 expdiff = expA2+expB2_expAl_expBl ;尾数交换子单元322在E2栈接收两个单精度尾数 乘法A2*B2、A1*B1的尾数结果mul_LL并根据指数阶差进行尾数交换,若尾数结果 mul_HH的指数大于尾数结果mul_LL的指数,将尾数结果mul_LL输入到pre_shiftmanl、尾 数结果输入到manl,否则将尾数结果输入到pre_shiftmanl、尾数结果mul_ LL输入到manl ;第二对阶移位子单元323在E3栈对指数较小的尾数pre_shiftmanl进行 对阶移位。
[0071] 执行复数乘法中虚部计算时,第二阶差计算子单元321在E1栈根据指数计算指 数阶差expdiff = expA2+expBl_expAl_expB2 ;尾数交换子单元322在E2栈接收两个单 精度尾数乘法A2*B1、A1*B2的尾数结果mul_HL、mul_LH并根据指数阶差进行尾数交换, 若尾数结果mul_HL的指数大于尾数结果mul_LH的指数,将尾数结果mul_LH输入到pre_ shiftmanl、尾数结果mul_HL输入到manl,否则将尾数结果mul_HL输入到pre_shiftmanl、 尾数结果mul_LH输入到manl ;第二对阶移位子单元323在E3栈对指数较小的尾数pre_ shiftmanl进行对阶移位。
[0072] 本实施例中,结果尾数加法单元33结构如图8、9所示,包括2个54位的复合加法 器(复合加法器1#、复合加法器2#)和1个54位的加法器,复用实现双精度操作、单精度操 作的尾数结果的加法运算。结果尾数加法单元33位于执行栈的第三(E3)栈,当执行双精 度运算操作时,将双精度复用乘加计算单元31输出的尾数中间结果Dsum、Dcarry的低108 位输入到两个复合加法器完成双精度操作低108位的尾数计算,并根据第108位的进位计 算高54位的尾数;当执行SMD单精度运算操作、点积或复数乘法运算时,通过复用两个54 位复合加法器实现尾数结果的加法运算。由于单精度对阶移位后的点积、复数乘法运算与 SMD单精度乘加/减运算完全相同,因此所有单精度操作在结果尾数加法单元33中都按照 SMD单精度操作处理。
[0073] 结果尾数加法单元33的具体执行流程为:当执行双精度运算操作时,如图10所 示,将双精度复用乘加计算单元31输出的尾数中间结果Dsum、Dcarry中Dsum[52:0]和 Dcarry[52:0]输入到复合加法器1#,将Dsum[107:53]、Dcarry[107:53]输入到复合加法 器2#,Dcarry [160:107]为全0, Dsum[160:107]由54位的加法器根据低位的进位完成加 1操作,得到尾数结果为:resultO = A+B、resultl = A+B+1,其中若尾数manAB和对阶移 位后的结果shiftmanC实际执行的是加法操作,即执行乘加运算时,结果result = A+B = resultO ;若执行乘减运算且结果为负则尾数结果result =?(A+B+l)+l =?resultO,若 执行乘减运算且结果为正时则尾数结果等于resultl。当执行SMD单精度操作时,低部分 通过单精度复用乘加计算单元32计算,输出的manl,shiftmanl输入到低位的复合加法器 1#计算得到低部分的尾数结果,高位部分复用双精度复用乘加计算单元31进行计算,输出 的尾数中间结果Dsum[107:53]和Dcarry [107:53]通过复合加法器2#相加得到高部分的 尾数结果,且尾数结果为:resultO = A+B和resultl = A+B+1 ;若单精度乘法尾数manAB 和对阶移位后的结果shiftmanl实际执行的是加法操作,即乘加运算时,尾数结果result =A+B = resultO ;若执行的是乘减法操作且结果为负则尾数结果result =?(A+B+l)+l =?resultO,若执行的是乘减法操作、结果为正且粘结位sticky = 0则尾数结果等于 resultl,否则尾数结果等于resultO。
[0074] 本实施例中,还包括与乘加计算模块3连接的规格化处理模块4,对尾数结果进行 规格化处理以及舍入处理并写回。规格化处理模块具体结构如图11所示,包括前导〇预测 单元41、规格化移位单元42、指数修正单元43和舍入计算单元44。前导0预测单元41计 算出乘加计算模块3输出的尾数结果的前导0的个数,指数修正单元43根据前导0个数对 尾数结果的指数进行修正,规格化移位单元42根据前导0个数对尾数结果进行规格化移 位,规格化移位后的尾数结果由舍入计算单元44根据舍入模式进行舍入计算,将尾数结果 表示成符合IEEE-754标准的尾数,得到最终的尾数结果并写回。
[0075] 本实施例中,前导0预测单元41包括108位前导0预测子单元与51位前导0预 测子单元,规格化移位单元42包括108位规格化移位器和51位规格化移位器,舍入计算单 元44包括两个舍入计算子单元,分别与108位规格化移位器和51位规格化移位器连接。 双精度操作、SIMD单精度操作中低位部分、点积、复数乘法运算中实部复用108位前导0预 测子单元,当执行双精度操作时若加法操作数C较大则将尾数结果result的高108位输出 至108位规格化移位器进行规格化移位,否则将尾数结果result的低108位输出至108位 规格化移位器;当执行SIMD单精度操作中低位部分,只需将50位尾数结果低位补充58个 〇输出到108位前导0预测子单元,输出结果尾数高位0的个数。51位前导0预测子单元 为SMD单精度操作中高位部分和复数乘法运算中虚部复用,输出E3栈中复合加法器2#输 出的尾数结果中高位〇的个数,再根据前导〇的个数经过51位规格化移位器进行规格化移 位。
[0076] 本实施例中,规格化处理模块位于执行栈的第四(E4)、第五(E5)、第六(E6)栈,在 E3栈完成尾数结果的加法运算,在E4栈完成前导0预测操作数选择,执行前导0预测;在 E5栈完成前导0预测后的指数修正及规格化移位操作;在E6栈完成结果尾数的例外判断 和结果写回。
[0077] 本实施例通过复用六级(E1?E6)流水的双精度通路和单精度通路执行双精度浮 点乘法、SIMD单精度浮点乘法、双精度浮点融合乘加/减、SIMD单精度浮点乘加/减、单精 度浮点点积和复数乘法运算的8种IEEE-754标准的浮点运算操作,浮点运算精度高且执行 效率高,同时可采用一条复数指令代替传统浮点运算中的6条浮点指令,使浮点运算所需 的代码量大大减少。
[0078] 如图12所示,本实施例中GPDSP中多功能SMD结构浮点融合乘加运算装置的具 体结构,其中虚线表示六级(E1?E6)流水划分,尾数乘法模块2位于E1、E2栈(如图4所 示),乘加计算模块3位于El、E2、E3栈,规格化处理模块4位于E4、E5和E6栈。通过复 用4个27位定点乘法器执行各类型操作的尾数乘法,输出四个乘法结果(mul_HH、mul_HL、 mul_LH以及mul_LL),第一阶差计算子单元311、第二阶差计算子单元321复用阶差计算部 件完成;双精度复用乘加计算单元31还包括161位对阶移位器和CSA4:2压缩单元,可通过 复用传统浮点乘加部件中双精度运算通路实现,执行双精度操作、SIMD单精度操作中高位 部分、复数乘法操作中虚部的尾数计算;单精度复用乘加计算单元32还包括尾数交换逻辑 以及50位对阶移位器,可通过复用传统浮点乘加部件中单精度运算通路实现,执行SMD单 精度操作中低位部分、点积操作、复数乘法操作中实部的尾数计算;双精度、单精度操作的 尾数结果的加法运算通过复用结果尾数加法单元33执行,并通过复用规格化处理模块4进 行规格化移位以及舍入计算的规格化处理。
[0079] 上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明 已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱 离本发明技术方案范围的情况下,都可利用上述揭示的技术内容对本发明技术方案做出许 多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案 的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落 在本发明技术方案保护的范围内。
【权利要求】
1. GPDSP中多功能SMD结构浮点融合乘加运算装置,其特征在于,包括: 操作数准备模块(1),用于将输入的各操作数的符号、指数和尾数进行分离,分别获取 高位、低位乘法操作数的尾数并输出至尾数乘法模块(2),将各个操作数的指数以及加法操 作数的尾数输出至乘加计算模块(3); 尾数乘法模块(2),用于接收操作数准备模块(1)输出的高位、低位乘法操作数的尾数 并采用4个单精度乘法器并行执行各组尾数的尾数乘法,输出各尾数乘法结果至乘加计算 模块; 乘加计算模块(3),用于根据所述各个操作数的指数执行对阶移位,并根据所述加法操 作数的尾数以及所述各尾数乘法结果执行乘加运算的尾数计算,得到尾数结果并输出。
2. 根据权利要求1所述GPDSP中多功能SMD结构浮点融合乘加运算装置,其特征在 于:所述乘加计算模块(3)包括双精度复用乘加计算单元(31)、单精度复用乘加计算单元 (32) 和结果尾数加法单元(33),所述双精度复用乘加计算单元(31)执行双精度乘加运算、 SIMD单精度乘加运算中高位部分或复数乘法运算中实部的尾数计算,输出第一尾数中间结 果;所述单精度复用乘加计算单元(32)执行SIMD单精度乘加运算中低位部分、点积运算或 复数乘法运算中虚部的尾数计算,输出第二尾数中间结果;所述结果尾数加法单元(33)接 收所述第一尾数中间结果、第二尾数中间结果分别执行尾数的加法运算,根据所执行的运 算类型得到乘加运算的尾数结果。
3. 根据权利要求2所述GPDSP中多功能SMD结构浮点融合乘加运算装置,其特征在 于:所述双精度复用乘加计算单元(31)包括依次连接的第一阶差计算子单元(311)、第一 对阶移位子单元(312)以及结果压缩子单元(313),所述第一阶差计算子单元(311)输入 双精度乘加运算、SIMD单精度乘加运算中高位部分或复数乘法运算中实部的各操作数的指 数,根据所述各操作数的指数计算指数阶差;所述第一对阶移位子单元(312)根据计算出 的所述指数阶差对所述加法操作数的尾数进行对阶移位,得到对阶移位后的结果;所述结 果压缩子单元(313)接收所述对阶移位后的结果以及所述尾数乘法模块(2)输出的所述 尾数乘法结果并执行一级部分积压缩,得到第一尾数中间结果并输出至结果尾数加法单元 (33) 。
4. 根据权利要求3所述GPDSP中多功能SMD结构浮点融合乘加运算装置,其特征在 于:所述单精度复用乘加计算单元(32)包括依次连接的第二阶差计算子单元(321)、尾数 交换子单元(322)以及第二对阶移位子单元(323);所述第二阶差计算子单元(321)输入 SIMD单精度乘加运算中低位部分、点积运算或复数乘法运算中虚部的各操作数的指数,根 据所述各操作数的指数计算指数阶差;所述尾数交换子单元(322)根据所述指数阶差将 SIMD单精度乘加运算中低位部分对应的尾数乘法结果与加法操作数进行尾数交换,或所述 尾数交换子单元(322)根据所述指数阶差将点积运算中两个尾数乘法结果进行尾数交换, 或所述尾数交换子单元(322)根据所述指数阶差将复数乘法运算中虚部对应的两个尾数 乘法结果进行尾数交换,将指数较小的尾数输出至所述第二对阶移位子单元(323)并根据 所述指数阶差进行对阶移位,得到对阶移位后的结果,指数较大的尾数及所述对阶移位后 的结果输出至结果尾数加法单元(33)。
5. 根据权利要求4所述GPDSP中多功能SMD结构浮点融合乘加运算装置,其特征在 于:所述第一阶差计算子单元(311)、第二阶差计算子单元(321)复用一个阶差计算部件, 所述阶差计算部件包括高位部分和低位部分,所述高位部分复用计算SIMD单精度乘加运 算中高部分或复数乘法运算中虚部的指数阶差,所述低位部分复用计算双精度乘加运算、 SIMD单精度乘加运算中低位部分、点积或复数乘法运算中实部的指数阶差。
6. 根据权利要求4或5所述GPDSP中多功能SMD结构浮点融合乘加运算装置,其特 征在于:所述第一对阶移位子单元(312)采用161位对阶移位器,所述第二对阶移位子单元 (323)采用50位对阶移位器。
7. 根据权利要求3或4或5所述GPDSP中多功能SMD结构浮点融合乘加运算装置, 其特征在于:所述结果尾数加法单元(33)包括2个54位的复合加法器和一个54位的加 法器;执行双精度乘加运算时,所述2个54位的复合加法器接收双精度复用乘加计算单元 (31)输出的第一尾数中间结果的低108位,进行加法运算得到低108位的尾数结果,并由所 述54位的加法器根据第108位的进位计算高54位的尾数结果,得到双精度乘加运算的尾 数结果;执行SIMD单精度乘加运算时,所述2个54位的复合加法器分别接收双精度复用乘 加计算单元(31)输出的第一尾数中间结果的低108位、单精度复用乘加计算单元(32)输 出的指数较大的尾数及对阶移位后的结果,执行加法运算后得到SIMD单精度乘加运算的 尾数结果。
8. 根据权利要求1?5中任意一项所述GPDSP中多功能SMD结构浮点融合乘加运算 装置,其特征在于:所述尾数乘法模块(2)中每个所述单精度乘法器包括部分积产生单元、 4级压缩单元以及尾数加法器单元;部分积产生单元接收一组尾数并通过Booth编码产生 15个部分积,经2级压缩单元将所述15个部分积压缩成6个部分积,再经过2级压缩单元 将所述6个部分积压缩成2个部分积,所述2个部分积输出至尾数加法器单元进行加法运 算,得到尾数乘法结果。
9. 根据权利要求1?5中任意一项所述GPDSP中多功能SMD结构浮点融合乘加运算 装置,其特征在于:还包括与乘加计算模块(3)连接的规格化处理模块(4),所述规格化处 理模块(4)包括前导0预测单元(41)、规格化移位单元(42)、指数修正单元(43)以及舍入 计算单元(44),所述前导0预测单元(41)计算出乘加计算模块(3)输出的尾数结果的前导 〇的个数,所述指数修正单元(43)根据所述前导0个数对所述尾数结果的指数进行修正,所 述规格化移位单元(42)根据所述前导0个数对所述尾数结果进行规格化移位,规格化移位 后的尾数结果由所述舍入计算单元(44)根据舍入模式进行舍入计算,得到最终的尾数结 果并写回。
10. 根据权利要求9所述GPDSP中多功能SMD结构浮点融合乘加运算装置,其特征在 于:所述前导〇预测单元(41)包括108位前导0预测子单元与51位前导0预测子单元,规 格化移位单元(42)包括108位规格化移位器和50位规格化移位器;双精度乘加运算、SMD 单精度乘加运算中低位部分、点积运算、复数乘法运算中实部复用108位前导0预测子单元 计算前导〇个数,根据前导〇个数由108位规格化移位器进行移位;SMD单精度运算中高 位部分和复数乘法运算中虚部复用51位前导0预测子单元计算前导0的个数,根据前导0 个数由50位规格化移位器进行规格化移位。
【文档编号】G06F7/57GK104111816SQ201410292856
【公开日】2014年10月22日 申请日期:2014年6月25日 优先权日:2014年6月25日
【发明者】雷元武, 车文博, 刘衡竹, 赵芮, 田甜, 陈书明, 彭元喜, 万江华, 郭阳, 李振涛, 马胜 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1