VHDL實現(xiàn)32位除法器(可選有無符號運算)_第1頁
VHDL實現(xiàn)32位除法器(可選有無符號運算)_第2頁
VHDL實現(xiàn)32位除法器(可選有無符號運算)_第3頁
VHDL實現(xiàn)32位除法器(可選有無符號運算)_第4頁
VHDL實現(xiàn)32位除法器(可選有無符號運算)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、除法器模塊說明1. 前言在本項目中,需要用到非2的整數(shù)次冪的除法操作,所以不能通過移位操作來完成,而且不允許使用既有的IP核,這樣,就需要在VHDL環(huán)境下自建一個除法功能模塊,以在環(huán)路計算中實現(xiàn)除法操作。2. 任務(wù)分析此除法模塊必須能夠被重復(fù)調(diào)用,實現(xiàn)環(huán)路計算時對此模塊時分復(fù)用,以達到節(jié)約邏輯資源的目的。另外,經(jīng)過對環(huán)路數(shù)據(jù)的計算,需要除法操作的數(shù)據(jù)可以控制在二進制下32位寬度以內(nèi),所以,本次除法器的設(shè)計是以32位有符號數(shù)的運算為目的的。3. 設(shè)計原理 除法器的設(shè)計主要有兩種方法,一是基于乘法操作,另一是基于減法操作。基于乘法操作的算法是把除法看做乘法的逆運算,實現(xiàn)時需要順次進行,因此運算速度

2、較慢且需要耗費大量的邏輯資源,在FPGA中實現(xiàn)是不推薦此種方法,在此也不做討論和采用;與此相比,在FPGA環(huán)境下,基于減法的操作不僅速度快,而且節(jié)省資源,而且通過除數(shù)與被除數(shù)的符號位判斷,還能夠?qū)崿F(xiàn)有符號數(shù)運算,本次除法器的設(shè)計即采用基于減法的操作。除法的數(shù)學(xué)運算公式為:A = B * Q + R (1)其中,A為被除數(shù),B為除數(shù),Q為商數(shù),R為余數(shù)。實現(xiàn)原理與步驟闡述如下:要方便的利用FPGA的特性進行求商運算,需先闡明一個運算關(guān)系。二進制下數(shù)值的左右移位等同于此數(shù)與2的n次冪的乘法,左移n位后低位補零結(jié)果等于原數(shù)值與2的n次冪的乘積,右移n位后高位補零結(jié)果等于原數(shù)值除以2的n次冪的結(jié)果。例

3、如,十進制數(shù)14,二進制表示為1110原數(shù)左移2位并補零后為 111000,即56,56=14*2*2。原數(shù)右移1位并補零后為 0111,即7,7=14/2。利用這個移位的性質(zhì),結(jié)合FPGA方便的移位操作,可以實現(xiàn)快速的除法運算。一個被除數(shù)A,仍以1110(14)為例,可以表示為,可以由最高位或者最低位開始,任意截取連續(xù)的幾位數(shù)據(jù)去做運算,相當(dāng)于原數(shù)據(jù)進行了移位后進行的運算,運算結(jié)果只需要再進行逆向的移位操作即可得到正確的結(jié)果。例如,當(dāng)被除數(shù)B為0011(3)時,可以從1110的最高位開始,“提取”最高位出來移位至最低位后與被除數(shù)0011作比較和減法操作,1110最高位1(1),相當(dāng)于1000

4、右移了3位,0001小于0011(3),次步驟的商Qt只能是0(十進制),將商再左移3位得到0000,余數(shù)R=A B * Qt =1000。再取A的次高位與上一步驟的余數(shù)相加,共同重復(fù)上述過程,所得的商和余數(shù)也各自疊加,直至被除數(shù)A所有位數(shù)都被輪詢完畢。最后所得的商和余數(shù)既是所要求的結(jié)果。在FPGA環(huán)境下,鑒于移位和數(shù)據(jù)擴展及截取操作的方便性,上述過程,可以簡化,將數(shù)據(jù)提取以及移位、疊加合并,全部用移位實現(xiàn)。具體操作可按下屬過程執(zhí)行:1. 將被除數(shù)A擴展至其原寬度的兩倍,A占據(jù)低位,高位補零,擴展后用A_ext表示。如A=1110,則A_ext=00001110。2. 將被除數(shù)B擴展至其原寬度

