时序电路设计_第1页
时序电路设计_第2页
时序电路设计_第3页
时序电路设计_第4页
时序电路设计_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

2.2.3包集合、库及配置在VHDL中还有另外三个可以各自独立进行编译的源设计单元包集合库配置

1.库(Library)库是经编译后的数据的集合,它存放了包集合定义、实体定义、结构体定义和配置定义。库中存放着设计好的已经过编译的数据,设计者可以直接使用库中的数据。在使用库之前,必须要对库进行说明。在VHDL语言中,库的说明总是放在设计单元的最前面:

LIBRARY库名;

库的种类在VHDL中存在的库大致可分为5类:

IEEE库

STD库

ASIC库

WORK库用户定义库①IEEE库IEEE库是最常用的资源库目前IEEE库中包含有:

IEEE标准包STD_LOGIC_1164NUMERIC_BIT,NUMERIC_STD,MATH现在有些公司,如SYNOPSYS公司也提供一些包集合如:“STD_LOGIC_ARITH”,“STD_LOGIC_UNSIGNED”虽然它们还没有得到IEEE的承认,但是仍汇集在IEEE库中。lEEE库是最常用的资源库,

其中含有的程序包为:

Std_logic_1164程序包

Numeric_Bit程序包

Numeric_Std程序包

Math_Real程序包

Math_Complex程序包

vital_Timing程序包

vital_Primitives程序包②STD库STD库是VHDL的标准库在库中存放着称为“STANDARD”的包集合它是VHDL的标准配置,因此设计者如要调用“STANDARD”可以不按标准格式说明即:LIBRARYSTD;语句被隐含存在于任何设计单元之前,而不需要显示写出但是在使用“TEXTIO”程序包中的数据时,应先说明库和包集合名,然后才可以使用该程序包中的数据,如:LIBRARYSTD;USESTD.TEXTIO.ALL;③面向ASIC库(是VHDL工具厂商自己提供的资源库)在VHDL中,为了进行门级仿真,各公司可提供面向ASIC的逻辑门库。在该库中存放着与逻辑门一一对应的实体。为了使用面向ASIC的库对库进行说明是必要的。VHDL工具厂商与EDA工具专业公司都有自己的资源库,例如:MentorGraphics公司Mgc_portable库

ALTERA公司Prim库

mf库

Mega_lpm库

edif库

Synopsys公司Synopsys库④WORK库WORK库是现行作业库设计者所描述的VHDL语句不需要任何说明,都将存放在WORK库中在使用该库时无需进行任何说明即对下面的语句:LIBRARYWORK;用户不必写出⑤用户定义库用户为自身设计需要所开发的程序包和实体等,也可以汇集在一起定义成一个库。这就是用户定义库或称用户库。用户库在使用时要首先说明库名。库的使用①库的说明前面提到的5种库除了WORK库之外其它4类在使用前都要先作说明一般,在使用库时先要用两条语句对库进行说明,如:LIBRARY库名;USE程序包.项目名;例如:

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;上例表明要使用IEEE库中STD_LOGIC_1164包集合中的所有过程和函数这里项目名为ALL,表示包集合中的所有项目都要用②库说明作用范围库说明语句的作用范围:从一个实体说明开始到所属的结构体、配置为止。当一个源程序中出现两个以上的实体时,两条作为使用库的说明语句应在每个实体说明语句前重复书写例2-8:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYand1IS┆ENDand1;ARCHITECTURErtlOFand1IS┆ENDrtl;CONFIGURATIONs1OFand1IS┆ENDs1;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor1IS┆

2.程序包(包集合)Package程序包(Package)的说明像C语言中的include语句一样,用来单纯地罗列VHDL语句中所要用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义等。它是一个可编译的设计单元,也是库结构中的一个层次。要使用包集合时用USE语句说明。一个程序包由两大部分组成程序包标题(Header)程序包体程序包体(PackageBody)是一个可选项一般,程序包标题列出所有项的名称而程序包体具体给出各项的细节程序包的结构如下:PACKAGE程序包名IS[说明语句]END程序包名;——程序包标题PACKAGEBODY程序包名IS[说明语句]ENDBADY;——程序包体3.配置(Configuration)配置语句描述的是层与层之间的连接关系以及实体与结构之间的连接关系。设计者可以利用这种配置语句来选择不同的结构体,使其与要设计的实体相对应。配置语句的格式:CONFIGURATION配置名OF实体名IS[语句说明]END配置名;

