书签 分享 收藏 举报 版权申诉 / 239
上传文档赚钱

类型VHDL硬件描述语言与数字逻辑电路设计(第五版)侯伯亨章课件6.pptx

  • 上传人(卖家):晟晟文业
  • 文档编号:4281185
  • 上传时间:2022-11-25
  • 格式:PPTX
  • 页数:239
  • 大小:1.69MB
  • 【下载声明】
    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)是否为

    26、“0”,这样一直判别到input(0)是否为“0”。尽管每种情况所使用的条件是一样的,而且每种条件也只用到一次,但是其结果却是不一样的。例6-12中所采用的判别顺序是正确的,它正确地反映了优先级编码器的功能;由input(6)到input(0)进行判别的顺序是错误的,它不能正确反映优先级编码器的功能,其原因请读者自己思考。第6章 VHDL的主要描述语句通常在CASE语句中,WHEN语句可以颠倒次序而不致于发生错误;在IF语句中,颠倒条件判别的次序往往会使综合的逻辑功能发生变化。这一点希望读者切记。在大多数情况下,能用CASE语句描述的逻辑电路同样也可以用IF语句来描述,例如,例6-8用IF语句

    27、描述的四选一电路和例6-9用CASE语句描述的四选一电路。目前IEEE正在对任意项描述的VHDL标准进行深入探讨,相信在不久的将来,像优先级编码器那样的逻辑电路也完全可以用CASE语句进行描述。第6章 VHDL的主要描述语句6.1.7 LOOP语句LOOP语句与其他高级语言中的循环语句一样,使程序能进行有规则的循环,循环的次数受迭代算法控制。在VHDL中,LOOP语句常用来描述位片逻辑及迭代电路的行为。LOOP语句的书写格式一般有两种。1FOR循环变量这种LOOP语句的书写格式如下:标号:FOR 循环变量 IN 离散范围 LOOP顺序处理语句;END LOOP 标号;第6章 VHDL的主要描述

    28、语句 LOOP语句中的循环变量的值在每次循环中都将发生变化,而IN后跟的离散范围则表示循环变量在循环过程中依次取值的范围。例如:ASUM:FOR i IN 1 TO 9 LOOPsum=i+sum;-sum初始值为0END LOOP ASUM;在该例中,i是循环变量,它可取值 1,2,9,共9个值。也就是说,sum=i+sum的算式应循环计算9次。该程序对19的数进行累加计算。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句在例6-13中有以下几点需要说明:(1)tmp是变量,它只能在进程内部说明,因为它是一个局部量。(2)FOR-LOOP语句中的i无

    29、论在信号说明和变量说明中都未涉及,它是一个循环变量。如前例所述,它是一个整数变量。信号和变量都不能代入到此循环变量中。(3)如果tmp变量值要从进程内部输出,则必须将它代入信号量,信号量是全局的,可以将值带出进程。在例6-13中,tmp的值通过信号y带出进程。第6章 VHDL的主要描述语句2WHILE条件这种LOOP语句的书写格式如下:标号:WHILE 条件 LOOP 顺序处理语句;END LOOP 标号;在该LOOP语句中,如果条件为“真”,则进行循环;如果条件为“假”,则结束循环。第6章 VHDL的主要描述语句例如:i:=1;sum:=0;sbcd:WHILE(i10)LOOPsum:=i

    30、+sum;i:=i+1;END LOOP sbcd;该例和FOR-LOOP语句示例的行为是一样的,都是对19的数求累加和的运算。这里利用了i10的条件使程序结束循环,而循环控制变量i的递增是通过算式i:=i+1来实现的。第6章 VHDL的主要描述语句【例6-14】将例6-13中的8位奇偶校验电路的行为用WHILE条件的LOOP语句来描述。第6章 VHDL的主要描述语句虽然FOR-LOOP和WHILE-LOOP语句都可以用来进行逻辑综合,但是一般不太采用WHILE-LOOP语句来进行RTL描述。第6章 VHDL的主要描述语句6.1.8 NEXT语句在LOOP语句中,NEXT语句用来跳出本次循环,

    31、其书写格式如下:NEXT 标号 WHEN条件;NEXT语句执行时将停止本次迭代,而转入下一次新的迭代。NEXT后跟的“标号”表明下一次迭代的起始位置,而“WHEN条件”则表明NEXT语句执行的条件。如果NEXT语句后面既无“标号”,也无“WHEN条件”,那么只要执行到该语句就立即无条件地跳出本次循环,从LOOP语句的起始位置进入下一次循环,即进行下一次迭代。第6章 VHDL的主要描述语句【例6-15】NEXT语句示例。第6章 VHDL的主要描述语句当LOOP语句嵌套时,通常NEXT语句应标有“标号”和“WHEN条件”。例如,有一个LOOP嵌套的程序如下:第6章 VHDL的主要描述语句在上例中,

    32、当i=j时,NEXT语句被执行,程序将从内循环中跳出,而再从下一次外循环中开始执行。由此可知,NEXT语句实际上是用于LOOP语句的内部循环控制语句。第6章 VHDL的主要描述语句6.1.9 EXIT语句EXIT语句也是LOOP语句中使用的循环控制语句。与NEXT语句不同的是,执行EXIT语句将结束循环状态,而从LOOP语句中跳出,结束LOOP语句的正常执行。EXIT语句的书写格式如下:EXIT 标号 WHEN 条件;如果EXIT后面没有跟“标号”和“WHEN条件”,则程序执行到该语句时就无条件地从LOOP语句中跳出,结束循环状态,继续执行LOOP语句后继的语句。第6章 VHDL的主要描述语句

    33、第6章 VHDL的主要描述语句在该例中,int_a通常代入大于0的正数值。如果int_a的取值为负值或零,则将出现错误状态,算式不能计算。也就是说,int_a小于或等于0时,IF语句将返回“真”值,EXIT语句得到执行,LOOP语句执行结束,程序将向下执行LOOP语句后继的语句。EXIT语句具有3种基本的书写格式。第一种书写格式是EXIT语句没有“循环标号”或“WHEN条件”。当条件为“真”,执行EXIT语句时,程序将按如下顺序执行:执行EXIT,程序将仅仅从当前所属的LOOP语句中退出。如果EXIT语句位于一个内循环LOOP语句中,即该LOOP语句嵌在任何其他一个LOOP语句中,那么执行EX

    34、IT,程序仅仅退出内循环,而仍然留在外循环的LOOP语句中。第6章 VHDL的主要描述语句第二种书写格式是EXIT语句后跟LOOP语句的标号。此时,执行EXIT语句,程序将跳至所说明的标号。第三种书写格式是EXIT语句后跟“WHEN条件”语句。当程序执行到该语句时,只有在所说明的条件为“真”的情况下,才跳出循环的LOOP语句。此时,不管EXIT语句是否有标号说明,都将执行下一条语句。如果有标号说明,则下一条要执行的语句将是标号所说明的语句;如果无标号说明,则下一条要执行的语句是循环外的下一条语句。EXIT语句是一条很有用的控制语句。当程序需要处理保护、出错和警告状态时,它能提供一个快捷、简便的

    35、方法。第6章 VHDL的主要描述语句6.2 并发描述语句在VHDL中能进行并发处理的语句有:进程(PROCESS)语句、并发信号代入(Concurrent Signal Assignment)语句、条件信号代入(Conditional Signal Assignment)语句、选择信号代入(Selective Signal Assignment)语句、并发过程调用(Concurrent Procedure Call)语句和块(BLOCK)语句。第6章 VHDL的主要描述语句6.2.1 进程语句进程(PROCESS)语句在前面已多次提到,并在众多实例中得到了广泛的使用。进程语句是一种并发处理语句

    36、,在一个构造体中多个PROCESS语句可以同时并发运行。因此,PROCESS语句是VHDL中描述硬件系统并发行为的最基本语句。第6章 VHDL的主要描述语句PROCESS语句归纳起来具有如下几个特点:(1)它可以与其他进程并发运行,并可存取构造体或实体名中所定义的信号;(2)进程结构中的所有语句都是按顺序执行的;(3)为启动进程,在进程结构中必须包含一个显式的敏感信号量表或者包含一个WAIT语句;(4)进程之间的通信是通过信号量传递来实现的。后面要提到的一些并发语句实质上是一种进程的缩写形式,它们仍可以归属于进程语句。第6章 VHDL的主要描述语句6.2.2 并发信号代入语句在5.1节中已详述

    37、了代入语句的功能和相关问题,这里重提代入语句,并且冠以“并发信号”的词句,主要是为了强调该语句的并发性。代入语句(信号代入语句)可以在进程内部使用,此时它作为顺序语句形式出现;代入语句(并发信号代入语句)也可以在构造体的进程之外使用,此时它作为并发语句形式出现。一个并发信号代入语句实际上是一个进程的缩写。第6章 VHDL的主要描述语句例如:第6章 VHDL的主要描述语句由信号代入语句的功能可知,当代入符号“=”右边的信号值发生任何变化时,代入操作就会立即发生,新的值将赋予代入符号“=”左边的信号。从进程语句的描述来看,在PROCESS语句的括号中列出了敏感信号量表,上例中是a和i。由PROCE

    38、SS语句的功能可知,仿真时进程一直在监视敏感信号量表中的敏感信号量a和i。一旦任何一个敏感信号量发生新的变化,将使其值有一个新的改变,进程将得到启动,代入语句将被执行,新的值将从output信号量输出。第6章 VHDL的主要描述语句由上面的叙述可知,并发信号代入语句和进程语句在这种情况下确实是等效的。并发信号代入语句在仿真时刻同时运行,它表征了各个独立器件的各自的独立操作。例如:a=b+c;d=e*f;第6章 VHDL的主要描述语句第一个语句描述了一个加法器的行为,第二个语句描述了一个乘法器的行为。在实际硬件系统中,加法器和乘法器是独立并行工作的。现在第一个语句和第二个语句都是并发信号代入语句

    39、,在仿真时刻,这两个语句是并发处理的,从而真实地模拟了实际硬件系统中的加法器和乘法器的工作。并发信号代入语句可以仿真加法器、乘法器、除法器、比较器及各种逻辑电路的输出。因此,在代入符号“a,此时LEFT属性的值通常等于LOW属性的值;相反,如果数据类的区间用(b DOWNTO a)来定义,那么ba,此时LEFT属性的值与HIGH属性的值相对应。数值类属性不光适用于数字类型,而且适用于任何标量类型。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句在例6-23中,信号tim1和tim2代入的是sec和year,分别是区间的左端值和右端值。这一点很容易在类型说明中得到验证。但是,如何说明

    40、用HIGH和LOW属性来得到枚举类数据的数值属性呢?实际上,这里的HIGH和LOW表示的是数据类的位置序号值的大小。对于整数和实数来说,数值的位置序号值与数本身的值相等;对于枚举类型的数据来说,在说明中较早出现的数据其位置序号值低于较后出现的数据。例如,在例6-23中sec的位置序号为0,因为它最先在类型说明中说明,同样,min的位置序号为1,hous的位置序号为2。这样,位置序号大的其属性为HIGH;位置序号小的其属性为LOW。第6章 VHDL的主要描述语句信号tim5到tim8代入的是reverse_tim类数据的属性值。该类数据的区间用DOWNTO来加以说明。此时,用属性HIGH和RIG

    41、HT得到的将不是同一个值(在用TO来说明区间时,两者的属性值是相同的),其原因就在于区间内的数据说明颠倒了。在例6-23中,对reverse_tim数据类型来说,month的位置序号大于min的位置序号。第6章 VHDL的主要描述语句2)数组的数值属性数组的数值属性只有一个,即LENGTH。在给定数组类型后,用该属性将得到一个数组的长度值。该属性可用于任何标量类数组和多维的标量类区间的数组。例6-24就是一个简单应用的示例。第6章 VHDL的主要描述语句在例6-24中,len1代入的是数组bit4的元素个数;len2代入的是数组bit_strange的元素个数。该属性同样也可以用于枚举类型的区

    42、间,如例6-25所示。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句例6-25中的andsd和andmd是两个复合型常数,它们是t_4val类型数据的“与”函数的真值表。第一个常数andsd用数组的数组来表示其相“与”的值。第二个常数andmd用多维数组来表示它的取值。在andsd中,“X”和“X”相“与”为“X”,“X”和“0”相“与”为“0”,“X”和“1”相“与”为“X”,“X”和“Z”相“与”为“X”,其他状态值也是根据逻辑“与”的功能得到的。如果现在将属性LENGTH用于这些类型的数据,那么就可以得到例6-26

    43、注解中所注明的数值。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句在例6-26中,t_4valx1是一个包含4个元素的数组,数组的区间用t_4val类型数据的LOW和HIGH属性来说明,因此t_4valx1的长度值应为4。同理,len2也将得到4。这是因为t_valx2的区间是从数组元素t_4valx1的LOW到HIGH,共有4个元素(一个数组为另一个数组的元素)。代入len3和len4的是多维数组t_4valmd的LENGTH的属性值。由于多维数组有多个区间,因此在对某个区间取属性值时,在属性LENGTH后面应标注区间号,如例6-26中的LENGTH(1)和LENGTH(2)。

    44、如果不作特别说明,那么属性LENGTH得到的将是第一个区间的长度值。第6章 VHDL的主要描述语句3)块的数值属性块的数值属性有两种:STRUCTURE和BEHAVIOR。这两种属性用于块(BLOCK)和构造体,通过它们可以得到块和构造体是怎样的一个设计模块的信息。如果块有标号说明,或者构造体有构造体名说明,而且在块和构造体中不存在COMPONENT语句,那么用属性BEHAVIOR将得到“TRUE”的信息;如果在块和构造体中只有COMPONENT语句或被动进程,那么用属性STRUCTURE将得到“TRUE”的信息。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主

    45、要描述语句在例6-27中,移位寄存器模块由4个D触发器基本单元串联而成。在对应于shifter实体的构造体中,还包含有一个用于检出时钟clk跳变的被动进程checktime。现在对这样的构造体施加属性BEHAVIOR和STRUCTURE,就可以得到如下所描述的信息。structuralBEHAVIOR -得到“假”structuralSTRUCTURE -得到“真”第6章 VHDL的主要描述语句由上述描述可知,实际上属性BEHAVIOR和STRUCTURE用来验证所说明的块或构造体是用结构描述方式来描述的模块还是用行为描述方式来描述的模块。这对设计人员检查程序是非常有用的。另外,例6-27中的

    46、checktime是被动进程。所谓被动进程,可以这么认为,它是一个无源的进程。如果在进程中包含有代入语句,那么该进程就不是被动进程了,它变成了一个有源进程或者称主动进程。如果checktime进程包含有代入语句,那么用属性STRUCTURE得到的信息将不是“真”,而是“假”了。第6章 VHDL的主要描述语句2函数类属性所谓函数类属性,是指属性以函数的形式,让设计人员得到有关数据类型、数组、信号的某些信息。当函数类属性以表达式形式使用(例如POS(x)时,首先应指定一个输入的自变量值(如x),函数调用后将得到一个返回的值。该返回的值可能是枚举数据的位置序号,也可能是信号有某种变化的指示,还可能是

    47、数组区间中的某一个值。第6章 VHDL的主要描述语句函数类属性有数据类型属性函数、数组属性函数和信号属性函数3种。1)数据类型属性函数用数据类型属性函数可以得到有关数据类型的各种信息。例如,给出某类数据值的位置,那么利用位置函数属性就可以得到该位置的数值。另外,利用其他相应属性还可以得到某些值的左邻值和右邻值等。第6章 VHDL的主要描述语句对数据类型属性函数再进行细分,可以得到以下6种属性函数:(1)POS(x)得到输入x值的位置序号;(2)VAL(x)得到输入位置序号x的值;(3)SUCC(x)得到输入x 值的下一个值;(4)PRED(x)得到输入x值的前一个值;(5)LEFTOF(x)得

    48、到邻接输入x值左边的值;(6)RIGHTOF(x)得到邻接输入x值右边的值。数据类型属性函数的一个典型应用是将枚举或物理类型的数据转换成整数。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句包集合ohms_law定义了3种物理类型的数据,即current(电流)、voltage(电压)和resistance(电阻)。例6-28的作用是将物理类型的数据转换成整数(conve,conviint_r),而后再由整数转换成物理类型的数据(int_rr)。从这个转换和再转换的过程可以看出,它实际完成了由电压和电流值计算电阻值的运算过

    49、程。当端口i和e中的任何一个发生变化时,ohm_proc进程就被启动,根据新的电流(i)和电压(e)值计算得到新的电阻(r)值。第6章 VHDL的主要描述语句进程的第一条语句将输入电流值(i)的位置序号赋予变量convi。例如,输入电流值为10mA,那么赋予变量convi的值为10。进程的第二条语句将输入电压值(e)的位置序号赋予变量conve。电压的基本单位是mV,因此,电压值的位置序号与输入电压的mV数相等。第6章 VHDL的主要描述语句进程的第三条语句是计算整数conve和convi的商,得到的是一个int_r整数值。该整数值与要得到的电阻的阻值是相等的,但int_r不是物理量数据,要转

    50、换成物理量数据还需进行一次整数至物理量的转换,这就是进程中的第四条语句。进程的第四条语句将位置序号转换成数值,即利用属性VAL将位置序号int_r转换成用欧姆表示的电阻值。前面详述了属性POS和VAL的使用方法,下面再举例说明一下属性SUCC、PRED、RIGHTOF和LEFTOF。第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句第6章 VHDL的主要描述语句需要注意的是,当一个枚举类型数据的极限值被传递给属性SUCC和PRED时,如本例中假设:y:=sec;x:=timePRED(y);第二个表达式将引起运行错误。这是因为在枚举数据time中,最小的值是sec,timePRED(

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:VHDL硬件描述语言与数字逻辑电路设计(第五版)侯伯亨章课件6.pptx
    链接地址:https://www.163wenku.com/p-4281185.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库