5、的兩倍,B占據(jù)高位,低位補零,擴展后用B_ext表示。如B=0011,則B_ext=00110000。3. 迭代運算:A_ext左移一位,低位補零,取移位后的高半部分?jǐn)?shù)據(jù),用A_ext_h表示,與被除數(shù)B作比較。此例中為0001對比0011。4. 若A_ext_h B,則商加1,A_ext_h=A_ext_h-B,否則商不加,也不做此減法操作。此時為方便,可用原A_ext的低位做為商Qt的存儲空間,因為此時A_ext的低位的有效位已經(jīng)被左移用作運算,低位補位的0沒有實際意義,只起占位作用。同時,此步驟的余數(shù)Rt=A_ext_h B * Qt=0001,但在這種移位方法中,余數(shù)保持在A_ext_

6、h中原有的位置即可,省去了按位加減和移位操作。5. 重復(fù)上面4步,直至數(shù)據(jù)A的所有位都經(jīng)過了輪詢。最后,運算完畢的A_ext的低半部分即為商,高半部分即為余數(shù)。上述過程只闡述了無符號運算的辦法,有符號數(shù)運算與此方法相同,只是在運算前先將有符號數(shù)轉(zhuǎn)換成無符號數(shù)運算并提取原數(shù)據(jù)符號,計算完畢后再根據(jù)提取的符號位將結(jié)果逆變換回有符號數(shù)結(jié)果即可。4. 代碼實現(xiàn)相應(yīng)FPGA代碼編寫完畢后經(jīng)過了靜態(tài)時序仿真驗證。代碼如下:process(clk,reset)begin if(reset=1)then sign_quo = 0; sign_res = 0; elsif(clkevent and clk=1)

7、then if(dat_load_en=1)then sign_quo = (divisor(31) xor dividend(31) and sign_sel; -有符號數(shù)除法運算時商的符號 sign_res = dividend(31) and sign_sel; -除法器計算的余數(shù)符號與被除數(shù)相同 end if; end if;end process;process(clk,reset)begin if(reset=1)then tmpa 0); elsif(clkevent and clk=1)then if(dat_load_en=1)then -只在每次計算周期內(nèi)更新一次值 if(

8、sign_sel=1)then -將有符號數(shù)運算轉(zhuǎn)換為無符合數(shù)運算 if(dividend(31)=1)then tmpa = not dividend + 1; else tmpa = dividend; end if; else tmpa = dividend; end if; end if; end if;end process;process(clk,reset)begin if(reset=1)then tmpb 0); elsif(clkevent and clk=1)then if(dat_load_en=1)then if(sign_sel=1)then -將有符號數(shù)運算轉(zhuǎn)換為

9、無符合數(shù)運算 if(divisor(31)=1)then tmpb = not divisor + 1; else tmpb = divisor; end if; else tmpb = divisor; end if; end if; end if;end process;process(clk,tmpa,tmpb)variable n : integer;variable tmpa_ext,tmpb_ext : std_logic_vector(63 downto 0);begin n := 0; tmpa_ext := 00000000000000000000000000000000 &

10、 tmpa; tmpb_ext := tmpb & 00000000000000000000000000000000;- if(clkevent and clk=1)then while(n=tmpb)then tmpa_ext := tmpa_ext - tmpb_ext + 1; end if; end loop; if(sign_quo=1)then tmpa_ext(31 downto 0) := not tmpa_ext(31 downto 0) + 1; end if; if(sign_res=1)then tmpa_ext(63 downto 32) := not tmpa_ex

11、t(63 downto 32) + 1; end if; if(reset=1)then quotient 0); residue 0); elsif(clkevent and clk=1)then quotient = tmpa_ext(31 downto 0); residue = tmpa_ext(63 downto 32); end if;end process;5. 仿真驗證此程序已經(jīng)經(jīng)過了仿真驗證,此仿真激勵設(shè)置為被除數(shù)隨機設(shè)置,除數(shù)固定為7。仿真波形如圖1所示:圖1.除法器靜態(tài)時序仿真波形 由仿真波形可看到,被除數(shù)分別為-7,8,9,-10,11,12,13,-14,15,-16

12、,所得的商分別為-1,1,1,-1,1,1,1,-2,2,-2,余數(shù)分別為0,1,2,-3,4,5,6,0,1,-2。結(jié)果準(zhǔn)確無誤,時序正常,自數(shù)據(jù)輸入至得到運算結(jié)果,共需2個時鐘周期,如圖2所示。圖2,除法器時序6. 資源消耗Mapping to part: xc3s2000fg456-4Cell usage:BUF 4 usesFDC 64 usesFDCE 120 usesGND 1 useMULT_AND 22 usesMUXCY 39 usesMUXCY_L 1887 usesMUXF5 4 usesVCC 1 useXORCY 861 usesLUT1 361 usesLUT2 425 usesLUT3 816 usesLUT4 1514 usesI/O ports: 132I/O primitives: 131IBUF 67 usesO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論