第三章组合逻辑电路_第1页
第三章组合逻辑电路_第2页
第三章组合逻辑电路_第3页
第三章组合逻辑电路_第4页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

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

文档简介

第三章组合逻辑电路第一节组合电路的分析和设计第二节组合逻辑电路中的竞争与冒险第三节超高速集成电路硬件描述语言VHDL第四节组合逻辑电路模块及其应用小结相关知识回顾:逻辑运算逻辑门与或非异或同或非门与门或门与非门或非门异或门同或门本章任务:1.组合逻辑电路的分析与设计2.常用组合逻辑模块的使用由逻辑门组成第三章组合逻辑电路(2)学习常用中规模集成模块(3)了解电路中的竞争和冒险现象本章重点(1)掌握分析和设计组合电路的基本方法加法器比较器译码器编码器选择器分配器本章基本内容(1)电路分析与设计经典的方法(2)常用组合逻辑模块的灵活应用组合电路的分析组合电路的设计第一节组合电路的分析和设计组合电路一、组合电路输入:逻辑关系:Fi=fi(X1、X2、…、Xn)i=(1、2、…、m)特点:电路由逻辑门构成;不含记忆元件;输出无反馈到输入的回路;输出与电路原来状态无关。输出:X1、X2、…、XnF1、F2、…、FmX1X2Xn…组合网络组合电路方框图F1F2Fm…二、组合电路的分析分析已知逻辑电路功能步骤:输出函数表达式描述电路功能已知组合电路简化函数真值表ABCF00000010010001111000101111011111真值表因此该电路为少数服从多数电路,称表决电路。解:(1)由电路图得逻辑表达式(2)由逻辑表达式得真值表(3)功能分析:多数输入变量为1,输出F为1;多数输入变量为0,输出F为0。例1:试分析右图所示逻辑电路的功能。&&&&ABCF解:(1)由电路图得表达式(2)列出真值表例2:试分析下图所示逻辑电路的功能。=1G2B2=1G1B1=1G0B0G3B3自然二进制码格雷码B3B2B1B0

G3G2G1G00000 0000000100010010001100110010010001100101011101100101011101001000110010011101101011111011111011001010110110111110100111111000(2)列出真值表(1)由电路图得表达式本电路是自然二进制码至格雷码的转换电路。(3)分析功能注意:利用此式时对码位序号大于(n-1)的位应按0处理,如本例码位的最大序号i=3,故B4应为0,才能得到正确的结果。推广到一般,将n位自然二进制码转换成n位格雷码:Gi=Bi⊕Bi+1

(i=0、1、2、…、n-1)自然二进制码至格雷码的转换三、组合电路的设计步骤:根据要求设计出实际逻辑电路形式变换根据设计所用芯片要求选择所需门电路根据设计要求分析题意,将设计要求转化为逻辑关系,这一步为设计组合逻辑电路的关键确定输入、输出、列出真值表写出表达式并简化画逻辑电路图例3:半加器的设计(1)半加器真值表(2)输出函数(3)逻辑图输入输出被加数A

加数B

和S

进位C0000011010101101(4)逻辑符号&ABC=1S∑COSCAB半加器逻辑符号由表达式知,若无特别要求,用一个异或门和一个与门即可实现半加器电路。电路图为:分析:半加器是将两个一位二进制数相加求和及向高位进位的电路。因此,有两个输入(加数与被加数)及两个输出(和与进位)。设被加数和加数分别为A和B,和与进位分别为S、C,真值表为:将用“异或”门实现的半加器改为用“与非”门实现函数表达式变换形式:用“与非”门实现半加器逻辑图如图所示:&ABC&S&&&全加器是实现例4:全加器的设计。学生自己完成逻辑电路全加器逻辑符号全加器真值表输入输出

Ai

Bi

Ci

Si

Ci+10000000110010100110110010101011100111111一位二进制数一位二进制数低位来的进位相加和高位进位∑COSiCi+1CiBiCIAi例5:试将8421BCD码转换成余三BCD码。

8421码余三码

B3

B2

B1

B0

E3

E2

E1

E0000000011100010100200100101300110110401000111501011000601101001701111010810001011910011100101010☓

☓111011☓

☓121100☓

☓131101☓

☓141110☓

☓151111☓