例如,要设计一个二输入四输出的译码器

如果一种结构体中的基本元件采用反相器和三输入与门,而在另一种结构体中的基本元件都采用与非门,它们各自的结构体是不一样的,并且都放在各自不同的库中,那么,现在要设计的译码器,就可以利用配置语句来实现对两种不同结构体进行配置。例2-10:最简单的缺省配置格式CONFIGURATION配置名

OF实体名

ISFOR选配结构体名

ENDFOREND配置名;例20-11:反相器和三输入与门电路描述

LIBRARYSTD;USESTD.STD_LOGIC.ALL;USESTD.STD_TTL.ALL;ENTITYinvIS PORT(a:INT_WLOGIC;b:OUTT_WLOGIC;);ENDinv;ARCHITECTUREbehaveOFinvISBEGIN B<=NOT(a)AFTER5ns;ENDbehave;

————反相器

CONFIGURATIONinvconOFinvISFORbehave ENDFOR;ENDinvcon;

USESTD.STD_LOGIC.ALL;USESTD.STD_TTL.ALL;ENTITYand3IS PORT(a1,a2,a3:INT_WLOGIC;o1:OUTT_WLOGIC);ENDand3;ARCHITECTUREbehaveOFand3ISBEGINo1<=a1ANDa2ANDa3AFTER5ns;ENDbehave;—————三输入与门

CONFIGURATIONand3conOFand3IS FORbehave ENDFOR;ENDand3con;例2-12:由反相器和三输入与门构成译码器的2-4译码器。例2-12:由反相器和三输入与门构成译码器的2-4译码器

LIBRARYSTD;USESTD.STD_LOGIC.ALL;ENTITYdecodeISPORT(a,b,en:INT_WLOGIC;q0,q1,q2,q3:OUTT_WLOGIC);ENDdecode;ARCHITECTUREstructuralOFdecodeISCOMPONENTinvPORT(a:INT_WLOGIC;b:OUTT_WLOGIC);ENDCOMPONENT;COMPONENTand3 PORT(a1,a2,a3:INT_WLOGIC;o1:OUTT_WLOGIC);

ENDCOMPONENT;

SIGNALnota,notb:T_WLOGIC;BEGIN I1:inv PORTMAP(a,nota); I2:inv PORTMAP(b,notb); A1:and3 PORTMAP(nota,en,notb,q0); A2:and3 PORTMAP(a,en,notb,q1); A3:and3 PORTMAP(nota,en,b,q2); A4:and3 PORTMAP(a,en,b,q3);ENDstructural;

§2.3VHDL语言的数据类型VHDL语言象其它高级语言一样,具有多种数据类型,对大多数数据类型的定义,两者是一致的。但是也有某些类型,在其它高级语言中是做不到的,如VHDL语言中可以由用户自己定义数据类型。§2.3.1VHDL语言的对象及其分类所谓对象(Object)就是指一些可以存放值的容器,共有4类:信号、变量、常量和文件。对象在VHDL中是可以被赋值的。1、信号和变量都可以被连续的赋值2、而常量只能在它被说明的时候才被赋值一次(只有一次)。3、与其它三个对象不同,不能通过赋值来更新文件内容。文件可以作为参数向子程序传递,通过子程序对文件进行读和写操作。表2-2对象的含义及说明场合在电子电路设计中信号、变量、常数这三类对象都具有一定的物理含义例如,信号对应代表物理设计中的某一条硬件连接线;常数对应代表数字电路中的电源和地等。变量的对应关系不太直接,通常用于暂时数据的局部存储,或用于硬件特性的高层次描述的建摸计算。一、常数(Constant)常数是一个固定的值。所谓常数说明就是对某一常数名赋予一个固定的值。通常常数的赋值在程序开始前进行。该值的数据类型则在说明语句中指明常数说明的一般格式:CONSTANT常数名:数据类型:=表达式;

例:CONSTANTVcc:REAL:=5.0v;CONSTANTDelay:TIME:=100ns;COMSTANTFbus:BIT_VECTOR:=“0101”;常数一旦被赋值就不能再改变。如上面的Vcc被赋值为5.0v,则在所有的VHDL语言程序中就被固定为5.0v。它不象变量和信号那样,可以被任意代入不同的数值。常数所赋值的值应和定义的数据类型一致例如:CONSTANTVcc:REAL:=“0101”;这显然是错误的。二、变量(Variable)变量只能用在进程、函数语句和子程序语句中作为局部的数据存储它是一个局部量。和花时间处理的信号值正相反。所有对变量的赋值都是立即发生的

