EDA-八位二進制乘法器_第1頁
EDA-八位二進制乘法器_第2頁
EDA-八位二進制乘法器_第3頁
EDA-八位二進制乘法器_第4頁
EDA-八位二進制乘法器_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

EDA課設(shè):選題名稱:八位二進制乘法電路(一)設(shè)計要求:分拍輸入兩個八位二進制數(shù)字,并四個數(shù)碼管顯示當(dāng)前輸入數(shù)字的十進制形式,通過使能端的控制,分拍輸出這兩位二進制數(shù)字的乘積并通過四個數(shù)碼管顯示成十進制。(二)基本算法:8位二進制乘法采用移位相加的方法。即用乘數(shù)的各位數(shù)碼,從低位開始依次與被乘數(shù)相乘,每相乘一次得到的積稱為部分積,將第一次(由乘數(shù)最低位與被乘數(shù)相乘)得到的部分積右移一位并與第二次得到的部分積相加,將加得的和右移一位再與第三次得到的部分積相加,再將相加的結(jié)果右移一位與第四次得到的部分積相加。直到所有的部分積都被加過一次。按照這種算法,可以得到下圖所示之框圖和簡單流程圖。圖中Y寄存器存放被乘數(shù)M,B寄存器存放乘數(shù)N,A累加器存放部分積。A和Y中的數(shù)據(jù)在加法器中相加后送入A中,而A和B相級聯(lián)又構(gòu)成了一個16bit的移位寄存器,當(dāng)它工作于移位模式時,可以實現(xiàn)數(shù)據(jù)的右移。由于乘數(shù)的每一位不是0就是1,對應(yīng)的部分積不是0就是被乘數(shù)本身,所以實際作部分積相加這一步時,只要根據(jù)乘數(shù)的對應(yīng)位判斷:如該位為1,則將累加器中的數(shù)據(jù)加上被乘數(shù)再移位;如該位為0時,就不加被乘數(shù)而直接移位。運算時首先將累加器A清零,并將被乘數(shù)M和乘數(shù)N分別存入寄存器Y和B,然后依據(jù)寄存器B中最右一位BO(數(shù)據(jù)NO)確定第一個部分積。將此部分積送入A累加器以后,將A連同寄存器B右移一位,部分積的最低位被移進寄存器B的最左位,乘數(shù)的最低位NO被移出寄存器B,而乘數(shù)的次低位N1被移至寄存器B的BO位。第二次仍然依據(jù)BO位的數(shù)據(jù)(N1)來確定第二個部分積,將部分積與累加器中的數(shù)據(jù)相加后右移一位,N1又被移出寄存器,數(shù)據(jù)N2被移到B0位置…?這樣,經(jīng)過8次部分積相加位的操作,完成1次乘法運算,乘數(shù)N恰好被移出寄存器B,寄存器B中保存的就是運算積的低8位數(shù)據(jù)。移位相加的次數(shù)應(yīng)用一個計數(shù)器來控制,每移位一次,計數(shù)器計一個數(shù)。當(dāng)計數(shù)器計得8個數(shù)時,發(fā)出一個信號,使電路停止操作,并輸出運算結(jié)果(流程圖是按減法計數(shù)器設(shè)計的,也可使用加法計數(shù)器)。

