《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > EDA與制造 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的32位ALU軟核設(shè)計(jì)
基于FPGA的32位ALU軟核設(shè)計(jì)
電子科技
周殿鳳
摘要: 介紹了一種基于可編程邏輯器件FPGA和硬件描述語言VHDL的32位ALU的設(shè)計(jì)方法,。該ALU采取層次化設(shè)計(jì)方法,由控制模塊,、邏輯模塊,、加減法模塊、乘法模塊和除法模塊組成,,能實(shí)現(xiàn)32位有符號數(shù)和無符號數(shù)的加減乘除運(yùn)算,,另外還能實(shí)現(xiàn)9種邏輯運(yùn)算、6種移位運(yùn)算以及高低字節(jié)內(nèi)容互換,。該ALU在QuartuslI軟件環(huán)境下進(jìn)行了功能仿真,,通過驗(yàn)證表明,所設(shè)計(jì)的ALU完全正確,,可供直接調(diào)用,。
關(guān)鍵詞: SoPC FPGA ALU
Abstract:
Key words :

目前許多FPGA" title="FPGA">FPGA的邏輯資源(LE)都已超過1萬門,使得片上可編程系統(tǒng)SOPC" title="SOPC">SOPC已經(jīng)成為可能,。算術(shù)邏輯單元ALU" title="ALU">ALU應(yīng)用廣泛,,是片上可編程系統(tǒng)不可或缺的一部分,。利用VHDL語言在FPGA芯片上設(shè)計(jì)ALU的研究較少,,文中選用FPGA來設(shè)計(jì)32位算術(shù)邏輯單元ALU,通過VHDL語言實(shí)現(xiàn)ALU的功能,。

1 電路總體設(shè)計(jì)思想
   
算術(shù)邏輯單元ALU采用模塊化設(shè)計(jì),,可以完成32位有符號數(shù)和無符號數(shù)的加減乘除,,還可以實(shí)現(xiàn)9種邏輯運(yùn)算、6種移位操作以及高低字節(jié)內(nèi)容互換等操作,。
    總體設(shè)計(jì)圖,,如圖1所示。當(dāng)you_wu=1時(shí)實(shí)現(xiàn)有符號數(shù)加減乘除運(yùn)算,,否則為無符號數(shù)運(yùn)算,。進(jìn)行有符號數(shù)加減運(yùn)算時(shí)c為符號位,無符號數(shù)加減運(yùn)算時(shí)c表示進(jìn)位或借位,。加減法運(yùn)算和邏輯運(yùn)算結(jié)果存于y1,。乘運(yùn)算時(shí),y1放高32位,,y2放低32位,。除法運(yùn)算時(shí)y1放商,y2放余數(shù),。a,,b表示兩路32位輸入數(shù)據(jù)。



2 主要模塊功能分析
   
算術(shù)邏輯單元ALU包含5個(gè)模塊:控制模塊,、邏輯模塊,、加減法模塊、乘法模塊和除法模塊,??刂颇K比較簡單,即1個(gè)2線~4線譯碼器,,完成其他模塊的控制與選擇,。當(dāng)ctr=00時(shí)完成邏輯運(yùn)算,ctr=01時(shí)完成加減法運(yùn)算,,ctr=10時(shí)完成乘法運(yùn)算,,ctr=11時(shí)完成除法運(yùn)算。
2.1 邏輯運(yùn)算模塊
   
本模塊實(shí)現(xiàn)與,、或,、非、與非,、或非,、異或、同或,、邏輯左移,、邏輯右移、算術(shù)左移,、算術(shù)右移,、邏輯循環(huán)左移,、邏輯循環(huán)右移以及高低半字(16位)分別取反和高低字內(nèi)容互換等操作。用1個(gè)case語句即可實(shí)現(xiàn)上述全部功能,。
2.2 加減法模塊
   
