EDA課程設(shè)計(jì)論文——乘法器_第1頁
EDA課程設(shè)計(jì)論文——乘法器_第2頁
EDA課程設(shè)計(jì)論文——乘法器_第3頁
EDA課程設(shè)計(jì)論文——乘法器_第4頁
EDA課程設(shè)計(jì)論文——乘法器_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄一、綜述2乘法器總體設(shè)計(jì)2二、設(shè)計(jì)內(nèi)容與仿真結(jié)果21.防抖存數(shù)部分2小結(jié)52.輸入模塊部分63.LED顯示部分64.乘法部分7小結(jié)95.選擇顯示部分106.數(shù)碼管顯示部分107.整體結(jié)果12小結(jié)128.附2進(jìn)制轉(zhuǎn)BCD碼13小結(jié)14三、總結(jié)15一 乘法器總體設(shè)計(jì)本設(shè)計(jì)由防抖存數(shù)模塊,輸入模塊,乘法模塊,LED顯示模塊,選擇顯示模塊以及數(shù)碼管顯示模塊組成??蓪?shí)現(xiàn)兩個(gè)5位數(shù)相乘。用發(fā)光二極管顯示輸入數(shù)值,用7段顯示器顯示十進(jìn)制結(jié)果。乘數(shù)和被乘數(shù)分兩次由實(shí)驗(yàn)箱上的按鍵輸入,同時(shí)在數(shù)碼管顯示分別顯示乘數(shù)與被乘數(shù)。輸入顯示和計(jì)算結(jié)果顯示,采用分時(shí)顯示方式進(jìn)行,可參見計(jì)算器的顯示功能,顯示采用16進(jìn)制

2、。KEY1KEY5為數(shù)A、數(shù)B的輸入端,KEY6表示乘號(hào),KEY7表示等號(hào)。初始時(shí)刻數(shù)碼管顯示“00”,此時(shí)可直接輸入數(shù)A,數(shù)碼管顯示數(shù)A,此后按下KEY6,表示數(shù)A輸入完畢,此后輸入為數(shù)B,數(shù)碼管顯示數(shù)B,數(shù)B輸入完畢,按下KEY7,對(duì)輸入的兩數(shù)進(jìn)行乘法計(jì)算,并由數(shù)碼管顯示結(jié)果。各模塊均由VHDL語言編寫,例化成元件后采用原理圖法進(jìn)行連接??珊唵吻逦孛枋龈髂K之間信號(hào)的傳遞。實(shí)驗(yàn)箱主要由EPM7128SLC84-15及其外圍電路組成,箱上LED及數(shù)碼管均為共陽極接法,按鍵按下時(shí)輸出高電平。乘法器整體設(shè)計(jì)如下圖所示:一、 設(shè)計(jì)內(nèi)容與仿真結(jié)果1. 防抖存數(shù)部分 本設(shè)計(jì)采用按鍵輸入,所以需對(duì)按鍵

3、進(jìn)行防抖,同時(shí),由于按鍵按下后會(huì)彈起,不能保持輸出高電平,所以須對(duì)輸入處理,此處曾設(shè)計(jì)了兩種方案:方法一、 采用RS觸發(fā)器搭建而成,R端接地,在時(shí)鐘上升沿觸發(fā)下,S端輸入高電平(按下按鍵)時(shí)Q端輸出為高,此后S端輸入低電平(松開按鍵),Q端保持輸出為高。 用RS觸發(fā)器搭建的實(shí)現(xiàn)方式如圖:但此方法在輸入A時(shí)置為高的位,輸入B時(shí)仍為1,此時(shí)需要清零。所以將清零端接到”乘法”(圖中為”CHENG”)控制端,按下此鍵,表示數(shù)A輸入完成,同時(shí)對(duì)前5位清零。按下“等號(hào)”(圖中為”DENGYU”)后,計(jì)算完成,需對(duì)各位清零。在試驗(yàn)箱上實(shí)驗(yàn)時(shí)發(fā)現(xiàn),用一位按鍵清零,干擾十分嚴(yán)重,只要有輸入就會(huì)對(duì)其他位清零。故采

