1、第三章 组合逻辑电路,第一节 组合电路的分析和设计,第二节 组合逻辑电路中的竞争与冒险,第三节 超高速集成电路硬件描述语言VHDL,第四节 组合逻辑电路模块及其应用,小结,相关知识回顾:,逻辑运算,逻辑门,与 或 非 异或 同或,非门 与门 或门 与非门 或非门 异或门 同或门,本章任务:,1.组合逻辑电路的分析与设计 2.常用组合逻辑模块的使用,由逻辑 门组成,第三章 组合逻辑电路,(2) 学习常用中规模集成模块,(3) 了解电路中的竞争和冒险现象,本章重点,(1)掌握分析和设计组合电路的基本方法,加法器 比较器 译码器 编码器 选择器 分配器,本章基本内容,(1)电路分析与设计经典的方法
2、(2)常用组合逻辑模块的灵活应用,组合电路的分析,组合电路的设计,第一节 组合电路的分析和设计,组合电路,一、组合电路,输入:,逻辑关系:Fi = fi (X1、X2、Xn) i = (1、2、m),特点:,电路由逻辑门构成;,不含记忆元件;,输出无反馈到输入的回路;,输出与电路原来状态无关。,输出:,X1、X2、Xn,F1、F2、Fm,二、组合电路的分析,分析已知逻辑电路功能,步骤:,输出函数 表达式,描述电路 功能,已知组合电路,简化函数,真值表,因此该电路为少数服从多数电路, 称表决电路。,解:(1)由电路图得逻辑表达式,(2)由逻辑表达式得真值表,(3)功能分析:,多数输入变量为1,输
3、出F为1;,多数输入变量为0,输出 F为0。,解:(1)由电路图得 表达式,(2)列出 真值表,(2)列出 真值表,(1)由电路图得表达式,本电路是自然二进制码至格雷码的转换电路。,(3) 分析功能,注意:利用此式时对码位序号大于(n-1)的位应按0处理,如本例码位的最大序号i = 3,故B4应为0,才能得到正确的结果。,推广到一般,将n位自然二进制码转换成n位格雷码: Gi = BiBi+1 (i = 0、1、2、 n-1),自然二进制码至格雷码的转换,三、组合电路的设计,步骤:,根据要求设计出实际逻辑电路,形式变换,根据设计所用 芯片要求,选择所需 门电路,根据设 计要求,确定输入、输出、
4、列出真值表,写出表达式并简化,画逻辑电路图,例3:半加器的设计,(1)半加器真值表,(2)输出函数,(3)逻辑图,(4)逻辑符号,半加器逻 辑符号,由表达式知,若无特别要求,用一个异或门和一个与门即可实现半加器电路。电路图为:,分析:半加器是将两个一位二进制数相加求和及向高位 进位的电路。因此,有两个输入(加数与被加数)及两个输出(和与进位)。,设被加数和加数分别为A和B,和与进位分别为S、C,真值表为:,将用“异或”门实现的半加器改为用“与非”门实现,函数表达式变换形式:,用“与非”门实现半加器逻辑图如图所示:,全加器是实现,例4:全加器的设计。,学生自己完成逻辑电路,全加器逻辑符号,一位二
5、进制数,一位二进制数,低位来的进位,和高位进位,例5:试将8421BCD码转换成余三BCD码。,(2)卡诺图,(1)真值表,(3)表达式,(4)电路图,(3)表达式,8421BCD码转换成余3BCD码的逻辑电路,第二节 组合电路中的竞争与冒险,一、冒险与竞争,竞争:,冒险:,在组合电路中,信号经由不同的途径达到某一会合点的时间有先有后。,由于竞争而引起电路输出发生瞬间错误现象。表现为输出端出现了原设计中没有的窄脉冲,常称其为毛刺。,二、竞争与冒险的判断,代数法:,或的形式时,A变量的变化可能引起险象。,卡诺图法:,如函数卡诺图上为简化作的圈相切,且相切处又无其他圈包含,则可能有险象。,如图所示
6、电路的卡诺图两圈相切,故有险象。,三、冒险现象的消除,1.增加冗余项,如图所示卡诺图,只要在两圈相切处增加一个圈(冗余),就能消除冒险。,增加冗余项可以解决每次只有单个 输入信号发生变化时电路的冒险问题, 却不能解决多个输入信号同时发生变化 时的冒险现象,适用范围有限。,三、冒险现象的消除,. 增加选通信号,在可能产生冒险的门电路的输入端增加一个选通脉冲。当输入信号变换完成,进入稳态后,才启动选通脉冲,将门打开。这样,输出就不会出现冒险脉冲。,1.增加冗余项,增加选通信号的方法比较简单,一 般无需增加电路元件,但选通信号必须 与输入信号维持严格的时间关系,因此 选通信号的产生并不容易。,.输出
7、接滤波电容,1.增加冗余项,.增加选通信号,由于竞争冒险产生的干扰脉冲的宽度一般都很窄,在可能产生冒险的门电路输出端并接一个滤波电容(一般为420pF),使输出波形上升沿和下降沿都变得比较缓慢,从而起到消除冒险现象的作用。,三、冒险现象的消除,输出端接滤波电容方便易行, 但会使输出电压波形变坏,仅适 合对信号波形要求不高的场合。,第三节 超高速集成电路硬件描述语言VHDL,概述,VHDL语言的基本组成,VHDL数据类型和属性,VHDL的行为描述,VHDL的结构描述,VHDL概述, 设计方法 传统的电路系统设计方法:纯硬件逻辑设计(试凑法),存在的问题: 当系统规模增大,设计工作量大,设计周期长
8、; 设计电路的体积大、功耗大、可靠性较低; 交流性较差。, 现代电路的设计方法:硬件设计+ 软件设计从上至下的设计方法,出现Hardware Description Language,HDL, 硬件描述语言 ABEL AHDL Verilog HDL VHDL美国国防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSIC Hardware Description Language,简称为
9、VHDL。,VHDL概述, VHDL语言的主要优点 是一种多层次的硬件描述语言,覆盖面广,描述能力强。即设计的原始描述可以是非常简练的描述,经过层层细化求精,最终成为可直接付诸生产的电路级或版图参数描述,整个过程都可以在VHDL的环境下进行。 VHDL 有良好的可读性,即可以被计算机接受,也容易被理解用VHDL 书写的原文件,即是程序,又是文档,即是技术人员之间交换信息的文件,又可作为合同签约者之间的文件。,VHDL概述, VHDL本身的生命期长。因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。与工艺技术有关的参数可通过VHDL提供的属性加以描述,工艺改变时,只需修改相应程序
10、中的属性参数即可。 支持大规模设计的分解和已有设计的再利用。一个大规模设计不可能一个人独立完成,它将由多人、多项目组来共同完成。VHDL为设计的分解和设计的再利用提供了有力的支持。 VHDL已成为IEEE承认的一个工业标准,事实上已成为通用硬件描述语言。,VHDL概述, VHDL语言的主要优点,一、VHDL的基本组成,VHDL 语言,参数部分程序包,接口部分设计实体,描述部分结构体,LIBRARY ieee;,USE ieee.std_logic_1164.all;,(一)参数部分程序包,程序包,设计者自身设计的程序包,设计中的子程序和公用数据类型的集合。,调用数据类型标准程序包的VHDL语言
11、描述,放在VHDL程序的最前面,表示以后在实体或结构体中要用到数据类型包中的数据类型。,(二)接口部分设计实体,设计实体,提供设计模块的公共信息,是VHDL设计电路的最基本部分。,VHDL实体的描述方法:,ENTITY kxor IS,PORT(a1,b1:IN std_logic;,c1:OUT std_logic);,END kxor;,一个模块中仅有一个设计实体。,实体 及实体声明语句,ENTITY、IS、PORT、IN、OUT和END为关键字; ENTITY.END之间表示实体内容; kxor表示实体的名称,即电路的符号名; PORT端口(引脚)信息关键字,描述了信号的流向; IN输入
12、模式; OUT输出模式; std_logic表示信号取值的类型为标准逻辑。,(二)接口部分设计实体,ENTITY sel IS PORT(d0,d1,d2,d3:IN BIT; s :IN INTEGER RANGE 0 TO 3;out1 :OUT BIT); END sel;,再例:,(二)接口部分设计实体,(三)描述部分结构体,结构体,描述实体硬件的互连关系、数据的传输和变换以及动态行为。,一个实体可以对应多个结构体,每个结构体可以代表该硬件的某一方面特性,例如行为特性、结构特性。,ARCHITECTURE kxor_arc OF kxor IS,BEGIN,c1 = (NOT a1 A
13、ND b1) OR (a1 AND NOT b1);,END kxor_arc;,二、VHDL数据类型和属性,VHDL硬件描述语言中涉及了许多信号、变量和常量,它们用来保持数据。,在VHDL中,保持数据的信号、变量和常量称为目标。,VHDL是一种非常严格的数据类型化语言,规定每个信号、常量或变量和每个表达式有一个唯一的确定数据类型,,每个目标和表达式的数据类型静态地被确定。,每一个目标都有一个数据类型来确定目标保持的那一类数据。,在表达式中分配数值给目标时的数据类型不可以被混用。,在VHDL中目标有三种:信号、变量和常量。,信号和变量可以赋予一系列的值,而常量一次仅被分配一个值。,信号和变量又
14、有不同,赋予信号的数值要到未来 的某个时刻,信号才接受当前的数值;而赋予变量的 数值,变量立即接收当前的数值。,目标的一般形式如下:, : := ;,二、VHDL数据类型和属性,目标:是一个或多个代表着目标种类的字符串,多个目 标时用“,”号分开。, : := ;,目标种类:信号(SIGNAL)、变量(VARIABLE)和常量(CONSTANT)。,信号:它表示把元件的端口连接在一起的互连线。 变量:用于对暂时数据的局部存储,变量只在进程和子 程序内部定义。 常量:对某些特定类型数据赋予的一次性数值。,表达式:表达式是为了规定目标的初始值,这是缺省部分。,目标类型:为了规定目标的特征,VHDL
15、含有很宽范围的数据类型。VHDL除了有基本的数据类型之外,设计者还可以建立自己的数据类型,类型说明部分规定类型名和类型范围,它的一般形式是:,VARIABLE a1:INTEGER:=3;,TYPE IS ;,标量类型、复合类型、子类型、文件类型和寻址类型。,标量类型包括所有的简单类型:如整数、实数等;,复合类型包括数组和记录;,寻址类型在一般编辑语言中等价为指针;,文件类型是设计者定义的文件类型为设计者提供说明的文件对象;,子类型主要是对现有类型加以限制。,VHDL可用数据类型有五类:,1.标量数据类型,标量数据类型是基本的数据类型,它包括整数类型、 实数类型、物理类型和枚举类型。,物理类型
16、要提供一个基本单位,然后在这个基本单位 上定义多个或零个次级单位,每个次级单位都是基本单位 的整数倍。,枚举类型在形式上是定义括弧括起来的字符串文字表,一个字符串文字在枚举类型定义中只能出现一次,但允许同样一个字符串文字出现在不同的枚举类型的字符串文字表中,枚举类型的字符串文字表中的文字是由设计者定义的,这些字母可以是单个字母,也可以是一个字符串,例如BREAKFAST, Lunch, a等。,下面举一个VHDL程序加深理解枚举类型的使用。,一个目标的数值有可能经常更换或者说是包含多个值,但一个目标一次只能被一种类型说明。,PACKAGE meals_pkg IS TYPE meal IS(b
17、reakfast,lunch,dinner); END meals_pkg;,例1:,USE work . meals_pkg . all;,ARCHITECTURE meals_arc OF meals IS BEGIN WITH previous_meal SELECT next_meal = breakfast WHEN dinner, lunch WHEN breakfast, dinner WHEN lunch; END meals_arc;,自定义程序包的名字,枚举数据类型的名字,三个枚举数据,ENTITY meals IS PORT(previous_meal:IN meal;
18、next_meal:OUT meal); END meals;,调用自定义程序包,枚举型数据,2.复合数据类型,复合类型是由数组类型和记录类型组成,它们的元素是标量类型的元素。数组类型是由相同的标量元素组成,即同构复合类型,数组可以是一维、二维或多维。例如:,TYPE matrix IS ARRAY(row,column) OF std_logic; TYPE r_ma IS ARRAY( 1 TO 10, 1 TO 40) OF std_logic;,TYPE word IS ARRAY(15 DOWNTO 0) OF BIT;,TYPE column IS RANGE 1 TO 40;,T
19、YPE row IS RANGE 1 TO 10;,CONSTANT ROM : BIT_VECTOR(0 TO 15);,Word(15)word(0)共16个同数据类型的元素,VHDL的属性,TYPE bit1 IS ARRAY(63 DOWNTO 32) OF BIT; VARIABLE left_range,right_range,uprange,lowrange:INTEGER; BEGIN left_range:= bit1LEFT; -returns 63 right_range:= bit1RIGHT; -returns 32 uprange:= bit1HIGH; -retu
20、rns 63 lowrange:= bit1LOW; -returns 32,值类属性:值类属性用于返回数组的边界或长度,首先举一例 数组边界的例子说明值类属性。例2:,TYPE bit1 IS ARRAY(0 TO 7) OF BIT; TYPE bit2 IS ARRAY(8 TO 31) OF BIT; VARIABLE len1,len2:INTEGER; BEGIN len1:=bit1LENGTH; -return 8 len2:=bit2LENGTH; -return 24,下面再举一个值类数组属性的例子,让其返回数组范围的总长度。例:,它可用来检查一个信号的变化,并且变化刚刚发
21、生,即推断出在信号上发生了一个跳变。,函数信号属性:函数信号属性用来返回有关信 号行为功能的信息,它反映一个信号是否正好有值 的变化或事件的发生,如clkEVENT,这个属性为 “EVENT”,对检查时钟边沿触发是很有效的。,下面举一个例子,说明函数信号属性的用法。,IF clk= 1 AND clkEVENT THEN q = d; END IF;,上述语句中用到了函数信号属性clkEVENT,说明如果时钟信号clk为高电平,并且事件刚刚发生,也就是说是时钟上升沿有效,此时q得到d的信号。,(三)VHDL的行为描述,三个行为既可以是相互独立,成为单一的行为 描述体,又可以相互联系,成为混合描
22、述体,如进 程行为描述行为之间是并行行为,进程行为体的内 部是顺序行为。,1.VHDL的并行行为,在典型的编程语言如C或Pascal中,每个赋值语句按规定的次序,一个接在另一个之后顺序执行,执行的次序由源文件决定。,在VHDL中,结构体的内部没有规定语句的次序,执行的次序仅由对语句中的敏感信号发生的事件决定,且语句是同时执行。,结构体中并行赋值语句的一般格式如下:, ;,读作对象得到表达式的值,作用是将表达式的信号值分配给对象,即每当表达式的信号值变化时执行该语句。,每个表达式都至少有一个敏感信号,每当敏感信号改变其 值时,就执行这个信号赋值语句。,在所有的并行语句中,两个以上的并行赋值语句在
23、字面上的顺序并不表明它们的执行顺序。,例如下面的两个结构体在功能上是等价的。,ENTITY exe IS PORT(a1,a2:IN BIT; b1,b2:OUT BIT); END exe;,ARCHITECTURE exe_arc1 OF exe IS BEGIN b1 = a1 AND b2; b2 = NOT a1 OR a2; END exe_arc1;,ARCHITECTURE exe_arc2 OF exe IS BEGIN b2 = NOT a1 OR a2; b1 = a1 AND b2; END exe_arc2;,另一种并行信号赋值语句是选择信号赋值语句,它们的每一个赋值
24、语句都需要给出一个表达式,同时给出与该表达式的每个可能值相关联的信号。,选择信号赋值语句的一般形式如下:WITH SELECT WHEN , WHEN , WHEN ;,ARCHITECTURE sels_arc OF sels IS BEGIN WITH s SELECT out1 = d0 WHEN 0, d1 WHEN 1, d2 WHEN 2, d3 WHEN 3; END sels_arc;,一个典型的四路数据选择器VHDL程序说明WITH一般 形式的用法。,ENTITY sels IS PORT(d0,d1,d2,d3:IN BIT; s :IN INTEGER RANGE 0 T
25、O 3; out1 :OUT BIT); END sels;,仍以四路数据选择器为例,讨论另一个较为复杂的并行信号赋值语句的例子,以便更详细地说明并行概念,下面是四输入数据选择器的第二个VHDL程序。 例:,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux4 IS PORT(I0,I1,I2,I3,A,B:IN std_logic; Q :OUT std_logic); END mux4;,ARCHITECTURE mux4_arc OF mux4 IS SIGNAL sel :INTEGER ; BEGIN Q = I0 AFTER
26、10 ns WHEN sel= 0 ELSE I1 AFTER 10 ns WHEN sel= 1 ELSE I2 AFTER 10 ns WHEN sel= 2 ELSE I3 AFTER 10 ns ;,sel = 0 WHEN A= 0 AND B= 0 ELSE 1 WHEN A= 1 AND B= 0 ELSE 2 WHEN A= 0 AND B= 1 ELSE 3 ; END mux4_arc;,2.VHDL的进程行为,VHDL除了并行行为之外,还有顺序行为。顺序行为执行 的顺序是一个接在另一个之后严格执行。,顺序行为的语句存在于VHDL程序中的进程行为之中。,而进程行为之间是并行
27、行为语句。,进程行为语句的一般形式如下:, :PROCESS BEGIN WAIT ON ;WAIT UNTIL ; WAIT FOR ; END PROCESS;,整个实体模块中的每个进程行为语句,可以在任何时候被 激活,所有被激活的进程是并行执行的。,下面举一个3线-8线通用译码器程序的例子,说明进程语句如何工作。,LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY decoder IS PORT(sel : IN UNSIGNED(2 DOWNTO 0); dout : OUT U
28、NSIGNED(7 DOWNTO 0); END decoder;,ARCHITECTURE decoder_arc OF decoder IS SIGNAL sel1 :INTEGER; BEGIN PROCESS(sel) BEGIN,sel1 dout = (0,0,0,0,0,0,0,1) AFTER 5 ns;,WHEN 1 = dout dout dout dout dout dout dout = (1,0,0,0,0,0,0,0) AFTER 5 ns; END CASE; END PROCESS; END decoder_arc;,此例只要sel的值一发生改变就激活进程,从第
29、一句执行 直到满足条件后再被挂起。,PROCESS(sel),下例是另一种激活进程的方式:,ENTITY reg IS PORT(d,clk:IN BIT; q1,q2:OUT BIT); END reg; ARCHITECTURE reg_arc OF reg IS BEGIN,PROCESS BEGIN WAIT UNTIL clk= 1; q1 = d; END PROCESS;,PROCESS BEGIN WAIT UNTIL clk= 0; q2 = d; END PROCESS; END reg_arc;,进程行为语句之间是并行关系,进程行为语句内部是顺序关系。,VHDL的每个结构
30、体中可以有多个进程行为语句。,它的关键之处是:,3.VHDL的顺序行为,顺序行为语句可分为两大类:条件控制类,循环控制类。,在这两类中选出六种 IF、CASE、FOR、WHILELOOP、 EXIT和ASSERT进行讨论,IF THEN ;ELSIF THEN ;ELSIF THEN ;ELSE ;END IF;,(1) IF语句,IF语句的一般形式为:,ARCHITECTURE alarm_arc OF alarm IS BEGIN,下面举例说明IF条件语句的用法。 例:,用VHDL设计一家用报警系统的控制逻辑,它有来自传感 器的三个输入信号smoke、door、water和准备传输到告警设
31、备 的三个输出触发信号fire_alarm、burg_alarm、water_alarm以 及使能信号en和alarm_en。,VHDL程序描述如下:,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY alarm IS PORT(smoke,door,water:IN std_logic; en,alarm_en :IN std_logic; fire_alarm,burg_alarm,water_alarm:OUT std_logic); END alarm;,PROCESS(smoke,door,water,en,alarm_en) BEG
32、IN IF (smoke= 1) AND (en= 0) THEN fire_alarm = 1; ELSE fire_alarm = 0; END IF;,IF (door= 1) AND (en= 0) AND (alarm_en= 0) THEN burg_alarm = 1; ELSE burg_alarm = 0; END IF;,IF (water= 1) AND (en= 0) THEN water_alarm = 1; ELSE water_alarm = 0; END IF;,END PROCESS; END alarm_arc;,(2) CASE 语句,CASE语句的一般形
33、式:,CASE IS WHEN ; WHEN | ; WHEN ; WHEN OTHERS ; END CASE;,CASE语句是VHDL提供的另一种形式的控制语句,每当 单个表达式的值在多个起作用的项中选择时,用此语句是较合 适的,它根据所给表达式的值或域,选择“=”后面的执行语句。,用CASE语句应该注意三个问题:,A) 关键字WHEN的数量不作限制,但不容许两个语句用一个值;,B)所有WHEN后面的值在CASE语句中合起来的值是值域中的全部;,C)WHEN语句的次序可以任意排定。,下面举例说明ASSERT语句的用法。 例:由两个或非门构成的RS触发器。,ENTITY RSFF ISPOR
34、T(R,S:IN BIT;Q:OUT BIT); END RSFF; ARCFITECTURE RSFF_ARC OF RSFF IS BEGINPROCESS(R,S)VARIABLE LAST_STATE:BIT:=0;BEGINASSERT NOT(R=1 AND S=1)REPORT “BOTH R AND S EQUAL TO 1”SEVERITY ERROR;IF R=0 AND S=0 THENLAST_STATE:=LAST_STATE;ELSIF R=1 AND S=0 THEN,为真时,执行IF语句。,LAST_STATE:=0;ELSELAST_STATE:=1;END
35、IF;Q=LAST_STATE;END PROCESS; END RSFF_ARC;,信号可被看作两个元件之间数据传输的通路。,(四)VHDL的结构描述,实体主要描述元件、端口与信号。,元件是硬件的描述,即门、芯片或者电路板。,端口是元件与外界的连接点,数据通过端口进入或流出元件。,而信号则是作为硬件连线的一种抽象描述,它既能保持变化 的数据,又可以连接各个子元件。,下面举例说明“调用元件语句”的用法。,对一个硬件的结构进行描述,就是要描述它由哪些 子元件组成,以及各个子元件之间的互连关系。,结构描述比行为描述更加具体化,即结构描述与硬 件之间的关系要比行为描述与硬件之间的关系更明显。,前面讨
36、论,行为描述的基本单元是进程语句。,结构描述的基本单元则是“调用元件语句”。,首先用VHDL的行为描述设计半减器:,ENTITY halfsub IS PORT(A,B:IN BIT; T,C:OUT BIT); END halfsub;,PROCESS(A,B) BEGIN T= A XOR B AFTER 10 ns; C = (NOT A) AND B AFTER 10 ns; END PROCESS;,一定记住输入、输出端口的顺序。,下面再将或门的VHDL程序描述如下:,ARCHITECTURE orgate_arc OF orgate IS BEGINO1= A1 OR B1; EN
37、D orgate_arc;,下面将两个半减器,一个或门的端口,通过定义一 些中间信号将其连接起来形成VHDL的结构描述。,ENTITY orgate IS PORT(A1,B1:IN BIT; O1:OUT BIT); END orgate;,一定记住输入、输出端口的顺序。,在下面举的全减器例子里可以看到定义了中间信号temp_T,temp_c1和temp_c2,ENTITY fullsub IS PORT(I1,I2,C_IN:IN BIT; FT,C_OUT:OUT BIT); END fullsub;,ARCHITECTURE fullsub_arc OF fullsub IS SIGN
38、AL temp_T,temp_c1,temp_c2:BIT;,COMPONENT halfsub PORT(A,B:IN BIT; T,C:OUT BIT); END COMPONENT;,COMPONENT orgate PORT(A1,B1:IN BIT; O1:OUT BIT); END COMPONENT;,在说明区定义中间变量。,在说明区说明调用的半加器。一定记住顺序。,三个输入,两个输出。,图中虚线框各元件之间 的连线命名。temp_T将第一 个半减器的差位输出连到第 二个半减器的输入端。信号 temp_c1将第一个半减器的借 位输出连至“或”门的一个输入 端,信号temp_c2将
39、第二个半 减器的借位输出连至“或”门的 另一个输入端。用三个元件调用语句定义这三个连接关系。,BEGINU0:halfsub PORT MAP(I1,I2,temp_T,temp_c1);,U1:halfsub PORT MAP(temp_T,C_IN,FT,temp_c2);,U2:orgate PORT MAP(temp_c1,temp_c2,C_OUT);,END fullsub_arc;,减数、被减数。,低位借位与和位。,第四节 组合逻辑电路模块及其应用,编码器,译码器,数据选择器,数值比较器,加法器,一、编码器,优先编码,功能:输入m位代码;输出n位二进制代码(m2n)。,优先编码器
40、允许几个输入端同时加上信号,电路只对其中优先级别最高的信号进行编码。,逻辑功能:任何一个输入端接低电平时,三个输出端有一组对应的二进制代码输出。,(一)二进制编码器,将输入信号编成二进制代码的电路,任何时刻只允许一个输入端有信号输入。,8线3线优先编码器74148,管脚定义:,二十进制编码器,PROCESS(input)END PROCESS; END rtl;,LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY priorityencoder ISPORT (input:IN STD_LOGIC_VECTURE(7 DOWNTO 0);y:OU
41、T STD_LOGIC_VECTURE (2 DOWNTO 0); END priorityencoder; ARCHITECTURE rtl OF priorityencoder IS BEGIN,优先编码器的VHDL描述,首先判断input(7)是否为低,若 为低,执行接下来的语句,将结果送到 输出,然后退出进程。否则继续判别IF 语句,执行程序。,(二)编码器的应用,(3)第一片工作时,编码器输出:0000-0111第二片工作时,编码器输出: 1000-1111,解:(1)编码器输入16线,用两片8-3线编码器,高位为第 一片,低位为第二片。,高位,低位,(2)实现优先编码:高位选通输出
42、与低位控制端连接。,例:用8-3线优先编码器74148扩展成16线-4线编码器。,二、译码器,(一) 变量译码器,二进制译码器输入输出满足:m=2n,如:2线-4线译码器集成译码器74138 8421BCD译码器,译码输入:n位二进制代码,译码输出m位:,一位为1,其余为0,或一位为0,其余为1,2线4线译码器,译码输入,二进制编码07依次对应8个输出。,3线-8线译码器(74LS138),八个输出端,低电平有效。译码状态下,相应输出端为;禁止译码状态下,输出均为。,S1、,A0 A2,A0 A1 A2,38译码器的VHDL描述,LIBRARY IEEE; USE IEEE.std_logic
43、_1164.all; ENTITY decoder_3_to_8 ISPORT (a,b,c,g1,g2a,g2b:IN STD_LOGIC; y:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END decoder_3_to_8; ARCHITECTURE rtl OF decoder_3_to_8 ISSIGNAL indata: STD_LOGIC_VECTOR (2 DOWNTO 0); BEGINindata=c PROCESS(indata,g1,g2a,g2b) BEGINIF (g1=1 AND g2a=0 AND g2b=0) THEN,选通输入端g1=
44、1,g2a=0, g2b=0时,3-8译码器才进行正 常译码。,CASE indata ISWHEN 000 =yyyyyyyyy=11111111;END case;ELSEy=11111111;END IF;END PROCESS; END rtl;,使能端的两个作用:,(1)消除译码器输出尖峰干扰,EN端正电平的出现在A0A2稳定之后;,EN端正电平的撤除在A0A2再次改变之前。,(2)逻辑功能扩展,例:用3线-8译码器构成4线-16译码器。,避免A0A2在变化过程中引起输出端产生瞬时负脉冲。,例:用3线-8线译码 器构成4线-16线译 码器。,X0X3:译码输入,E:译码控制 E=0,
45、译码 E=1,禁止译码,X3X0:00000111,,第一片工作,X3X0:10001111,第二片工作,例:试用 74138和与非门构成一位全加器。,解:全加器的最小项表达式应为,(三)译码器的应用,A0 A1 A2,Ci Bi Ai,8421BCD译码器,Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9,A0 A1 A2 A3,利用译码器实现组合逻辑电路,例: 用译码器和门电路实现逻辑函数,=,C B A,用译码器构成数据分配器,(二)数字显示译码器,1.七段数码管,2.七段显示译码器,:高电平亮,:低电平亮,每一段由一个发光二极管组成。,输入:二十进制代码,输出:译码结果,可驱
46、动相应的七段数码管显示正确的数字。,显示译码器动画,七段译码器7448,本信号为低电平时, 熄灭。,当LT为低电平时, BI/RBI为高电平时, 试灯。,当LT为高电平, RBI为低电平时, 灭零。,在多个通道中选择其中的某一路,或多个信息中选择其中的某一个信息传送或加以处理。,数据选择器,多输入,一输出,选择,三、数据选择器,(一)分类:2选1、4选1、8选1、16选1。,双四选一数据选择器74153,三、数据选择器,(一)分类:二选一、四选一、八选一、十六选一。,双四选一数据选择器74153,8选1数据选择器74LS151,将地址连接在一起,将两片的输出原端用或门连载一起,和非端用与门连接在一起。,如果A3=0,则(1)片工作,根据A2A0,从D7D0中选择一路输出;如果A3=1,则(2)片工作,根据A2A0,从D15D8中选择一路输出。,