EAD課程-第7章 組合邏輯模塊_第1頁
EAD課程-第7章 組合邏輯模塊_第2頁
EAD課程-第7章 組合邏輯模塊_第3頁
EAD課程-第7章 組合邏輯模塊_第4頁
EAD課程-第7章 組合邏輯模塊_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章組合邏輯電路模塊7.1門電路

7.1.1二輸入與非門電路7.1.2二輸入與或門電路7.1.3二輸入異或門電路7.2編碼器、譯碼器、選擇器電路

7.2.18-3線優(yōu)先編碼器設(shè)計7.2.23-8線譯碼器7.2.34選1數(shù)據(jù)選擇器VHDL語言描述

2/1/202317.1

組合邏輯電路設(shè)計

7.1.1基本門電路基本門電路有與門、或門、非門、與非門、或非門和異或門等,用VHDL語言來描述十分方便?!纠?.1】2輸入與非門電路

LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;

ENTITYxx1ISPORT(a,b:INSTD_logic;y:OUTSTD_LOGIC);ENDxx1;ARCHITECTURENAND2PPOFxx1ISBEGINy<=aNANDB;ENDNAND2PP;

2/1/20232【例7.2】2輸入或非門LIBRARYieee;useieee.std_logic_1167.all;entitynor2isport(a,b:instd_logic;y:outstd_logic);endnor2;architecturenor_behaveofnor2isbeginy<=anorb;endnor_behave;【例7.3】2輸入異或門電路libraryieee;useieee.std_logic_1167.all;entityxor2isPORT(a,b:INSTD_IOGIC;y:outstd_logic);ENDXORB;ARCHITECTUREXOR_BEHAVEOFXOR2ISbeginy<=axorb;ENDXOR_BEHAVE;

2/1/20233【例7.4】同時實現(xiàn)一個與門、或門、與非門、或非門、異或門及反相器的邏輯

LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYGATEISPORT(A,B:INSTD_LOGIC;YAND,YOR,YNAND,YNOR,YNOT,YXOR:OUTSTD_LOGIC);ENDGATE;ARCHITECTUREARTOFGATEISBEGIN

YAND<=AANDB; --與門輸出YOR<=AORB; --或門輸出YNAND<=ANANDB;--與非門輸出YNOR<=ANORB; --或非門輸出YNOT<=ANOTB; --反相器輸出YXOR<=AXORB; --異或門輸出ENDART;2/1/20234

7.2編碼器、譯碼器、選擇器電路【例7.5】實現(xiàn)74LS138三線-八線譯碼器(輸出低電平有效)。三線-八線譯碼器74LS138的輸出有效電平為低電平,譯碼器的使能控制輸入端g1、g2a、g2b有效時,當3線數(shù)據(jù)輸入端cba=000時,y[7..0]=11111110(即y[0]=0);當cba=001時,y[7..0]=11111101(即y[1]=0);依此類推。

用VHDL描述的三線-八線譯碼器74LS138源程序如下:LIBRARYieee;USEieee.std_logic_1167.all;entitydecoder38isport(a,b,c,g1,g2a,g2b:instd_logic;y:outstd_logic_vector(7downto0));enddecoder38;architecturebehave38OFdecoder38issignalindata:std_logic_vector(2downto0);begin indata<=c&b&a;process(indata,g1,g2a,g2b)beginif(g1='1'andg2a='0'andg2b='0')thencaseindataiswhen"000"=>y<="11111110";when"001"=>y<="11111101";when"010"=>y<="11111011";when"011"=>y<="11110111";when"100"=>y<="11101111";when"101"=>y<="11011111";when"110"=>y<="10111111";when"111"=>y<="01111111";

whenothers=>y<="XXXXXXXX";endcase;elsey<="11111111";endif;endprocess;endbehave38;

