版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。EDA常用電路設計程序-用VHDL進行基本邏輯電路設計總結組合邏輯電路設計、時序邏輯電路設計、狀態(tài)機設計、存儲器設計(調用宏功能模塊進行設計)1組合邏輯電路設計常見組合邏輯電路設計主要有:基本門電路、3-8譯碼器、8-3線優(yōu)先編碼器、比較器、多路選擇器、三態(tài)門電路、單向總線驅動器、雙向總線緩沖器等。1.1基本門電路基本門電路用VHDL語言來描述十分方便。為方便起見,在下面的兩輸入模塊中,使用VHDL中定義的邏輯運算符,同時實現(xiàn)一個與門、或門、與非門、或非門、異或門及反相器的邏輯。LIBRARYIEEE;
2、USEIEEE.STD_LOGIC_1164.ALL;ENTITYGATEISPORT(A,B:INSTD_LOGIC;YAND,YOR,YNAND,YNOR,YNOT,YXOR:OUTSTD_LOGIC);ENDGATE;ARCHITECTUREARTOFGATEISBEGINYAND=AANDB;-與門輸出YOR=AORB;-或門輸出YNAND=ANANDB;-與非門輸出YNOR=ANORB;-或非門輸出YNOT=ANOTB;-反相器輸出YXOR=AXORB;-異或門輸出ENDART;1.23-8譯碼器下面我們分別以2種方法描述一個3-8譯碼器。方法1:使用CASE_WHEN語句LIBRA
3、RYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDECODERISPORT(SEL:INSTD_LOGIC_VECTOR(2DOWNTO0);EN:INSTD_LOGIC;-加使能控制端Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);END;ARCHITECTUREART1OFDECODERISBEGINPROCESS(SEL,EN)BEGINYY(0)Y(1)Y(2)Y(3)Y(4)Y(5)Y(6)Y(7)NULL;ENDCASE;ELSEY=”11111111”;ENDIF;ENDPROCESS;ENDART1;方法2:使用條件選擇WHENE
4、LSE語句ARCHITECTUREART2OFDECODERISBEGINY(0)=0WHEN(EN=1ANDSEL=000)ELSE1;Y(1)=0WHEN(EN=1ANDSEL=001)ELSE1;Y(2)=0WHEN(EN=1ANDSEL=010)ELSE1;Y(3)=0WHEN(EN=1ANDSEL=011)ELSE1;Y(4)=0WHEN(EN=1ANDSEL=100)ELSE1;Y(5)=0WHEN(EN=1ANDSEL=101)ELSE1;Y(6)=0WHEN(EN=1ANDSEL=110)ELSE1;Y(7)=0WHEN(EN=1ANDSEL=111)ELSE1;ENDART2
5、;注意:使用了8條WHENELSE語句1.38-3線優(yōu)先編碼器8-3線優(yōu)先編碼器輸入信號為y0、y1、y2、y3、y4、y5、y6和y7,輸出信號為OUT0、OUT1和OUT2。輸入信號中y0的優(yōu)先級別最低,依次類推,y7的優(yōu)先級別最高。下面我們用兩種方法設計8-3線優(yōu)先編碼器。方法1:使用條件賦值語句LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYENCODERISPORT(y0,y1,y2,y3,y4,y5,y6,y7:INSTD_LOGIC;OUT0,OUT1,OUT2:OUTSTD_LOGIC);ENDENCODER;ARCHITECTUREA
6、RT1OFENCODERISSIGNALOUTS:STD_LOGIC_VECTOR(2DOWNTO0);BEGINOUTS(2DOWNTO0)=111”WHENy7=1ELSE110WHENy6=1ELSE101WHENy5=1ELSE100WHENy4=1ELSE011WHENy3=1ELSE010WHENy2=1ELSE001WHENy1=1ELSE000WHENy0=1ELSEXXX;OUT0=OUTS(0);OUT1=OUTS(1);OUT2=OUTS(2);ENDART1;方法2:使用IF語句LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYE
7、NCODERISPORT(IN1:INSTD_LOGIC_VECTOR(7DOWNTO0);OUT1:OUTSTD_LOGIC_VECTOR(2DOWNTO0);ENDENCODER;ARCHITECTUREART2OFENCODERISBEGINPROCESS(IN1)BEGINIFIN1(7)=1THENOUT1=111;ELSIFIN1(6)=1THENOUT1=110;ELSIFIN1(5)=1THENOUT1=101;ELSIFIN1(4)=1THENOUT1=100;ELSIFIN1(3)=1THENOUT1=011;ELSIFIN1(2)=1THENOUT1=010;ELSIFI
8、N1(1)=1THENOUT1=001;ELSIFIN1(0)=1THENOUT1=000;ELSEOUT1=XXX;ENDIF;ENDPROCESS;ENDART2;1.4加法器帶進位的4位加法器方法1:用FOR-LOOP語句實現(xiàn)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADDER4ISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);CIN:INSTD_LOGIC;SUM:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER4;ARCHITECTUREAR
9、TOFADDER4ISSIGNALC:STD_LOGIC_VECTOR(4DOWNTO0);BEGINPROCESS(A,B,CIN,C)BEGINC(0)=CIN;FORIIN0TO3LOOP-用FOR循環(huán)語句實現(xiàn)多位相加SUM(I)=A(I)XORB(I)XORC(I);C(I+1)=(A(I)ANDB(I)OR(C(I)AND(A(I)OR(C(I)ANDB(I);ENDLOOP;COUT=C(4);-總的進位輸出ENDPROCESS;ENDART;方法2:直接使用加法“+”函數(shù)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGI
10、C_UNSIGNED.ALL;-運算符重載ENTITYADDER4_OPISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);CIN:INSTD_LOGIC;SUM:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER4_OP;ARCHITECTUREARTOFADDER4_OPISSIGNALC:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALAA,BB:STD_LOGIC_VECTOR(4DOWNTO0);BEGINAA=0&A;-4位擴展成5位,提供進位空間BB=0&B;C=AA+B
11、B+CIN;SUM=C(3DOWNTO0);COUNTB時,YA=1;當AB)THENYA=1;YB=0;YC=0;ELSIF(AB)THENYA=0;YB=1;YC=0;ELSEYA=0;YB=0;YCQQQQ=D;ENDCASE;ENDPROCESS;ENDRTL;1.6多路選擇器選擇器常用于信號的切換,用IF語句、CASE語句、條件賦值語句、選擇信號賦值語句都可以描述多路選擇器。思考:用選擇信號賦值語句如何進行描述?LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMUX4TO1ISPORT(A,B,C,D:INSTD_LOGIC;SEL:INST
12、D_LOGIC_VECTOR(1DOWNTO0);Q:OUTSTD_LOGIC);ENDMUX4TO1;ARCHITECTURERTLOFMUX4TO1ISBEGINWITHSELSELECTQ=AWHEN00“,BWHEN01,CWHEN10,DWHENOTHERS;ENDRTL;1.7總線驅動器設計:單向總線驅動器設計在微型計算機的總線驅動中經(jīng)常要用單向總線緩沖器,它通常由多個三態(tài)門組成,用來驅動地址總線和控制總線。一個8位的單向總線緩沖器如圖所示。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTR1_BUF8ISPORT(DIN:INSTD_L
13、OGIC_VECTOR(7DOWNTO0);EN:INSTD_LOGIC;DOUNT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ARCHITECTUREARTOFTR1_BUF8ISBEGINPROCESS(EN,DIN)IF(EN=1)THENDOUT=DIN;ELSEDOUT=ZZZZZZZZ;ENDIF;ENDPROCESS;ENDART;:雙向總線緩沖器設計雙向總線緩沖器用于數(shù)據(jù)總線的驅動和緩沖,典型的雙向總線緩沖器如圖所示。圖中的雙向總線緩沖器有兩個數(shù)據(jù)輸入輸出端A和B,一個方向控制端DIR和一個選通端EN。EN=0時雙向緩沖器選通DIR=0,則A=B(B送A)DI
14、R=1,則B=A(A送B)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYBIDIRISPORT(A,B:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);EN,DIR:INSTD_STD_LOGIC);ENDBIDIR;ARCHITECTUREARTOFBIDIRISSIGNALAOUT,BOUT:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(A,EN,DIR)BEGINIFEN=0ANDDIR=1THENBOUT=A;ELSEBOUTZZZZZZZZ;ENDIF;B=BOUT;ENDPROCESS;P
15、ROCESS(B,EN,DIR)BEGINIFEN=0ANDDIR=1THENAOUT=B;ELSEAOUTZZZZZZZZ;ENDIF;A=AOUT;ENDPROCESS;ENDART;2時序邏輯電路設計時序電路設計主要有:觸發(fā)器、寄存器、計數(shù)器、分頻器、序列信號發(fā)生器、序列信號檢測器2.1D觸發(fā)器的設計設計如圖所示的D觸發(fā)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF2ISPORT(CLK,CD,SD,D:INSTD_LOGIC;Q,NOTQ:OUTSTD_LOGIC);ENDDFF2;ARCHITECTURERTLOFDFF2ISBEG
16、INPROCESS(CLK,SD,CD)BEGINIFCD=0THENQ=0;NOTQ=1;ELSIFSD=0THENQ=1;NOTQ=0;ELSIFCLKEVENTANDCLK=1THENQ=D;ENDIF;ENDPROCESS;ENDRTL;2.2移位寄存器的設計下面給出一個8位的移位寄存器,其具有左移一位或右移一位、并行輸入和同步復位的功能。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTERISPORT(DATA:INSTD_LOGIC_VECTOR(7DOWNTO0);SHIFT_LEFT:INSTD_LOGIC;SHIFT_RIG
17、HT:INSTD_LOGIC;RESET:INSTD_LOGIC;MODE:INSTD_LOGIC_VECTOR(1DOWNTO0);QOUT:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0);ENDSHIFTER;ARCHITECTUREARTOFSHIFTERISBEGINPROCESSBEGINWAITUNTILRISING_EDGE(CLK);IFRESET=1THENQOUTQOUTQOUTQOUTNULL;ENDCASE;ENDIF;ENDPROCESS;ENDART;2.3計數(shù)器例:模為60具有異步復位、同步置數(shù)功能的8421BCD碼計數(shù)器LIBRARYIEEE;
18、USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYClock60ISPORT(CI,RESET,LOAD,CLK:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(7DOWNTO0);CO:OUTSTD_LOGIC;Q10,Q1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ENDCNTM60;ARCHITECTUREARTOFCNTM60ISSIGNALQH,QL:STD_LOGIC_VECTOR(3DOWNTO0);BEGINCO=1WHEN(QH=0101“ANDQL=1001“A
19、NDCI=1)ELSE0;-進位輸出的產(chǎn)生PROCESS(CLK,RESET)BEGINIFRESET=0THENQH=0000;QL=0000;-異步復位ELSIFCLKEVENTANDCLK=1THEN-同步置數(shù)IFLOAD=1THENQH=D(7DOWNTO4);QL=D(3DOWNTO0);ELSIFCI=1THEN-模60的實現(xiàn)IFQL=9THENQL=0000;IFQH=5THENQH=0000;ELSEQH=QH+1;-計數(shù)功能的實現(xiàn)ENDIFELSEQL=QL+1;ENDIF;ENDIF;-ENDIFLOADENDIF;ENDPROCESS;Q10=QH;Q1=QL;ENDAR
20、T;2.4N分頻器的設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFREDIVNISPORT(CLK:INSTD_LOGIC;OUTCLK:OUTSTD_LOGIC);ENDFREDIVN;ARCHITECTURERTLOFFREDIVNISCONSTANTN:INTEGER:=9;SIGNALCOUNT:INTEGERRANGENDOWNTO0;BEGINPROCESS(CLK)BEGINIF(CLKEVENTANDCLK=1)THENIF(COUNT=N-1)THENCOUNT=0
21、;ELSECOUNT=COUNT+1;IFCOUNT(INTEGER(N/2)THENOUTCLK=0;ELSEOUTCLK=1;ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDRTL;2.5序列信號發(fā)生器在數(shù)字信號的傳輸和數(shù)字系統(tǒng)的測試中,有時需要用到一組特定的串行數(shù)字信號,產(chǎn)生序列信號的電路稱為序列信號發(fā)生器。如產(chǎn)生“01111110”序列的序列信號發(fā)生器(序列可任意)該電路可由計數(shù)器與數(shù)據(jù)選擇器構成,其VHDL描述如下:LIBRARYIEEE;-“01111110”序列信號發(fā)生器USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UN
22、SIGNED.ALL;ENTITYSENQGENISPORT(CLK,CLR,CLK1:INSTD_LOGIC;-兩個時鐘信號ZO:OUTSTD_LOGIC);ENDSENQGEN;ARCHITECTUREARTOFSENQGENISSIGNALCOUNT:STD_LOGIC_VECTOR(2DOWNTO0);-序列發(fā)生器的關鍵是計數(shù)器,COUNT的寬度決定序列的長度,此為8位SIGNALZ:STD_LOGIC:=0;-賦初值僅對仿真有用BEGINPROCESS(CLK,CLR)-8進制計數(shù)器進程BEGINIFCLR=1THENCOUNT=000;ELSIFCLK=1ANDCLKEVENTTH
23、ENIFCOUNT=111“THENCOUNT=000;-此處可不要ELSECOUNTZZZZZZZZ=0;ENDCASE;ENDPROCESS;PROCESS(CLK1,Z)-消除毛刺的鎖存器進程BEGINIFCLK1EVENTANDCLK1=1THENZO=Z;-把中間信號通過一個觸發(fā)器寄存輸出ENDIF;ENDPROCESS;ENDART;2.6序列信號檢測器:檢測”01111110”序列LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDETECT_SISPORT(DATAIN,CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);EN
24、DDETECT_S;ARCHITECTUREARTOFDETECT_SISSIGNALREG:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLKEVENTANDCLK=1THEN-第一個IF語句REG(0)=DATAIN;-被檢測數(shù)據(jù)打入第一個寄存器的0位REG(7DOWNTO1)=REG(6DOWNTO0);-內部寄存器進行向(左)高位的移位操作ENDIF;IFREG=”01111110”THENQ=1;第二個IF語句是判斷檢測到”01111110”序列時把標志置1ELSEQ=0;ENDIF;ENDPROCESS;ENDART;-也可
25、設計一個狀態(tài)機進行檢測3狀態(tài)機的VHDL設計一般狀態(tài)機結構框圖包含四個部分:1、說明部分、2、主控時序進程、3、主控組合進程、4、輔助進程設計一個狀態(tài)機對序列數(shù)進行檢測,當這一串序列數(shù)高位在前(左移)串行進入檢測器后,若此數(shù)與預置的密碼“11100101”數(shù)相同,則輸出“A”,否則輸出“B”。LIBRARYIEEE;-單進程,符號化狀態(tài)機USEIEEE.STD_LOGIC_1164.ALL;ENTITYschk_2ISPORT(DIN,clk,clr:INSTD_LOGIC;-串行輸入數(shù)據(jù)位/工作時鐘/復位信號AB:OUTSTD_LOGIC_VECTOR(3DOWNTO0);-檢測結果輸出EN
26、Dschk_2;ARCHITECTUREbehavOFschk_2ISTYPEstateIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7,ST8);SIGNALD:STD_LOGIC_VECTOR(7DOWNTO0);-8位待檢測預置數(shù)SIGNALC_ST:state;BEGIND=11100101;-8位待檢測預置數(shù)PROCESS(CLK,CLR,DIN)BEGINIFCLR=1THENC_ST=ST0;ABIFDIN=D(7)THENC_ST=ST1;ELSEC_ST=ST0;ABIFDIN=D(6)THENC_ST=ST2;ELSEC_ST=ST0;ABIFDIN=D
27、(5)THENC_ST=ST3;ELSEC_ST=ST0;ABIFDIN=D(4)THENC_ST=ST4;ELSEC_ST=ST0;ABIFDIN=D(3)THENC_ST=ST5;ELSEC_ST=ST0;ABIFDIN=D(2)THENC_ST=ST6;ELSEC_ST=ST0;ABIFDIN=D(1)THENC_ST=ST7;ELSEC_ST=ST0;ABIFDIN=D(0)THENC_ST=ST8;ELSEC_ST=ST0;ABAB=1010;C_STC_ST=ST0;ENDCASE;ENDIF;ENDPROCESS;ENDbehav;LIBRARYIEEE;-符號化狀態(tài)機,雙進程U
28、SEIEEE.STD_LOGIC_1164.ALL;ENTITYschk_2_pISPORT(DIN,clk,clr:INSTD_LOGIC;-串行輸入數(shù)據(jù)位/工作時鐘/復位信號AB:OUTSTD_LOGIC_VECTOR(3DOWNTO0);-檢測結果輸出ENDschk_2_p;ARCHITECTUREbehavOFschk_2_pISTYPEstateIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7,ST8);SIGNALD:STD_LOGIC_VECTOR(7DOWNTO0);-8位待檢測預置數(shù)SIGNALC_ST,N_ST:state;BEGIND=11100101;-8位待檢測預置數(shù)REG:PROCESS(CLR,clk)BEGINIFCLR=1THENC_ST=ST0;-AB=1011;ELSIFCLKEVENTANDCLK=1THEN-時鐘到來時,判斷并處理當前輸入的位C_STIFDIN=D(7)THENN_ST=ST1;ELSEN_ST=ST0;ABIFDIN=D(6)THENN_ST=ST2;ELSEN_ST=ST0;ABIFDIN=D(5)THENN_ST=ST3;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論