D系统设计-徐向民-第三章组合逻辑电路_第1页
D系统设计-徐向民-第三章组合逻辑电路_第2页
D系统设计-徐向民-第三章组合逻辑电路_第3页
D系统设计-徐向民-第三章组合逻辑电路_第4页
D系统设计-徐向民-第三章组合逻辑电路_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

第三章组合逻辑电路主讲人:蔡剑华单位:物电学院2.2Identifiers,spacesandcomments

VHDLisnotcase-sensitive,however,thatusualsoftwareengineeringrulesaboutidentifiersshouldbeapplied.●Meaningful,non-crypticnamesshouldbeused,basedonEnglishwords.●Usemixed-casewithconsistentuseofcase.●Don’tuseexcessivelylongidentifiers(15charactersorfewer).●Don’tuseidentifiersthatmaybeconfused(e.g.twoidentifiersthatdifferbyanunderscore)●Don’tredefinepredefinedidentifiers,suchasBitorTime.●

Identifiersmayconsistofletters,numbersandunderscores(‘_’),butthefirstcharactermustbealetter,andtwounderscoresinsuccessionarenotallowed.

Extendedidentifiersmayconsistofanycharacter,providedthattheentireidentifierisenclosedinbackslashes(‘\’),e.g.\0%$#——&\.Thestringsinextendedidentifiersarecase-sensitive.Useextendedidentifierswithextremecaution.

2.2.1Identifiers2.2.2spacesWhitespace(spaces,carriagereturns)shouldbeusedtomakemodelsmorereadable.Thereisnodifferencebetweenonewhitespacecharacterandmany.2.2.3commentsCommentsmaybeincludedinaVHDLdescriptionbyputtingtwohyphensonaline(‘--’).Alltextbetweenthehyphensandtheendofthelineisignored.配置配置语句的一般格式如下:CONFIGURATION配置名OF实体名IS

配置说明

END配置名;配置可以把特定的结构体关联到(指定给)一个确定的实体。组合逻辑电路的概念任一时刻的输出仅仅取决于当时的输入,与电路原来的状态无关,这样的数字电路叫做组合逻辑电路。与时序电路最大的区别就是,组合逻辑电路不含有存储部件。常用的组合逻辑器件包括编码器、译码器、数据选择器、数值比较器、加法器等。3.1基本逻辑门电路基本逻辑门电路

基本逻辑门电路是数字逻辑电路的基本电路。包括与门、或门、与非门、或非门、反相器、异或门等等。下面用VHDL语言来描述二输入与非门。二输入与非门LibraryIEEE;UseIEEE.std_logic_1164.all;Entitynand2isport(a,b:instd_logic;y:outstd_logic);Endnand2;Architecturebehavofnand2isBeginy<=anandb;Endbehav;nand是逻辑操作符与非,把nand替换为nor即可得到二输入或非门P433.2译码器与编码器

译码器(Decoder)

译码器分为几类:变量译码器:把输入的二进制代码的各种组合状态翻译成对应的输出信号。码制变换译码器:将一种代码变换为另一种代码的电路。显示译码器:如将数据显示在七段数码管上时的译码。地址译码器:将译码器输入端的输入地址信号翻译成相应的输出控制信号。

译码器(Decoder)变量译码器又称二进制译码器,把输入的二进制代码的各种组合状态翻译成对应的输出信号。如3-8译码器74LS138。下面就以3-8译码器为例子介绍VHDL语言描述的实现。3-8译码器如图所示,是一个3-8译码器(74LS138)。3个二进制输入端,对输入a,b,c的值进行译码,就可以确定哪一个输出端变为有效(低电平)。g1,g2a,g2b是选通信号,只有当g1=‘1’,

g2a=‘0’和g2b=‘0’时,译码器才正常译码。P443-8译码器LibraryIEEE;UseIEEE.std_logic_1164.all;Entitydecoder_38isPort(a,b,c,g1,g2a,g2b:instd_logic;y:outstd_logic_vector(7downto0));Enddecoder_38;Architecturebehavofdecoder_38isSignalindata:std_logic_vector(2downto0);Begin

indata<=c&b&a;Process(indata,g1,g2a,g2b)Begin定义indata是三位的位矢量,并把c、b、a进行位合并赋值给信号indataP443-8译码器If(g1=‘1’andg2a=‘0’andg2b=‘0’)then

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<=“XXXXXXXX”;Endcase;Elsey<=“11111111”;Endif;Endprocess;Endbehav;Case语句可用If语句进行改写3-8译码器改写后的IF语句:If(g1=‘1’andg2a=‘0’andg2b=‘0’)theny<=“11111111”;Elsif