2/1/20235【例7.6】分別以4種方法描述一個輸出高電平有效的3-8譯碼器。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;USEIEEE.STD_LOGIC_UNSIGNED_ALL;ENTITYDECODERISPORT(INP:INSTD_LOGIC_VECTOR(2DOWNTO0);OUTP:OUTBIT_VECTOR(7DOWNTO0));ENDDECODER;方法1:使用SLL邏輯運算符ARCHITECTUREART1OFDECODERISBEGINOUTP<="00000001"SLL(CONV_INTEGER(INP));ENDART1;2/1/20236方法2:使用PROCESS語句ARCHITECTUREART2OFDECODERISBEGINPROCESS(INP)BEGINOUTP<=(OTHERS=>‘1’)OUTP(COVN_INTEGER(INP))<=‘1’ENDPROCESS;ENDART2;2/1/20237方法3:使用WHENELSE語句ARCHITECTUREART3OFDECODERISBEGINOUTP(0)<=‘1’WHENINP="000"ELSE"0";OUTP(1)<=‘1’WHENINP="001"ELSE"0";OUTP(2)<=‘1’WHENINP="010"ELSE"0";OUTP(3)<=‘1’WHENINP="011"ELSE"0";OUTP(4)<=‘1’WHENINP="100"ELSE"0";OUTP(5)<=‘1’WHENINP="101"ELSE"0";OUTP(6)<=‘1’WHENINP="110"ELSE"0";OUTP(7)<=‘1’WHENINP="111"ELSE"0";ENDART3;2/1/20238方法4:使用CASE_WHEN語句ARCHITECTUREART4OFDECODERISBEGINCASEINPISWHEN"000"=>OUTP<="00000001";WHEN"001"=>OUTP<="00000010";WHEN"010"=>OUTP<="00000100";WHEN"011"=>OUTP<="00001000";WHEN"100"=>OUTP<="00010000";WHEN"101"=>OUTP<="00100000";WHEN"110"=>OUTP<="01000000";WHEN"111"=>OUTP<="10000000";WHENOTHERS=>OUTP<="XXXXXXXX";ENDCASE;ENDART4;2/1/20239

7.2.3編碼器

