本公開的實(shí)施例涉及一種浮點(diǎn)乘加器、處理器和電子設(shè)備。
背景技術(shù):
1、浮點(diǎn)乘加器(fma)是現(xiàn)代高性能處理器中常用的計(jì)算單元,可以執(zhí)行浮點(diǎn)乘加指令,完成a*b+c的乘加運(yùn)算,其中,a、b和c為參與乘加運(yùn)算的浮點(diǎn)操作數(shù)。浮點(diǎn)乘加器也可以執(zhí)行浮點(diǎn)加法指令和浮點(diǎn)乘法指令,例如,當(dāng)浮點(diǎn)乘加器執(zhí)行浮點(diǎn)乘法指令時(shí),可以將操作數(shù)c設(shè)置為0,相當(dāng)于執(zhí)行a*b的乘法運(yùn)算。當(dāng)浮點(diǎn)乘加器執(zhí)行浮點(diǎn)加法指令時(shí),可以將操作數(shù)b設(shè)置為1,相當(dāng)于執(zhí)行a+c的加法運(yùn)算。
技術(shù)實(shí)現(xiàn)思路
1、本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器,包括:控制模塊、接收模塊、拆分模塊、指數(shù)運(yùn)算模塊、乘法陣列模塊、對(duì)階模塊和加法模塊,其中,所述接收模塊被配置為接收用于運(yùn)算的第一操作數(shù)、第二操作數(shù)和第三操作數(shù)中的全部或僅所述第一操作數(shù)和所述第三操作數(shù),其中,所述運(yùn)算包括乘加運(yùn)算或加法運(yùn)算;所述拆分模塊被配置為分別將所述接收模塊接收的操作數(shù)拆分為符號(hào)位、指數(shù)和尾數(shù);所述指數(shù)運(yùn)算模塊被配置為對(duì)由所述拆分模塊拆分得到的指數(shù)進(jìn)行指數(shù)運(yùn)算,得到指數(shù)運(yùn)算結(jié)果;所述乘法陣列模塊被配置為,在執(zhí)行所述乘加運(yùn)算時(shí),對(duì)所述第一操作數(shù)的第一尾數(shù)和所述第二操作數(shù)的第二尾數(shù)執(zhí)行所述乘法運(yùn)算,得到乘法運(yùn)算結(jié)果;所述對(duì)階模塊被配置為根據(jù)所述指數(shù)運(yùn)算結(jié)果對(duì)所述第三操作數(shù)的第三尾數(shù)進(jìn)行對(duì)階移位,得到尾數(shù)對(duì)階結(jié)果;所述加法模塊被配置為,在執(zhí)行所述乘加運(yùn)算時(shí),基于對(duì)所述尾數(shù)對(duì)階結(jié)果和所述乘法運(yùn)算結(jié)果進(jìn)行第一加法處理得到第一加法處理結(jié)果,或者,在執(zhí)行所述加法運(yùn)算時(shí),基于對(duì)所述尾數(shù)對(duì)階結(jié)果和所述第一操作數(shù)的第一尾數(shù)進(jìn)行第二加法處理得到第二加法處理結(jié)果;以及所述控制模塊被配置為根據(jù)所述運(yùn)算的類型控制所述拆分模塊、所述指數(shù)運(yùn)算模塊、所述加法模塊和所述乘法陣列模塊的操作。
2、本公開至少一實(shí)施例提供的浮點(diǎn)乘加器,還包括選擇模塊,其中,所述選擇模塊與所述拆分模塊、所述指數(shù)運(yùn)算模塊和所述加法模塊耦接,且被配置為,根據(jù)所述控制模塊提供的控制指令,從所述拆分模塊選擇所述拆分得到的指數(shù)和尾數(shù),且將所述拆分得到的指數(shù)和尾數(shù)按照所述乘加運(yùn)算或所述加法運(yùn)算的模式送入所述指數(shù)運(yùn)算模塊和所述加法模塊。
3、在本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器中,所述選擇模塊包括多個(gè)選擇器,所述多個(gè)選擇器包括第一選擇器;所述第一選擇器與所述拆分模塊和所述指數(shù)運(yùn)算模塊耦接,且被配置為接收指數(shù)偏移值和從所述拆分模塊接收所述第二操作數(shù)的第二指數(shù),在所述運(yùn)算為所述乘法運(yùn)算時(shí),選擇所述第二指數(shù)輸出至所述指數(shù)運(yùn)算模塊,或者,在所述運(yùn)算為所述加法運(yùn)算時(shí),選擇所述指數(shù)偏移值輸出至所述指數(shù)運(yùn)算模塊。
4、在本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器中,所述加法模塊包括進(jìn)位保留加法器和加和前導(dǎo)零預(yù)測(cè)模塊,所述進(jìn)位保留加法器與所述對(duì)階模塊耦接,且被配置為對(duì)所述尾數(shù)對(duì)階結(jié)果、接收的第一加數(shù)和接收的第二加數(shù)進(jìn)行壓縮處理,得到第一壓縮數(shù)據(jù)和第二壓縮數(shù)據(jù);所述加和前導(dǎo)零預(yù)測(cè)模塊被配置為,在所述運(yùn)算為所述乘法運(yùn)算時(shí),對(duì)接收的第三加數(shù)和第四加數(shù)進(jìn)行所述第一加法處理,得到所述第一加法處理結(jié)果,或者在所述運(yùn)算為所述加法運(yùn)算時(shí),對(duì)接收的所述第三加數(shù)和所述第四加數(shù)進(jìn)行所述第二加法處理,得到所述第二加法處理結(jié)果,并配置為計(jì)算所述第一加法處理結(jié)果或所述第二加法處理結(jié)果中前導(dǎo)零的數(shù)量。
5、在本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器中,所述多個(gè)選擇器包括第二選擇器和第三選擇器,所述加和前導(dǎo)零預(yù)測(cè)模塊與所述進(jìn)位保留加法器耦接,所述第三加數(shù)和所述第四加數(shù)分別為所述第一壓縮數(shù)據(jù)和所述第二壓縮數(shù)據(jù);所述第二選擇器被配置為,在所述運(yùn)算為所述乘法運(yùn)算時(shí),選擇將所述乘法運(yùn)算結(jié)果中的第一結(jié)果提供至所述進(jìn)位保留加法器作為所述第一加數(shù),或者,在所述運(yùn)算為所述加法運(yùn)算時(shí),選擇將零提供至所述進(jìn)位保留加法器作為所述第一加數(shù);所述第三選擇器被配置為,在所述運(yùn)算為所述乘法運(yùn)算時(shí),選擇將所述乘法運(yùn)算結(jié)果中的第二結(jié)果提供至所述進(jìn)位保留加法器作為所述第二加數(shù),或者,在所述運(yùn)算為所述加法運(yùn)算時(shí),選擇將所述拆分模塊拆分得到的第一尾數(shù)提供至所述進(jìn)位保留加法器作為所述第二加數(shù)。
6、在本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器中,所述拆分模塊還被配置為,在所述運(yùn)算為所述加法運(yùn)算時(shí),對(duì)所述第一操作數(shù)的第一尾數(shù)進(jìn)行位寬擴(kuò)展處理,并將擴(kuò)展后的第一尾數(shù)提供至所述第三選擇器,其中,所述擴(kuò)展后的第一尾數(shù)與所述第二結(jié)果的位寬相同。
7、在本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器中,所述多個(gè)選擇器包括第二選擇器和第三選擇器,所述第一加數(shù)和所述第二加數(shù)分別為所述乘法運(yùn)算結(jié)果中的第一結(jié)果和第二結(jié)果;所述第二選擇器被配置為,在所述運(yùn)算為所述乘法運(yùn)算時(shí),選擇將所述第一壓縮數(shù)據(jù)提供至所述加和前導(dǎo)零預(yù)測(cè)模塊作為所述第三加數(shù),或者,在所述運(yùn)算為所述加法運(yùn)算時(shí),選擇將所述對(duì)階模塊得到的所述尾數(shù)對(duì)階結(jié)果提供至所述加和前導(dǎo)零預(yù)測(cè)模塊作為所述第三加數(shù);所述第三選擇器被配置為,在所述運(yùn)算為所述乘法運(yùn)算時(shí),選擇將所述第二壓縮數(shù)據(jù)提供至所述加和前導(dǎo)零預(yù)測(cè)模塊作為所述第四加數(shù),或者,在所述運(yùn)算為所述加法運(yùn)算時(shí),選擇將所述拆分模塊拆分得到的第一尾數(shù)提供至所述加和前導(dǎo)零預(yù)測(cè)模塊作為所述第四加數(shù)。
8、在本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器中,所述接收模塊包括第一寄存器、第二寄存器和第三寄存器,其中,所述第一寄存器、所述第二寄存器和所述第三寄存器分別被配置為存儲(chǔ)所述第一操作數(shù)、所述第二操作數(shù)和所述第三操作數(shù)。
9、在本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器中,所述接收模塊還包括所述第四寄存器,所述第四寄存器被配置為,在所述運(yùn)算為所述加法運(yùn)算時(shí),存儲(chǔ)所述第一操作數(shù),并將所述第一操作數(shù)提供至所述拆分模塊以得到用于所述加法運(yùn)算且被提供至所述加法模塊的所述第一尾數(shù)。
10、本公開至少一實(shí)施例提供一種浮點(diǎn)乘加器,還包括:規(guī)格化移位模塊,配置為對(duì)所述第一加法處理結(jié)果或所述第二加法處理結(jié)果進(jìn)行邏輯移位以獲得規(guī)格化結(jié)果,其中,所述邏輯移位的位數(shù)量等于所述前導(dǎo)零的數(shù)量;以及舍入模塊,配置為對(duì)所述規(guī)格化結(jié)果進(jìn)行舍入處理。
11、本公開至少一實(shí)施例還提供一種處理器,該處理器包括上述任一實(shí)施例提供的浮點(diǎn)乘加器。
12、本公開至少一實(shí)施例還提供一種電子設(shè)備,該電子設(shè)備包括上述任一實(shí)施例提供的浮點(diǎn)乘加器。
1.一種浮點(diǎn)乘加器,包括:控制模塊、接收模塊、拆分模塊、指數(shù)運(yùn)算模塊、乘法陣列模塊、對(duì)階模塊和加法模塊,其中,
2.如權(quán)利要求1所述的浮點(diǎn)乘加器,還包括選擇模塊,其中,
3.如權(quán)利要求2所述的浮點(diǎn)乘加器,其中,所述選擇模塊包括多個(gè)選擇器,所述多個(gè)選擇器包括第一選擇器;
4.如權(quán)利要求3所述的浮點(diǎn)乘加器,其中,所述加法模塊包括進(jìn)位保留加法器和加和前導(dǎo)零預(yù)測(cè)模塊,
5.如權(quán)利要求4所述的浮點(diǎn)乘加器,其中,所述多個(gè)選擇器包括第二選擇器和第三選擇器,所述加和前導(dǎo)零預(yù)測(cè)模塊與所述進(jìn)位保留加法器耦接,所述第三加數(shù)和所述第四加數(shù)分別為所述第一壓縮數(shù)據(jù)和所述第二壓縮數(shù)據(jù);
6.如權(quán)利要求5所述的浮點(diǎn)乘加器,其中,所述拆分模塊還被配置為,在所述運(yùn)算為所述加法運(yùn)算時(shí),對(duì)所述第一操作數(shù)的第一尾數(shù)進(jìn)行位寬擴(kuò)展處理,并將擴(kuò)展后的第一尾數(shù)提供至所述第三選擇器,其中,所述擴(kuò)展后的第一尾數(shù)與所述第二結(jié)果的位寬相同。
7.如權(quán)利要求4所述的浮點(diǎn)乘加器,其中,所述多個(gè)選擇器包括第二選擇器和第三選擇器,所述第一加數(shù)和所述第二加數(shù)分別為所述乘法運(yùn)算結(jié)果中的第一結(jié)果和第二結(jié)果;
8.如權(quán)利要求1所述的浮點(diǎn)乘加器,其中,所述接收模塊包括第一寄存器、第二寄存器和第三寄存器,其中,所述第一寄存器、所述第二寄存器和所述第三寄存器分別被配置為存儲(chǔ)所述第一操作數(shù)、所述第二操作數(shù)和所述第三操作數(shù)。
9.如權(quán)利要求8所述的浮點(diǎn)乘加器,其中,所述接收模塊還包括所述第四寄存器,
10.如權(quán)利要求1所述的浮點(diǎn)乘加器,還包括:
11.一種處理器,包括:如權(quán)利要求1-10中任一項(xiàng)所述的浮點(diǎn)乘加器。
12.一種電子設(shè)備,包括如權(quán)利要求11所述的處理器。