变量说明语句的格式如下:VARIABLE变量名:数据类型约束条件:=表达式;例:VARIABLEx,y:INTEGER;VARIABLEcount:INTEGERRANGE0TO255:=10;变量在赋值时不能产生附加延时若tmp1,tmp2,tmp3都是变量,则下式是错误的。tmp3:=tmp1+tmp2AFTER10ns;三、信号信号是内部硬件连接的抽象。它除了没有数据流动方向的说明之外,其它性质几乎和前面所述的“端口”概念一致。信号说明语句的格式为:SIGNAL信号名:数据类型约束条件;信号是一个全局量,它可以用来进行进程之间的通信。

例2-13:SIGNALsys_clk:BIT<=‘0’;SIGNALground:BIT<=‘0’;在程序中,信号的代入采用“〈=”代入符,不能用象变量赋值时:=符信号代入时可以附加延时例如,若s1、s2都是信号,则s1〈=s2AFTER10ns;表示s2的值经10ns的延时以后被代入s1中。一般来说,在VHDL语言中对信号的赋值是按仿真时间来进行的,信号值的改变也需按仿真时间的计划行事,到了规定的仿真时间才进行赋值。

四、信号和变量值代入的不同信号和变量值的代入除了形式不同(〈=和:=)之外,其操作过程也不相同在变量的赋值语句中,该语句一旦被执行,就立即被赋值。而信号的代入则不同,信号赋值的条件是敏感信号发生变化或碰到WAIT语句也就是说:只有当进程的敏感量表中的任一个发生变化且进程执行结束;或者碰到WAIT语句的时候,信号值才会进行代入。例2-14:下面两个程序PROCESS(a,b,c,d)BEGINd<=a;x<=cXORd;d<=b;y<=cXORd;ENDPROCESS;结果:x<=bc; y<=bc;

PROCESS(a,b,c)VARIABLEd:BIT;BEGIN d:=a; x<=cXORd; d:=b; y<=cXORd;ENDPROCESS;结果:x<=ca; y<=cb;信号与变量的主要区别有:信号赋值至少有△延迟(可为0延迟);而变量赋值没有延迟。信号除当前值之外,还有许多相关信息,如历史信息、投影波形等;而变量只有当前值。进程对信号敏感,而不对变量敏感。信号可以是多个进程的全局信号;而变量只在定义它们的顺序域(进程、子程序)内出现信号是硬件中连线的抽象描述,而变量中无类似的对应关系。§2.3.2VHDL语言的数据类型VHDL是一种强类型语言,即每一个对象具有一种类型且只能具有该类型的值。在VHDL中,信号、变量、常数都要指定数据类型,而且VHDL的数据类型定义相当严格,不同类型之间的数据不能直接代入。而且,即使数据类型相同,位长不同时也不能直接代入。因此要熟练使用VHDL语言,就必须理解各种数据类型的定义。一、标准的数据类型(10种)1、整数2、实数3、位4、位矢量5、布尔量6、字符7、字符串8、大于等于0的整数、正整数。9、Time时间10、错误等级位(Bit)用来表示数字系统中的一个位位值用‘0’或‘1’表示位的取值与整数中的1和0不同,‘1’和‘0’仅表示一个位的两种取值位数据与布尔数据也不同,可以用转换函数来转换。位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组位数据如“001100”,x“00BB”这里,位矢量最前面的x表示是十六进制用位矢量表示总线状态最形象也最方便布尔量(Boolean)一个布尔量只有两种状态,“真”和“假”但是它和位不同,没有数值的含义,也不能进行数值运算,它只能进行关系运算。例如,它可以在IF语句中被测试,测试结果产生一个布尔量TRUE或FALSE。一个布尔量常用来表示信号的状态或总线上的情况。如果某个信号或变量被定义为布尔量,那么在仿真中将自动对其赋值进行核查。一般这一类型的数据初始值总是为FALSE时间(Time)完整的时间量数据应包含整数和单位两部分。而且整数和单位之间至少应留一个空格的位置:如55sec,2min……,20us,100ns在系统仿真时,时间数据可以表示信号延时,从而使模型系统能更逼近实际系统的运行环境错误等级(SeverityLevel)错误等级用来表示系统的状态共有4种:NOTE、WARNING、ERROR、FAILURE在系统仿真过程中,可以用这种状态来提示系统当前的工作情况