indata=“000”theny<=“11111110”;Elsif

indata=“001”theny<=“11111101”;Elsif

indata=“010”theny<=“11111011”;Elsif

indata=“011”theny<=“11110111”;Elsif

indata=“100”theny<=“11101111”;Elsif

indata=“101”theny<=“11011111”;Elsif

indata=“110”theny<=“10111111”;Elsif

indata=“111”theny<=“01111111”;Endif;小结本例设计的是一个3—8线译码器,有使能端,低电平有效。这个程序的一、二句是库和程序包的语言。接下来是实体,主要是定义了一些输入、输出端口。需要注意的是要帮实体命名,如“decoder_38”,并且工程名与实体名保持一致。还要有结束语,如“enddecoder_38”。最后是结构体部分,其中“<=”是信号传输符号,“indata<=c&b&a”表示把c、b、a进行位合并并且赋值给信号indata。进程语句是结构体的一种子程序,括号内的信号量是process的输入信号,这些信号无论哪个发生变化,都将启动process语句。编码器(Encoder)

编码器可分为两类普通编码器:在某一特定时刻,只能对一个输入信号进行编码,并且这种编码器的输入端不允许同一时刻出现两个以上的有效输入信号,否则编码器输出将会出现混乱;

2.优先编码器:是指将所有的输入信号按优先级顺序进行排队,当几个输入信号同时出现(有效)时,只对其中优先级最高的一个输入信号进行编码的编码器,常用于中断的优先级控制。优先级编码器如图,74LS148是一个8输入,3位二进制码输出的优先级编码器。当某一个输入有效时(低电平),就可以输出一个对应的3位二进制编码。当同时有几个输入有效时,将输出优先级最高的那个输入对应的二进制编码。P45优先级编码器LibraryIEEE;UseIEEE.std_logic_1164.all;EntitypriorityencoderisPort(input:instd_logic_vector(7downto0);y:outstd_logic_vector(2downto0));Endpriorityencoder;ArchitecturebehavofpriorityencoderisBegin

Process(input)BeginP45优先级编码器If(input(0)=‘0’)theny<=“111”;

elsif(input(1)=‘0’)theny<=“110”;

elsif(input(2)=‘0’)theny<=“101”;

elsif(input(3)=‘0’)theny<=“100”;

elsif(input(4)=‘0’)theny<=“011”;

elsif(input(5)=‘0’)theny<=“010”;

elsif(input(6)=‘0’)theny<=“001”;

elsif(input(7)=‘0’)theny<=“000”;elsey<=“XXX”;endif;Endprocess;Endbehav;当input=“01011111”时,编码成?因为IF语句是一种流程控制语句,判断条件有前后次序,所以应编码为“010”。P453.3加法器半加器(HalfAdder)

LIBRARYieee;USEieee.std_logic_1164.all;ENTITYhalfadderISPORT(X,Y:instd_logic;

Sum,Carry:outstd_logic);ENDhalfadder;ARCHITECTUREaOFhalfadderISBEGINSum<=XxorY;

Carry<=XandY;ENDa;Sum<=XXORY;Carry<=XANDY;SumCarryXY全加器(FullAdder)

LIBRARYieee;USEieee.std_logic_1164.all;

ENTITYfull_addISPORT(X,Y,Z:inbit;

Sum,Carry:outbit);ENDfull_add;

ARCHITECTUREaOFfull_addISBEGIN

Sum<=XxorYxorZ;

Carry<=(XandY)or(YandZ)or(ZandX);ENDa;P48全加器(FullAdder)

当全加器设计完成后,采用模块化设计方法,将全加器作为一个组件(component)定义,加入名为component的程序包中,以后可以统一将设计的组件放在这个程序包中。

LibraryIEEE;UseIEEE.std_logic_1164.all;PACKAGEcomponentsISCOMPONENTSfaddISPort(a,b,ci:IN

std_logic;

co,sum:OUT

std_logic);ENDcomponents;Endcomponents;4位串行进位加法器根据模块化设计思想,将全加器作为一个基本组件,如图所示。本例使用Component语句,与PortMap语句结合可以让我们像堆积木一般搭建出较为复杂的电路。P494位串行进位加法器LibraryIEEE;UseIEEE.std_logic_1164.all;Useponents.all;Entityfadd4isport(a,b:instd_logic_vector(3downto0);

ci:instd_logic;co:outstd_logic;sum:outstd_logic_vector(3downto0));Endfadd4;Architecturestruoffadd4issignalci_ns:std_logic_vector(2downto0);BeginU0:fadd

