本發(fā)明涉及一種乘加器,尤其涉及一種可以根據(jù)操作數(shù)的位寬配置資源的乘加器。
背景技術(shù):隨著FPGA芯片容量的提高和工藝的發(fā)展,很多FPGA都預(yù)先設(shè)計(jì)并內(nèi)嵌了硬件乘加器(MACIP)。如果用戶需要實(shí)現(xiàn)多位二進(jìn)制的乘法,加法或者累加操作,為了避免占用大量的可配置邏輯和路由資源(PLB),往往都通過調(diào)用此硬件乘加器模塊(MACIP)來實(shí)現(xiàn)。例如,若需要并行實(shí)現(xiàn)4個(gè)8*8bit的乘累加操作,用戶可在代碼中例化4個(gè)MACIP實(shí)現(xiàn)。這種方法很好,用戶不用擔(dān)心MACIP的實(shí)現(xiàn)功能是否準(zhǔn)確,同時(shí)也節(jié)約了較多的可配置資源。但現(xiàn)有的FPGAMACIP在設(shè)計(jì)時(shí),由于事先無法得知用戶的具體應(yīng)用中操作數(shù)的位寬,往往都采用了較長(zhǎng)的且固定位寬的設(shè)置(例如xilinxSpartan-3A中采用了18bit),這種MACIP的設(shè)計(jì)方案在輸入的操作位數(shù)寬數(shù)較少的情況下,同樣也占用了較多的IP資源,資源利用效率低。由于FPGA內(nèi)嵌了硬件乘加器,所以FPGA在數(shù)字信號(hào)處理系統(tǒng)方面的成本和功耗性能已經(jīng)接近專用的DSP處理器。在實(shí)現(xiàn)中,不同系列芯片中,F(xiàn)PGA內(nèi)嵌的硬件乘加器特點(diǎn)略有不同,但為了覆蓋大部分的應(yīng)用情況,從整體而言,往往將缺省的操作位數(shù)寬設(shè)置的比較長(zhǎng),即乘法器的規(guī)模比較大。如18*18bit,都能完全準(zhǔn)確的輸出36bit結(jié)果,累加運(yùn)算也可以擴(kuò)展到40bit以上。圖1為現(xiàn)有的乘加器的示意圖,如圖所示:乘法功能:18*18bit乘法操作,具有完全準(zhǔn)確的36bit輸出結(jié)果。預(yù)置數(shù)功能:當(dāng)sload有效時(shí),可將load[39:0]直接置位到輸出寄存器中,并輸出;加法功能:可實(shí)現(xiàn)最大40bit的加法操作,其中一個(gè)操作數(shù)來自于乘法器的輸出,另一個(gè)來自于輸入Z[39:0];累加功能:可將乘法器的輸出隨時(shí)鐘節(jié)拍進(jìn)行內(nèi)部累加,并在適當(dāng)?shù)墓?jié)拍時(shí)輸出。這種模式可方便的應(yīng)用于FIRFilter實(shí)現(xiàn)中;另外,一些MACIP也包含Pre-Adder功能?,F(xiàn)有技術(shù)的缺陷如下:資源利用效率低,對(duì)于一個(gè)乘法累加器,即乘加器資源,如果只使用了其少數(shù)的低位資源,則剩余的高位資源就不能再被使用了,資源利用效率低。運(yùn)算速度慢。如果僅需要實(shí)現(xiàn)一個(gè)小位寬的操作,上述結(jié)構(gòu)中,還是需要計(jì)算18bit與18bit的乘法,內(nèi)部的累加還是必須進(jìn)行40bit的累加,直到輸出結(jié)果。這極大的影響了小位寬輸出情況下的性能。乘加器是DSP的基礎(chǔ)器件,其性能的優(yōu)化是至關(guān)重要的。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的缺陷,提供了一種乘加器,可以在節(jié)約資源的情況下,快速的完成處理操作。為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種乘加器,所述乘加器包括兩個(gè)子乘加器,每個(gè)所述子乘加器具體包括:部分積產(chǎn)生器,用于對(duì)小于第一位數(shù)閾值的乘數(shù)和小于第一位數(shù)閾值的被乘數(shù)相乘,獲得部分積數(shù)據(jù);部分積壓縮器,用于對(duì)所述部分積數(shù)據(jù)進(jìn)行壓縮處理,獲得部分積壓縮數(shù)據(jù);累加壓縮器,用于對(duì)所述部分積壓縮數(shù)據(jù),以及加法數(shù)據(jù)做累加處理,獲得求和數(shù)據(jù)。本發(fā)明的乘加器可以實(shí)現(xiàn)1個(gè)18*18bit(或以下)或2個(gè)并行9*9bit(或以下)的乘加處理,資源利用率高;在操作數(shù)較大位寬時(shí)提高了運(yùn)算速度;在操作數(shù)較小位寬時(shí),提高了資源的利用率。附圖說明圖1為現(xiàn)有的乘加器的示意圖;圖2為本發(fā)明乘加器的示意圖。具體實(shí)施方式下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。本發(fā)明的乘加器(MACIP),在占用資源相同的情況下,通過靈巧的配置輸入操作數(shù)的位置,可實(shí)現(xiàn)一個(gè)第一位數(shù)閾值(第一位數(shù)),如18*18bit(含以下)且?guī)?0bit累加的操作,也可實(shí)現(xiàn)2個(gè)并行的第二位數(shù)閾值(第二位數(shù)),如9*9bit(含以下)且?guī)?0bit累加的操作,支持有符號(hào)數(shù)或無符號(hào)數(shù)。在MACIP中,為了節(jié)約面積和提高運(yùn)算速度,采用了ModifiedRadix-4boothMultipliers算法,同時(shí)在部分積(PartialProduct)累加時(shí),充分利用了算法中的壓縮技巧,將壓縮任務(wù)分配給兩個(gè)壓縮器并行實(shí)現(xiàn),提高了運(yùn)算速度。另外,在相同的IP資源上,實(shí)現(xiàn)了1個(gè)18*18bit或兩個(gè)9*9bit的MACIP,提高了資源利用率。本發(fā)明包括兩個(gè)子乘加器,子乘加器具體包括:部分積產(chǎn)生器、部分積壓縮器和累加壓縮器。部分積產(chǎn)生器用于對(duì)小于第一位數(shù)閾值的乘數(shù)和小于第一位數(shù)閾值的被乘數(shù)相乘,獲得部分積數(shù)據(jù);部分積壓縮器用于對(duì)所述部分積數(shù)據(jù)進(jìn)行壓縮處理,獲得部分積壓縮數(shù)據(jù);累加壓縮器用于對(duì)所述部分積壓縮數(shù)據(jù),以及加法數(shù)據(jù)做累加處理,獲得求和數(shù)據(jù)。圖2為本發(fā)明乘加器的示意圖,如圖所示,本實(shí)施例的乘加器具體包括兩個(gè)子乘加器,即第一子乘加器11和第二子乘加器12。第一子乘加器11具有第一部分積產(chǎn)生器111(PartialProductorgenerator)、第一部分積壓縮器112(PPSumCompressor)和第一累加壓縮器113(AccumulatorCompressor);第二子乘加器12具有第二部分積產(chǎn)生器121、第二部分積壓縮器122和第二累加壓縮器123。本發(fā)明的乘加器可以實(shí)現(xiàn)兩個(gè)第一位數(shù),例如9*9bit的運(yùn)算,OUTA[19:0]=XA[8:0]*YA[8:0]+ZA[19:0]和OUTB[19:0]=XB[8:0]*YB[8:0]+ZB[19:0],并有overflow指示;也可以實(shí)現(xiàn)一個(gè)第二位數(shù),如18*18bit的運(yùn)算,如OUT[39:0]=X[17:0]*Y[17:0]+Z[39:0]。為了兼容有符號(hào)數(shù)或無符號(hào)數(shù)的運(yùn)算,對(duì)于乘加器中的每一個(gè)子乘加器處理的任意一個(gè)操作數(shù),進(jìn)行符號(hào)位擴(kuò)展。具體符號(hào)位擴(kuò)展方式是:對(duì)于有符號(hào)數(shù),在其最高位前面擴(kuò)展符號(hào)位;對(duì)于無符號(hào)數(shù),在其最高位前面補(bǔ)零即可;以下敘述中,涉及到符號(hào)位擴(kuò)展,原則都是相同的。第一子乘加器MultA11和第二子乘加器MultB12可以共同支持1個(gè)18*18bit,或者第一子乘加器MultA11和第二子乘加器MultB12可以單獨(dú)并行9*9bit,并且兩個(gè)子乘加器是20bit*10bit的有符號(hào)數(shù)乘法器,采用了ModifiedRadix-4booth算法實(shí)現(xiàn)。下面詳細(xì)說明第一子乘加器MultA和第二子乘加器MultB如何具體處理過程。1、第一子乘加器MultA和第二子乘加器MultB分別單獨(dú)處理第一位數(shù)閾值,如9*9bit;當(dāng)乘加器處理的位數(shù)均小于第一位數(shù)閾值,例如9*9bit,則加法器可以利用第一子加法器和第二子加法器實(shí)現(xiàn)2個(gè)并行9*9bit的模式,即實(shí)現(xiàn)第一子乘加器輸出OUTA[19:0]=XA[8:0]*YA[8:0]+ZA[19:0]和第二子乘加器輸出OUTB[19:0]=XB[8:0]*YB[8:0]+ZB[19:0]。在第一子加法器的第一部分積產(chǎn)生器中,用于乘數(shù){sign,YA[8:0]}和被乘數(shù){sign,sign,XA[8:0],0,0,0,0,0,0,0,0,0}相乘,獲得部分積數(shù)據(jù)并輸出;第一部分積壓縮器對(duì)部分積數(shù)據(jù)進(jìn)行壓縮處理,獲得部分積壓縮數(shù)據(jù);第一累加壓縮器對(duì)部分積壓縮數(shù)據(jù),以及加法數(shù)據(jù)ZA[19:0]做累加處理,獲得求和數(shù)據(jù)。輸入操作數(shù)配置如下:對(duì)于MultA:被乘數(shù)為{sign,sign,XA[8:0],0,0,0,0,0,0,0,0,0};乘數(shù)為{sign,YA[8:0]};加法輸入為ZA[19:0];輸出求和數(shù)據(jù)OUTA[19:0]為MultA_out[19:0]在第二子加法器的第二部分積產(chǎn)生器中,用于乘數(shù){sign,YB[8:0]}和被乘數(shù){sign,sign,XB[8:0],0,0,0,0,0,0,0,0,0}相乘,獲得部分積數(shù)據(jù)并輸出;第二部分積壓縮器對(duì)部分積數(shù)據(jù)進(jìn)行壓縮處理,獲得部分積壓縮數(shù)據(jù);第二累加壓縮器對(duì)部分積壓縮數(shù)據(jù),以及加法數(shù)據(jù)ZB[19:0]做累加處理,獲得求和數(shù)據(jù)。輸入操作數(shù)配置如下:對(duì)于MultB:被乘數(shù)為{sign,sign,XB[8:0],0,0,0,0,0,0,0,0,0};乘數(shù)為{sign,YB[8:0]};加法輸入為ZB[19:0];輸出求和數(shù)據(jù)OUTB[19:0]為MultB_out[19:0]在2個(gè)子乘加器并行9*9bit(及以下)的模式下,第一子乘加器MultA或第二子乘加器MultB獨(dú)立運(yùn)算,將各自所有的部分積(PartialProduct,共5個(gè))壓縮并求和,產(chǎn)生OUTA或OUTB,結(jié)果可分別通過MultA_out[19:0]或MultB_out[19:0]輸出。2、第一子乘加器MultA和第二子乘加器MultB同時(shí)處理第二位數(shù)閾值,如18*18bit;當(dāng)乘加器處理的位數(shù)大于第一位數(shù)閾值,例如9*9bit,但是小于第二位數(shù)閾值,例如18*18bit,則加法器可以利用第一子加法器和第二子加法器共同實(shí)現(xiàn)18*18bit的模式,即實(shí)現(xiàn)乘加器輸出數(shù)據(jù)0UT[39:0]=X[17:0]*Y[17:0]+Z[39:0]時(shí):第一子乘加器的第一部分積產(chǎn)生器用于乘數(shù)高位Y[9:0]和被乘數(shù){sign,sign,X[17:0]}相乘,獲得第一部分積數(shù)據(jù);第二子乘加器的第二部分積產(chǎn)生器用于乘數(shù){sign,sign,Y[17:9]}低位和被乘數(shù){sign,sign,X[17:0]}相乘,獲得第二部分積數(shù)據(jù)。然后由第一累加壓縮器或第二累加壓縮器對(duì)第一部分積數(shù)據(jù)、第二部分積數(shù)據(jù)以及加法數(shù)據(jù)Z[39:0]做累加處理,獲得求和數(shù)據(jù)。輸入操作數(shù)配置如下:對(duì)于MultA:被乘數(shù)為{sign,sign,X[17:0]};乘數(shù)為Y[9:0];加法輸入為Z[39:0];對(duì)于MultB:被乘數(shù)為{sign,sign,X[17:0]};乘數(shù)為{sign,sign,Y[17:9]};加法輸入為24’d0;輸出求和數(shù)據(jù)0UT[39:0]為{MultB_out[19:0],MultA_out[19:0]}當(dāng)乘加器在處理1個(gè)18*18bit(及以下)的模式下,由于將乘數(shù)分割成了高9bit和低9bit兩部分,故首先第一子乘加器MultA和第二子乘加器MultB各自完成一半的部分積壓縮,即5個(gè)部分積在各自的乘法器內(nèi)完成了壓縮,然后第二子乘加器MultB將壓縮好的中間結(jié)果(第二壓縮部分積數(shù)據(jù))傳遞到第一子乘加器MultA的第一累加壓縮器AccumulatorCompressorA-2,與第一子乘加器MultA的中間結(jié)果(第一壓縮部分積數(shù)據(jù))和加法數(shù)據(jù)一起,完成全部壓縮并求和,最終結(jié)果通過組合{MultB_out[19:0],multA_out[19:0]}輸出。根據(jù)應(yīng)用情況,通過安排輸入操作數(shù)的具體位置,可以實(shí)現(xiàn)1個(gè)18*18bit和2個(gè)9*9bit的乘加運(yùn)算共享部分邏輯。從實(shí)現(xiàn)結(jié)構(gòu)可以看出,在18*18bit模式下,部分和的壓縮任務(wù)分成了兩塊,由MultB和MultA并行完成,最后由MultA將兩個(gè)結(jié)果相加,輸出最終結(jié)果。這樣的實(shí)現(xiàn)也提高了較長(zhǎng)位寬時(shí)的計(jì)算速度,且MultB的部分和壓縮邏輯實(shí)現(xiàn)了不同模式下的資源共享。用戶可通過MACIPUserWizard,根據(jù)具體操作數(shù)的位寬情況,靈活配置內(nèi)置的MACIP輸入。例如,可將一個(gè)18*18bit的MACIP,配置成兩個(gè)獨(dú)立的9*9bit的子乘加器使用。如現(xiàn)有技術(shù)的4個(gè)8*8bit的MACIP,此時(shí)只需要調(diào)用兩個(gè)18*18bit的MACIP即可實(shí)現(xiàn)。這在芯片資源有限且操作位數(shù)寬較少的情況下,提高了乘加器的利用效率約一倍。同時(shí)在操作位數(shù)寬較多的情況下,運(yùn)算速度也有提高。本發(fā)明的乘加器實(shí)現(xiàn)了1個(gè)18*18bit或2個(gè)并行9*9bit的MACIP,部分資源共享,資源利用率提高;根據(jù)操作數(shù)的寬度,選擇并設(shè)置硬件乘加器的操作數(shù),使用合理的結(jié)構(gòu),在較大位寬時(shí)提高了運(yùn)算速度,在較小位寬時(shí)提高了資源的利用率。專業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。以上所述的具體實(shí)施方式,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。