VHDL硬件描述语言与数字逻辑电路设计(第五版)侯伯亨章课件6.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《VHDL硬件描述语言与数字逻辑电路设计(第五版)侯伯亨章课件6.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 硬件 描述 语言 数字 逻辑电路 设计 第五 侯伯亨章 课件
- 资源描述:
-
1、第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句6.1 顺序描述语句6.2 并发描述语句6.3 其他语句和有关规定的说明习题与思考题第6章 VHDL的主要描述语句顺序描述语句只能出现在进程或子程序中,由它定义进程或子程序所执行的算法。顺序描述语句中所涉及的系统行为有时序流、控制、条件和迭代等。顺序描述语句的功能操作有算术、逻辑运算,信号和变量的赋值,子程序调用等。顺序描述语句像在一般高级语言中一样,其语句是按出现的次序加以执行的。6.1 顺序描述语句第6章 VHDL的主要描述语句在VHDL中,顺序描述语句主要有以下几种:WAIT语句;断言语句;信号代入语句;变量赋值语句;IF语句;
2、CASE语句;LOOP语句;NEXT语句;第6章 VHDL的主要描述语句 EXIT语句;过程调用语句;NULL语句。NULL(空)语句表示只占位置的一种空处理操作,但是它可以为所对应信号赋予一个空值,表示该驱动器被关闭。该语句在下面不作介绍,其余语句将通过具体实例作详细介绍。第6章 VHDL的主要描述语句6.1.1 WAIT语句进程在仿真运行中总是处于下述两种状态之一:执行或挂起。进程状态的变化受等待语句的控制,当进程执行到等待语句时,会被挂起,并设置好再次执行的条件。WAIT语句可以设置4种不同的条件:无限等待、时间到、条件满足以及敏感信号量变化。第6章 VHDL的主要描述语句这几类条件可以
3、混用,其书写格式如下:WAIT (无限等待)WAIT ON (敏感信号量变化)WAIT UNTIL (条件满足)WAIT FOR (时间到)第6章 VHDL的主要描述语句1WAIT ON语句WAIT ON语句的完整书写格式如下:WAIT ON 信号,信号;WAIT ON语句后面跟着的是一个或多个信号量。例如:WAIT ON a,b;该语句表明:它等待信号量a或b发生变化。a或者b中只要有一个信号量发生变化,进程就结束挂起状态,而继续执行WAIT ON语句后继的语句。WAIT ON可以再次启动进程的执行,其条件是指定的信号量必须有一个新的变化。第6章 VHDL的主要描述语句【例6-1】WAIT
4、ON可以再次启动进程的条件。第6章 VHDL的主要描述语句例6-1中的两个进程的描述是完全等价的,只是WAIT ON和PROCESS中所使用的敏感信号量的书写方法有区别。在使用WAIT ON语句的进程中,敏感信号量应写在进程中的WAIT ON语句后面;在不使用WAIT ON语句的进程中,敏感信号量只应在进程开头的PROCESS后跟的括号中说明。需要注意的是,如果PROCESS语句已有敏感信号量说明,那么在进程中再不能使用WAIT ON语句。例如,例6-2的描述是非法的。第6章 VHDL的主要描述语句【例6-2】PROCESS语句已有敏感信号量说明的情况。第6章 VHDL的主要描述语句2WAIT
5、 UNTIL语句WAIT UNTIL语句的完整书写格式如下:WAIT UNTIL表达式;WAIT UNTIL语句后面跟的是布尔表达式,当进程执行到该语句时将被挂起,直到表达式返回一个“真”值,进程才被再次启动。第6章 VHDL的主要描述语句该语句在表达式中将建立一个隐式的敏感信号量表。当表中的任何一个信号量发生变化时,立即对表达式进行一次评估。如果评估结果使表达式返回一个“真”值,则进程脱离等待状态,继续执行下一个语句。例如:WAIT UNTIL(x*10)100);在这个例子中,当信号量x的值大于或等于10时,进程执行到该语句将被挂起;当x的值小于10时,进程再次被启动,继续执行WAIT语句
6、的后继语句。第6章 VHDL的主要描述语句3WAIT FOR语句WAIT FOR语句的完整书写格式如下:WAIT FOR时间表达式;WAIT FOR语句后面跟的是时间表达式。当进程执行到该语句时将被挂起,直到指定的等待时间到时,进程再开始执行WAIT FOR语句后继的语句。例如:WAIT FOR 20ns;WAIT FOR(a*(b+c);第6章 VHDL的主要描述语句在上例的第一个语句中,时间表达式是一个常数值20 ns,当进程执行到该语句时将等待20ns。一旦20ns时间到,进程将执行WAIT FOR语句的后继语句。在上述第二个语句中,FOR后面是一个时间表达式,a*(b+c)是时间量。W
7、AIT FOR语句在等待过程中要对表达式进行一次计算,计算结果返回的值就作为该语句的等待时间。例如,a=2,b=50ns,c=70ns,那么WAIT FOR(a*(b+c)这个语句将等待240ns。也就是说,该语句和WAIT FOR 240 ns是等价的。第6章 VHDL的主要描述语句4多条件WAIT语句在前面已叙述的3个WAIT语句中,等待的条件都是单一的,要么是信号量,要么是布尔量,要么是时间量。实际上,WAIT语句还可以同时使用多个等待条件。例如:WAIT ON nmi,interrupt UNTIL(nmi=TRUE)OR(interrupt=TRUE)FOR 5ms;第6章 VHDL
8、的主要描述语句上述语句等待的是以下3个条件:(1)信号量nmi和interrupt中任何一个有一次新的变化;(2)信号量nmi或interrput中任何一个取值为“真”;(3)该语句已等待5ms。只要上述3个条件中一个或多个条件满足,进程就再次启动,继续执行WAIT语句的后继语句。第6章 VHDL的主要描述语句应该注意的是,在多条件等待时,表达式的值至少应包含一个信号量的值。例如:WAIT UNTIL(interrupt=TRUE)OR(old_clk=1);如果该语句的interrupt和old_clk两个都是变量,而不是信号量,那么即使两个变量的值有新的改变,该语句也不会对表达式进行评估和
9、计算(事实上,在挂起的进程中变量的值是不可能改变的)。这样,该等待语句将变成无限的等待语句,包含该等待语句的进程就不能再启动。在多种等待条件中,只有信号量变化才能引起等待语句表达式的一次新的评价和计算。第6章 VHDL的主要描述语句5超时等待往往存在这样一种情况:在设计的程序模块中,等待语句所等待的条件在实际执行时不能保证一定会碰到。在这种情况下,等待语句通常要加一项超时等待项,以防止该等待语句进入无限期的等待状态。但是,如果采用这种方法,则应作适当的处理,否则就会产生错误的行为。第6章 VHDL的主要描述语句【例6-3】超时等待示例。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语
10、句在例6-3中,一个构造体内包含有两个进程。这两个进程通过两个信号量sendA和sendB进行通信。尽管例6-3实际上并不做任何事情,但是它可以说明为什么等待语句会处于无限期的等待状态,也就是通常所说的“死锁”状态。在仿真的最初阶段,所有的进程都将会执行一次。进程通常在仿真启动的执行点得到启动。在本例中,进程A在仿真启动点启动,而在执行到下述语句时被挂起:WAIT UNTIL sendB=1;第6章 VHDL的主要描述语句此时,进程B同样在启动点被启动,而在执行到下述语句时被挂起:WAIT UNTIL sendA=1;B进程启动以后不会停留在第一条等待语句WAIT UNTIL sendA=0上
11、。这是因为该构造体中的第一条语句是sendA=0。它使B进程中的第一条等待语句已满足了等待条件,可以继续执行后继的语句。此后,B进程向下执行将“0”代入sendB,而后停留在B进程的第二条等待语句上。第6章 VHDL的主要描述语句这样,两个进程就处于相互等待状态,两个进程都不能继续执行,因为两个进程各自等待的条件都需要对方继续执行。如果在每一个等待语句中插入一个超时等待项,那么就可以允许进程继续执行,而不至于进入死锁状态。为了检测出进程没有遇到等待条件而继续向下执行的情况,在等待语句后面可以加一条ASSERT(断言)语句。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VH
12、DL的主要描述语句在例6-4中,每个等待语句的超时表达式用1ms说明。如果等待语句的等待时间超过了1ms,则进程将执行下一条ASSERT语句。ASSERT语句的判断条件为“假”,就向操作人员提供错误信息输出,从而有助于操作人员了解在进程中发生了超时等待。第6章 VHDL的主要描述语句6.1.2 断言语句断言(ASSERT)语句主要用于程序仿真、调试中的人-机会话,它可以给出一个文字串作为警告和错误信息。ASSERT语句的书写格式如下:ASSERT 条件REPORT 输出信息SEVERITY 级别;当执行ASSERT语句时,就会对条件进行判别。如果条件为“真”,则向下执行另一个语句;如果条件为“
13、假”,则输出错误信息和错误严重程度的级别。在REPORT后面跟的是设计者所写的文字串,通常是说明错误的原因,文字串应用双引号 括起来。第6章 VHDL的主要描述语句例如,在例6-4 A进程中的第一个等待语句后面跟的ASSERT语句如下:ASSERT(sendB=1)REPORT“sendB timed out at 1”SEVERITY ERROR;该断言语句的条件是信号量sendB=1。如果执行到该语句时,信号量sendB=0,则说明条件不满足,就会输出REPORT后跟的文字串。该文字串说明出现了超时等待错误。SEVERITY后跟的错误级别告诉操作人员其出错级别为ERROR。ASSERT语句
14、为程序的仿真和调试带来了极大的方便。第6章 VHDL的主要描述语句6.1.3 信号代入语句信号代入语句的情况在第4章中已有详述,这里只作归纳性的介绍。信号代入语句的书写格式如下:目的信号量=信号量表达式;该语句表明:将右边信号量表达式的值赋予左边的目的信号量。例如:a=b;第6章 VHDL的主要描述语句该语句表示将信号量b的当前值赋予目的信号量a。需要再次指出的是,代入语句的符号“=”和关系操作的小于等于符“=”是一致的,要正确判别不同的操作关系,应注意上下文的含义和说明。另外,代入符号两边信号量的类型和位长度应该是一致的。第6章 VHDL的主要描述语句6.1.4 变量赋值语句变量赋值语句的书
15、写格式如下:目的变量:=表达式;该语句表明:目的变量的值将由表达式所表达的新值替代,但是两者的类型必须相同。目的变量的类型、范围及初值在事先应已给出过。右边的表达式可以是变量、信号或字符。该变量和一般高级语言中的变量是类似的。第6章 VHDL的主要描述语句例如:a:=2;b:=3.0;c:=d+e;变量值只在进程或子程序中使用,它无法传递到进程之外。因此,它类似于一般高级语言的局部变量,只在局部范围内有效。93版引入了共享变量,共享变量可在全局范围内使用。第6章 VHDL的主要描述语句6.1.5 IF语句IF语句是根据所指定的条件来确定执行哪些语句的,其书写格式通常可以分成以下3种类型。1IF
16、语句的门闩控制用作门闩控制的IF语句的书写格式如下:IF 条件 THEN顺序处理语句END IF;第6章 VHDL的主要描述语句当程序执行到该IF语句时,就要判断IF语句所指定的条件是否成立。如果条件成立,则IF语句所包含的顺序处理语句将被执行;如果条件不成立,则程序将跳过IF语句所包含的顺序处理语句,而向下执行IF语句后继的语句。这里的条件起门闩的控制作用。第6章 VHDL的主要描述语句【例6-5】IF语句的门闩控制示例。IF(a=1)THENc=b;END IF;该IF语句所描述的是一个门闩电路。例6-5中,a是门闩控制信号量;b是输入信号量;c是输出信号量。当门闩控制信号量a为1时,输入
17、信号量b的任何值的变化都将被赋予输出信号量c。也就是说,c值与b值永远是相等的。当a1时,c=b语句不被执行,c将维持原始值,而不管信号量b的值发生什么变化。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句在例6-6中,IF语句的条件是时钟信号clk发生变化,且时钟信号clk=1。只是在这个时候q端输出复现d端输入的信号值。当该条件不满足时,q端维持原来的输出值。第6章 VHDL的主要描述语句 2IF语句的二选择控制当IF语句用作二选择控制时的书写格式如下:IF条件THEN顺序处理语句;ELSE顺序处理语句;END IF;第6章 VHDL的主要描述语句在这种格式的IF语句中,当IF
18、语句所指定的条件满足时,将执行THEN和ELSE之间所界定的顺序处理语句;当IF语句所指定的条件不满足时,将执行ELSE和END IF之间所界定的顺序处理语句。也就是说,用条件来选择两条不同程序执行的路径。这种描述的典型逻辑电路实例是二选一电路。第6章 VHDL的主要描述语句【例6-7】二选一电路的输入为a和b,选择控制端为sel,输出端为c时,用IF语句描述该电路行为的程序如下:第6章 VHDL的主要描述语句 3IF语句的多选择控制IF语句的多选择控制又称IF语句的嵌套,其书写格式如下:IF 条件 THEN顺序处理语句;ELSIF 条件 THEN顺序处理语句;ELSIF 条件 THEN顺序处
19、理语句;ELSE顺序处理语句;END IF;第6章 VHDL的主要描述语句在这种多选择控制的IF语句中,设置了多个条件,当满足所设置的多个条件之一时,执行该条件后跟的顺序处理语句;如果所有设置的条件都不满足,则执行ELSE和END IF之间的顺序处理语句。这种描述的典型逻辑电路实例是多选一电路。第6章 VHDL的主要描述语句【例6-8】四选一电路的描述。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句 IF语句不仅可以用于选择器的设计,还可以用于比较器、译码器等凡是可以进行条件控制的逻辑电路设计。需要注意的是,IF语句的条件判断输出是布尔量,即是“真”(TRUE)或“假”(FALS
20、E)。因此在IF语句的条件表达式中只能使用关系运算操作(=、/=、=)及逻辑运算操作的组合表达式。第6章 VHDL的主要描述语句6.1.6 CASE语句CASE语句用来描述总线或编码、译码的行为,从许多不同语句的序列中选择其中之一来执行。虽然IF语句也有类似的功能,但是CASE语句的可读性比IF语句要强得多,程序的阅读者很容易找出条件式和动作的对应关系。CASE语句的书写格式如下:CASE 表达式 ISWHEN条件表达式=顺序处理语句;END CASE;第6章 VHDL的主要描述语句上述CASE语句中的条件表达式可以有如下4种不同的表示形式:WHEN 值=顺序处理语句;WHEN 值|值|值|值
21、=顺序处理语句;WHEN 值TO值=顺序处理语句;WHEN OTHERS=顺序处理语句;当CASE和IS之间的表达式的取值满足指定的条件表达式的值时,程序将执行后跟的由符号=所指的顺序处理语句。条件表达式的值可以是一个值,也可以是多个值的“或”关系,还可以是一个取值范围或者表示其他所有的缺省值。第6章 VHDL的主要描述语句【例6-9】当条件表达式取值为某一值时,CASE语句的使用实例。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句例6-9表明,选择器的行为描述不仅可以用IF语句,还可以用CASE语句。但是它们两者还是有区别的。首先在IF语句中,先处理最起始的条件,如果不满足,则
22、再处理下一个条件;在CASE语句中,没有值的顺序号,所有值是并行处理的。因此,在WHEN项中已用过的值,如果在后面WHEN项中再次使用,那么在语法上是错误的。也就是说,值不能重复使用。另外,应该将表达式的所有取值都一一列举出来,如果不列举出表达式的所有取值,那么在语法上也是错误的。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句在例6-10中,indata是矢量型数据,除了取值为“0”和“1”之外,还有可能取值为“X”、“Z”和“U”。尽管这些取值在逻辑电路综合时没有用,但是,在CASE中却必须把所有可能取的值都描述出来,故在本例中应加WHEN OTH
23、ERS项,使得它包含y输出的所有缺省值。当WHEN后跟的值不同,但是输出相同时,可以用符号“1”来描述。例如,例6-10中WHEN OTHERS项也可以写成:WHEN UZX|ZXU|UUZ|UUU=y 。第6章 VHDL的主要描述语句应该再次提醒的是,WHEN后跟的“=”符号不是关系运算操作符,它在这里仅仅描述值和对应执行语句的对应关系。在进行组合逻辑电路设计时,往往会碰到任意项,即在实际正常工作时不可能出现的那些输入状态。在利用卡诺图对逻辑进行化简时,可以把这些项看作“1”或者“0”,从而使逻辑电路得到简化。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要
24、描述语句例6-11中的WHEN OTHERS语句和例6-10中的WHEN OTHERS语句尽管最后都将“X”值代入y,但是其含义是不一样的。例6-10中,在正常情况下,所有的输入状态从000到111都在CASE语句的OTHERS之前罗列出来了,因此在逻辑综合时就不会有什么不利影响。例6-11中,输入的所有状态并未在CASE语句的OTHERS之前都罗列出来。例如,当某一项输入同时出现两个或两个以上“0”时,y输出值就将变为“X”(可能是“0”,也可能是“1”)。如果逻辑综合时,可以认为这些是不可能的输出项,那么就可以大大简化逻辑电路的设计。在仿真时如果出现了不确定的“X”值,则可以检查是否出现了
25、不正确的输入。第6章 VHDL的主要描述语句如果用CASE语句描述具有两个以上“0”的情况,并使它们针对某一特定的y输出,例如OTHERS改写为WHEN OTHERS=y y y=“110”;显然,这样的描述语句在VHDL中还未制定出来,因此不能使用这种非法的语句。此时利用IF语句则能正确地描述优先级编码器的功能。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句在例6-12中,IF语句首先判别input(0)是否为“0”,然后依顺序判别下去。如果该程序中首先判别input(6)是否为“0”,则然后判别input(5)是否为
展开阅读全文