您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第5章基本逻辑电路的VHDL设计
5.1组合逻辑电路设计组合逻辑电路:任意时刻的输出仅取决于该时刻数据的输入,与电路原来的状态无关。主要有基本门电路、编码器、译码器、加法器、三态输出电路【例】基本逻辑门电路的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYgateISPORT(a,b:INSTD_LOGIC;y1,y2,y3,y4,y5,y6:OUTSTD_LOGIC);END;ARCHITECTUREoneOFgateISBEGINy1=aandb;--构成与门y2=aorb;--构成或门y3=nota;--构成非门y4=anandb;--构成与非门y5=anorb;--构成或非门y6=not(axorb);--构成异或非门END;1.基本逻辑门电路在数字系统中,常常需要将某信息变换为某一特定的代码。把二进制码按一定的规律进行编排,使每组代码具有特定的含义,称为编码。具有编码功能的逻辑电路称为编码器。编码器是将2N个分立的信息代码以N个二进制码来表示。2.8-3优先编码器的设计输入输出I0I1I2I3I4I5I6I7Y2Y1Y010000000000010000000010010000001000010000011000010001000000010010100000010110000000011118线-3线编码真值表LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYencoder8_3ISPORT(i:INSTD_LOGIC_VECTOR(7downto0);y:OUTSTD_LOGIC_VECTOR(2downto0));END;ARCHITECTUREoneOFencoder8_3ISBEGINProcess(i)isbegincaseiis8线-3线编码器的VHDL描述when“00000001”=y=“000”;when00000010=y=001;when00000100=y=010;when00001000=y=011;when00010000=y=100;when00100000=y=101;when01001000=y=110;when10000000=y=111;whenothers=y=000;endcase;endprocess;endprocess;end;8线-3线编码器功能仿真波形图译码是编码的逆过程,它的功能是将具有特定含义的二进制码进行辨别,并转换成控制信号。具有译码功能的逻辑电路称为译码器。3.译码器设计译码器3线-8线741380AA1A2G1GG2A2B27Y40Y1YYYYYY6531)3-8译码器G1G2AG2BA2A1A0Y0Y1Y2Y3Y4Y5Y6Y7×1××××11111111××1×××111111110×××××111111111000000111111110000110111111100010110111111000111110111110010011110111100101111110111001101111110110011111111110输入输出3线—8线译码器74138真值表按数据流描述方式编写的3线—8线译码器74138VHDL源代码LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoder138_v2ISPORT(G1,G2A,G2B:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(2DOWNTO0);Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDdecoder138_v2;ARCHITECTUREdataflowOFdecoder138_v2ISBEGINPROCESS(G1,G2A,G2B,A)BEGINIF(G1='1'ANDG2A='0'ANDG2B='0')THENCASEAISWHEN000=Y=11111110;WHEN001=Y=11111101;WHEN010=Y=11111011;WHEN011=Y=11110111;WHEN100=Y=11101111;WHEN101=Y=11011111;WHEN110=Y=10111111;WHENOTHERS=Y=01111111;ENDCASE;ELSEY=11111111;ENDIF;ENDPROCESS;ENDdataflow;总线显示方式的3线—8线译码器74138仿真波形图7段数码显示译码电路是一个组合逻辑电路,通常的小规模专用集成IC,如74系列或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。2)7段数码显示译码器设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLED_SEGISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFLED_SEGISBEGINPROCESS(A)BEGIN【例】7段BCD译码显示器的VHDL描述CASEAISWHEN0000=LED=0111111;--显示“0”WHEN0001=LED=0000110;--显示“1”WHEN0010=LED=1011011;--显示“2”WHEN0011=LED=1001111;--显示“3”WHEN0100=LED=1100110;--显示“4”WHEN0101=LED=1101101;--显示“5”WHEN0110=LED=1111101;--显示“6”WHEN0111=LED=0000111;--显示“7”WHEN1000=LED=1111111;--显示“8”WHEN1001=LED=1101111;--显示“9”WHEN1010=LED=1110111;--显示“A”WHEN1011=LED=1111100;--显示“B”WHEN1100=LED=0111001;--显示“C”WHEN1101=LED=1011110;--显示“D”WHEN1110=LED=1111001;--显示“E”WHEN1111=LED=1110001;--显示“F”WHENOTHERS=NULL;ENDCASE;ENDPROCESS;END;例子中输出信号LED的7位分别接数码管的7个段,高位在左,低位在右。例如当LED输出为“1101111”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、1、1;接有高电平的段点亮,低电平的段不亮,于是数码管显示“9”。图7段数码显示译码电路功能仿真波形全加法器电路的外部配置如图所示全加器ABCinBCDoutCout其中Cin表示低位的进位,Cout表示向高位的进位。4.加法器设计表4-1为全加器的真值表,根据真值表,可推导出布尔方程式:BCDout=AxorBxorCinCout=(AandB)or(AandCin)or(BandCin)加法器输入加法器输出ABCinBCDoutCout0000000110010100110110010101011100111111全加器真值表LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYadder_4bitISPORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);ci:INSTD_LOGIC;s:OUTSTD_LOGIC_VECTOR(3DOWNTO0);co:OUTSTD_LOGIC);END;ARCHITECTUREoneOFadder_4bitISSIGNALtemp:STD_LOGIC_VECTOR(4DOWNTO0);BEGINtemp=('0'&a)+b+ci;s=temp(3downto0);co=temp(4);END;【例】四位二进制全加器的VHDL描述4位全加器的仿真结果VHDL语言通过指定大写的Z值表示高阻状态a:std_logic;a_bus:std_logic_vector(7downto0);指定高阻状态如下:a=‘Z’;a_bus=“ZZZZZZZZ”;5.三态门与双向缓冲电路设计三态门,是指逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路,高阻态相当于隔断状态。三态门都有一个EN为控制使能端,来控制门电路的通断。具备这三种状态的器件就叫做三态(门、总线、...)。VHDL设计中,如果用STD_LOGIC数据类型的'Z'对一个变量赋值,即会引入三态门,并在使能信号的控制下可使其输出呈高阻态,这等效于使三态门禁止输出。1)三态门设计LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYtri_gateISPORT(en:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(3DOWNTO0);dout:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFtri_gateISBEGINPROCESS(en,din)BEGINIF(en='1')thendout=din;elsedout=ZZZZ;endif;endprocess;END;【例】4位三态控制门电路的VHDL描述图5.11三态门电路的RTL电路图5.12三态门电路的功能仿真图双向总线缓冲器用于对数据总线的驱动和缓冲。一般双向总线缓冲器的模式为:两个数据输入输出端口A、B,一个使能端EN,一个方向控制端DIR。2)双向总线缓冲器双向总线驱动电路EnDIR功能00a=b01b=a1X高阻双向总线驱动电路真值表libraryieee;useieee.std_logic_1164.all;ENTITYDUB_GATEISPORT(a,b:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);en:INSTD_LOGIC;dr:INOUTSTD_LOGIC);ENDDUB_GATE;ARCHITECTUREaOFDUB_GATEISSIGNALabuf,bbuf:STD_LOGIC_VECTOR(7DOWNTO0);BEGINP1:PROCESS(a,dr,en)BEGINif(en='0')and(dr='1')thenbbuf=a;【例】双向总线缓冲器的VHDL描述elsebbuf=ZZZZZZZZ;endif;b=bbuf;ENDPROCESS;P2:PROCESS(b,dr,en)BEGINif(en='0')and(dr='0')thenabuf=b;elseabuf=ZZZZZZZZ;endif;a=abuf;ENDPROCESS;ENDa;触发器、寄存器、计数器、分频器、信号发生器等。5.2时序逻辑电路设计时序逻辑电路:是指数字电路在任何时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说和以前的输入有关。任何时序电路都以时钟信号为驱动信号,时序电路仅在时钟信号的边沿到来时,其状态才发生改变。因此,时钟信号通常是描述时序电路程序的执行条件.另外,时序电路也总是以时钟进程的形式进行描述的。1、时钟信号描述(一)时序电路特殊信号描述时钟脉冲上升沿描述IF(clk′EVENTANDclk=′1′)THENWAITUNTILclk=‘1’;IF(clk’last_value=‘0’ANDclk’eventANDclk=‘1’)THEN
本文标题:第5章基本逻辑电路的VHDL设计
链接地址:https://www.777doc.com/doc-3377160 .html