☓(2)卡诺图(1)真值表B3B2B1B000011110000111100011☓☓1☓01☓☓00☓1E3B3B2B1B000011110000111100000☓☓0☓11☓☓11☓1E0B3B2B1B000011110000111100101☓☓0☓00☓☓11☓1E1B3B2B1B000011110000111101100☓☓1☓10☓☓01☓0E2(3)表达式(2)卡诺图B3B2B1B000011110000111100011☓☓1☓01☓☓00☓1E3B3B2B1B000011110000111100000☓☓0☓11☓☓11☓1E0B3B2B1B000011110000111100101☓☓0☓00☓☓11☓1E1B3B2B1B000011110000111101100☓☓1☓10☓☓01☓0E2(4)电路图(3)表达式8421BCD码B3B2B1B08421BCD码转换成余3BCD码的逻辑电路余3码E1E0E2E3&&111&&&&&1&&&≥1AFf1f2&&B&CC(a)逻辑图(b)波形图ABCCttttttttpgtpdf1f2F第二节组合电路中的竞争与冒险一、冒险与竞争竞争:冒险:在组合电路中,信号经由不同的途径达到某一会合点的时间有先有后。由于竞争而引起电路输出发生瞬间错误现象。表现为输出端出现了原设计中没有的窄脉冲,常称其为毛刺。二、竞争与冒险的判断代数法:或的形式时,A变量的变化可能引起险象。卡诺图法:如函数卡诺图上为简化作的圈相切,且相切处又无其他圈包含,则可能有险象。如图所示电路的卡诺图两圈相切,故有险象。≥1AFf1f2&&B&CCABC000111100100111100两圈相切有险象三、冒险现象的消除1.增加冗余项如图所示卡诺图,只要在两圈相切处增加一个圈(冗余),就能消除冒险。增加冗余项可以解决每次只有单个输入信号发生变化时电路的冒险问题,却不能解决多个输入信号同时发生变化时的冒险现象,适用范围有限。ABC000111100100111100增加冗余圈克服险象ABC000111100100111100两圈相切有险象三、冒险现象的消除2.增加选通信号在可能产生冒险的门电路的输入端增加一个选通脉冲。当输入信号变换完成,进入稳态后,才启动选通脉冲,将门打开。这样,输出就不会出现冒险脉冲。1.增加冗余项增加选通信号的方法比较简单,一般无需增加电路元件,但选通信号必须与输入信号维持严格的时间关系,因此选通信号的产生并不容易。3.输出接滤波电容1.增加冗余项2.增加选通信号由于竞争冒险产生的干扰脉冲的宽度一般都很窄,在可能产生冒险的门电路输出端并接一个滤波电容(一般为4~20pF),使输出波形上升沿和下降沿都变得比较缓慢,从而起到消除冒险现象的作用。三、冒险现象的消除输出端接滤波电容方便易行,但会使输出电压波形变坏,仅适合对信号波形要求不高的场合。

第三节超高速集成电路硬件描述语言VHDL概述

VHDL语言的基本组成

VHDL数据类型和属性

VHDL的行为描述

VHDL的结构描述VHDL概述★

设计方法

传统的电路系统设计方法:纯硬件逻辑设计(试凑法)存在的问题:

当系统规模增大,设计工作量大,设计周期长;设计电路的体积大、功耗大、可靠性较低;交流性较差。◆

现代电路的设计方法:硬件设计+软件设计从上至下的设计方法出现HardwareDescriptionLanguage,HDL★

硬件描述语言

ABEL◆

AHDL

VerilogHDL◆

VHDL美国国防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSICHardwareDescriptionLanguage,简称为VHDL。VHDL概述IEEE标准★

VHDL语言的主要优点

◆是一种多层次的硬件描述语言,覆盖面广,描述能力强。即设计的原始描述可以是非常简练的描述,经过层层细化求精,最终成为可直接付诸生产的电路级或版图参数描述,整个过程都可以在VHDL的环境下进行。

VHDL有良好的可读性,即可以被计算机接受,也容易被理解用VHDL书写的原文件,即是程序,又是文档,即是技术人员之间交换信息的文件,又可作为合同签约者之间的文件。

VHDL概述◆VHDL本身的生命期长。因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。与工艺技术有关的参数可通过VHDL提供的属性加以描述,工艺改变时,只需修改相应程序中的属性参数即可。◆

支持大规模设计的分解和已有设计的再利用。一个大规模设计不可能一个人独立完成,它将由多人、多项目组来共同完成。VHDL为设计的分解和设计的再利用提供了有力的支持。

VHDL已成为IEEE承认的一个工业标准,事实上已成为通用硬件描述语言。

VHDL概述★

VHDL语言的主要优点一、VHDL的基本组成VHDL语言参数部分——程序包接口部分—设计实体描述部分—结构体LIBRARY

ieee;USE

ieee.std_logic_1164.all;(一)参数部分——程序包程序包IEEE标准的标准程序包设计者自身设计的程序包