因为VHDL是一种强类型语言,所以任何一个信号和变量的赋值都必须满足:1、数据类型要匹配;2、赋值一定要落入给定的约束区间中。(约束区间的说明通常跟在数据类型说明的后面)例如:INTEGERRANGE100DOWNTO1;--DOWNTO表示下降REALRANGE2.0TO30.0;--TO表示上升二、用户定义的数据类型可由用户定义的数据类型常见的有8种:——枚举(Enumerated)类型;——整数(Integer)类型;——实数(Real)类型;——数组(Array)类型;——存取(Access)类型;——文件(File)类型;——记录(Recorder)类型;——时间(Time)类型(物理类型)三、数据类型的转换在VHDL语言中,数据类型的定义是相当严格的,不同类型的数据是不能进行运算直接代入的。为了实现正确的代入操作,必须要将要代入的数据进行类型变换。变换函数通常由VHDL语言的包集合提供。例如在“STD_LOGIC_1164”、“STD_LOGIC_ARITH”“STD_LOGIC_UNSIGNED”的包集合中提供了如下所示的数据类型变换函数(参见教材p114表3-4)例如:STD_LOGIC_1164包集合:提供BIT_VECTOR和STD_LOGIC_VECTOR、BIT和STD_LOGIC之间相互转换的变换函数。STD_LOGIC_ARITH包集合:提供STD_LOGIC_VECTOR和整数、有符号数、无符号数之间的变换函数。STD_LOGIC_UNSIGNED包集合:由STD_LOGIC_VECTOR转换成INTEGER.四、

IEEE标准“STD_LOGIC”、“STD_LOGIC_VECTOR”VHDL的标准数据类型“BIT”是一个逻辑型的数据类型。这类数据取值只能是“0”或“1”,由于不存在不定状态“X”,故不便于仿真。而且,它也不存在高阻状态,因此很难用它来描述双向数据总线。所以,IEEE在1993年制订出了新标准IEEESTD1164,使得“STD_LOGIC”型数据可以具有以下9种不同得值:

“U”——初始值“X”——不定“0”——0“1”——1“Z”——高阻“W”——弱信号不定“L”——弱信号0“H”——弱信号1“-”——不可能情况§2.4VHDL语言的运算操作符在VHDL语言中共有四类操作符;逻辑运算(Logic)关系运算(Relational)算术运算(Arithmetic)并置运算(Concatenation)运算操作符具有优先级,逻辑运算符NOT级别最高,AND的逻辑运算级别最低。§2.4.1逻辑运算符(7种)NOT——取反(最高)AND——与(最低)OR——或NAND——与非NOR——或非XOR——异或Shift--移位

这6种运算符可以对“STD_LOGIC”和“BIT”等的逻辑型数据,“STD_LOGIC_VECTOR”逻辑型数组及布尔型数据进行逻辑运算在VHDL中,逻辑表达式的左右没有优先级差别例如,在下例中,去掉括号,那么从语法上来说是错误的:X〈=(aANDb)OR(NOTcANDd);§2.4.2算术运算符VHDL语言有10种算术运算符,它们分别是:+——加;-——减;*——乘;/——除;MOD——求模;REM——取余;+——正;(一元运算)-——负;(一元运算)**——指数;ABS——取绝对值;§2.4.3关系运算符VHDL语言中有6种关系运算符,它们分别是:

=——等于;

/=——不等于;

<——小于;

<=——小于等于;

>——大于;

>=——大于等于;在进行关系运算时,左右两边的操作数的数据类型必须相同,但是位长度不一定相同。在位长度不同时,只能按从左至右的比较结果作为关系运算的结果。如;“1010”<“111”。为了使位矢量能正确进行关系运算,在程序包“STD_LOGIC_UNSIGNED”中对“STD_LOGIC_VECTOR”关系运算重新作了定义,使其可以正确的进行关系运算。注意在使用时必须首先说明调用该包集合(程序包)当然,此时位矢量也可以和整数进行关系运算§2.4.4并置运算符并置运算符“&”用于位的连接。例如,将4个位用并置运算符“&”连接起来就可以构成一个具有4位长度的位矢量两个4位的位矢量用并置运算符“&”连接起来就可以构成一个8位长度的位矢量§2.5VHDL最基本的描述方法VHDL对系统与电路提供的最基本的描述方法是:结构描述和行为描述结构描述是对一个硬件的结构进行描述,主要是描述它由哪些子元件组成,以及各个元件之间的互连关系,它与系统的原理图设计很类似。行为描述的主要特点在于它能从行为上描述系统和电路,采用的方法主要是通过一系列的顺序语句和一系列并行语句来进行描述,其中并行语句主要用来描述各摸型算法之间的连接关系在用VHDL语言描述系统硬件行为时若按语句执行顺序对其进行分类,可以分为顺序(sequential)描述语句和并行(concurrent)描述语句。例如进程语句(processstatement),它是一个并行语句。在一个结构体内可以有几个进程语句同时存在,各进程语句是并发执行的。但是,在进程内部所有语句都必须是顺序描述语句这两类语句的灵活运用就可以正确的描述系统的并发行为和顺序行为§2.5.1顺序描述语句顺序描述语句只能出现在进程或子程序中,由它定义进程或子程序所执行的算法。语句中所涉及到的系统行为有时序流、控制、条件和迭代等语句功能有:算术、逻辑运算、信号和变量的赋值、子程序的调用等顺序描述语句象在一般高级语言中一样,是按出现次序加以执行的VHDL中顺序描述语句有以下十种