4、用兩位同時(shí)控制清零。“CHENG”與“RES”同時(shí)按下清前5位,“DENGYU”與“RES”同時(shí)按下清各位零。注意按“CHENG”的時(shí)間前后都要長于按“RES”的時(shí)間,按“DENGYU”的時(shí)間前后要短于按“RES”的時(shí)間,才能達(dá)到正確的效果。仿真結(jié)果如圖:方法二、 采用程序方法控制,當(dāng)檢測(cè)到輸入的上升沿時(shí)輸出取反。此時(shí)需要按鍵的輸入穩(wěn)定,故需防抖模塊,可用兩個(gè)D觸發(fā)器搭建,也可用程序描述,防抖時(shí)需要的時(shí)間延遲可計(jì)數(shù)實(shí)現(xiàn),也可對(duì)實(shí)驗(yàn)箱的時(shí)鐘分頻,得到穩(wěn)定的時(shí)鐘脈沖防抖。此處采用分頻方式實(shí)現(xiàn)。分出8HZ的頻率。整體電路如圖所示:防抖模塊主要程序:ARCHITECTURE behave OF fan

5、gdou ISSIGNAL QA,QB:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1') THENQA<=KEY;QB<=QA;END IF;KOUT<=QA AND (NOT QB);END PROCESS;END behave;程序所描述的原理圖為:仿真結(jié)果如下:KEY(保持輸入)模塊主要程序:ARCHITECTURE behave OF KEY ISBEGINPROCESS(SHURU)VARIABLE QA:STD_LOGIC;BEGINIF(SHURU'EVENT AN