设计中的子程序和公用数据类型的集合。调用数据类型标准程序包的VHDL语言描述放在VHDL程序的最前面,表示以后在实体或结构体中要用到数据类型包中的数据类型。调用程序包语句标准程序包定义程序包(二)接口部分—设计实体kxora1b1c1设计实体提供设计模块的公共信息,是VHDL设计电路的最基本部分。VHDL实体的描述方法:ENTITY

kxor

ISPORT(a1,b1:INstd_logic;c1:OUTstd_logic);END

kxor;

一个模块中仅有一个设计实体。调用程序包语句标准程序包定义程序包实体及实体声明语句ENTITY

kxor

ISPORT(a1,b1:INstd_logic;END

kxor;c1:OUTstd_logic);ENTITY、IS、PORT、IN、OUT和END为关键字;ENTITY...END之间表示实体内容;kxor表示实体的名称,即电路的符号名;PORT——端口(引脚)信息关键字,描述了信号的流向;IN——输入模式;OUT——输出模式;std_logic表示信号取值的类型为标准逻辑。(二)接口部分—设计实体ENTITY

sel

IS

PORT(d0,d1,d2,d3:INBIT;

s:ININTEGERRANGE0TO3;

out1:OUTBIT);END

sel;d0d1d2d3sout1sel再例:(二)接口部分—设计实体(三)描述部分—结构体结构体描述实体硬件的互连关系、数据的传输和变换以及动态行为。一个实体可以对应多个结构体,每个结构体可以代表该硬件的某一方面特性,例如行为特性、结构特性。ARCHITECTURE

kxor_arc

OF

kxor

ISBEGINc1<=(NOTa1ANDb1)OR(a1AND

NOTb1);END

kxor_arc;调用程序包语句标准程序包定义程序包实体及实体声明语句结构体1结构体2结构体nkxora1b1c1a1b1c1kxora1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1二、VHDL数据类型和属性

VHDL硬件描述语言中涉及了许多信号、变量和常量,它们用来保持数据。在VHDL中,保持数据的信号、变量和常量称为目标。

VHDL是一种非常严格的数据类型化语言,规定每个信号、常量或变量和每个表达式有一个唯一的确定数据类型,每个目标和表达式的数据类型静态地被确定。每一个目标都有一个数据类型来确定目标保持的那一类数据。在表达式中分配数值给目标时的数据类型不可以被混用。在VHDL中目标有三种:信号、变量和常量。

信号和变量可以赋予一系列的值,而常量一次仅被分配一个值。信号和变量又有不同,赋予信号的数值要到未来的某个时刻,信号才接受当前的数值;而赋予变量的数值,变量立即接收当前的数值。目标的一般形式如下:<目标种类><目标<,目标...>>:<目标类型>:=<表达式>;二、VHDL数据类型和属性目标:是一个或多个代表着目标种类的字符串,多个目

标时用“,”号分开。<目标种类><目标<,目标...>>:<目标类型>:=<表达式>;目标种类:信号(SIGNAL)、变量(VARIABLE)和常量

(CONSTANT)。信号:它表示把元件的端口连接在一起的互连线。

变量:用于对暂时数据的局部存储,变量只在进程和子

程序内部定义。

常量:对某些特定类型数据赋予的一次性数值。表达式:表达式是为了规定目标的初始值,这是缺省部分。目标类型:为了规定目标的特征,VHDL含有很宽范围的数据类型。VHDL除了有基本的数据类型之外,设计者还可以建立自己的数据类型,类型说明部分规定类型名和类型范围,它的一般形式是:VARIABLEa1:INTEGER:=3;TYPE<类型名>IS<类型范围>;标量类型、复合类型、子类型、文件类型和寻址类型。标量类型包括所有的简单类型:如整数、实数等;复合类型包括数组和记录;寻址类型在一般编辑语言中等价为指针;文件类型是设计者定义的文件类型为设计者提供说明的文件对象;子类型主要是对现有类型加以限制。VHDL可用数据类型有五类:1.标量数据类型

标量数据类型是基本的数据类型,它包括整数类型、实数类型、物理类型和枚举类型。

物理类型要提供一个基本单位,然后在这个基本单位上定义多个或零个次级单位,每个次级单位都是基本单位的整数倍。

枚举类型在形式上是定义括弧括起来的字符串文字表,一个字符串文字在枚举类型定义中只能出现一次,但允许同样一个字符串文字出现在不同的枚举类型的字符串文字表中,枚举类型的字符串文字表中的文字是由设计者定义的,这些字母可以是单个字母,也可以是一个字符串,例如BREAKFAST,Lunch,a等。

