基于FPGA的32位循環(huán)型除法器設計
引言
在數(shù)據(jù)處理過程中,除法是經(jīng)常用但也是最復雜的四則 運算。特別是針對含有除法器的FPGA設計中,除法器的運 算速度,運算精度和占用邏輯資源大小對系統(tǒng)的整體性能具 有很大影響[1]?,F(xiàn)有的EDA軟件提供的除法模塊時鐘消耗 多,占有邏輯資源量大,且除數(shù)受限,只能是2的次嘉因此, 設計一種由Verilog HDL[2]編寫的可綜合的,可以是任意除數(shù) 的,運算速度快,邏輯資源占用量小[3,4]的除法器在FPGA數(shù) 據(jù)處理中就顯得尤為必要。
1循環(huán)型除法器原理與設計
循環(huán)性除法器也叫位操作除法器,主要通過移位、相減 和比較三種操作實現(xiàn)求商和得余[5]。無論是乘法器還是除法 器都有操作空間,典型的循環(huán)型除法器又可分為操作空間可 恢復性和不可恢復性,這里采用易于控制,邏輯清晰的操作 空間不可恢復型算法。
在上述所采用算法中,首先保證被除數(shù)為正值,若為負值, 則對被除數(shù)正值化,然后進行相應的移位、減法和比較操作, 最后再對結果進行調整。具體實現(xiàn)過程如下:假設除數(shù)和被 除數(shù)都是N位,那么操作空間P的位寬就是2*N,其中P[N- 1 : 0]用來填充被除數(shù),P[2*N-1 : N-1]是用來與除數(shù)進行遞減 操作。此外,為了保證運算結果正確性,還要考慮同步操作, P[2*N-1 : N-1]和除數(shù)的遞減操作應該發(fā)生在別的空間,此處 命名為D空間,D空間具有和P空間同樣的位寬。同時,為 了方便遞減操作,我們建立位寬為33位的S空間寄存除數(shù)的 負值補碼形式。首先D空間被賦予“P+{S,(N-1)' b0}”的值, 根據(jù),P[2*N-1:N-1]+S”的結果判斷D空間的最高位'D[2*N-1]”,也就是符號位,是邏輯1還是邏輯0。如果是“D[2*N-1]”是 邏輯1那就表示P[2*N-1 : N-1]的值小于除數(shù),P空間左移一 位補0 ;如果是“D[2*N-1]”是邏輯0則表示P[2*N-1 : N-1] 的值大于除數(shù),P空間被賦予D空間的值,并且左移一位補1。 程序具體流程圖如下圖1所示:
2程序設計和仿真
傳統(tǒng)除法器是將被除數(shù)當做被減數(shù),除數(shù)當做減數(shù),然 后被除數(shù)遞減與除數(shù),每一次遞減,商數(shù)相應遞增,直到被 除數(shù)小于除數(shù)為止,此時剩下的數(shù)就是余數(shù),輸出的結果再 根據(jù)除數(shù)與被除數(shù)的正負關系進行調整。
雖然傳統(tǒng)除法器的設計與實現(xiàn)簡單,但當被除數(shù)與除數(shù) 相差比較大的時候,它消耗時鐘比較嚴重的弊端就會顯露出 來,影響除法器運算速度,占用邏輯資源也比較多,進而影響 系統(tǒng)的整體性能。本循環(huán)型除法器的程序設計整體基于狀態(tài) 機思想,所有操作都在一個always進程內完成,靈活把握“時 間點”概念,準確實現(xiàn)32位數(shù)的除法運算。
程序中,針對“D=P+{S, 32' b0}”語句,在always語 句塊內巧妙運用阻塞賦值方式,造成一個區(qū)別于同進程內非阻塞賦值的時間停止空間。在這個停止空間中,D可立即獲得 “P+{S, 32' bO}”的操作值,不用等到下一個狀態(tài)。此賦值 方式也是減少時鐘消耗和得到正確除法結果的重要保證。
還有一點就是寄存除數(shù)負值補碼形式的S空間的建立, 它運用的思想是“小空間向大空間轉換”和對除數(shù)的絕對負 值化,方便遞減操作。生成系統(tǒng)模塊圖如圖2所示,其中clk 為系統(tǒng)時鐘信號,rst為復位信號,start_flag為除法器啟動信 號,dividend[31..O]為被除數(shù),divisor[31..0]為除數(shù),done_ flag為除法器完成信號,quotient[31..0]為除法運算所得商數(shù), reminder[31..0]為除法運算所得余數(shù)。
本除法器設計基于Altera的Cyclone II系列的 EP2C8Q208C8芯片,表1所示為經(jīng)Quartus II軟件編譯、綜 合及布局布線后所顯示的傳統(tǒng)型和循環(huán)型除法器邏輯資源占用 情況對比。由表可知,傳統(tǒng)型除法器實現(xiàn)組合邏輯和時序邏 輯總的邏輯單元數(shù)為399個,而循環(huán)型除法器需要357個,比 傳統(tǒng)型除法器減少了 42個,有效降低了邏輯資源占用量,這 對某些應用到除法器且占用邏輯資源比較多的FPGA大型設 計而言,在內部資源優(yōu)化上,具有很大優(yōu)勢。
表1邏輯資源占用表 |
|||
除法器類型 |
總邏輯單元 (LE)數(shù) |
實現(xiàn)組合邏輯 所需LE數(shù) |
實現(xiàn)時序邏輯所 需LE數(shù) |
傳統(tǒng)型 |
8 256 |
299 |
100 |
循環(huán)性 |
8 256 |
252 |
105 |
圖3和圖4為分別為32位循環(huán)型除法器和傳統(tǒng)除法器在 Modelsim中的仿真效果圖,其中SQ_D[63..0]為在仿真中便于 觀察的D空間,SQ_P[63..0]為在仿真中便于觀察的P操作空 間。由兩圖比較及分析可知,循環(huán)性除法器完成除法運算具 有固定的時鐘消耗,不會因被除數(shù)和除數(shù)的變化而變化。當系統(tǒng)時鐘頻率設定為50 MHz時,循環(huán)性除法器最高工作頻率 能達到117.41 MHz,完成一次除法運算只需要0.68 ns ;傳統(tǒng) 型除法器最高工作頻率為89.3 MHz,而針對相同的被除數(shù)(這 里以1 222為例)和除數(shù)(這里除數(shù)以5為例),完成一次除 法運算需要4.937 ns,循環(huán)型除法器使除法的運算速度提高了 6倍。因此針對傳統(tǒng)除法器因被除數(shù)與除數(shù)相差比較大,而“吃 時鐘”的現(xiàn)象,循環(huán)型除法器很好的克服了這個弊端,提高了除法運算整體的運算速度。
3 結 語
本文Verilog HDL硬件描述語言和FPGA相關開發(fā)工具, 完成了 32位循環(huán)性除法器的設計。從Quartus II編譯、綜合 報告及Modelsim仿真效果圖可知,此除法器實際所得結果與 預期的理論結果值相吻合,且該除法器繼承了 FPGA設計中 的靈活性和便于移植性,如果應用于實際系統(tǒng)的設計,對系統(tǒng) 整體性能會有較明顯的提升。