——WAIT语句

——ASSERT断言语句

——信号代入语句

——变量赋值语句

——IF语句

——CASE语句

——LOOP语句

——NEXT语句

——过程调用语句

——NULL语句:一、WAIT语句进程在仿真运行中总是处于“执行”或“挂起”两种状态之一:

WAIT语句的功能就是当进程执行到等待语句时,就将被挂起,并设置好再次执行的条件。WAIT语句可以设置4种不同状态的等待条件。WAIT语句可以设置4中不同条件无限等待、时间到、条件满足以及敏感信号量变化其书写格式为:WAIT——无限等待WAITON——敏感信号变化WAITUNTIL——条件满足WAITFOR——时间到其中后三种条件可以单独使用也可以混合使用1、WAITONWAITON语句的完整书写格式为

WAITON信号1,[信号2]…该语句的含义是等待后面跟的信号量发生变化,只要有一个发生改变进程就会结束挂起状态,而继续执行WAITON后面的语句。如:WAITONa,b;该语句表明,它等待信号量a或b发生变化,a或b中只要有一个发生变化,进程将结束挂起状态,而继续执行WAITON语句后面的语句例2-21:PROCESS(a,b)BEGINy<=aANDb;ENDprocess;

或:

PROCESSBEGINY<=aANDb;WAITONa,b;ENDPROCESS;

上面两个进程的描述是完全等价的,只是引起进程变化的信号敏感量的书写方法不同。错误形式:PROCESS(a,b)BEGINy<=aANDb;WAITONa,b;ENDPROCESS;如果PROCESS语句已经有了信号敏感量的说明,那么在进程中就不能再使用WAITON语句2、WAITUNTIL其书写格式为:WAITUNTIL布尔表达式;当进程执行到该语句时,若表达式为“假”进程将被挂起,直到表达式返回一个“真”值,进程才会被再次启动。该语句在表达式中将建立一个隐式的敏感信号量表,当表中的任何一个信号量发生变化时,就立即对表达式进行一次评估,如果评估结果使表达式返回一个“真”值,则进程脱离等待状态,继续执行下一个语句例如:WAITUNTIL((X*10)<100);在这个例子中,当信号量X的值大于或等于10时,进程执行到该语句,就将被挂起;当X的值小于10时进程再次被启动,继续执行WAITUNTIL语句的后继语句。3、WAITFOR语句书写格式:WAITFOR时间表达式;例:WAITFOR20ns;

WAITFOR(a*(b+c));a、b、c为时间量进程执行到该语句时被挂起,直到等待时间到了以后,进程才再执行后面的语句。4、多条件WAIT语句在前面的3个WAIT语句中,等待的条件都是单一的,要么是信号量,要么是布尔量或是时间量。实际上WAIT语句还可以同时使用多个等待条件,例如:WAITONumi,interruptUNTIL((umi=true))OR(interrupt=TRUE))FOR5us;

上述语句等待的是3个条件:上述语句等待的是3个条件:信号量umi和interrupt任何一个有一次变化;信号量umi或interrupt任何一个取值为“真”;该语句已等待5us。只要上述三个条件中的一个或多个满足,进程就能再次启动,继续执行WAIT语句的后继语句应注意:在多个条件等待时,其表达式的值至少应包含一个信号量的值,例如:WAITUNTIL(interrupt=TRUE)OR(old_clk=‘1’);

