第四章vhdl(6)-组合逻辑电路_第1页
第四章vhdl(6)-组合逻辑电路_第2页
第四章vhdl(6)-组合逻辑电路_第3页
第四章vhdl(6)-组合逻辑电路_第4页
第四章vhdl(6)-组合逻辑电路_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、 组合电路在任一时刻的输出仅取组合电路在任一时刻的输出仅取 决于该时刻电路的输入,与电路原来决于该时刻电路的输入,与电路原来 的状态无关,即无存储部件。的状态无关,即无存储部件。 4.5 组合逻辑电路组合逻辑电路 基本逻辑:与、或、非、与非、或非、异或基本逻辑:与、或、非、与非、或非、异或 编译码器与选择器编译码器与选择器 加(减)法器、求补器加(减)法器、求补器 三态门及总线缓冲器三态门及总线缓冲器 奇偶校验电路、多人表决器、比较器奇偶校验电路、多人表决器、比较器 4.5.1 基本逻辑基本逻辑 4.5.2 译码器译码器/编码器编码器/选择器选择器 4.5.3 加法器加法器/求补器求补器 4.

2、5.4 三态门及总线缓冲器三态门及总线缓冲器 4.5.5 奇偶校验电路奇偶校验电路/多人表决器多人表决器/比较器比较器 4.5.1 基本逻辑基本逻辑 l直接用逻辑运算符实现直接用逻辑运算符实现 l用用if if 、casecase等语句描述等语句描述 例:例: library ieee; use ieee.std_logic_1164.all; entity n_and is port(a,b:in std_logic; c:out std_logic); end n_and; architecture rtl of n_and is begin c=a nand b; end rtl; 例:

3、例: architecture rtl of exm is begin Process(a,b) begin tmpyyyyy=Z; end case; end process; end rtl; 分析实现的逻辑分析实现的逻辑 4.5.2 译码器译码器/编码器编码器/选择器选择器 n1.1.译码器译码器 3-8译码器译码器 2-4译码器译码器 七段显示译码器七段显示译码器 地址译码器地址译码器 特殊译码器:特殊译码器: 一般译码器:一般译码器: 七段显示译码器:七段显示译码器:七段显示译码器是对七段显示译码器是对 一个一个4位二进制数进行译码,并在七段数位二进制数进行译码,并在七段数 码管上显

4、示出相应的十进制数或十六进制码管上显示出相应的十进制数或十六进制 数。数。 地址译码器:地址译码器:在计算机和微处理器系在计算机和微处理器系 统统 是很重要的,是数字系统中最典型的是很重要的,是数字系统中最典型的 CPLD应用。应用。 ARCHITECTURE ART3 OF DECODER IS BEGIN D_OUT(0)=1 WHEN D_IN =000 ELSE 0 ; D_OUT(1)=1 WHEN D_IN =001 ELSE 0 ; D_OUT(2)=1 WHEN D_IN =010 ELSE 0 ; D_OUT(3)=1 WHEN D_IN =011 ELSE 0 ; D_OU

5、T(4)=1 WHEN D_IN =100 ELSE 0 ; D_OUT(5)=1 WHEN D_IN =101 ELSE 0 ; D_OUT(6)=1 WHEN D_IN =110 ELSE 0 ; D_OUT(7)yyyyyyyyyyy=0000000; end case; end process ; 七段译码如果译码功能由共阴转为共阳只需对输出做一个取反,不用重新译码七段译码如果译码功能由共阴转为共阳只需对输出做一个取反,不用重新译码 3)地址译码器地址译码器 例如:一个微处理器存储空间例如:一个微处理器存储空间0000H- FFFFH,分为分为5部分,它们的地址分配如下:部分,它们的地

6、址分配如下: DRAM:0000HDFFFH; I/O: E000HE7FFH; 备用:备用: E800H-EFFFH; ROM1 :F000HF7FFH; ROM2: F800HFFFFH; 输入为输入为16位地址,输出位地址,输出4个片选信号个片选信号 低电平有效低电平有效 PROCESS(address) Begin If address=x”dfff” then DRAM=0; IO=1; ROM1=1; ROM2=x”e000” and address=x”e7ff” then DRAM=1; IO=0; ROM1=1; ROM2=x”f000” and address=x”f7ff

7、” then DRAM=1; IO=1; ROM1=0; ROM2=x”f800” then DRAM=1; IO=1; ROM1=1; ROM2=0; End if; End process; A15 A14 A13 A12 A11 A10A0 0 0 0 0 0 00 DRAM:0000HDFFFH; 1 1 0 1 1 11 1 1 1 0 0 00 I/O: E000HE7FFH; 1 1 1 0 0 11 1 1 1 0 1 00 备用:备用: E800HEFFFH; 1 1 1 0 1 11 1 1 1 1 0 00 ROM1:F000HF7FFH; 1 1 1 1 0 11 1

