EAD课程-第7章 组合逻辑模块_第1页
EAD课程-第7章 组合逻辑模块_第2页
EAD课程-第7章 组合逻辑模块_第3页
EAD课程-第7章 组合逻辑模块_第4页
EAD课程-第7章 组合逻辑模块_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章组合逻辑电路模块7.1门电路

7.1.1二输入与非门电路7.1.2二输入与或门电路7.1.3二输入异或门电路7.2编码器、译码器、选择器电路

7.2.18-3线优先编码器设计7.2.23-8线译码器7.2.34选1数据选择器VHDL语言描述

2/1/202317.1

组合逻辑电路设计

7.1.1基本门电路基本门电路有与门、或门、非门、与非门、或非门和异或门等,用VHDL语言来描述十分方便。【例7.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】同时实现一个与门、或门、与非门、或非门、异或门及反相器的逻辑

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】实现74LS138三线-八线译码器(输出低电平有效)。三线-八线译码器74LS138的输出有效电平为低电平,译码器的使能控制输入端g1、g2a、g2b有效时,当3线数据输入端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线优先编码器8-3线优先编码器,输入信号为A、B、C、D、E、F、G和H,输出信号为OUT0、OUT1和OUT2。输入信号中A的优先级别最低,依次类推,H的优先级别最高。【例7.7】用3种方法设计8-3线优先编码器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1167.ALL;ENTITYENCODERISPORT(A,B,C,D,E,F,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,G,H)VARIABLEINPUTS:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLEI:INTEGER;BEGININPUT:=(H,G,F,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.十六进制编码键盘设计

十六进制编码键盘的结构如图7.1所示,它是一个4×4矩阵结构,用x3~x0和y3~y0等8条信号线接收16个按键的信息,相应的编码器元件符号如图7.2所示。

图7.1十六进制编码键盘的结构图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数值比较器数值比较器可以比较两个二进制是否相等,下面是一个8位比较器的VHDL描述。有两个8位二进制数,分别是A和B,输出为EQ,当A=B时,EQ=1,否则EQ=0。

【例7.9】8位数值比较器的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数据选择器

4选1选择器用于四路信号的切换。4选1选择器有4个信号输入端INP(0)~INP(3),两个信号选择端A、B,一个信号输出端Y。当A、B输入不同的选择信号时,就可以使INP(0)~INP(3)中某个相应的输入信号与输出端Y接通。【例7.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算术运算电路加法器【例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】全加器,由半加器组成,以元件方式调用。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位乘法器的设计。8位乘法器的元件符号如图7.4所示,a[7..0]和b[7..0]是被乘数和乘数输入端,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】对输入操作数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三态门及总线缓冲器三态门和总线缓冲器是驱动电路经常用到的器件。1.三态门电路【例7.16】三态门电路的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.单向总线驱动器在微型计算机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成,用来驱动地址总线和控制总线。一个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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论