基本逻辑电路设计_第1页
基本逻辑电路设计_第2页
基本逻辑电路设计_第3页
基本逻辑电路设计_第4页
基本逻辑电路设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第七章

基本逻辑电路设计

第七章基本逻辑电路设计主要内容组合逻辑电路和时序逻辑的概念;组合逻辑电路设计实例;时序逻辑电路设计实例。主要内容组合逻辑电路和时序逻辑的概念;基本概念数字逻辑电路主要分为组合逻辑电路与时序逻辑电路两类;两者都拥有一个或者多个输入信号和输出信号,但是组合逻辑电路的输出只与当前的输入相关,而时序逻辑电路的输出不仅与现在的输入信号相关,而且与过去的输入信号相关;两种逻辑电路都是数字电路系统的重要基本组成部分,是数字系统电路的基本元素。基本概念数字逻辑电路主要分为组合逻辑电路与时序逻辑电路两类7.1组合逻辑电路设计7.7.1、译码器

译码器通常用来产生存储器或者外设的片选信号,也就是说将二进制地址码作为输入,并产生多个选择信号输出。典型的译码器有3-8译码器和4-16译码器。

3-8译码器的核心代码如下:

ENTITYdecoderIS

PORT(A,B,C,Enable:IN

STD_LOGIC;Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDdecoder;ARCHITECTUREfunOFdecoderIS

SIGNALinput:STD_LOGIC_VECTOR(2DOWNTO0);BEGIN input<=C&B&A;

PROCESS(input,Enable)

BEGIN

IF(Enable='1')THEN--使能输入高电平有效

7.1组合逻辑电路设计7.7.1、译码器7.7.1译码器(续1)3-8译码器的核心代码:CASEinputIS

WHEN"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=>NULL;

ENDCASE; ELSE y<="11111111";

ENDIF;

ENDPROCESS;ENDfun;7.7.1译码器(续1)3-8译码器的核心代码:7.7.1译码器(续2)3-8译码器的时序仿真波形如下:7.7.1译码器(续2)3-8译码器的时序仿真波形如下:7.1.2编码器编码器的逻辑功能是将输入信号的高、低电平信号编成一个对应的二进制码。在目前经常使用的编码器有普通编码器和优先编码器两种。在普通编码器中,任何时候只允许一个编码信号出现,否则将出现混乱。但在优先编码器中,允许同时输入两个以上编码信号。在设计优先编码器电路时,需要先将所有的输入信号按优先顺序排好对,当几个输入信号同时出现时,只对优先权最高的一个信号进行编码。7.1.2编码器编码器的逻辑功能是将输入信号的高、低电平7.1.2编码器(续1)8-3线优先编码器的核心代码如下:ENTITYencoderIS

PORT(I:INSTD_LOGIC_VECTOR(7DOWNTO0);Y:OUTSTD_LOGIC_VECTOR(2DOWNTO0);Enable:INSTD_LOGIC);ENDencoder;ARCHITECTUREfunOFencoderISBEGIN

PROCESS(I,Enable)

BEGINIFEnable='1'THEN

IFI(7)='1'THENY<="111";

ELSIFI(6)='1'THENY<="110";ELSIFI(5)='1'THENY<="101";ELSIFI(4)='1'THENY<="100";

ELSIFI(3)='1'THENY<="011";

ELSIFI(2)='1'THENY<="010";

ELSIFI(1)='1'THENY<="001";

ELSIFI(0)='1'THENY<="000";

ELSEY<="111";

ENDIF;

ELSEY<="111";

ENDIF;

ENDPROCESS;ENDfun;7.1.2编码器(续1)8-3线优先编码器的核心代码如下7.1.2编码器(续2)8-3线优先编码器时序仿真波形图如下:7.1.2编码器(续2)8-3线优先编码器时序仿真波形图7.1.3数据选择器

在数字信号的传输中,有时候需要从一组数据中选出某一个数据来,这就需要用数据选择器。常用的数据选择器有4选1、8选1、16选1等类型。

8选1数据选择器的核心代码如下:

ENTITYmux4_1IS

PORT(A,B,C,D,E,F,G,H:INSTD_LOGIC_VECTOR(3DOWNTO0);s:INSTD_LOGIC_VECTOR(2DOWNTO0);Y:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDmux8_1;ARCHITECTUREfunOFmux8_1ISBEGINY<=AWHENs="000"ELSEBWHENs="001"ELSECWHENs="010"ELSE

DWHENs="011"ELSEEWHENs="100"ELSEFWHENs="101"ELSEGWHENs="110"ELSEH;ENDfun;7.1.3数据选择器在数字信号的传输中,有时7.1.3数据选择器(续)8选1数据选择器的时序仿真波形图如下:7.1.3数据选择器(续)8选1数据选择器的时序仿真波形7.1.4数值比较器

在一些数字系统中,经常需要比较两个数字的大小,为完成这一功能所设计的各种逻辑电路统称为数值比较器。数值比较器根据比较数据的位数不同,可以分为一位数值比较器和多位数值比较器。通用多位数值比较器的核心代码如下:ENTITYcompIS

GENERIC(X:INTEGER:=4);

PORT(A,B:INSTD_LOGIC_VECTOR(X-1DOWNTO0);Y1,Y2,Y3:OUTSTD_LOGIC);ENDcomp;ARCHITECTUREfunOFcompISBEGINPROCESS(A,B)

BEGIN

IFA>BTHENY1<='1';

ELSEY1<='0';

ENDIF;IFA<BTHENY2<='1';

ELSEY2<='0';

ENDIF;

IFA=BTHEN

Y3<='1';

ELSEY3<='0';

ENDIF;

ENDPROCESS;ENDfun;7.1.4数值比较器在一些数字系统中,经常需要比7.1.4数值比较器(续)4位数值比较器的时序仿真波形图

7.1.4数值比较器(续)4位数值比较器的时序仿真波形图7.1.5奇偶校验器

奇偶校验器经常用在数字电路的检测中,用来检测一个二进制数据中的0或1的个数为奇数还是偶数,然后输出检测结果。8位奇偶校验器的核心代码如下:ENTITYcheck_NISPORT(A:INSTD_LOGIC_VECTOR(7DOWNTO0);Y:OUTSTD_LOGIC);ENDcheck_N;ARCHITECTUREfunOFcheck_NISBEGINPROCESS(A)

VARIABLEtemp:STD_LOGIC;BEGINtemp:='1';

FORnIN0TO7LOOP

temp:=tempxorA(n);

ENDLOOP;Y<=temp;

ENDPROCESS;ENDfun;

8位奇偶校验器的时序仿真波形图如下:7.1.5奇偶校验器奇偶校验器经常用在数字7.2时序逻辑电路设计7.2.1触发器触发器是能够存储二值信号的基本单元电路。触发器的种类有很多,根据不同的功能可以分为D触发器、T触发器、JK触发器已经RS触发器等。JK触发器的核心代码如下ENTITYjk_triggerIS

PORT(J,K,CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDjk_trigger;ARCHITECTUREfunOFjk_triggerISSIGNALtemp:STD_LOGIC;BEGINPROCESS(J,K,CLK)

BEGINIF(CLK'EVENTANDCLK='1')THENtemp<=(JANDNOT(temp))OR((NOTK)ANDtemp);

ENDIF;ENDPROCESS;Q<=temp;ENDfun;7.2时序逻辑电路设计7.2.1触发器ENTITY7.2.1触发器(续)同步JK触发器的时序仿真波形图如下:

7.2.1触发器(续)同步JK触发器的时序仿真波形图如下7.2.2寄存器寄存器用来存储二进制数值,其种类有很多中,常用的锁存器和移位寄存器等。本文中以一个通用寄存器来介绍寄存器的设计,包括清零、所存、左移和右移功能。通用寄存器的核心代码如下:ENTITYregIS

GENERIC(n:Positive:=8);--寄存器宽度

PORT(CLK,shift_l,shift_r:INSTD_LOGIC;--时钟信号和左移、右移输入数值

mode:INSTD_LOGIC_VECTOR(1DOWNT0);--寄存器模式

datain:INSTD_LOGIC_VECTOR((n-1)DOWNTO0);--并行输入

dataout:OUT

STD_LOGIC_VECTOR((n-1)DOWNTO0));--并行输出ENDreg;ARCHITECTUREfunOFregISSIGNALtemp_reg:STD_LOGIC_VECTOR((n-1)DOWNTO0);--定义临时变量BEGIN7.2.2寄存器寄存器用来存储二进制数值,7.2.2寄存器(续)PROCESSBEGIN

IF(CLK'EVENTANDCLK='1')THEN

CASEmodeIS

WHEN"00"=>int_reg<=(OTHERS=>'0');--寄存器清零

WHEN"01"=>int_reg<=datain;--锁存器

WHEN"10"=>int_reg<=int_reg((n-2)DOWNTO0)&shift_l;--左移

WHEN"11"=>int_reg<=shift_r&int_reg((n-1)DOWNTO1);--右移

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;dataout<=int_reg;ENDfun;通用寄存器的时序仿真波形图如下:7.2.2寄存器(续)PROCESS7.2.3分频器分频电路是非常有用的一种电路,在具体的电路设计中可能需要不同的时钟频率,但在实际的电路中往往只有一种单一的外部时钟输入,这是可以采用分频器对时钟脉冲进行分频。1、二分频电路核心代码如下:ENTITYfenp_2IS

PORT(CLK_IN:INSTD_LOGIC;CLK_OUT:OUTSTD_LOGIC);ENDfenp_2;ARCHITECTUREfunOFfenp_2IS

SIGNALtemp:STD_LOGIC:='0';

BEGIN

PROCESS(CLK_IN,temp)

BEGIN

IF(CLK_IN'EVENTANDCLK_IN='1')THENtemp<=nottemp;

ENDIF;CLK_OUT<=temp;ENDPROCESS;ENDfun;7.2.3分频器分频电路是非常有用的一种电7.2.3分频器(续1)2、五分频电路的核心代码如下:ENTITYfenp_5IS

PORT(CLK_IN:INSTD_LOGIC;CLK_OUT:OUTSTD_LOGIC);ENDfenp_5;ARCHITECTUREfunOFfenp_5IS

SIGNALtemp_A,temp_B:INTEGERRANGE0TO7;BEGIN

PROCESS(CLK_IN,temp_A,temp_B)

BEGIN

IF(CLK_IN'EVENTANDCLK_IN='1')THEN

IFtemp_A=4THENtemp_A<=0;

ELSEtemp_A<=temp_A+1;--对上升沿计数

ENDIF;

ENDIF;7.2.3分频器(续1)2、五分频电路的核心代码如下:E7.2.3分频器(续2)二分频电路的时序仿真波形图如下五分频电路的时序仿真波形图如下:7.2.3分频器(续2)7.2.4计数器计数器是数字电路中使用的最多的时序电路,它不仅能用于对时钟脉冲的计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。BCD码60进制计数器的核心代码如下:ENTITYcounterIS

PORT(CLK,Enable,clr:INSTD_LOGIC;--时钟信号、计数使能、清零信号

Cout:OUTSTD_LOGIC;--进位信号

q0,q1:BUFFER

STD_LOGIC_VECTOR(3DOWNTO0));--计数输出ENDcounter;7.2.4计数器计数器是数字电路中使用的最7.2.4计数器(续1)

BCD码60进制计数器的核心代码:ARCHITECTUREfunOFCOUNTERISSIGNALtemp:STD_LOGIC;--临时变量,表示个位数p0的进位

BEGIN

PROCESS(CLK,Enable,clr,q0)--此进程描述个位计数器

BEGIN

IFclr='1'THEN

q0<="0000";--个位清零

ELSE

IF(CLK'EVENTANDCLK='1')THEN--对时钟脉冲进行计数

IFEnable='1'THEN--使能信号搞电平有效

IFq0="1001"THENq0<="0000";temp<='1';--计数到9置0,输出进位

ELSEq0<=q0+1;temp<='0';

ENDIF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论