8、1 1 1 1 00 ROM2:F800HFFFFH; 1 1 1 1 1 11 A15A11可区别地址,用最少地址线译码描述可区别地址,用最少地址线译码描述 ,输入仅为,输入仅为 A15A11 PROCESS(A15,A14,A13,A12,A11) Begin If (A15 and A14 and A13)=0 then DRAM=0; IO=1; ROM1=1; ROM2=1; Elsif A13=1 and A12=0 and A11= 0 then DRAM=1; IO=0; ROM1=1; ROM2=1; Elsif A13=1 and A12=1 and A11= 0 then

9、 DRAM=1; IO=1; ROM1=0; ROM2=1; Elsif A13=1 and A12=1 and A11= 1 then DRAM=1; IO=1; ROM1=1; ROM2=0; End if; End process; n2.编码器编码器 l生活中常用十进制数及文字、符号等表示生活中常用十进制数及文字、符号等表示 事物事物 l数字电路只能以二进制信号工作数字电路只能以二进制信号工作 l用二进制代码表示文字符号等特定对象的用二进制代码表示文字符号等特定对象的 过程,称为编码过程,称为编码 普通编码器普通编码器: 任何时刻只允许输入一个有效编码请求信号,任何时刻只允许输入一个有

10、效编码请求信号, 否则输出将发生混乱否则输出将发生混乱 优先编码器:优先编码器: 允许同时输入两个以上的有效编码请求信号,允许同时输入两个以上的有效编码请求信号, 只对其中优先权最高的一个进行编码只对其中优先权最高的一个进行编码 优先级别的高低由设计者根据输入信号的轻重优先级别的高低由设计者根据输入信号的轻重 缓急情况而定。缓急情况而定。 使用使用case语句没有优先级语句没有优先级 使用使用if 、when_else语句带有优先级语句带有优先级 1)8线线-3线普通编码器(教材线普通编码器(教材p83) 2)用用if_then_elsif_else实现优先权编码器实现优先权编码器 libra

11、ry ieee; use ieee.std_logic_1164.all; entity priority is port(d:in std_logic_vector(7 downto 0); q:out std_logic_vector(2 downto 0); end priority; architecture one of priority is begin process(d) begin if d(0)=0 then q=111; elsif d(1)=0 then q=110; elsif d(2)=0 then q=101; elsif d(3)=0 then q=100; e

12、lsif d(4)=0 then q=011; elsif d(5)=0 then q=010; elsif d(6)=0 then q=001; else q=000; end if; end process; end one; 2)when_else实现优先权编码器实现优先权编码器 . ARCHITECTURE ART1 OF ENCODER IS BEGIN y= 111 WHEN H=1 ELSE 110 WHEN G=1 ELSE 101 WHEN F=1 ELSE 100 WHEN E=1 ELSE 011 WHEN D=1 ELSE 010 WHEN C=1 ELSE 001 W

13、HEN B=1 ELSE 000 WHEN A=1 ELSE XXX; END ART1; 3.选择器选择器 选择器常用于信号的切换选择器常用于信号的切换 四选一选择器:四选一选择器: 4 4个信号输入端个信号输入端 2 2个信号选择端个信号选择端 1 1个信号输出端个信号输出端 当输入不同的选择信号时,就可以使当输入不同的选择信号时,就可以使4 4个输个输 入中某个相应的输入信号与输出端接通。入中某个相应的输入信号与输出端接通。 2选选1 ENTITY mux21 IS PORT(d0, d1, sel: IN BIT; q: OUT BIT); END mux21; ARCHITECTUR