(三)設(shè)計方案:1、電路結(jié)構(gòu)。主要構(gòu)成如下使能控制端七乘數(shù)寄存器屮 被乘數(shù)寄存使能控制端七乘數(shù)寄存器屮 被乘數(shù)寄存數(shù)字輸入卩2、分模塊設(shè)計:A、輸入模塊:通過八個開關(guān)控制八位二進制數(shù)字輸入。使能控制輸入模塊:ifen='0'anden1='0'thenout2(15downto8)<=i1;elseifen='1'anden1='0'thenout2(7downto0)<=i1;elsenull;endif;endif;B、使能控制端模塊:通過兩個開關(guān)en、en1構(gòu)成使能控制模塊enen1功能00輸入乘數(shù)10輸入被乘數(shù)11計算并顯示結(jié)果第五位數(shù)01計算并顯示結(jié)果后四位數(shù)C、 移位加法器模塊:根據(jù)把位二進制乘法器原理,設(shè)計移位加法器VHDL程序:foriin7downto0loopif(sum2(i)='0')thenyou:="00000000";elseyou:="11111111";endif;caseiiswhen0=>sum:="00000000"&(sum1andyou)+sum;when1=>sum:="0000000"&(sum1andyou)&'0'+sum;when2=>sum:="000000"&(sum1andyou)&"00"+sum;when3=>sum:="00000"&(sum1andyou)&"000"+sum;when4=>sum:="0000"&(sum1andyou)&"0000"+sum;when5=>sum:="000"&(sum1andyou)&"00000"+sum;when6=>sum:="00"&(sum1andyou)&"000000"+sum;when7=>sum:='0'&(sum1andyou)&"0000000";whenothers=>NULL;endcase;endloop;D、 數(shù)字顯示模塊:將輸入和輸出的二進制數(shù)字轉(zhuǎn)換為十進制數(shù)并通過數(shù)碼管顯示,七段數(shù)碼管數(shù)字代碼為:十進制數(shù)七段數(shù)碼管代碼十進制數(shù)七段數(shù)碼管代碼01000000500100101111100160000011201001007111100030110000800000004001100190011000ma:=("1000000","1111001","0100100","0110000","0011001","0010010","0000011","1111000","0000000","0011000");ifen='1'anden1='1'thena9:=conv_integer(out3);elseifen='0'anden1='1'thena9:=conv_integer(out3)/10000;elsea9:=conv_integer(i1);endif;endif;foriin3downto0loopam(i):=a9rem10;a9:=a9/10;forjin9downto0loopifam(i)=jthencaseiiswhen3=>ott1<=ma(j);when2=>ott2<=ma(j);when1=>ott3<=ma(j);when0=>ott4<=ma(j);whenothers=>null;endcase;endif;endloop;endloop;3、整體程序VHDL程序代碼:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityaaisport(i1:instd_logic_vector(7downto0);en:instd_logic;en1:instd_logic;ott1:outstd_logic_vector(6downto0);ott2:outstd_logic_vector(6downto0);ott3:outstd_logic_vector(6downto0);ott4:outstd_logic_vector(6downto0);out4:outstd_logic_vector(7downto0));endaa;architecturebehaviorofaaistypenumbisarray(0to3)ofinteger;typenumpisarray(0to9)ofstd_logic_vector(6downto0);signalout2:std_logic_vector(15downto0);signalout3:std_logic_vector(15downto0);beginprocess(i1,en1)variableam:numb;variablema:nump;variablei:integer;variablej:integer;variablea9:integer;variableot1:std_logic_vector(6downto0);variableot2:std_logic_vector(6downto0);variableot3:std_logic_vector(6downto0);variableot4:std_logic_vector(6downto0);beginma:=("1000000","1111001","0100100","0110000","0011001","0010010","0000011","1111000","0000000","0011000");ifen='1'anden1='1'thena9:=conv_integer(out3);elseifen='0'anden1='1'thena9:=conv_integer(out3)/10000;elsea9:=conv_integer(i1);endif;endif;foriin3downto0loopam(i):=a9rem10;a9:=a9/10;forjin9downto0loopifam(i)=jthencaseiiswhen3=>ott1<=ma(j);when2=>ott2<=ma(j);when1=>ott3<=ma(j);when0=>ott4<=ma(j);whenothers=>null;endcase;endif;endloop;endloop;endprocess;process(en,en1)beginifen='0'anden1='0'thenout2(15downto8)<=i1;elseifen='1'anden1='0'thenout2(7downto0)<=i1;elsenull;endif;endif;endprocess;process(out2)variablesum:std_logic_vector(15downto0);variableyou:std_logic_vector(7downto0);variablei:integer;variablesum1:std_logic_vector(7downto0);variablesum2:std_logic_vector(7downto0);beginsum1:=out2(15downto8);sum2:=out2(7downto0);foriin7downto0loopif(sum2(i)='0')thenyou:="00000000";elseyou:="11111111";endif;caseiiswhen0=>sum:="00000000"&(sum1andyou)+sum;when1=>sum:="0000000"&(sum1andyou)&'0'+sum;when2=>sum:="000000"&(sum1andyou)&"00"+sum;when3=>sum:="00000"&(sum1andyou)&"000"+sum;when4=>sum:="0000"&(sum1andyou)&"0000"+sum;when5=>sum:="000"&(sum1andyou)&"00000"+sum;when6=>sum:="00"&(sum1andyou)&"000000"+sum;when7=>sum:='0'&(sum1andyou)&"0000000";whenothers=>NULL;endcase;out3<=sum;endloop;endprocess;endbehavior;仿真結(jié)果:注:En、en1為使能端;ott4、ott3、ott

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論