下面举一个VHDL程序加深理解枚举类型的使用。一个目标的数值有可能经常更换或者说是包含多个值,但一个目标一次只能被一种类型说明。PACKAGEmeals_pkgIS

TYPEmealIS(breakfast,lunch,dinner);

ENDmeals_pkg;例1:USEwork.meals_pkg.all;ARCHITECTUREmeals_arcOFmealsIS

BEGIN

WITHprevious_mealSELECT

next_meal<=breakfastWHENdinner,

lunchWHENbreakfast,

dinnerWHENlunch;

ENDmeals_arc;自定义程序包的名字枚举数据类型的名字三个枚举数据ENTITYmealsIS

PORT(previous_meal:INmeal;

next_meal:OUTmeal);

ENDmeals;调用自定义程序包mealsnextprevious枚举型数据2.复合数据类型

复合类型是由数组类型和记录类型组成,它们的元素是标量类型的元素。数组类型是由相同的标量元素组成,即同构复合类型,数组可以是一维、二维或多维。例如:TYPEmatrixIS

ARRAY(row,column)OFstd_logic;

TYPEr_maISARRAY(1TO10,1TO40)OFstd_logic;TYPEwordISARRAY(15DOWNTO0)OFBIT;TYPEcolumnISRANGE1TO40;TYPErowISRANGE1TO10;CONSTANTROM:BIT_VECTOR(0TO15);

Word(15)…word(0)共16个同数据类型的元素VHDL的属性

VHDL中的属性使得VHDL程序更加简明扼要,更加容易理解,VHDL的属性在时序程序中几乎处处可见,如值类属性的左边界、右边界、上下边界以及值类属性的长度,还可以检测信号上升沿和下降沿以及前一次发生的事件等等。TYPEbit1ISARRAY(63DOWNTO32)OFBIT;

VARIABLE

left_range,right_range,uprange,lowrange:INTEGER;

BEGIN

left_range:=bit1’LEFT;--returns63

right_range:=bit1’RIGHT;--returns32

uprange:=bit1’HIGH;--returns63

lowrange:=bit1’LOW;

--returns32

值类属性:值类属性用于返回数组的边界或长度,首先举一例数组边界的例子说明值类属性。例2:TYPEbit1ISARRAY(0TO7)OFBIT;

TYPEbit2ISARRAY(8TO31)OFBIT;

VARIABLElen1,len2:INTEGER;

BEGIN

len1:=bit1’LENGTH;--return8

len2:=bit2’LENGTH;--return24下面再举一个值类数组属性的例子,让其返回数组范围的总长度。例:它可用来检查一个信号的变化,并且变化刚刚发生,即推断出在信号上发生了一个跳变。

函数信号属性:函数信号属性用来返回有关信号行为功能的信息,它反映一个信号是否正好有值的变化或事件的发生,如clk’EVENT,这个属性为“EVENT”,对检查时钟边沿触发是很有效的。下面举一个例子,说明函数信号属性的用法。IF

clk=‘1’AND

clk’EVENT

THEN

q<=d;

ENDIF;上述语句中用到了函数信号属性clk’EVENT,说明如果时钟信号clk为高电平,并且事件刚刚发生,也就是说是时钟上升沿有效,此时q得到d的信号。(三)VHDL的行为描述在VHDL硬件描述语言中,描述电路逻辑的程序称为行为描述,行为描述有并行描述、进程描述和顺序描述。三个行为既可以是相互独立,成为单一的行为描述体,又可以相互联系,成为混合描述体,如进程行为描述行为之间是并行行为,进程行为体的内部是顺序行为。1.VHDL的并行行为在典型的编程语言如C或Pascal中,每个赋值语句按规定的次序,一个接在另一个之后顺序执行,执行的次序由源文件决定。在VHDL中,结构体的内部没有规定语句的次序,执行的次序仅由对语句中的敏感信号发生的事件决定,且语句是同时执行。结构体中并行赋值语句的一般格式如下:<对象><=<表达式>;读作对象得到表达式的值,作用是将表达式的信号值分配给对象,即每当表达式的信号值变化时执行该语句。每个表达式都至少有一个敏感信号,每当敏感信号改变其值时,就执行这个信号赋值语句。在所有的并行语句中,两个以上的并行赋值语句在字面上的顺序并不表明它们的执行顺序。例如下面的两个结构体在功能上是等价的。ENTITYexeIS

PORT(a1,a2:INBIT;

b1,b2:OUTBIT);

ENDexe;ARCHITECTUREexe_arc1OFexeIS

BEGIN

b1<=a1ANDb2;

b2<=NOTa1ORa2;

ENDexe_arc1;ARCHITECTUREexe_arc2OFexeIS

