<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于FPGA的32位ALU軟核設(shè)計

          基于FPGA的32位ALU軟核設(shè)計

          作者: 時間:2011-02-28 來源:網(wǎng)絡(luò) 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/191340.htm


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



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


          上一頁 1 2 下一頁

          關(guān)鍵詞: FPGA ALU 軟核

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();