14、E connect OF mux21 IS SIGNAL tmp1,tmp2,tmp3: BIT; BEGIN; tmp1 = d0 AND sel; tmp2 = d1 AND (NOT sel); tmp3 = tmp1 OR tmp2; q = tmp3; END connect; 4.5.3 加法器加法器/求补器求补器 半加器半加器 全加器全加器 多位加法器多位加法器 求补器:对二进制数进行求补码求补器:对二进制数进行求补码 运算运算 library ieee; use ieee.std_logic_1164.all; entity fadder is port(a,b,cin :in

15、 std_logic; sum,cout :out std_logic); end fadder; architecture rtl of fadder is begin sum=a xor b xor cin; cout=(a and b)or(a and cin)or(b and cin); end rtl; 半加器(略)半加器(略) 一位全加器一位全加器 Cout Sum b a Cin Cout Sum b a Cin Cout Sum b a Cin Cout Sum b a Cin cout sum(3) sum(2) sum(1) sum(0) b(3) a(3) b(2) a(

16、2) b(1) a(1) b(0) a(0) cin 四位加法器:四位加法器: library ieee; use ieee.std_logic_1164.all; entity adder4 is port( a,b :in std_logic_vector(0 to 3); cin:in std_logic; cout :out std_logic; sum :out std_logic_vector(0 to 3); end adder4; architecture exm of adder4 is component fadder port(a,b,cin :in std_logic;

17、 sum,cout :out std_logic); end component; signal c:std_logic_vector(0 to 4); begin c(0)=cin; gen:for i in 0 to 3 generate adderx:fadder port map(a(i),b(i),c(i),sum(i),c(i+1); end generate; cout=c(4); end exm; 求补器求补器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity b

18、u is port( a : in std_logic_vector(7 downto 0); b : out std_logic_vector (7 downto 0); end bu; architecture rtl of bu is begin process(a) begin if a(7)=1 then b=not a + 1; else b=a; end if; end process; end rtl; 4.5.4 三态门及总线缓冲器三态门及总线缓冲器 三态门三态门 数据输入数据输入 控制输入控制输入 数据输出数据输出 din en dout X 0 Z 0 1 0 1 1 1

19、 总线缓冲器由多个三态门组成,数据总总线缓冲器由多个三态门组成,数据总 线是几位就有几个三态门线是几位就有几个三态门 缓冲器一般分为两种缓冲器一般分为两种:单向总线缓冲器:单向总线缓冲器 双向总线缓冲器双向总线缓冲器 三态门三态门 library ieee; use ieee.std_logic_1164.all; entity three is port( a,en:in std_logic; y:out std_logic); end three; architecture bhv of three is begin process(a,en) begin if en=1 then y=a

20、 ; else y=Z; end if; end process; end bhv; 8位双向总线缓冲器位双向总线缓冲器 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_bigate; ARCHITECTURE rtl OF tri_bigate IS Signal aout,bout:std_logic_vector(7 downto 0); BEGIN

21、process(a,en,dr) begin if (en=1) and (dr=1)then bout=a; else bout=ZZZZZZZZ; end if; b=bout; end process; process(b,en,dr) begin if (en=1) and (dr=0)then aout=b; else aout=ZZZZZZZZ; end if; a=aout; end process; end rtl; RTL 不用不用aout和和bout中间信号的中间信号的RTL 4.5.5 奇偶校验电路奇偶校验电路/多人表决器多人表决器 /比较器比较器 1.奇偶校验电路奇偶校

22、验电路 具体程序见前面章节具体程序见前面章节 另一种实现方式:另一种实现方式:将输入的将输入的8位二进制数用位二进制数用 四位二进制数进行计数,判断最低位,若为四位二进制数进行计数,判断最低位,若为 1,则为奇数;若为,则为奇数;若为0,则为偶数。,则为偶数。 2.七人表决器七人表决器 library ieee; use ieee.std_logic_1164.all; entity vote7 is port(a:in std_logic_vector( 0 to 6); lg,lr:out std_logic); end; architecture bhv of vote7 is sign

23、al pass:integer range 0 to 10; begin process(a) variable tmp1:integer range 0 to 10; begin tmp1:=0; for i in 0 to 6 loop if a(i)=1 then tmp1:=tmp1+1; else tmp1:=tmp1+0; end if; end loop; pass=tmp1; end process; lg=4 else 0; lr=1when pass4 else 0; end bhv; LIBRARY ieee; USE ieee.std_logic_1164.all; e

24、ntity bj7 is port(a0,a1,a2,a3,a4,a5,a6:in std_logic; y:out std_logic); end bj7; architecture a of bj7 is function sum(a,b,c:std_logic) return std_logic is begin return (a xor b xor c); end sum; function cout(a,b,c:std_logic) return std_logic is begin return (a and b) or (a and c) or (b and c); end c

25、out; signal c:std_logic_vector(0 to 2); signal s:std_logic_vector(0 to 2); begin - s(0)=sum(a0,a1,a2); - s(1)=sum(a3,a4,a5); - s(2)=sum(s(0),s(1),a6); - c(0)=cout(a0,a1,a2); - c(1)=cout(a3,a4,a5); - c(2)=cout(s(0),s(1),a6); - c(3)=cout(c(0),c(1),c(2); -y=c(3); s(0)=sum(a0,a1,a2); s(1)=sum(a3,a4,0);

26、s(2)=sum(a5,a6,0); c(0)=cout(a0,a1,a2); c(1)=cout(a3,a4,0); c(2)=cout(a5,a6,0); y=cout(c(0),c(1),c(2)or(sum(c(0),c(1),c (2)and cout(s(0),s(1),s(2); end a; 3.三人表决器(方法一三人表决器(方法一 行为描述方式行为描述方式) ENTITY maj IS PORT(a,b,c : IN BIT; m : OUT BIT); END maj; ARCHITECTURE bhv OF maj IS BEGIN PROCESS(a,b,c) CONSTANT lookuptable : BIT_VECTOR(0 TO 7) := “-; VARIABLE index : NATURAL range 0 to 7; BEGIN index := 0; IF a = 1 THEN index := index + 1; END IF; IF b = 1 THE

温馨提示

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

评论

0/150

提交评论