6、D SHURU='1') THENQA:=NOT QA;END IF;SHUCHU<=QA;END PROCESS;END behave;仿真結(jié)果如下:可以看出,與二分頻效果相同。分頻模塊主要程序:ARCHITECTURE behave OF fenpin ISSIGNAL QA:STD_LOGIC;SIGNAL QB:STD_LOGIC;BEGINPROCESS(clk)VARIABLE I:INTEGER RANGE 0 TO 99 ;BEGINIF(clk'event and clk='1') THENIF(i<99) THENI:=I

7、+1;ELSIF(i=99) THENi:=0;QA<=NOT QA;END IF;END IF;-HZ8<=QA;END PROCESS;PROCESS(QA)VARIABLE J:INTEGER RANGE 0 TO 99;BEGINIF(QA'event and QA='1') THENIF(J<99) THENJ:=J+1;ELSIF(J=99) THENJ:=0;QB<=NOT QB;END IF;END IF;-HZ8<=QB;END PROCESS;PROCESS(QB)VARIABLE K:INTEGER RANGE 0 T

8、O 49;VARIABLE QC:STD_LOGIC;BEGINIF(QB'event and QB='1') THENIF(K<49) THENK:=K+1;ELSIF(K=49) THENK:=0;QC:=NOT QC;END IF;END IF;HZ8<=QC;END PROCESS; END behave;5分頻仿真結(jié)果如下:小結(jié):方法 一 在試驗(yàn)箱上進(jìn)行測(cè)試時(shí),干擾仍然較大,實(shí)現(xiàn)較為困難,且控制麻煩。方法二不需單獨(dú)清零,控制方便。但整體會(huì)占用較大資源,本 設(shè) 計(jì)在資源充裕的情況下采用方法二。當(dāng)然也可用撥動(dòng)開關(guān)控制,控制容易,資源占用也較少,但是為了

9、更好的模擬計(jì)算器輸入,最終并未采用此方法。在寫分頻程序時(shí),開始采用一次分頻至8HZ,此方式會(huì)占用較大資源,故分三次進(jìn)行分頻,資源占用有明顯減少,但仍然很多。此時(shí)并未對(duì)變量I,J,K設(shè)定范圍,當(dāng)對(duì)I,J,K設(shè)定范圍后,如“VARIABLE I:INTEGER RANGE 0 TO 99 ;”,資源占用大大減少。采用這兩種方法可省下很多資源。2. 輸入模塊部分本部分主要實(shí)現(xiàn)輸入數(shù)的處理,將符號(hào)為單獨(dú)取出存入1寄存器,將4為數(shù)字位存入1寄存器。當(dāng)“CHENG”為低電平時(shí),將輸入存為shuA及FA。當(dāng)“CHENG”為高電平時(shí),將輸入存為shuB及FB。主要程序如下:ARCHITECTURE behav

10、e OF shuru ISBEGINPROCESS(CLK,FU,KEY1,KEY2,KEY3,KEY4,CHENG)BEGINIF(CLK'EVENT AND CLK='1') THENIF CHENG='0' THENshuA<=KEY1&KEY2&KEY3&KEY4;fuA<=FU; ELSIF CHENG='1' THENshuB<=KEY1&KEY2&KEY3&KEY4;fuB<=FU; END IF;END IF;END PROCESS;END behav

11、e;仿真結(jié)果如下:3. LED顯示部分本部分將輸入的乘數(shù)、被乘數(shù)及控制計(jì)算的乘以、等于信號(hào)用發(fā)光二極管顯示。LED一端已經(jīng)接高電平,故輸入低電平可使其發(fā)光。有輸入模塊輸出的有效信號(hào)均為高電平,此模塊只需將輸入取反,輸出接到個(gè)二級(jí)管一端即可。主要程序如下:ARCHITECTURE behave OF led ISBEGINPROCESS(fa,fb,SA,SB)VARIABLE i:integer:=0;BEGINlA<=not fa;lB<=not fb;CC<=NOT RC;CD<=NOT RD;for i in 0 to 3 loopledA(i)<=not

12、SA(i);ledB(i)<=not SB(i);end loop;END PROCESS;END behave;仿真如下:1. 乘法部分首先分析筆算乘法方法。設(shè)A=1011,B=1101根據(jù)我們傳統(tǒng)的計(jì)算乘法的方法,乘積符號(hào)為兩數(shù)符號(hào)異或而得。其數(shù)值部分的運(yùn)算如下:A 1011B × 11011011 A× A不移位 0000 A× A左移1位 1011 0× A左移2位 1011 A× A左移3位 10001111所以 A×B=+10001111。以上筆算算法,包含A的多位左移,可對(duì)此算法進(jìn)行改進(jìn)。參照計(jì)算機(jī)組成原理一書,A

13、B=A1101=。兩數(shù)相乘的過程,可視做加法和移位(乘相當(dāng)于做一位右移)。此方法,共進(jìn)行了4次1位右移。寫程序過程中,發(fā)現(xiàn)從高位算起并左移的算法,只需進(jìn)行3次1位左移。本程序采用這用方法:AB=222B(3)A+0+B(2)A+B(1)A+B(0)A。乘以2可看成左移一位。VHDL實(shí)現(xiàn)方法,完全程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;-USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY chengfa ISPORT (fuA,fuB:IN STD_LOGIC;

14、 shuA,shuB:IN STD_LOGIC_VECTOR(3 DOWNTO 0);- CLK, dengyu:IN STD_LOGIC; fuhao:OUT STD_LOGIC; AXB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END chengfa;ARCHITECTURE cf OF chengfa ISBEGINPROCESS(DENGYU)VARIABLE QA,QB,QC:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN-IF(clk'event and clk='1') THENIF(dengyu='

15、1') THENQA:="0000"&shuA;QB:="00000000"FOR I IN 3 DOWNTO 0 LOOPCASE shuB(I) ISWHEN '1'=>QC:=QA+QB;QB:=QC;WHEN '0'=>QC:=QB;WHEN OTHERS=>NULL;END CASE;FOR J IN 6 DOWNTO 0 LOOPQB(J+1):=QB(J);- QB(0):='0'-注意要在其他各位移完后再給B(0)位置0。END LOOP;QB(0):=&#

16、39;0' END LOOP;AXB<=QC;fuhao<=fuA XOR fuB;END IF;-END IF;END PROCESS;END cf;仿真結(jié)果如下:小結(jié):本模塊并未采用被廣泛使用的分別移位整體相加的方法,而是根據(jù)課本給出的乘法算法的改進(jìn)算法再次改進(jìn),方便程序?qū)崿F(xiàn)。并為乘法運(yùn)算位數(shù)的擴(kuò)展提供了方便,只需改動(dòng)幾個(gè)數(shù)字,便可輕松實(shí)現(xiàn)更多位數(shù)的乘法運(yùn)算。雖然一開始看到這種計(jì)算方法便確定本設(shè)計(jì)要用其實(shí)現(xiàn),但實(shí)際編程過程中仍遇到了很多麻煩。開始時(shí)由于剛剛接觸EDA設(shè)計(jì),甚至不能掌握其基本思想,對(duì)程序中定義的變量QB的移位方法就困擾了很久。應(yīng)為總想著一步完成,而93標(biāo)準(zhǔn)

17、中的邏輯移位運(yùn)算符“SLL”在MAX PLUS中并不能調(diào)用,便在此停留了很久,甚至有放棄此方法的想法。后來查參考書發(fā)現(xiàn)移位寄存器的VHDL描述,才恍然大悟,循環(huán)語句便可輕松搞定。由此確定了此方法可行,就是編程描述的問題了。此時(shí)語法雖沒問題,可編輯通過。但邏輯關(guān)系卻沒有弄清,以致仿真時(shí)結(jié)果不正確。經(jīng)過反復(fù)思考,多次改動(dòng)后,才確定了上述程序。對(duì)VHDL語言的真正了解是在編寫了此模塊后,編寫過程中經(jīng)常會(huì)犯些語法錯(cuò)誤,多錯(cuò)誤的不斷改正正是學(xué)習(xí)語言的很好的方式。對(duì)于信號(hào)與變量的區(qū)別也有了初步的體會(huì)。同時(shí)發(fā)現(xiàn),需要先弄清自己的思路,對(duì)整個(gè)過程有明確的認(rèn)識(shí),不急不躁的一步步完成,才能少犯錯(cuò)誤。例如,對(duì)QB的

18、移位曾這樣書寫:FOR J IN 7 DOWNTO 1 LOOPQB(J):=QB(J-1);QB(0):='0'END LOOP;寫完之后并沒有發(fā)現(xiàn)有什么不可,仿真時(shí),用6×9等偶數(shù)乘以奇數(shù)仍能計(jì)算正確??墒钦w仿真時(shí),用11×13時(shí),卻得出131這樣的結(jié)果,13×11為133。11×10為100??偨Y(jié)之后,當(dāng)被乘數(shù)A為偶數(shù)時(shí),可得到正確結(jié)果,被乘數(shù)A為奇數(shù)乘數(shù)B為偶數(shù)時(shí),為(A-1) ×B。被乘數(shù)A為奇數(shù)乘數(shù)B為奇數(shù)時(shí),為(A-1) ×B+1。仔細(xì)查看程序,發(fā)現(xiàn)時(shí)移位時(shí)QB(0)位在每次循環(huán)時(shí)都被置零。結(jié)果程序改為

19、:FOR J IN 7 DOWNTO 1 LOOPQB(J):=QB(J-1);END LOOP;QB(0):='0'后結(jié)果正確。2. 選擇顯示部分本部分主要用于選擇數(shù)碼管需要顯示的數(shù)據(jù)。當(dāng) “DENGYU”未按下時(shí),輸出正在從鍵盤輸入的數(shù),“DENGYU”按下之后,控制其輸出乘法運(yùn)算結(jié)果。主要程序如下:ARCHITECTURE behave OF choose ISBEGINPROCESS(clk)VARIABLE QA:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINIF(clk'event and clk='1') THENQA

20、:=cheng&dengyu;CASE QA ISWHEN"00"=>XS<="0000"&shuA; fuhao<=fuA;WHEN"10"=>XS<="0000"&shuB; fuhao<=fuB;WHEN"11"=>XS<=shu; fuhao<=fu;WHEN OTHERS=>XS<="0000"&shuA; fuhao<=fuA;END CASE;END IF;E

21、ND PROCESS;END behave;仿真波形如圖:3. 數(shù)碼管顯示部分本部分主要完成譯碼功能,將送入的數(shù)據(jù)譯碼成共陽接法的數(shù)碼管可正確顯示的16進(jìn)制編碼。為使程序簡潔,將譯碼模塊編為一函數(shù),需要譯碼時(shí)只需調(diào)用此函數(shù)即可。完整程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY xianshi_hs ISPORT (FU:IN STD_LOGIC;XS:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

22、 CLK:IN STD_LOGIC; XGE,XSHI,XFU:OUT STD_LOGIC_VECTOR(7 DOWNTO 0 );END xianshi_hs;ARCHITECTURE behave OF xianshi_hs IS-SIGNAL ZSHU:STD_LOGIC_VECTOR(7 DOWNTO 0 );?FUNCTION zhuanhuan(shu:STD_LOGIC_VECTOR(3 DOWNTO 0) return STD_LOGIC_VECTOR ISVARIABLE ZSHU:STD_LOGIC_VECTOR(7 DOWNTO 0 );BEGIN CASE SHU IS

23、WHEN"0000"=>ZSHU:="00000011"WHEN"0001"=>ZSHU:="10011111"WHEN"0010"=>ZSHU:="00100101" WHEN"0011"=>ZSHU:="00001101"WHEN"0100"=>ZSHU:="10011001"WHEN"0101"=>ZSHU:="0100100

24、1"WHEN"0110"=>ZSHU:="01000001"WHEN"0111"=>ZSHU:="00011111"WHEN"1000"=>ZSHU:="00000001"WHEN"1001"=>ZSHU:="00011001"WHEN"1010"=>ZSHU:="00010001"WHEN"1011"=>ZSHU:="1

25、1000001"WHEN"1100"=>ZSHU:="01100011"WHEN"1101"=>ZSHU:="10000101"WHEN"1110"=>ZSHU:="01100001"WHEN"1111"=>ZSHU:="01110001"WHEN OTHERS=>ZSHU:="00000011"END CASE;RETURN ZSHU;END zhuanhuan;BEGINP

26、ROCESS (clk)BEGINIF(CLK'EVENT AND CLK='1') THENXGE<=zhuanhuan(XS(3 DOWNTO 0);XSHI<=zhuanhuan(XS(7 DOWNTO 4);-XBAI<=zhuanhuan(BAI);CASE FU ISWHEN'1'=>XFU<="11111101"WHEN OTHERS=>XFU<="11111111"END CASE;-XFU<="11111101" WHEN(FU=

27、'1') ELSE- "11111111"END IF;END PROCESS;END behave; 仿真結(jié)果如下:4. 整體結(jié)果將各模塊例化成元件并連線后,得到最后的原理圖:仿真結(jié)果如下:小結(jié):在初始條件下,需按下“CHENG”和“DENGYU”對(duì)這兩位進(jìn)行清零。輸入完數(shù)A后,按下“CHENG”,輸入數(shù)B,對(duì)A為高的位按鍵輸入為清零,對(duì)A為低的位按鍵輸入位置1。由于仿真時(shí)如采用適用于硬件的分頻電路需要處理教程時(shí)間,故此處采用5分頻進(jìn)行仿真。5. 附2進(jìn)制轉(zhuǎn)BCD碼原定計(jì)劃為用10進(jìn)制顯示,這樣需要用到2進(jìn)制轉(zhuǎn)BCD碼的轉(zhuǎn)換模塊。但編譯完成后,會(huì)占用很大的

28、結(jié)構(gòu)資源,便忍痛將其舍棄。完整程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY zhuan2_10 ISPORT (XS:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; GE,SHI,BAI:OUT STD_LOGIC_VECTOR(3 DOWNTO 0 );END zhuan2_10;ARCHITECTURE behave OF zhuan2_10 ISBEGIN

29、PROCESS(clk)VARIABLE QA:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE I:INTEGER RANGE 0 TO 2;VARIABLE sum_g,sum_s,sum_b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF(clk'event and clk='1') THENIF I=0 THEN QA:=XS;sum_b:="0000"sum_s:="0000"sum_g:="0000" I:=1;-END IF;ELSIF I=1 THENIF (QA>=100) THEN QA:=QA-100;sum_

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論