如果上面语句中interrupt和old_clk两个都是变量,而没有一个信号量,那么,即使两个变量有变化,该语句也不会对表达式进行评估和计算(事实上,在挂起的两个变量的值是不可能改变的)。这样,该语句将变成无限的等待语句,包含该等待语句的进程就不可能再次启动。因而,在多等待条件中,只有信号变化才能引起等待语句表达式的一次新的评价和计算。5、超时等待如果在所设计的程序模块中,等待语句所等待的条件,在实际执行时不能保证一定会碰到。在这种情况下,等待语句通常要加一项超时等待项,以防止该等待语句进入无限期的等待状态。通常用下面的语句格式来进行超时说明:WAITUNTIL表达式FOR1us;

ASSERT(表达式);REPORT“…”SEVERITYERROR;…

如果等待时间超过了规定时间,进程将执行下一条ASSERT语句。ASSERT语句判断条件是为真,则继续执行下一条语句,若判断条件为假,则向操作人员提供错误信息输出,如“sendBtimedoutat‘1’”。这样将有助于操作人员了解在进程中发生了超时等待。例如:WAITUNTILsendB=‘1’FOR1us;ASSERT(sendB=‘1’)REPORT“sendBtimedoutat‘1’;SEVERITYERROR;该断言语句的条件是信号量sendB=‘1’如果执行到该语句时,信号量sendB=‘0’说明条件不满足,就会输出REPORT后跟的文字串。该文字串说明出现了超时等待错误,SEVERITY后跟的错误级别告诉操作人员,其出错级别为ERROR。断言语句为程序的仿真和调试带来了极大的方便。二、信号代入语句书写格式:目的信号量〈=信号量表达式;如A〈=B;该语句把右边信号表达式的值赋予左边的目的信号量;代入符号两边信号量的类型和位长度应该是一致的;在应用时须注意上、下文的含义和说明,因为代入符号与关系操作符的“〈=”时非常相似的三、变量赋值语句书写格式:目的变量:=表达式;该语句表明,目的变量的值将由表达式所表达的数值代替,目的变量的类型、范围及初值在事先应给出过,右边的表达式可以是变量、信号或字符。变量和一般高级语言中的变量是类似的。例如:a:=2;b:=3;c:=d+e;注意:变量值只在进程或子程序中使用,它无法传递到进程之外因此,它类似于一般高级语言的局部变量,只在局部范围内有效五、IF语句IF语句是根据所指定的条件来确定执行那些语句的其书写格式通常可分为3种:1、IF语句的门闩控制书写格式:IF条件THEN

顺序处理语句

ENDIF

当程序执行到该IF语句时就要判断此IF语句所指定的条件是否成立。如果成立,执行IF语句所包括的顺序处理语句;如果条件不成立,程序将跳过IF语句所包含的顺序处理语句,而向下执行IF语句后继的语句这里的条件起门闩作用。典型电路:触发器例如:

IF(a=‘1’)THENc〈=b;ENDIF;

当a=‘1’时,c〈=b;否则将不执行c〈=b而执行下面的语句。2、IF语句的二选择控制

IF条件THEN

顺序处理语句;

ELSE

顺序处理语句;

ENDIF;

该语句的功能是:当条件满足时,执行THEN与ELSE之间的顺序处理语句,否则执行ELSE和IF之间的顺序处理语句。这种描述的典型逻辑电路实例是二选一电路。例2-22:ARCHITECTURErtlOFmux2ISBEGINPROCESS(a,b,sel)IF(sel=‘1’)THENc〈=a;ELSEc〈=b;ENDIF;ENDPROCESS;ENDrtl;3、IF语句的多选择控制IF语句的多选择控制又称IF语句的嵌套,其书写格式为:

IF条件

THEN

顺序处理语句;

ELSIF条件

THEN

顺序处理语句;

ELSIF条件THEN

顺序处理语句;

ELSE

顺序处理语句;

ENDIF;在这种多选择控制的IF语句中设置了多个条件,当满足所设置的多个条件之一时就执行该条件后跟的顺序处理语句如果所有设置的条件都不满足,则执行最后一个ELSE和ENDIF之间的顺序处理语句其典型的描述是多选一电路例2-23:四选一电路;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);

sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErtlOFmux4ISBEGINPROCESS(input,sel)BEGINIF(sel=”00”)THENy<=input(0);ELSIF(sel=”01”)THENy<=input(1);ELSIF(sel=”10”)THENy<=input(2);ELSEy<=input(3);ENDIF;END

温馨提示

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

评论

0/150

提交评论