BEGIN

b2<=NOTa1ORa2;

b1<=a1ANDb2;

ENDexe_arc2;另一种并行信号赋值语句是选择信号赋值语句,它们的每一个赋值语句都需要给出一个表达式,同时给出与该表达式的每个可能值相关联的信号。选择信号赋值语句的一般形式如下:

WITH<表达式>SELECT

<对象><=<信号1>WHEN<分支1>,

<信号2>WHEN<分支2>,

<信号n>WHEN<分支n>;ARCHITECTURE

sels_arc

OF

sels

ISBEGIN

WITHsSELECT

out1<=d0WHEN0,

d1WHEN1,

d2WHEN2,

d3WHEN3;

END

sels_arc;一个典型的四路数据选择器VHDL程序说明WITH一般形式的用法。ENTITY

sels

IS

PORT(d0,d1,d2,d3:INBIT;

s:ININTEGERRANGE0TO3;

out1:OUTBIT);

END

sels;d0d1d2d3sout1sels仍以四路数据选择器为例,讨论另一个较为复杂的并行信号赋值语句的例子,以便更详细地说明并行概念,下面是四输入数据选择器的第二个VHDL程序。

例:LIBRARY

ieee;

USEieee.std_logic_1164.all;

ENTITYmux4IS

PORT(I0,I1,I2,I3,A,B:INstd_logic;

Q:OUTstd_logic);

ENDmux4;ARCHITECTUREmux4_arcOFmux4IS

SIGNAL

sel:INTEGER;

BEGIN

Q<=I0AFTER10nsWHEN

sel=0ELSE

I1AFTER10nsWHEN

sel=1ELSE

I2AFTER10nsWHEN

sel=2ELSE

I3AFTER10ns;

sel<=0WHENA=‘0’ANDB=‘0’ELSE

1WHENA=‘1’ANDB=‘0’ELSE

2WHENA=‘0’ANDB=‘1’ELSE

3;ENDmux4_arc;2.VHDL的进程行为

VHDL除了并行行为之外,还有顺序行为。顺序行为执行的顺序是一个接在另一个之后严格执行。顺序行为的语句存在于VHDL程序中的进程行为之中。而进程行为之间是并行行为语句。进程行为语句的一般形式如下:<进程标号>:PROCESS<敏感信号表><进程说明区>

BEGIN

<语句部分>

WAITON<敏感信号表>;

WAITUNTIL<条件表达式>;

WAITFOR<时间表达式>;

ENDPROCESS;整个实体模块中的每个进程行为语句,可以在任何时候被激活,所有被激活的进程是并行执行的。下面举一个3线-8线通用译码器程序的例子,说明进程语句如何工作。LIBRARY

ieee;

USEieee.std_logic_1164.all;

USE

ieee.std_logic_arith.all;

ENTITYdecoderIS

PORT(sel:INUNSIGNED(2DOWNTO0);

dout:OUTUNSIGNED(7DOWNTO0));ENDdecoder;ARCHITECTUREdecoder_arcOFdecoderIS

SIGNALsel1:INTEGER;

BEGIN

PROCESS(sel)

BEGINsel1<=CONV_INTEGER(sel);

CASEsel1IS

WHEN0=>dout<=(‘0’,’0’,’0’,’0’,’0’,’0’,’0’,’1’)AFTER5ns;

WHEN1=>dout<=(‘0’,’0’,’0’,’0’,’0’,’0’,’1’,’0’)AFTER5ns;

WHEN2=>dout<=(‘0’,’0’,’0’,’0’,’0’,’1’,’0’,’0’)AFTER5ns;

WHEN3=>dout<=(‘0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’)AFTER5ns;

WHEN4=>dout<=(‘0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’)AFTER5ns;

