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