您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于VHDL语言的乘法器的设计
JournalofChinaInstituteofTechnologyVol.29-2003.12利用VHDL設計乘法器ImplementofMultiplierbyUsingVHDL許地申Dih-ShenHsu中華技術學院電機系副教授AssociateProfessorDepartmentofElectricalEngineeringChinaInstituteofTechnology摘要在計算機結構裡加,減,乘,除是常被用到的運算,本文提出以非常高速積體電路硬體描述語言(VHDL)來描述硬體,說明如何將兩個運算元作相乘的運算。我們首先以無號數整數做乘法運算來說明其原理,設計其電路結構。其實在VHDL程式中,我們更可以載入STD_LOGIC_ARITH與STD_LOGIC_UNSIGNED元件盒之後,直接進行乘法運算,既簡單又容易擴充。最後,我們將以4-bitX4-bit的例子來做電路描述、電路合成、電路模擬並以七段顯示器將其結果顯示出來。關鍵字:非常高速積體電路硬體描述語言、電路描述、電路合成、電路模擬AbstractWehaveknownoperationthatperformaddition,subtraction,multiplication,anddivision.InthispaperwearepresentedprimarilytodescribehardwareusingbyVHDL.Wecanexplainhowmultiplicationmaybeperformedfortwooperand.Multiplicationofunsignednumbersillustratesthemainissuesinvolvedinthedesignofmultipliercircuit.Infact,aftertheSTD_LOGIC_ARITHandSTD_LOGIC_UNSIGNEDpackageswereaddedtotheVHDLprogram,itbecamenotonlysimplebutalsoeasytoextended.Next,considera4x4exampletocircuitdescription,circuitsynthesis,andcircuitsimulationbyusingVHDL.Finally,thisapproachcanalsobedisplayedby7-segment.Keyword:VHDL,circuitdescription,circuitsynthesis,circuitsimulation-1-利用VHDL設計乘法器壹.簡介VHDL是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage的英文縮寫。是一種快速的電路設計工具,功能涵蓋了電路描述、電路合成、電路模擬等三大電路設計工作[4-8]。VHDL原來是由美國國防部於70年代開始研究發展的電路設計工具,並於1987年成為IEEE的一種標準語言。原先發展的目的是為了將電子電路的設計和其內部的含意,用文件的方式儲存起來,以便其他人能夠輕易地了解電路的設計意義。這至少意味著兩種重大的改變:●設計電路可以透過文字描述的方式,完成設計工作。●電子電路也可以當作文件一樣來儲存。從VHDL每年能夠以超過30%的速度快速成長便可以知道VHDL電路設計語言不但功能強大,而且能夠滿足各個設計階層的設計工作,從ASIC設計到PCB系統設計,都能夠輕易地達成設計工作者的需求。在產品更換快速的今天,VHDL可以說是符合市場需求,VHDL有以下之優點:●功能強大。●設計靈活。●有各種不同的描述風格。●可流通性與可攜性。本文將先就無號數整數乘法運算,以四位元乘四位元作解說。接著也可作有號數兩運算元之相乘;其次,載入STD_LOGIC_ARITH與TD_LOGIC_UNSIGNED元件盒之後,直接進行乘法運算;並以七段顯示器將其結果顯示出來。貳.乘法器基本原理兩個二進位數之相乘如十進位數相乘一樣。於圖1為四位元做徒手乘法運算圖。首先由右至左逐次檢查乘數位元是否為1,如為1,將被乘數做適當地移位至適當的位置;如為0,將0放置適當位置。其次將所有移位之被乘數求其和即為所得之積,此積應為八位元。圖2為乘法中硬體的運算情形[1-3],利用多重加法器來完成。即每一步中一個四位元加法器可用來計算其新的部分乘積。於計算進行時最不重要位元在連續加法中,並不受到影響;因此他們可直接放到最後之乘積中。-2-JournalofChinaInstituteofTechnologyVol.29-2003.121000ndmultiplicamultiplier1001X10000000+01000000+001010001001000+productpartialproductpartialproductpartialproductndmultiplica1000X1001multiplier10000000000010001001000product徒手乘法圖.1乘法運算架構圖.2。参.乘法器製作概念現在我們可以運用最簡單且直觀的方式來完成所需要的硬體電路描述,所以在往後的程式中我們使用ANDGATE來做部分乘積的運算,使用全加器來計算部分乘積的最後結果。下面為全加器的布林代數式:BACSin⊕⊕=ABBCACCininout++=其中,A、B分別代表兩個輸入運算元;為前一個位元所作的加法進位,S為相加後的結果;為相加後的進位,也就是連接至下一個全加器的。這兩個代數式是全加器中的內部運作,透過全加器的運算能將所有的部分乘積相加,以得到我們所要的乘積。inCoutCinC經過上述乘法器原理之解説,我們可以將電路架構用較直觀的方式表現出來,如圖3.所示。我們將部分乘積分別放到PPXY中,例如PP00,即代表乘數中第0個位元,和被乘數第0個位元作運算,其結果放置PP00,其他都依此類推。一個全加器有兩個輸出,一個為Sum,另一個為Cout。所以我們用PSXY來表示第X列的全加器運算出來的Sum;用PCXY來表示第X列的全加器運算出來的Cout。必須注意的是上面三列的全加器是用來做部分乘積相加的,而最底下的一組全加器是用來讓上一列之PS和PC的輸出,做完最後運算之後,再將結果傳送給P0至P7的Product,這就是最後的結果。於是我們就可以直接用這架構圖和一些運算的方式,利用VHDL來寫出乘法器的程式。-3-利用VHDL設計乘法器-4-00PP01PP02PP03PP10PP11PP12PP13PP20PP21PP22PP23PP30PP31PP32PP33PPFAFAFAFAFAFAFAFAFAFAFAFA0P1P2P3P4P5P6P7P乘法器電路架構圖圖.3肆.程式架構根據圖3.乘法器電路架構圖,首先設計4X4乘法器程式架構如圖4。其次,如須擴充至16X16乘法器,只須更改常數N的設定值如圖5。我們更可以載入STD_LOGIC_ARITH與STD_LOGIC_UNSIGNED元件盒之後,直接進行乘法運算,既簡單又容易擴充。圖6.為簡便4X4乘法器程式架構;圖7.為七段顯示器程式架構;圖8.為4X4乘法器且以七段顯示器顯示之程式架構;圖9.簡便16X16乘法器程式架構;圖10.帶符號之簡便4X4乘法器程式架構。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmult1_1ISPORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);JournalofChinaInstituteofTechnologyVol.29-2003.12prod:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDmult1_1;ARCHITECTUREmult1_archOFmult1_1ISCONSTANTn:INTEGER:=4;SUBTYPEPARTISSTD_LOGIC_VECTOR(n-1DOWNTO0);TYPEPARTSISARRAY(0TO4)OFPART;SIGNALpp,pc,ps:PARTS;BEGINpgen:FORjIN0TOn-1GENERATEpgen1:FORkIN0TOn-1GENERATEpp(j)(k)=a(k)ANDb(j);ENDGENERATE;pc(0)(J)='0';ENDGENERATE;pp(4)(3)='0';pp(4)(2)='0';pp(4)(1)='0';pp(4)(0)='0';ps(0)=pp(0);prod(0)=pp(0)(0);addr:FORjIN1TOn-1GENERATEaddc:FORkIN0TOn-2GENERATEps(j)(k)=pp(j)(k)XORpc(j-1)(k)XORps(j-1)(k+1);pc(j)(k)=(pp(j)(k)ANDpc(j-1)(k))OR(pp(j)(k)ANDps(j-1)(k+1))OR(pc(j-1)(k)ANDps(j-1)(k+1));ENDGENERATE;prod(j)=ps(j)(0);ps(j)(n-1)=pp(j)(n-1);ENDGENERATE;pc(1)(3)='0';pc(2)(3)='0';pc(3)(3)='0';ps(4)(0)='0';-5-利用VHDL設計乘法器pc(n)(0)='0';addlast:FORkIN1TOn-1GENERATEps(n)(k)=pc(n)(k-1)XORpc(n-1)(k-1)XORps(n-1)(k);pc(n)(k)=(pc(n)(k-1)ANDpc(n-1)(k-1))OR(pc(n)(k-1)ANDps(n-1)(k))OR(pc(n-1)(k-1)ANDps(n-1)(k));ENDGENERATE;prod(2*n-1)=pc(n)(n-1);prod(2*n-2DOWNTOn)=ps(n)(n-1DOWNTO1);ENDmult1_arch;圖4.4X4乘法器程式架構LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmult1ISPORT(a,b:INSTD_LOGIC_VECTOR(15DOWNTO0);prod:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDmult1;ARCHITECTUREmult1_archOFmult1ISCONSTANTn:INTEGER:=16;SUBTYPEPARTISSTD_LOGIC_VECTOR(n-1DOWNTO0);TYPEPARTSISARRAY(0TO16)OFPART;SIGNALpp,pc,ps:PARTS;BEGINpgen:FORjIN0TOn-1GENERATEpgen1:FORkIN0TOn-1GENERATEpp(j)(k)=a(k)ANDb(j);ENDGENERATE;pc(0)(J)='0';ENDGENERATE;-6-JournalofChinaInstituteofTechnologyVol.29-2003.12pp(16)(15)='0';pp(16)(14)='0';pp(16)(13)='0';pp(16)(12)='0';pp(16)(11)='0';pp(16)(10)='0';pp(16)(9)='0';pp(16)(8)='0';pp(16)(7)='0';pp(16)(6)='0';pp(16)(5)='0';pp(16)(4)='0';pp(16)(3)='0';pp(16)(2)
本文标题:基于VHDL语言的乘法器的设计
链接地址:https://www.777doc.com/doc-3832977 .html