WHEN5=>dout<=(‘0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

WHEN6=>dout<=(‘0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

WHENOTHERS=>dout<=(‘1’,’0’,’0’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

ENDCASE;

ENDPROCESS;

ENDdecoder_arc;此例只要sel的值一发生改变就激活进程,从第一句执行直到满足条件后再被挂起。PROCESS(sel)下例是另一种激活进程的方式:ENTITY

reg

IS

PORT(d,clk:INBIT;

q1,q2:OUTBIT);

END

reg;

ARCHITECTURE

reg_arc

OF

reg

IS

BEGIN

PROCESS

BEGIN

WAITUNTIL

clk=‘1’;

q1<=d;

ENDPROCESS;

PROCESS

BEGIN

WAITUNTIL

clk=‘0’;q2<=d;

ENDPROCESS;END

reg_arc;进程行为语句之间是并行关系,进程行为语句内部是顺序关系。

VHDL的每个结构体中可以有多个进程行为语句。它的关键之处是:3.VHDL的顺序行为顺序行为语句可分为两大类:条件控制类,循环控制类。在这两类中选出六种IF、CASE、FOR、WHILE..LOOP、EXIT和ASSERT进行讨论

IF<条件>THEN

<语句>;

ELSIF<条件>THEN

<语句>;

ELSIF<条件>THEN

<语句>;

ELSE

<语句>;

ENDIF;(1)IF语句IF语句的一般形式为:ARCHITECTUREalarm_arcOFalarmIS

BEGIN下面举例说明IF条件语句的用法。例:用VHDL设计一家用报警系统的控制逻辑,它有来自传感器的三个输入信号smoke、door、water和准备传输到告警设备的三个输出触发信号fire_alarm、burg_alarm、water_alarm以及使能信号en和alarm_en。VHDL程序描述如下:LIBRARY

ieee;

USEieee.std_logic_1164.all;

ENTITYalarmIS

PORT(smoke,door,water:INstd_logic;

en,alarm_en:INstd_logic;

fire_alarm,burg_alarm,water_alarm:OUTstd_logic);

ENDalarm;PROCESS(smoke,door,water,en,alarm_en)

BEGIN

IF((smoke=‘1’)AND(en=‘0’))THEN

fire_alarm<=‘1’;

ELSE

fire_alarm<=‘0’;

ENDIF;IF((door=‘1’)AND((en=‘0’)AND(alarm_en=‘0’)))THEN

burg_alarm<=‘1’;

ELSE

burg_alarm<=‘0’;

ENDIF;IF((water=‘1’)AND(en=‘0’))THEN

water_alarm<=‘1’;

ELSE

water_alarm<=‘0’;

ENDIF;ENDPROCESS;

ENDalarm_arc;(2)CASE

语句CASE语句的一般形式:CASE<表达式>IS

WHEN<值>=><语句>;

WHEN<值>|<值>=><语句>;

WHEN<离散范围>=><语句>;

WHENOTHERS

=><语句>;

ENDCASE;

CASE语句是VHDL提供的另一种形式的控制语句,每当单个表达式的值在多个起作用的项中选择时,用此语句是较合适的,它根据所给表达式的值或域,选择“=>”后面的执行语句。用CASE语句应该注意三个问题:

A)关键字WHEN的数量不作限制,但不容许两个语句用一个值;

B)所有WHEN后面的值在CASE语句中合起来的值是值域中的全部;C)WHEN语句的次序可以任意排定。下面举例说明ASSERT语句的用法。例:由两个或非门构成的RS触发器。ENTITYRSFFISPORT(R,S:INBIT;

Q:OUTBIT);ENDRSFF;ARCFITECTURERSFF_ARCOFRSFFISBEGIN

PROCESS(R,S)

VARIABLELAST_STATE:BIT:=‘0’;

BEGIN

ASSERTNOT(R=‘1’ANDS=‘1’)

REPORT“BOTHRANDSEQUALTO‘1’”

SEVERITYERROR;

IFR=‘0’ANDS=‘0’THENLAST_STATE:=LAST_STATE;

ELSIFR=‘1’ANDS=‘0’THEN

为真时,执行IF语句。

LAST_STATE:=‘0’;

ELSE

LAST_STATE:=‘1’;

ENDIF;Q<=LAST_STATE;ENDPROCESS;ENDRSFF_ARC;信号可被看作两个元件之间数据传输的通路。(四)VHDL的结构描述实体主要描述元件、端口与信号。元件是硬件的描述,即门、芯片或者电路板。端口是元件与外界的连接点,数据通过端口进入或流出元件。而信号则是作为硬件连线的一种抽象描述,它既能保持变化的数据,又可以连接各个子元件。下面举例说明“调用元件语句”的用法。对一个硬件的结构进行描述,就是要描述它由哪些子元件组成,以及各个子元件之间的互连关系。结构描述比行为描述更加具体化,即结构描述与硬件之间的关系要比行为描述与硬件之间的关系更明显。前面讨论,行为描述的基本单元是进程语句。结构描述的基本单元则是“调用元件语句”。例:用VHDL结构描述设计一全减器,全减器可由两个半减器和一个或门组成。首先用VHDL的行为描述设计半减器:ENTITY

halfsub

IS

PORT(A,B:INBIT;

T,C:OUTBIT);

END

halfsub;

PROCESS(A,B)

BEGIN

T<=AXORBAFTER10ns;

C<=(NOTA)ANDBAFTER10ns;ENDPROCESS;ARCHITECTURE

halfsub_arc

OF

halfsub

IS

