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