1.8-3線優(yōu)先編碼器8-3線優(yōu)先編碼器,輸入信號為A、B、C、D、E、F、G和H,輸出信號為OUT0、OUT1和OUT2。輸入信號中A的優(yōu)先級別最低,依次類推,H的優(yōu)先級別最高?!纠?.7】用3種方法設(shè)計8-3線優(yōu)先編碼器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYENCODERISPORT(A,B,C,D,E,F(xiàn),G,H:INSTD_LOGIC:OUT0,OUT1,OUT2:OUTSTD_LOGIC);ENDENCODER;2/1/202310方法1:使用條件賦值語句ARCHITECTUREART1OFENCODERISSIGNALOUTS:STD_LOGIC_VECTOR(2DOWNTO0);BEGINOUTS(2DOWNTO0)<="111"WHENH=‘1’ELSE"110"WHENG=‘1’ELSE"101"WHENF=‘1’ELSE"100"WHENE=‘1’ELSE"011"WHEND=‘1’ELSE"010"WHENC=‘1’ELSE"001"WHENB=‘1’ELSE"000"WHENA=‘1’ELSE"XXX";OUT0<=OUTS(0);OUT1<=OUTS(1);OUT2<=OUTS(2);ENDART1;2/1/202311方法2:使用LOOP語句ARCHITECTUREART2OFENCODERISBEGINPROCESS(A,B,C,D,E,F(xiàn),G,H)VARIABLEINPUTS:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLEI:INTEGER;BEGININPUT:=(H,G,F(xiàn),E,D,C,B,A);I:=7;WHILEI>=0ANDINPUTS(I)/=‘1’LOOPI:=I-1;ENDLOOP;(OUT2,OUT1,OUT0)<=CONV_STD_LOGIC_VECTOR(I,3);ENDPROCESS;ENDART2;2/1/202312方法3:使用IF語句LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYENCODERISPORT(IN1:INSTD_LOGIC_VECTOR(7DOWNTO0);OUT1:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDENCODER;ARCHITECTUREART3OFENCODERISBEGINPROCESS(INT1)BEGINIFIN1(7)=‘1’THENOUT1<="111";ELSIFIN1(6)=‘1’THENOUT1<="110";ELSIFIN1(5)=‘1’THENOUT1<="101";ELSIFIN1(4)=‘1’THENOUT1<="100";ELSIFIN1(3)=‘1’THENOUT1<="011";ELSIFIN1(2)=‘1’THENOUT1<="010";ELSIFIN1(1)=‘1’THENOUT1<="001";ELSIFIN1(0)=‘1’THENOUT1<="000";ELSEOUT1<="XXX";ENDIF;ENDPROCESS;ENDART3;2/1/2023132.十六進制編碼鍵盤設(shè)計

十六進制編碼鍵盤的結(jié)構(gòu)如圖7.1所示,它是一個4×4矩陣結(jié)構(gòu),用x3~x0和y3~y0等8條信號線接收16個按鍵的信息,相應(yīng)的編碼器元件符號如圖7.2所示。

圖7.1十六進制編碼鍵盤的結(jié)構(gòu)圖7.2十六進制編碼鍵盤元件符號

2/1/202314【例7.8】十六進制編碼鍵盤的VHDL描述源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYhcoderISPORT(x,y:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDhcoder;ARCHITECTUREstrucOFhcoderISBEGINPROCESS(x,y)VARIABLExy:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN xy:=(X&y); CASExyIS WHENB"11101110"=>S<=B"0000"; WHENB"11101101"=>S<=B"0001"; WHENB"11101011"=>S<=B"0010";2/1/202315 WHENB"11100111"=>S<=B"0011"; WHENB"11011110"=>S<=B"0100"; WHENB"11011101"=>S<=B"0101"; WHENB"11011011"=>S<=B"0110";WHENB"11010111"=>S<=B"0111"; WHENB"10111110"=>S<=B"1000"; WHENB"10111101"=>S<=B"1001"; WHENB"10111011"=>S<=B"1010"; WHENB"10110111"=>S<=B"1011"; WHENB"01111110"=>S<=B"1100"; WHENB"01111101"=>S<=B"1101"; WHENB"01111011"=>S<=B"1110"; WHENB"01110111"=>S<=B"1111";WHENOTHERS=>S<=B"0000"; ENDCASE;ENDPROCESS;ENDstruc;2/1/2023167.2.4數(shù)值比較器數(shù)值比較器可以比較兩個二進制是否相等,下面是一個8位比較器的VHDL描述。有兩個8位二進制數(shù),分別是A和B,輸出為EQ,當A=B時,EQ=1,否則EQ=0。

【例7.9】8位數(shù)值比較器的VHDL描述

LIBRARYIEEE;USEIEEE.STD_LOGIC_VECTOR(7DOWNTO0);ENTITYCOMPAREISPORT(A,B:INSTD_LOGIC_VECTOR(7DOWNTO0);EQ:OUTSTD_LOGIC);ENDCOMPARE;ARCHITECTUREARTOFCOMPAREISBEGINEQ<=‘1’WHENA=BELSE‘0’;ENDART;2/1/2023177.2.5數(shù)據(jù)選擇器

4選1選擇器用于四路信號的切換。4選1選擇器有4個信號輸入端INP(0)~INP(3),兩個信號選擇端A、B,一個信號輸出端Y。當A、B輸入不同的選擇信號時,就可以使INP(0)~INP(3)中某個相應(yīng)的輸入信號與輸出端Y接通?!纠?.10】4選1選擇器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYMUX41ISPORT(INP:INSTD_LOGIC_VECTOR(3DOWNTO0);A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDMUX41;ARCHITECTUREARTOFMUX41ISSIGNALSEL:STD_LOGIC_VECTOR(1DOWNTO0);2/1/202318BEGINSEL<=B&A;PROCESS(INP,SEC)BEGINIF(SEL="00")THENY<=INP(0);ELSIF(SEL="01")THENY<=INP(1);ELSIF(SEL="11")THENY<=INP(2);ELSEY<=INP(3);ENDIF;ENDPROCESS;ENDART;2/1/2023197.2.6算術(shù)運算電路加法器【例7.12】半加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYhalfIS PORT(a,b:INstd_LOGIC;

s,co:OUTstd_LOGIC);ENDhalf;ARCHITECTUREhalf1OFhalfISsignalc,d:std_logic;BEGINc<=aORb;

d<=aNANDb;

co<=NOTd;

s<=candd;ENDhalf1;

2/1/202320【例7.13】全加器,由半加器組成,以元件方式調(diào)用。LIBRARYieee;USEieee.std_logic_1167.all;ENTITYhalfIS PORT(a,b:INstd_LOGIC; s,co:OUTstd_LOGIC);ENDhalf;ARCHITECTUREhalf1OFhalfISsignalc,d:std_logic;BEGINc<=aorb;d<=anandb;co<=notd;s<=candd;endhalf1;LIBRARYieee;USEieee.std_logic_1167.all;ENTITYfullIS PORT(a,b,cin:INstd_LOGIC; s,co:OUTstd_LOGIC);ENDfull;ARCHITECTUREfull1OFfullISCOMPONENThalf PORT(a,b:INstd_LOGIC; s,co:OUTstd_LOGIC);ENDCOMPONENT;SIGNALu0_co,u0_s,u1_co:std_logic;BEGINu0:halfportmap(a,b,u0_s,u0_co);u1:halfportmap(u0_s,cin,s,u1_co);co<=u0_cooru1_co;endfull1;

2/1/2023212.乘法器【例7.14】8位乘法器的設(shè)計。8位乘法器的元件符號如圖7.4所示,a[7..0]和b[7..0]是被乘數(shù)和乘數(shù)輸入端,q[15..0]是乘積輸出端。8位乘法器源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;

ENTITYmulISPORT(a,b:INintegerrange0to255; q:OUTintegerrange0to65535);ENDmul;

ARCHITECTUREoneOFmulISBEGINq<=a*b;

ENDone;圖7.48位乘法器元件符號2/1/202322【例7.15】對輸入操作數(shù)A、B作加、減、乘、除運算LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYARITHMETICISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);Q1:OUTSTD_LOGIC_VECTOR(4DOWNTO0);Q2,Q3:OUTSTD_LOGIC_VECTOR(3DOWNTO0);Q4:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDARITHMETIC;ARCHITECTUREARTOFARITHMETICISBEGINPROCESS(A,B)BEGINQ1<=(‘0’&A)+('0'&B); --ADDITIONQ2<=A-B; --SUBTRACTIONQ3<=A/B; --DIVISIONQ4<=A*B; --MULTIPLICATIONENDPROCESS;ENDART;

2/1/2023237.2.7三態(tài)門及總線緩沖器三態(tài)門和總線緩沖器是驅(qū)動電路經(jīng)常用到的器件。1.三態(tài)門電路【例7.16】三態(tài)門電路的VHDL描述

LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYTRISTATEISPORT(EN,DIN:INSTD_LOGIC;DOUT:OUTSTD_LOGIC);ENDTRISTATE;ARCHITECTUREARTOFTRISTATEISBEGINPROCESS(EN,DIN)BEGINIFEN=‘1’THENDOUT<=DIN;ELSEDOUT<='Z';ENDIF;ENDPROCESS;ENDART;2/1/202324

2.單向總線驅(qū)動器在微型計算機的總線驅(qū)動中經(jīng)常要用單向總線緩沖器,它通常由多個三態(tài)門組成,用來驅(qū)動地址總線和控制總線。一個8位的單向總線緩沖器如圖7.5所示。圖7.5單向總線緩沖器2/1/202325【例7.17】單向總線緩沖器的VHDL描述

LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYTR1_BUF8ISPORT(DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);EN:INSTD_LOGIC;DOUNT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ARCHITECTUREARTOFTR1_BUF8ISBEGINPROCESS(EN,DIN)I

溫馨提示

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

評論

0/150

提交評論