本發(fā)明涉及一種基于現(xiàn)場可編程門陣列(fpga)的64位異步乘法器。
背景技術(shù):
自上世紀70年代晶體管技術(shù)出現(xiàn)以后,同步設(shè)計幾乎成為數(shù)字系統(tǒng)的設(shè)計方法的代名詞。但當前的工藝已經(jīng)趨向制造極限,12納米向7納米的轉(zhuǎn)變已經(jīng)放緩,“極有可能首次背離摩爾定律”(johngustafson,amd首席設(shè)計師)。制造工藝的巨大進步所導(dǎo)致的時鐘歪斜、電源分布等問題,是同步設(shè)計方法的嚴峻挑戰(zhàn),同步設(shè)計方法本身無法提供這些嚴峻問題的解決方案,只能大量采用gals(全局異步和局部同步)設(shè)計方法,即采用了少量異步電路的多核技術(shù),來緩解上述挑戰(zhàn)。
現(xiàn)代異步設(shè)計引入了基于微流水線設(shè)計方法,這種設(shè)計方法的核心是異步控制器電路,用于實現(xiàn)握手通訊協(xié)議和協(xié)調(diào)電路功能。相比時鐘方案,異步電路采用局部通信模式,以握手協(xié)議完成異步控制,不需要龐大的時鐘分布網(wǎng)絡(luò),解決了時鐘扭曲的問題。異步電路空閑時幾乎沒有功耗,使整個系統(tǒng)的功耗得到有效控制。這種異步設(shè)計方法在低功耗、低電磁輻射、低散熱、模塊化等多個方面優(yōu)勢明顯。
數(shù)字乘法器是一種二進制的算術(shù)邏輯單元,因為數(shù)字電路系統(tǒng)架構(gòu)在布爾邏輯之上,所以需要一種將算術(shù)轉(zhuǎn)換成邏輯的機制,這種機制就是數(shù)字乘法器算法的本質(zhì)。數(shù)字乘法器的算法已經(jīng)比較成熟,最直觀的陣列算法,從乘數(shù)的低位開始,依次計算每一位與被乘數(shù)的乘積(部分積),而后將部分積相加得到積,對于n位乘法器而言,需要n(n+1)個全加器和n2個“與”門,實現(xiàn)這種算法的乘法器計算速度慢,面積與功耗高。
booth算法是一種廣泛采用的高效乘法器實現(xiàn)方法,這種方法首先計算被乘數(shù)與乘數(shù)各段的部分積,而后對其壓縮求和得到最終的積。其中部分積的產(chǎn)生和合并是關(guān)鍵,部分積的計算不僅影響計算速度,而且決定整個乘法器的規(guī)模。首先對booth算法做了改進,采納了經(jīng)典booth算法移位、壓縮和求和的基本框架,取消了移位后做減法計算此乘數(shù)段部分積的辦法,而在移位過程中保留多個部分積,并對其多次壓縮后加法求積。這種改進增強了功能模塊內(nèi)部的內(nèi)聚性,減弱了模塊間的耦合關(guān)系,簡化了乘法器控制電路的實現(xiàn)。
但是,由于booth算法將乘數(shù)等分為若干乘數(shù)段,乘法問題規(guī)約為各被乘數(shù)與乘數(shù)段的部分積之和。具體而言,在booth算法中,可以根據(jù)乘數(shù)段的二進制數(shù)據(jù)特征,將各段同被乘數(shù)的乘法映射為等效的移位和減法運算來求得關(guān)于此乘數(shù)段的部分積,而后再進行多次相加求積,或者多次壓縮后單次相加求積,這種算法操作相對于改進型的算法速度較慢在速度上受到很大的限制,并且目前在數(shù)字設(shè)計中大多數(shù)采用的是同步電路的設(shè)計思路,同步時鐘方案,需要龐大的時鐘分布網(wǎng)絡(luò),存在時鐘扭曲的等系列問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種運算更快、能耗更低的基于fpga的64位異步乘法器。
本發(fā)明是這樣實現(xiàn)的,一種基于fpga的64位異步乘法器,該64位異步乘法器包括8*64位乘法器,選擇器mux0,選擇器mux1,選擇器mux2,壓縮器,計數(shù)器count0,計數(shù)器count1,計數(shù)器count2,若干寄存器,超前進位加法器cla,以及控制單元,其中:
所述控制單元,采用click異步控制器組成的流水線,通過異步控制器的握手通訊來分析握手信號,并順序產(chǎn)生四組觸發(fā)信號;
所述計數(shù)器count0,用于在接收到控制單元的第一組觸發(fā)信號后,控制選擇器mux0對輸入信號在8*64位乘法器中進行運算,運算值分別存到8個寄存器中;
所述寄存器,用于存儲著上級8*64位乘法器的輸出值,在接收到控制單元的第二組觸發(fā)信號后,將8*64位乘法器的輸出值繼續(xù)往下傳遞;
所述計數(shù)器count1,用于在接收到控制單元的第三組觸發(fā)信號后,通過選擇器mux1,進一步控制8個寄存器中的數(shù),按照設(shè)定次序在壓縮器中進行壓縮運算;
所述計數(shù)器count2,用于在接收到第四組觸發(fā)信號后,控制選擇器mux2選擇上級壓縮器輸出值,并根據(jù)判斷結(jié)果將輸出值進行回調(diào)到上級壓縮器中繼續(xù)與8寄存器數(shù)據(jù)壓縮,或者將輸出值傳遞到超前進位加法器cla中;
所述超前進位加法器cla對接收到的輸出值進行相加運算并將結(jié)果輸出。
優(yōu)選地,在所述計數(shù)器count0中,所述8*64位乘法器的輸入信號為64位數(shù)的輸入信號a、8位數(shù)的輸入信號b。
高性能數(shù)字乘法器是處理器和算法芯片的核心部件,是各類復(fù)雜計算的基礎(chǔ)與核心,特別是完成高性能實時數(shù)字信號處理和圖像處理的關(guān)鍵所在,乘法器的效率直接影響芯片的性能。數(shù)字乘法器的效率主要體現(xiàn)在兩個方面,即面積和速度。選擇不同的設(shè)計方法和實現(xiàn)算法,對乘法器的面積和速度的影響非常大。
本發(fā)明提出了一種改進的booth乘法算法,其核心思想是先移位、再壓縮,最后求和,減少了各模塊間的耦合性,有利于控制電路的簡化。
此外,本發(fā)明依據(jù)純異步電路系統(tǒng)的設(shè)計方法,采用“約束數(shù)據(jù)捆綁”兩相握手通訊協(xié)議的click微流水線,根據(jù)控制和數(shù)據(jù)處理分離的策略,實現(xiàn)了這種改進算法的64位異步乘法器,并在fpga上進行了驗證。
1、基于微流水線的異步控制原理
異步設(shè)計方法的核心是異步控制器電路,異步控制器用于實現(xiàn)握手通訊協(xié)議和協(xié)調(diào)電路功能,目前主流的異步控制器單元具有三類,即celement、gasp和click。celement由muller于上世紀50年代提出,是應(yīng)用最廣的異步控制單元,實現(xiàn)了基于“數(shù)據(jù)捆綁”的握手協(xié)議,這種電路在握手通訊過程中,由于沒有對數(shù)據(jù)進行任何約束,后期需要大量的時序驗證工作才能保證電路的正確性。而gasp和click電路采用“約束數(shù)據(jù)捆綁”的握手協(xié)議,將通訊和數(shù)據(jù)管理分離為不同事件,這種事件分離的機制從原理上保證了電路的時序,與相對時序的分析配合使用保證,可以顯著簡化異步設(shè)計方法。我們采用click異步控制器組成的流水線作為控制單元,微流水線控制乘法器的模塊進行反復(fù)調(diào)用運算,由此完成最終的乘法器算法。
2、click電路與兩相單軌握手協(xié)議
click電路最早由peeters和willem等于2010年提出,實現(xiàn)了“約束數(shù)據(jù)捆綁”兩相握手通訊協(xié)議。異步控制器間以req(請求)和ack(應(yīng)答)信號進行握手通訊,兩個信號變化間,實現(xiàn)數(shù)據(jù)傳輸,并且以fire(激發(fā))信號管理數(shù)據(jù)傳輸,如附圖1所示。
3、異步微流水線控制電路
64位異步乘法器采用異步流水線控制電路進行嚴格控制各個模塊的運算時序,乘法器總共含有微流水線有19個click電路,并產(chǎn)生相應(yīng)的19個fire信號,如附圖2。異步電路由于采用握手協(xié)議產(chǎn)生各流水段局部時鐘,取代了同步集成電路中的全局時鐘,不需要龐大的時鐘分布網(wǎng)絡(luò),從而自然的解決了同步集成電路中時鐘漂移、功耗偏高等問題,并且可以獲得平均情況下的性能,具有較好的可重用性和魯棒性。當請求信號in_r傳入微流水線結(jié)構(gòu)時,請求信號便會按照順序往傳遞,最后得到應(yīng)答信號in_a。通過將微流水線控制單元進行反復(fù)調(diào)用,完成整個乘法器的運算操作。
在異步流水線的控制電路中,不只輸出觸發(fā)信號fire,而且在微流水線控制單元中還涉及到計數(shù)器等控制部分。在整個乘法器中,總共需要3個的計數(shù)器來驅(qū)動不同的選擇器,再由選擇器進一步來控制數(shù)據(jù)通路,實現(xiàn)循環(huán)流水結(jié)構(gòu)。
相比于現(xiàn)有技術(shù)的缺點和不足,本發(fā)明具有以下有益效果:
(1)與相同體系結(jié)構(gòu)下的同步乘法器相比,本發(fā)明提出的異步乘法器在能耗和面積大體不變的情況下,計算速度更快,每次的計算時間150ns左右,對于任意64位的2個二進制乘數(shù)相乘,都能快速完成乘積運算;
(2)該設(shè)計不受fpga固有頻率的影響,微流水線內(nèi)部模塊間通訊延遲最快達到1.5ns,不需要龐大的時鐘分布網(wǎng)絡(luò)和時鐘扭曲問題;
(3)本發(fā)明模塊化良好,易于層次化設(shè)計。
附圖說明
圖1是“約束數(shù)據(jù)捆綁”兩相握手通訊協(xié)議原理圖;
圖2是微流水線控制電路結(jié)構(gòu)原理圖;
圖3是本發(fā)明基于fpga的64位異步乘法器中各邏輯模塊的結(jié)構(gòu)圖;
圖4是8*64位乘法器邏輯模塊結(jié)構(gòu)圖;
圖5是乘法器仿真圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明公開了一種基于fpga的64位異步乘法器,如圖3所示,該64位異步乘法器包括8*64位乘法器,選擇器mux0,選擇器mux1,選擇器mux2,壓縮器,計數(shù)器count0,計數(shù)器count1,計數(shù)器count2,若干寄存器,超前進位加法器cla,以及控制單元(圖3中的微流水線),其中,
所述控制單元,采用click異步控制器組成的流水線,通過異步控制器的握手通訊來分析握手信號,并順序產(chǎn)生四組觸發(fā)信號;
所述計數(shù)器count0,用于在接收到控制單元的第一組觸發(fā)信號后,控制選擇器mux0對64位數(shù)的輸入信號a、8位數(shù)的輸入信號b在64位乘法器中進行運算,運算值分別存到8個寄存器中;
所述寄存器,用于存儲著上級8*64位乘法器的輸出值,在接收到控制單元的第二組觸發(fā)信號后,將8*64位乘法器的輸出值繼續(xù)往下傳遞;
所述計數(shù)器count1,用于在接收到控制單元的第三組觸發(fā)信號后,通過選擇器mux1,進一步控制8個寄存器中的數(shù),按照設(shè)定次序在壓縮器中進行壓縮運算;
所述計數(shù)器count2,接收一系列的觸發(fā)信號之后,繼而控制選擇器mux2選擇上級壓縮器輸出值,是往上回調(diào)到上級壓縮器中繼續(xù)與8寄存器數(shù)據(jù)壓縮,還是傳遞到超前進位加法器cla中。
所述超前進位加法器cla對接收到的輸出值進行相加運算并將結(jié)果輸出。
在本發(fā)明實施例中,如圖3所示,該乘法器的完成需要8*64位乘法器,選擇器mux0、mux1和mux2,壓縮器compressor,3個計數(shù)器count0、count1、count2以及最后的超前進位加法器cla等功能模塊組成。其中,count0控制選擇器將a以每8位為一組進行劃分值,總共分為8組,劃分的值分別與b在8*64位乘法器中進行運算,得到的值分別存到8個寄存器中。count1是控制8個寄存器中的數(shù)在壓縮器中進行壓縮,總共壓縮7次。count2選擇壓縮器的輸出值是回調(diào)還是傳遞到超前進位加法器cla中進行相加運算,壓縮器的壓縮運算是首先是將ff1和ff2中的值進行壓縮,然后將得到的壓縮值與ff3中的值進行壓縮。以此類推,當完成最后一次壓縮運算,得到的壓縮值將傳遞到超前進位加法器cla中,得到64位乘法器最后的輸出值。
在本發(fā)明實施例中,所述控制單元實現(xiàn)原理通過異步控制器的握手通訊來分析,如圖3所示,具體包括:
(1)fire0:在寄存器ff0中有wi_a_64bit,wi_b_64bit兩個值,fire0觸發(fā)ff0將這兩個值往下傳遞,wi_a_64bit的值到達選擇器mux0中,而wi_b_64bit將直接到達8*64位乘法器中,這兩個值等待觸發(fā)信號共同進行第一次計算。同時微流水線將握手信號繼續(xù)往下傳遞,并產(chǎn)生fire1信號。
(2)fire1、frie3、fire5至fire15:這8個觸發(fā)信號控制計數(shù)器count0進行計數(shù),計數(shù)器繼而控制選擇器mux0,將選擇器中的wi_a_64bit值進行劃分,輸出的8組值將到達8*64乘法器中,與wi_b_64bit的值進行運算,得到的值存到8個寄存器中。
(3)fire2、fire4、fire6至fire16:寄存器ff1-ff8存儲著8個上級乘法器的輸出值,將由8個fire信號的觸發(fā)寄存器,8*64位乘法器的輸出值繼續(xù)往下傳遞。
(4)fire4、fire6、fire8至fire16:這7個觸發(fā)信號控制控制計數(shù)器計數(shù)0-6,當計數(shù)器為0是,將ff1和ff2中的值經(jīng)過選擇器,傳遞到壓縮器compressor中進行壓縮運算,選擇器mux1主要作用是選擇所需要壓縮的輸入值,在數(shù)據(jù)通路上采用7級循環(huán)流水結(jié)構(gòu),并運用壓縮器樹(compressor_128bit)。普通的加法器的并行計算能力有限,由此本發(fā)明運用4-2壓縮器,這種電路可以并行地將4輸入的加法壓縮為2輸出,可以將部分積數(shù)量減少一半。4-2壓縮器由兩個一位全加器串行組成,高位壓縮不依賴于低位進位,并發(fā)性高,電路復(fù)雜度較低,運算速度較高,進而提高乘法器的整體運算效率。
(5)fire5、fire7、fire9至fire17:主要控制選擇器mux2選擇上級壓縮器輸出值是往上回調(diào)還是傳遞到超前進位加法器cla中。如fire5觸發(fā)信號到來時,將第一次的壓縮值回調(diào)到上級的選擇器mux1中,通過mux1控制ff3中的值與回調(diào)值繼續(xù)進行壓縮,此操作一直延續(xù)到fire15信號到來。當fire17信號到來時,會壓縮值往下傳遞到cla中繼續(xù)計算,計算得到的值將存在加法器cla下面的寄存器中。
(6)fire18:最后信號將觸發(fā)超前進位cla的ff1寄存器,將最終的乘積數(shù)據(jù)輸出。
在本發(fā)明實施例中,所述計數(shù)器count0中,對64位數(shù)的輸入信號a、8位數(shù)的輸入信號b在8*64位乘法器中進行運算過程,如圖4所示。
從圖4中可以看出,乘法器的輸入信號分別是a、b,其中a為64位數(shù),b為8位數(shù)。輸入的參數(shù)a將以8位寬為一組總分為8組,分別是從[7:0]到[63:56]。將這8組a分別與b放入8位的乘法器中,其中8位乘法器是由4個移位器shifter電路和壓縮器compressor組成,如圖4中multiplier1的結(jié)構(gòu)。
multiplier1是8*64位乘法器主要組成部分之一,乘法器的輸入為a[7:0]和b,先將a[7:0]以每兩位寬為一組進行劃分,共分為(a7a6)(a5a4)(a3a2)(a1a0)4組,每組值與b分別放入4個移位編碼器中進行運算,最終得到兩個15位的二進制值。在整個8*64的乘法器中,共包含8個8位乘法器,將8組a分別與b經(jīng)過第一級的乘法器計算,最終將得到16個15進制數(shù),第一階段的運算完成。
第二階段將這16個二進制值經(jīng)過4-2壓縮器樹,完成進行壓縮數(shù)值的操作,4-2壓縮器可以并行地將4輸入的壓縮為2輸出,可以將部分積數(shù)量減少一半。4-2壓縮器由兩個一位全加器串行組成,高位壓縮不依賴于低位進位,并發(fā)性高,電路復(fù)雜度較低,運算速度較高。經(jīng)過該乘法器的一系列的計算,最終得到壓縮器2個輸出值s和c,這兩個值運算值分別存到8個寄存器中,并將繼續(xù)在64位乘法器中進行計算。
本發(fā)明采用異步設(shè)計方法來實現(xiàn)這種改進型的booth算法,控制部分使用了易于時序分析的click異步控制器[組成的微流水線,功能電路使用組合邏輯實現(xiàn),二者由觸發(fā)器聯(lián)結(jié)在一起,即異步微流水線通過管理觸發(fā)器的導(dǎo)通時機,間接維護組合電路的計算次序,三者合作完成一次/多次乘法計算,構(gòu)成了一種數(shù)據(jù)通路(data-path)式的計算結(jié)構(gòu)。
本發(fā)明運用數(shù)據(jù)約束數(shù)據(jù)捆綁”兩相握手通訊協(xié)議的click微流水線來實現(xiàn)異步電路,異步電路采用局部通信模式,以握手協(xié)議完成異步控制。
本發(fā)明提出的增加部分積壓縮次數(shù)并將加(減)法后置的低耦合booth算法,這種算法通過分隔模塊的功能來提高計算效率,非常適合異步控制,進一步,本發(fā)明運用異步微流水線機制和組合功能模塊完成移位,壓縮和加法功能,設(shè)計模塊化程度高,流程簡單清晰。
與相同體系結(jié)構(gòu)下的同步乘法器相比,本發(fā)明提出的異步乘法器在能耗和面積大體不變的情況下,計算速度快了,每次的計算時間150ns左右,對于任意64位的2個二進制乘數(shù)相乘,都能快速完成乘積運算。
使用vivado平臺進行64位異步乘法器的設(shè)計與仿真,硬件描述語言使用verilog-1995(vivado是xilinx公司從rtl到比特流完整設(shè)計流程工具,運用的fpga(field-programmablegatearray)型號是xilinx公司的virtex-7(xc7vx550tffg1158-2),將wi_a_64bit=103741655961231,wi_b_64bit=112381656513586兩者相乘的一種仿真結(jié)果,具體波形圖為附圖5,在vivado的仿真文件testbench中,編寫測試代碼,之后運行時序仿真,得到最終的計算結(jié)果。
從圖5可以看出,當inr變?yōu)楦唠娖剑惒娇刂破魑帐滞ㄓ嶉_始,乘法器開始計算,總共19個fire信號以及2個計數(shù)器進行乘法器數(shù)據(jù)通路控制。電路占用的資源中,lut共占用3695個,占全部資源的1.07%;寄存器占用3335個,占全部資源的0.48%。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。