BEGINEND

halfsub_arc;一定记住输入、输出端口的顺序。下面再将或门的VHDL程序描述如下:ARCHITECTURE

orgate_arc

OF

orgate

IS

BEGINO1<=A1ORB1;END

orgate_arc;下面将两个半减器,一个或门的端口,通过定义一些中间信号将其连接起来形成VHDL的结构描述。ENTITY

orgate

IS

PORT(A1,B1:INBIT;O1:OUTBIT);END

orgate;一定记住输入、输出端口的顺序。在下面举的全减器例子里可以看到定义了中间信号

temp_T,temp_c1和temp_c2ENTITY

fullsub

ISPORT(I1,I2,C_IN:INBIT;FT,C_OUT:OUTBIT);END

fullsub;ARCHITECTURE

fullsub_arc

OF

fullsub

ISSIGNAL

temp_T,temp_c1,temp_c2:BIT;COMPONENT

halfsub

PORT(A,B:INBIT;T,C:OUTBIT);ENDCOMPONENT;COMPONENT

orgate

PORT(A1,B1:INBIT;O1:OUTBIT);ENDCOMPONENT;在说明区定义中间变量。在说明区说明调用的半加器。一定记住顺序。三个输入,两个输出。图中虚线框各元件之间的连线命名。temp_T将第一个半减器的差位输出连到第二个半减器的输入端。信号temp_c1将第一个半减器的借位输出连至“或”门的一个输入端,信号temp_c2将第二个半减器的借位输出连至“或”门的另一个输入端。用三个元件调用语句定义这三个连接关系。BEGINU0:halfsubPORTMAP(I1,I2,temp_T,temp_c1);U1:halfsubPORTMAP(temp_T,C_IN,FT,temp_c2);U2:orgatePORTMAP(temp_c1,temp_c2,C_OUT);END

fullsub_arc;

U0halfsubI1I2temp_Ttemp_c1

U1halfsubC_INFTtemp_c2U2C_OUT减数、被减数。低位借位与和位。fullsub第四节组合逻辑电路模块及其应用编码器译码器数据选择器数值比较器加法器一、编码器优先编码功能:输入m位代码;输出n位二进制代码(m≤2n)。

优先编码器允许几个输入端同时加上信号,电路只对其中优先级别最高的信号进行编码。逻辑功能:任何一个输入端接低电平时,三个输出端有一组对应的二进制代码输出。(一)二进制编码器将输入信号编成二进制代码的电路任何时刻只允许一个输入端有信号输入。8线—3线优先编码器74148编码输入I0I1I2I3I4I5I6I7使能输入S使能输出YS扩展输出YEX编码输出Y0Y1Y2~~:编码输出端。:使能输入端;=0时,编码,=1时,禁止编码。:使能输出端,编码状态下(=0),若无输入信号,=0。:扩展输出端,编码状态下(=0),若有输入信号,=0。管脚定义::输入,低电平有效,优先级别依次为~。二—十进制编码器编码输入I1I2I3I4I5I6I7I8I9编码输出Y0Y1Y2Y3

PROCESS(input)

ENDPROCESS;END

rtl;LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITY

priorityencoder