portmap(a(0),b(0),ci,ci_ns(0),sum(0));U1:fadd

portmap(a(1),b(1),ci_ns(0),ci_ns(1),sum(1));U2:fadd

portmap(a(2),b(2),ci_ns(1),ci_ns(2),sum(2));U3:fadd

portmap(a(3),b(3),ci_ns(2),co,sum(3));Endstru;Architecturebehavof

实体名称IS……component元件Aport(……);endcomponent;component元件Bport(……);endcomponent;……P494位并行进位加法器LibraryIEEE;UseIEEE.std_logic_1164.all;UseIEEE.std_logic_unsigned.all;Entityfadd4isport(a,b:instd_logic_vector(3downto0);

ci:instd_logic;co:outstd_logic;sum:outstd_logic_vector(3downto0));Endfadd4;P504位并行进位加法器Architecturebehavoffadd4issignalsint:std_logic_vector(4downto0);signalaa,bb:std_logic_vector(4downto0);Begin

aa<=‘0’&a;--将4位加数矢量扩为5位,为进位提供空间

bb<=‘0’&b;--将4位被加数矢量扩为5位,为进位提供空间

sint<=aa+bb+ci;s<=sint(3dowto0);co<=sint(4);Endbehav;串行进位与并行进位加法器性能比较串行进位方式是将全加器级联构成多位加法器。并行进位加法器设有并行进位产生逻辑,运算速度较快。并行进位加法器通常比串行级联加法器占用更多的资源,随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距快速增大。因此,在工程中使用加法器时,要在速度和占用资源间寻找平衡。实践表明,4位并行加法器和串行级联加法器占用几乎相同的资源,所以多位加法器(例如8位)可以由4位并行加法器级联构成。8位加法器LibraryIEEE;UseIEEE.std_logic_1164.all;UseIEEE.std_logic_unsigned.all;Entityfadd8isport(a,b:instd_logic_vector(7downto0);

ci:instd_logic;co:outstd_logic;sum:outstd_logic_vector(7downto0));Endfadd8;P518位加法器Architecturestruoffadd8isComponentfadd4port(a,b:instd_logic_vector(3downto0);

ci:instd_logic;co:outstd_logic;sum:outstd_logic_vector(3downto0));Endcomponent;

--也可以放在程序包中定义

Signalcarry_out:std_logic;BeginU1:fadd4

portmap(a(3downto0),b(3downto0),ci,carry_out,sun(3downto0);U2:fadd4portmap(a(7downto4),b(7downto4),carry_out,co,sun(7downto4);Endstru;3.4其它组合逻辑模块多路选择器

多路选择器的逻辑功能是在地址选择信号的控制下,从多路输入数据中选择一路数据作为输出端口的输出数据.4选1多路选择器LibraryIEEE;UseIEEE.std_logic_1164.all;Entitymux4isport(input:instd_logic_vector(3downto0);a,b:instd_logic;y:outstd_logic);Endmux4;Architecturebehavofmux4is

signalsel:std_logic_vector(1downto0);Begin

sel<=b&a;

process(input,sel)begin信号需在结构体中说明,而变量可在进程中说明。P484选1多路选择器if(sel=“00”)theny<=input(0);

elsif(sel=“01”)theny<=input(1);

elsif(sel=“10”)theny<=input(2);

elsif(sel=“11”)theny<=input(3);elsey<=‘Z’;endif;Endprocess;Endbehav;P48求补器LibraryIEEE;UseIEEE.std_logic_1164.all;UseIEEE.std_logic_unsigned.all;Entityhosuuisport(a:instd_logic_vector(7downto0);b:outstd_logic_vector(7downto0));Endhosuu;ArchitecturertlofhosuuisBeginb<=nota+‘1’;Endrtl;P46三态门LibraryIEEE;UseIEEE.std_logic_1164.all;Entitytri_gateisport(din,en:instd_logic;

dout:outstd_logic);Endtri_gate;Architecturebehavoftri_gateisBeginprocess(din,en)beginif(en=‘1’)thendout<=din;elsedout<=‘Z’;endif;endprocess;Endbehav;采用防护式块语句来表示三态门:Architectureblkoftri_gateisBegintri_gate2:block(en=‘1’)begin

dout<=guardeddin;endblock;Endblk;P46单向总线缓冲器LibraryIEEE;UseIEEE.std_logic_1164.all;Entitytri_buf8isport(din:instd_logic_vector(7

温馨提示

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

评论

0/150

提交评论