加減法模塊可根據(jù)需要完成32位有符號數(shù)和無符號數(shù)的加減運(yùn)算,,在程序開始時(shí)先判斷所要進(jìn)行的運(yùn)算有無符號數(shù),對于有符號數(shù),,用符號位將兩組數(shù)擴(kuò)展為33位二進(jìn)制數(shù),,否則用0擴(kuò)展為33位二進(jìn)制數(shù),其中減法運(yùn)算采用補(bǔ)碼實(shí)現(xiàn),,所以整個(gè)程序只有加法運(yùn)算,。程序只占用68個(gè)邏輯資源(LE),非常節(jié)省資源,,而且速度很快,,是一種優(yōu)化設(shè)計(jì)。仿真圖如圖2所示,。


2.3 乘法模塊
   
比較好的帶符號數(shù)的乘法是布斯(Booth)算法,。但是本模塊既要實(shí)現(xiàn)有符號數(shù)運(yùn)算,也要實(shí)現(xiàn)無符號數(shù)運(yùn)算,,用Booth算法反而復(fù)雜,。綜合考慮邏輯資源的使用和速度兩個(gè)方面的因素,本設(shè)計(jì)采用下面的算法:不管是有符號數(shù)還是無符號數(shù)乘法,,都轉(zhuǎn)換成無符號數(shù)相乘,,最后根據(jù)需要對計(jì)算結(jié)果進(jìn)行轉(zhuǎn)換。如果是無符號數(shù)相乘,,乘積不作變化,。如果是有符號數(shù)相乘,只有兩位乘數(shù)符號不一樣時(shí)才對乘的結(jié)果做處理,,否則結(jié)果不變,。乘積處理的方法是將乘積取反加1。假設(shè)乘數(shù)是32位數(shù)a,,b,,乘法主要通過移位和加法組成,設(shè)a=a31,,a30…a0,,如果ai=1則b向左移i位且右邊添i個(gè)0,否則b不作變化,,a中有多少個(gè)1就要進(jìn)行多少次移位操作,,最后將所有移位值相加既得a×b的值。乘法的仿真圖如圖3所示。仿真結(jié)果表示設(shè)計(jì)完全正確,。32位有符號和無符號數(shù)乘法模塊占用邏輯資源不到800 LE,且由于各種移位并發(fā)進(jìn)行,,故速度較快,。


2.4 除法模塊
   
目前運(yùn)用VHDL進(jìn)行乘法運(yùn)算的研究較多,而除法只有少數(shù)學(xué)者研究,。文中綜合考慮速度和資源的占用,,采取下列算法實(shí)現(xiàn):對于32位無符號被除數(shù)a,先將a轉(zhuǎn)換成高32位是0低32位是a的數(shù)temp_a,。在每個(gè)周期開始時(shí)temp_a向左移動(dòng)一位,,最后一位補(bǔ)0,然后判斷temp_a的高32位是否≥除數(shù)b,,如是則temp_a的高32位減去b并且低32位加1,,得到的新值仍賦給temp_a。如不是直接進(jìn)入下一步,。上面的移位,、比較、減法要進(jìn)行32次,,經(jīng)過32個(gè)周期后,,運(yùn)算結(jié)束,所得到的temp_a的高32位為余數(shù),,低32位為商,。
    對于32位有符號數(shù)的除法,采用的算法是將被除數(shù)與除數(shù)均變成無符號的32位數(shù),,緊接著的計(jì)算過程與無符號數(shù)除法一樣,,只是需要判斷商和余數(shù)是正數(shù)還是負(fù)數(shù)。令,,如果d=0則被除數(shù)與除數(shù)同為正數(shù)或者負(fù)數(shù),,最終商為正數(shù)。如果d=1說明被除數(shù)與除數(shù)符號相反,,最終商為負(fù)數(shù),。被除數(shù)是負(fù)數(shù)時(shí)余數(shù)為負(fù),否則為正,。最后根據(jù)d的值對商作處理,;如果d=0商不需任何處理,如果d=1則將商取反加1才是正確的結(jié)果,。余數(shù)的調(diào)整則根據(jù)被除數(shù)的符號位進(jìn)行,。



3 結(jié)束語
   
文中在FPGA芯片上,利用VHDL語言設(shè)計(jì)了功能強(qiáng)大的32位ALU,。由于ALU是CPU的重要組成部分,,各類系統(tǒng)中都不可避免地需要ALU,,因此本設(shè)計(jì)的應(yīng)用泛圍較廣。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。