ISPORT(input:INSTD_LOGIC_VECTURE(7DOWNTO0);y:OUTSTD_LOGIC_VECTURE(2DOWNTO0);END

priorityencoder;ARCHITECTURE

rtl

OF

priorityencoder

ISBEGIN优先编码器的VHDL描述

首先判断input(7)是否为低,若为低,执行接下来的语句,将结果送到输出,然后退出进程。否则继续判别IF语句,执行程序。

IF(input(7)='0')THENy<=''000'';

ELSIF(input(6)='0')THENy<=''001'';……

ELSIF(input(1)='0')THENy<=''110'';

ELSEy<=''111'';

ENDIF;(二)编码器的应用(3)第一片工作时,编码器输出:0000-0111

第二片工作时,编码器输出:1000-1111解:(1)编码器输入16线,用两片8-3线编码器,高位为第一片,低位为第二片。高位低位(2)实现优先编码:高位选通输出与低位控制端连接。例:用8-3线优先编码器74148扩展成16线-4线编码器。A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15Z1Z0Z2Z3译码输入译码输出

a1

a0

y0

y1

y2

y30010000101001000101100012位二进制译码器译码输入译码输出

a1

a0

y0

y1

y2

y30001110110111011011111102位二进制译码器二、译码器(一)变量译码器

二进制译码器输入输出满足:m=2n如:2线-4线译码器集成译码器741388421BCD译码器

译码输入:n位二进制代码译码输出m位:一位为1,其余为0或一位为0,其余为12线—4线译码器

1&Y3&Y2&Y1&Y0S1B1A译码输入,二进制编码0~7依次对应8个输出。3线-8线译码器(74LS138)八个输出端,低电平有效。译码状态下,相应输出端为0;禁止译码状态下,输出均为1。~S1、使能输入,与逻辑。EN=1(

EN=0,禁止译码,输出均为1。),译码。A0

~A2Y0Y1Y2Y3Y4Y5Y6Y7A0A1A2S3S2S101234567BIN/OCT012G70&EN

3—8译码器的VHDL描述

LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITYdecoder_3_to_8ISPORT(a,b,c,g1,g2a,g2b:INSTD_LOGIC;

y:OUTSTD_LOGIC_VECTOR(2DOWNTO0);ENDdecoder_3_to_8;ARCHITECTURErtlOFdecoder_3_to_8ISSIGNALindata:STD_LOGIC_VECTOR(2DOWNTO0);BEGIN

indata<=c&b&a;PROCESS(indata,g1,g2a,g2b)BEGINIF(g1='1'ANDg2a='0'ANDg2b='0')THEN选通输入端g1=1,g2a=0,g2b=0时,3-8译码器才进行正常译码。

CASE

indataISWHEN''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<=''11111111'';ENDcase;ELSE

y<=''11111111'';ENDIF;ENDPROCESS;ENDrtl;

否则y0

∼y7输出均为高电平使能端的两个作用:(1)消除译码器输出尖峰干扰EN端正电平的出现在A0∼A2稳定之后;EN端正电平的撤除在A0∼A2再次改变之前。

(2)逻辑功能扩展例:用3线-8译码器构成4线-16译码器。避免A0∼A2在变化过程中引起输出端产生瞬时负脉冲。例:用3线-8线译码器构成4线-16线译码器。X0∼X3:译码输入E:译码控制E=0,译码E=1,禁止译码X3∼X0:0000∼0111,第一片工作X3∼X0:1000∼1111第二片工作000∼111

译码输入001000000∼111

译码输入101001例:试用74138和与非门构成一位全加器。解:全加器的最小项表达式应为(三)译码器的应用Si=Ci+1=&SiY0Y1Y2Y3Y4Y5Y6Y7A0A1A2S3S2S101234567BIN/OCT012G70&ENCiBiAi1

&Ci+18421BCD译码器

输入端输入端Y0Y1Y2Y3Y4Y5Y6Y7Y8Y9A0A1A2A30123456789BIN/DEC0123G90&ENS3S2S1利用译码器实现组合逻辑电路

例:用译码器和门电路实现逻辑函数

=CBAY0Y1Y2Y3Y4Y5Y6Y7A0A1A2S3S2S101234567BIN/OCT012G70&EN1F&输入数据用译码器构成数据分配器地址选择码多路数据输出D0D1D2D3D4D5D6D7A0A1A2S3S2S101234567BIN/OCT012G70&END1(二)数字显示译码器1.七段数码管2.七段显示译码器共阴极共阳极:高电平亮:低电平亮每一段由一个发光二极管组成。输入:二—十进制代码输出:译码结果,可驱动相应的七段数码管显示正确的数字。显示译码器动画七段译码器7448BCD码输入信号译码输出,低电平有效本信号为低电平时,熄灭。当LT为低电平时,BI/RBI为高电平时,试灯。

当LT为高电平,RBI为低电平时,灭零。在多个通道中选择其中的某一路,或多个信息中选择其中的某一个信息传送或加以处理。数据选择器多输入一输出选择三、数据选择器(一)分类:2选1、4选1、8选1、16选1。双四选一数据选择器74153三、数据选择器(一)分类:二选一、四选一、八选一、十六选一。双四选一数据选择器74153使能端输出端数据输入公用控制输入S1F1F2D10D11D12D13D20D21D22D23A0A1S2D10D11D12D13D20

D21

D22

D2374153A0A1S2S1F2F2D8D9D10D11D12D13D14D15A0A1A2D0D1D2D3D4D5D6D774151(2)A0A1A2SS1(1)F1F1D0D1D2D3D4D5D6D7A0A1A2D0D1D2D3D4D5D6D774151(1)A0A1A2SS8选1数据选择器74LS151八选一需3位地址码(二)数据选择器的通道扩展

例:试用最少数量的8选1选择器扩展成16选1选择器。将地址连接在一起将两片的输出原端用或门连载一起,和非端用与门连接在一起。F≥1F&1A3如果A3=0,则(1)片工作,根据A2~A0,从D7~D0中选择一路输出;如果A3=1,则(2

温馨提示

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

评论

0/150

提交评论