1、第三章第三章 组合逻辑电路组合逻辑电路主讲人:徐向民教授主讲人:徐向民教授本章目录本章目录概述概述基本逻辑门电路的设计基本逻辑门电路的设计译码器的设计译码器的设计编码器的设计编码器的设计加法器的设计加法器的设计其它组合模块的设计其它组合模块的设计组合逻辑电路组合逻辑电路概述概述数字电路按其完成逻辑功能的不同特点,划分为数字电路按其完成逻辑功能的不同特点,划分为组合组合逻辑电路逻辑电路和和时序逻辑电路时序逻辑电路两大类。两大类。组合逻辑电路在逻辑功能上的特点是任意时刻的组合逻辑电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状输出仅仅取决于该时刻的输入,与电路原来的状态
2、无关态无关 而时序逻辑电路在逻辑功能上的特点是任意时刻而时序逻辑电路在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有于电路原来的状态,或者说,还与以前的输入有关。关。组合逻辑电路组合逻辑电路概述概述3-83-8译码器译码器如右图的如右图的3-83-8译码器,译码器,Y1Y1到到Y8Y8的的输出值只与输出值只与A1A1、A2A2、A3A3和片选信和片选信号号S1S1、S2S2、S3S3的当前输入值有关,的当前输入值有关,而与而与A1A1、A2A2、A3A3、S1S1、S2S2和和S3S3以以
3、前任一时刻的任意输入状态无关,前任一时刻的任意输入状态无关,因此是一个典型的组合逻辑电路,因此是一个典型的组合逻辑电路,而并非时序逻辑电路而并非时序逻辑电路组合逻辑电路组合逻辑电路概述概述从逻辑上讲,从逻辑上讲,组合电路在任一时刻的输出状组合电路在任一时刻的输出状态仅由该时刻的信号决定,而与电路原来的态仅由该时刻的信号决定,而与电路原来的状态无关。状态无关。组合逻辑电路:组合逻辑电路:电路无记忆功能电路无记忆功能从结构上讲,从结构上讲,组合电路都是单纯由逻辑门组成,组合电路都是单纯由逻辑门组成,且输出不存在反馈路径。(不含存储单元)且输出不存在反馈路径。(不含存储单元)组合逻辑电路框图组合逻辑
4、电路框图常用的组合逻辑电路:常用的组合逻辑电路:简单门电路、选择器、译码器、简单门电路、选择器、译码器、三态门等三态门等组合逻辑电路组合逻辑电路X X1 1X X2 2XnXnY Y2 2YnYnY Y1 1输入输入输出输出组合逻辑电路组合逻辑电路概述概述传统的设计方法:采用标准组件进行设计传统的设计方法:采用标准组件进行设计(1 1)逻辑问题的描述。将设计问题转化为一个逻辑问题)逻辑问题的描述。将设计问题转化为一个逻辑问题(2 2)逻辑函数简化。将第一步的函数化简,求得描述设计)逻辑函数简化。将第一步的函数化简,求得描述设计 问题的最简表达式问题的最简表达式(3 3)逻辑函数转换。根据使用的
5、门电路类型,将表达式变)逻辑函数转换。根据使用的门电路类型,将表达式变 换为所需形式换为所需形式(4 4)画逻辑图,并考虑实际工程问题。)画逻辑图,并考虑实际工程问题。组合逻辑电路的设计方法:组合逻辑电路的设计方法:组合逻辑电路组合逻辑电路概述概述现代现代EDAEDA设计方法:使用可编程逻辑器件和硬件描述语言设计设计方法:使用可编程逻辑器件和硬件描述语言设计(1 1)逻辑问题的描述。将设计问题转化为一个逻辑问题)逻辑问题的描述。将设计问题转化为一个逻辑问题(2 2)根据逻辑问题,用硬件描述语言进行描述)根据逻辑问题,用硬件描述语言进行描述(3 3)对描述进行综合,仿真测试)对描述进行综合,仿真
6、测试(4 4)生成最终网表,下载到芯片)生成最终网表,下载到芯片组合逻辑电路的设计方法:组合逻辑电路的设计方法:组合逻辑电路组合逻辑电路概述概述传统的设计方传统的设计方法法EDAEDA设计方法设计方法设计方式设计方式人工为主人工为主电脑辅助为主电脑辅助为主设计过程设计过程复杂复杂简单简单可读性可读性低低高高移植性移植性低低高高错误修正错误修正麻烦麻烦容易容易正确性检验正确性检验麻烦麻烦容易容易两种设计方法的比较:两种设计方法的比较:组合逻辑电路组合逻辑电路门电路门电路基本逻辑门电路基本逻辑门电路组合逻辑电路组合逻辑电路门电路门电路数字电路中的四种基本操作数字电路中的四种基本操作是与、或、非及触
7、发器操作,是与、或、非及触发器操作,前三种为组合电路,后一种前三种为组合电路,后一种为时序电路。与非为时序电路。与非 、或非、或非和异或的操作仍然是与、或、和异或的操作仍然是与、或、非的基本操作。与、或、非、非的基本操作。与、或、非、与非、或非和异或等基本逻与非、或非和异或等基本逻辑门电路辑门电路为常用为常用的门电路。的门电路。这一小节将以与非门和或非门为例,介绍如何使用这一小节将以与非门和或非门为例,介绍如何使用VHDLVHDL语言描述进行简单的门电路设计语言描述进行简单的门电路设计组合逻辑电路组合逻辑电路门电路门电路二输入与非门是一种常用的简单逻辑电路,它有二输入与非门是一种常用的简单逻辑
8、电路,它有两个输入端,一个输出端。从输入段输入两个信两个输入端,一个输出端。从输入段输入两个信号,输出段输出这两个信号的逻辑与非值。号,输出段输出这两个信号的逻辑与非值。nandnand是逻辑操作符与是逻辑操作符与非,把非,把nandnand替换为替换为nornor即可得到二输入即可得到二输入或非门或非门Library IEEE;Use IEEE.std_logic_1164.all;Entity nand2 is port(a,b:in std_logic;y:out std_logic);End nand2;Architecture behav of nand2 isBegin y=a n
9、and b;End behav;真值表真值表组合逻辑电路组合逻辑电路译码器译码器译码器的设计译码器的设计组合逻辑电路组合逻辑电路译码器译码器译码器的功能译码器的功能对具有特定含义的输入代码进行对具有特定含义的输入代码进行 翻译翻译,将其转换成相,将其转换成相应的输出信号应的输出信号。什么是译码器什么是译码器(Decoder)实现译码的组合逻辑电路称为译码器。它的输入是一组实现译码的组合逻辑电路称为译码器。它的输入是一组二进制代码,输出是一组高低电平信号。每输入一组不二进制代码,输出是一组高低电平信号。每输入一组不同的代码,只有一个输出呈有效状态。同的代码,只有一个输出呈有效状态。译码器译码器和
10、和编码器编码器是数字系统中广泛使用的多输入多输是数字系统中广泛使用的多输入多输出组合逻辑部件出组合逻辑部件。组合逻辑电路组合逻辑电路译码器译码器 译码器的分类译码器的分类译码器可分为以下四类:译码器可分为以下四类:变量译码器变量译码器:把输入的二进制代码的各种组合状态把输入的二进制代码的各种组合状态翻译成对应的输出信号。翻译成对应的输出信号。码制变换译码器码制变换译码器 :将将一种代码变换为另一种代码的一种代码变换为另一种代码的电路。电路。显示译码器显示译码器:如如将数据显示在七段数码管上时的译码。将数据显示在七段数码管上时的译码。地址译码器地址译码器:将将译码器输入端的输入地址信号翻译成译码
11、器输入端的输入地址信号翻译成相应的输出控制信号。相应的输出控制信号。组合逻辑电路组合逻辑电路译码器译码器常用译码器:常用译码器:l常用的译码器有:双常用的译码器有:双2:42:4线译码器,线译码器,3:83:8线译码器,线译码器,4:164:16线译码器和线译码器和4:104:10线译码器等,其中线译码器等,其中4:104:10线译线译码器用于码器用于BCDBCD码译码。码译码。下面就以下面就以3 38 8译码器为例子,介绍如何使用译码器为例子,介绍如何使用VHDLVHDL语语言描述实现。言描述实现。组合逻辑电路组合逻辑电路译码器译码器3-83-8译码器译码器n如图所示,是个如图所示,是个3-
12、83-8译码器(译码器(74LS138)74LS138)n3 3个二进制输入端,对输入个二进制输入端,对输入a,b,ca,b,c的值的值进行译码,就可以确定哪一个输出端变进行译码,就可以确定哪一个输出端变为有效(低电平)为有效(低电平)ng1,g2a,g2bg1,g2a,g2b是选通信号,只有当是选通信号,只有当g1=1,g2a=0g1=1,g2a=0和和g2b=0g2b=0时,时,译码器才正常译码。译码器才正常译码。组合逻辑电路组合逻辑电路译码器译码器3-83-8译码器的描述译码器的描述Library IEEE;Use IEEE.std_logic_1164.all;Entity decod
13、er_38 is Port(a,b,c,g1,g2a,g2b:in std_logic;y:out std_logic_vector(7 downto 0);End decoder_38;Architecture behav of decoder_38 isSignal indata:std_logic_vector(2 downto 0);Begin indata y y y y y y y y y=“XXXXXXXX”;End case;Else y=“11111111”;End if;End process;End behav;注意:注意:Case语句可用语句可用If语语句进行改写句进行
14、改写组合逻辑电路组合逻辑电路译码器译码器3-83-8译码器的描述(接上)译码器的描述(接上)改写后的改写后的IFIF语句语句:If(g1=1and g2a=0 and g2b=0)then y=“11111111”;Elsif indata=“000”then y=“11111110”;Elsif indata=“001”then y=“11111101”;Elsif indata=“010”then y=“11111011”;Elsif indata=“011”then y=“11110111”;Elsif indata=“100”then y=“11101111”;Elsif indata
15、=“101”then y=“11011111”;Elsif indata=“110”then y=“10111111”;Elsif indata=“111”then y=“01111111”;End if;组合逻辑电路组合逻辑电路译码器译码器小结小结l本例设计的是一个本例设计的是一个3838线译码器,有使能端,低电平有线译码器,有使能端,低电平有效。效。l这个程序的一、二句是库和程序包的语言。接下来是实这个程序的一、二句是库和程序包的语言。接下来是实体,主要是定义了一些输入、输出端口。需要注意的是体,主要是定义了一些输入、输出端口。需要注意的是要帮实体命名,如要帮实体命名,如“decoder_
16、38”,并且工程名与实体,并且工程名与实体名保持一致。还要有结束语,如名保持一致。还要有结束语,如“end decoder_38”。l最后是结构体部分,其中最后是结构体部分,其中“=”=”是信号传输符号,是信号传输符号,“indata=c&b&a”表示把表示把c c、b b、a a进行位合并并且赋进行位合并并且赋值给信号值给信号indata。进程语句是结构体的一种子程序,括号。进程语句是结构体的一种子程序,括号内的信号量是内的信号量是process的输入信号,这些信号无论哪个发的输入信号,这些信号无论哪个发生变化,都将启动生变化,都将启动process语句。语句。组合逻辑电路组合逻辑电路编码器
17、编码器编码器的设计编码器的设计组合逻辑电路组合逻辑电路编码器编码器编码器的功能编码器的功能将信号(如比特流)或数据进行编制、转换成用于通信,将信号(如比特流)或数据进行编制、转换成用于通信,传输和存储的信号形式。传输和存储的信号形式。什么是编码器什么是编码器(Encoder)完成编码工作的组合逻辑电路完成编码工作的组合逻辑电路称为译码器称为译码器。它的输入是。它的输入是一组高低电平信号,输出是一组二进制代码。每输入一一组高低电平信号,输出是一组二进制代码。每输入一组高低电平信号,则输出不同的二进制代码。组高低电平信号,则输出不同的二进制代码。与译码器类似,编码器同样是数字系统中广泛使用的与译码
18、器类似,编码器同样是数字系统中广泛使用的多输入多输出组合逻辑部件多输入多输出组合逻辑部件。组合逻辑电路组合逻辑电路编码器编码器优先级编码器优先级编码器n如图,如图,74LS14874LS148是一个是一个8 8输入,输入,3 3位二进制码输出的优先级编码位二进制码输出的优先级编码器。器。n当某一个输入有效时(低电当某一个输入有效时(低电平),就可以输出一个对应的平),就可以输出一个对应的3 3位二进制编码。位二进制编码。n当同时有几个输入有效时,将当同时有几个输入有效时,将输出输出优先级最高优先级最高的那个输入对的那个输入对应的二进制编码。应的二进制编码。组合逻辑电路组合逻辑电路编码器编码器优
19、先级编码器实现优先级编码器实现Library IEEE;Use IEEE.std_logic_1164.all;Entity priorityencoder is Port(input:in std_logic_vector(7 downto 0);y:out std_logic_vector(2 downto 0);End priorityencoder;Architecture behav of priorityencoder isBegin Process(input)Begin组合逻辑电路组合逻辑电路编码器编码器优先级编码器的实现优先级编码器的实现(接上(接上)If(input(0)=
20、0)then y=“111”;elsif (input(1)=0)then y=“110”;elsif (input(2)=0)then y=“101”;elsif (input(3)=0)then y=“100”;elsif (input(4)=0)then y=“011”;elsif (input(5)=0)then y=“010”;elsif (input(6)=0)then y=“001”;elsif (input(7)=0)then y=“000”;else y=“XXX”;end if;End process;End behav;当当input=input=“01011111”“0
21、1011111”时,编码成?时,编码成?因为因为IF语句是一种语句是一种流流程控制语句程控制语句,判断条,判断条件有前后次序,所以件有前后次序,所以应编码为应编码为“010”010”。组合逻辑电路组合逻辑电路加法器加法器加法器的设计加法器的设计组合逻辑电路组合逻辑电路加法器加法器加法器加法器 在数字系统中,常需要进行加、减、乘、除等运算,而乘、在数字系统中,常需要进行加、减、乘、除等运算,而乘、除和减法运算均可变换为加法运算,故加法运算电路应用十分除和减法运算均可变换为加法运算,故加法运算电路应用十分广泛,另外,加法器还可用于码组变换,数值比较等,因此加广泛,另外,加法器还可用于码组变换,数值
22、比较等,因此加法器是数字系统中最基本的运算单元。法器是数字系统中最基本的运算单元。加法加法在数字系统中分为在数字系统中分为全加全加和和半加半加,所以,所以加法器也分为加法器也分为全加器全加器和和半加器半加器。组合逻辑电路组合逻辑电路加法器加法器半加器半加器不考虑由低位来的进位,只有本位两个数相加,不考虑由低位来的进位,只有本位两个数相加,称为半加器。称为半加器。全加器全加器除本位两个数相加外,还要加上从低位来的进位除本位两个数相加外,还要加上从低位来的进位数,称为全加器数,称为全加器半加器半加器全加器全加器输入个数输入个数2 23 3输出个数输出个数2 22 2是否考虑低是否考虑低位进位位进位
23、不考虑不考虑考虑考虑组合逻辑电路组合逻辑电路加法器加法器半加器半加器 半加器半加器不考虑低位向高位的进位,不考虑低位向高位的进位,因此它只有两个输因此它只有两个输入端和两个输出端。入端和两个输出端。Sum=X XOR Y;Carry=X AND Y;SumCarryXY LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY halfadder IS PORT(X,Y :in std_logic;Sum,Carry :out std_logic);END halfadder;ARCHITECTURE a OF halfadder IS BEGIN Sum
24、=X xor Y;Carry=X and Y;END a;逻辑图逻辑图组合逻辑电路组合逻辑电路加法器加法器逻辑图逻辑图 全加器全加器考虑低位向高位的进位,考虑低位向高位的进位,所以它有三个输入端所以它有三个输入端和两个输出端。和两个输出端。LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY full_add IS PORT(X,Y,Z:in bit;Sum,Carry:out bit);END full_add;ARCHITECTURE a OF full_add IS BEGIN Sum=X xor Y xor Z;Carry=(X and Y)o
25、r(Y and Z)or(Z and X);END a;SumCarryXYZsum=(X xorY)xor Z;cout=(X and Y)or(Y and Z)or(Z and X);全加器全加器组合逻辑电路组合逻辑电路加法器加法器加法器的模块化加法器的模块化当全加器设计完成后,采用模块化设计方法,将全加器作为一当全加器设计完成后,采用模块化设计方法,将全加器作为一个组件个组件(component)定义,加入名为定义,加入名为components的的程序包程序包中,以后可以统一将设计的组件放在这个程序包中。中,以后可以统一将设计的组件放在这个程序包中。Library IEEE;Use IE
26、EE.std_logic_1164.all;PACKAGE components IS COMPONENTS fadd IS Port(a,b,ci:IN std_logic;co,sum:OUT std_logic);END fadd;End components;组合逻辑电路组合逻辑电路加法器加法器四位串行进位全加器的设计四位串行进位全加器的设计l根据模块化设计思想,多位的加法器可将全加器根据模块化设计思想,多位的加法器可将全加器作为一个基本组件多个级联,如图所示。作为一个基本组件多个级联,如图所示。l在设计中,使用在设计中,使用Component语句,与语句,与Port Map语语句结合
27、句结合可以可以让我们像堆积木让我们像堆积木一般一般搭建出较为复杂搭建出较为复杂的电路的电路组合逻辑电路组合逻辑电路加法器加法器四位串行进位全加器的实现四位串行进位全加器的实现Library IEEE;Use IEEE.std_logic_1164.all;Use ponents.all;Entity fadd4 is port(a,b :in std_logic_vector(3 downto 0);ci:in std_logic;co:out std_logic;sum:out std_logic_vector(3 downto 0);End fadd4;Architecture stru
28、of fadd4 is signal ci_ns:std_logic_vector(2 downto 0);Begin U0:fadd port map(a(0),b(0),ci,ci_ns(0),sum(0);U1:fadd port map(a(1),b(1),ci_ns(0),ci_ns(1),sum(1);U2:fadd port map(a(2),b(2),ci_ns(1),ci_ns(2),sum(2);U3:fadd port map(a(3),b(3),ci_ns(2),co,sum(3);End stru;Architecture behav of 实体名称实体名称 IS c
29、omponent 元件元件A A port();end component;component 元件元件B B port();end component;组合逻辑电路组合逻辑电路加法器加法器四位并行进位全加器四位并行进位全加器串行进位加法器,在每一位的计算时,都在等待前一位的串行进位加法器,在每一位的计算时,都在等待前一位的进位,因此,位数越多,速度越慢。那是否能先考虑进位进位,因此,位数越多,速度越慢。那是否能先考虑进位的输出?并行进位的思想在于各级进位信号同时产生,大的输出?并行进位的思想在于各级进位信号同时产生,大大减少了进位产生的时间。其进位的逻辑表达式为:大减少了进位产生的时间。其进
30、位的逻辑表达式为:组合逻辑电路组合逻辑电路加法器加法器四位并行进位全加器的实现四位并行进位全加器的实现Library IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_unsigned.all;Entity fadd4 is port(a,b :in std_logic_vector(3 downto 0);ci:in std_logic;co:out std_logic;sum:out std_logic_vector(3 downto 0);End fadd4;组合逻辑电路组合逻辑电路加法器加法器四位并行进位全加器(接上)四位并行进位全
31、加器(接上)Architecture behav of fadd4 is signal d,t:std_logic _vector(3 downto 0);signal c:std_logic_vector(4 downto 0);Begin as_add:for i in 0 to 3 generate d(i)=a(i)and b(i);t(i)=a(i)or b(i)s(i)=a(i)xor b(i)xor c(i)end generate;c(0)=cin;c(1)=d(0)or(t(0)and c(0);c(2)=d(1)or(t(1)and d(0)or(t(1)and t(0)a
32、nd c(0);组合逻辑电路组合逻辑电路加法器加法器四位并行进位全加器(接上)四位并行进位全加器(接上)c(3)=d(2)or(t(2)and d(1)or(t(1)and t(2)and d(0)or (t(1)and t(2)and t(0)and c(0);c(4)=d(3)or(t(3)and d(2)or(t(3)and t(2)and d(1)or (t(1)and t(2)and t(3)and d(0)or(t(3)and t(2)and t(1)and t(0)and c(0);sum=c(3 downto 0);co=c(4);End behav;组合逻辑电路组合逻辑电路加
33、法器加法器串行进位与并行进位加法器性能比较串行进位与并行进位加法器性能比较1.1.串行进位方式是将全加器级联构成多位加法器。串行进位方式是将全加器级联构成多位加法器。2.2.并行进位加法器设有并行进位产生逻辑,运算速并行进位加法器设有并行进位产生逻辑,运算速度较快。度较快。3.3.并行进位加法器通常比串行级联加法器占用更多并行进位加法器通常比串行级联加法器占用更多的资源,随着位数的增加,相同位数的并行加法的资源,随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距快速增大。因此,器与串行加法器的资源占用差距快速增大。因此,在工程中使用加法器时,要在速度和占用资源间在工程中使用加法器时
34、,要在速度和占用资源间寻找平衡。寻找平衡。4.4.实践表明,实践表明,4 4位并行加法器和串行级联加法器占位并行加法器和串行级联加法器占用几乎相同的资源,所以多位加法器(例如用几乎相同的资源,所以多位加法器(例如8 8位)位)可以由可以由4 4位并行加法器级联构成。位并行加法器级联构成。组合逻辑电路组合逻辑电路加法器加法器8 8位加法器的实现位加法器的实现Library IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_unsigned.all;Entity fadd8 is port(a,b :in std_logic_vector(7
35、downto 0);ci:in std_logic;co:out std_logic;sum:out std_logic_vector(7downto 0);End fadd8;组合逻辑电路组合逻辑电路加法器加法器8 8位加法器的实现位加法器的实现Architecture stru of fadd8 is Component fadd4 port(a,b :in std_logic_vector(3 downto 0);ci:in std_logic;co:out std_logic;sum:out std_logic_vector(3 downto 0);End component;-也可以
36、放在程序包中定义也可以放在程序包中定义 Signal carry_out:std_logic;Begin U1:fadd4 port map(a(3 downto 0),b(3 downto 0),ci,carry_out,sun(3 downto 0);U2:fadd4 port map(a(7 downto 4),b(7 downto 4),carry_out,co,sun(7 downto 4);End stru;组合逻辑电路组合逻辑电路其它组合逻辑模块其它组合逻辑模块组合逻辑电路组合逻辑电路选择器选择器多路选择器多路选择器多路选择器是数据选择器的别称。多路选择器是数据选择器的别称。逻辑
37、功能逻辑功能根据需要,在地址选择信号的控制下,根据需要,在地址选择信号的控制下,从多路输入数据中选择任意一路数据从多路输入数据中选择任意一路数据作为输出端口的输出数据作为输出端口的输出数据.常用的类型常用的类型4 4选选1 1数据选择器、数据选择器、8 8选选1 1数据选择器(型号为数据选择器(型号为7415174151、74LS15174LS151、7425174251、74LS15174LS151)、)、1616选选1 1数据选择器(可以用两片数据选择器(可以用两片7415174151连接起来构成)连接起来构成)等等组合逻辑电路组合逻辑电路选择器选择器4 4选选1 1多路选择器的实现多路选
38、择器的实现Library IEEE;Use IEEE.std_logic_1164.all;Entity mux4 is port(input:in std_logic_vector(3 downto 0);a,b:in std_logic;y:out std_logic);End mux4;Architecture behav of mux4 is signal sel:std_logic_vector(1 downto 0);Begin sel=b&a;process(input,sel)begin注意:注意:信号需在结构信号需在结构体中说明,而体中说明,而变变量则在量则在进进程程或子程序
39、中或子程序中说说明。明。组合逻辑电路组合逻辑电路选择器选择器4 4选选1 1多路选择器的实现多路选择器的实现 if(sel=“00”)then y=input(0);elsif(sel=“01”)then y=input(1);elsif(sel=“10”)then y=input(2);elsif(sel=“11”)then y=input(3);else y=Z;end if;End process;End behav;组合逻辑电路组合逻辑电路求补器求补器求补器:求补器:将输入信号转换成其补码输出将输入信号转换成其补码输出若定点整数补码形式为若定点整数补码形式为0 0 1 12 2n n
40、,则补码表示的定,则补码表示的定义是:义是:2n0 补补 2n+1+2n+1|02n (mod 2n1)采用补码表示法进行减法运算就比原码方便多了。采用补码表示法进行减法运算就比原码方便多了。因为不论数是正还是负,机器总是做加法,减法因为不论数是正还是负,机器总是做加法,减法运算可变为加法运算运算可变为加法运算补码可由原码得到。补码可由原码得到。正数的补码与原码一样;正数的补码与原码一样;负数的补码是对它的原码(除符号位外)各位取反,并在负数的补码是对它的原码(除符号位外)各位取反,并在未位加未位加1 1而得到的。而得到的。组合逻辑电路组合逻辑电路求补器求补器求补求补器的器的实现实现Libra
41、ry IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_unsigned.all;Entity hosuu is port(a:in std_logic_vector(4 downto 1);b:out std_logic_vector(4 downto 1);End hosuu;Architecture rtl of hosuu isBegin b=not a+1;End rtl;简单四位求补器逻辑图简单四位求补器逻辑图四位输入按位取反补码输出四位加法器加“1”组合逻辑电路组合逻辑电路三态门三态门三态门:三态门:三态门是一种重要的总线接口
42、电路。这里的三态,是指三态门是一种重要的总线接口电路。这里的三态,是指逻辑门的输出除了有高、低电平两种状态外,还有第三逻辑门的输出除了有高、低电平两种状态外,还有第三种状态种状态高阻状态高阻状态的门电路。高阻态相当于隔断的门电路。高阻态相当于隔断状态状态 如果你的设备端口要挂在一个总线上如果你的设备端口要挂在一个总线上,必须通过三态缓冲器必须通过三态缓冲器.因为因为在一个总线上同时只能有一个端口作输出在一个总线上同时只能有一个端口作输出,这时其他端口必须在高这时其他端口必须在高阻态阻态,同时可以输入这个输出端口的数据同时可以输入这个输出端口的数据.所以你还需要有总线控所以你还需要有总线控制管理
43、制管理,访问到哪个端口访问到哪个端口,那个端口的三态缓冲器才可以转入输出那个端口的三态缓冲器才可以转入输出状态。状态。三态门都有一个三态门都有一个ENEN控制使能端控制使能端,来控制门电路的通断。来控制门电路的通断。三态门的应用实例三态门的应用实例组合逻辑电路组合逻辑电路三态门三态门三态门的实现三态门的实现Library IEEE;Use IEEE.std_logic_1164.all;Entity tri_gate is port(din,en:in std_logic;dout:out std_logic);End tri_gate;Architecture behav of tri_ga
44、te isBegin process(din,en)begin if(en=1)then dout=din;else dout=Z;end if;end process;End behav;采用防护式块语句来表示三采用防护式块语句来表示三态门:态门:Architecture blk of tri_gate isBegin tri_gate2:block(en=1)begin dout=guarded din;end block;End blk;组合逻辑电路组合逻辑电路缓冲器缓冲器什么是缓冲器什么是缓冲器缓冲器又称缓冲寄存器,在总线传输中起缓冲器又称缓冲寄存器,在总线传输中起数据暂存缓冲数据暂存
45、缓冲的作用的作用缓冲器的分类缓冲器的分类缓冲器可分为输入缓冲器和输出缓冲器两种,前者的作缓冲器可分为输入缓冲器和输出缓冲器两种,前者的作用是将外设送来的数据暂时存放,以便处理器将它取走;用是将外设送来的数据暂时存放,以便处理器将它取走;后者的作用是用来暂时存放处理器送外设的数据。后者的作用是用来暂时存放处理器送外设的数据。缓冲器的用途缓冲器的用途有了数控缓冲器,就可以使高速工作的有了数控缓冲器,就可以使高速工作的CPUCPU与慢速工作的与慢速工作的外设起协调缓冲作用,实现数据传送的同步。外设起协调缓冲作用,实现数据传送的同步。组合逻辑电路组合逻辑电路缓冲器缓冲器单向缓冲器单向缓冲器在总线传输中
46、起数据暂存缓冲的作用在总线传输中起数据暂存缓冲的作用Library IEEE;Use IEEE.std_logic_1164.all;Entity tri_buf8 is port(din :in std_logic_vector(7 downto 0);en:in std_logic;dout:out std_logic_vector(7 downto 0);End tri_buf8;Architecture behav of tri_buf8 isBegin process(din,en)begin if(en=1)then dout=din;else dout=“ZZZZZZZZ”;en
47、d if;end process;End behav;enen选通端(选通端(en=en=11时选通)时选通)组合逻辑电路组合逻辑电路缓冲器缓冲器双向向缓冲器双向向缓冲器在单向总线缓冲器的基础上加入了在单向总线缓冲器的基础上加入了总线方向控制端口总线方向控制端口,使总线上的数据可以双向暂存和传输。使总线上的数据可以双向暂存和传输。Library IEEE;Use IEEE.std_logic_1164.all;Entity tri_bigate is port(a,b:inout std_logic_vector(7 downto 0);en,dr:in std_logic);End tri_
48、bigate;Architecture behav of tri_bigate is signal aout,bout:std_logic_vector(7 downto 0);Begin process(a,dr,en)begin if(en=0)and(dr=1)then bout=a;else bout=“ZZZZZZZZ”;end if;b=bout;end process;组合逻辑电路组合逻辑电路缓冲器缓冲器 process(b,dr,en)begin if(en=0)and(dr=0)then aout=b;else aout=“ZZZZZZZZ”;end if;a=aout;end process;End behav;接上:接上:enen选通端(选通端(en=0en=0时选通)时选通)drdr方向控制端方向控制端 当当 dr=1dr=1时,时,a a作输入作输入b b作输出;作输出;当当 dr=0dr=0时,时,b b作输入作输入a a作输出作输出;