语言的主要描述语句

上传人:aa****6 文档编号:54286074 上传时间:2018-09-10 格式:PPT 页数:109 大小:442KB
返回 下载 相关 举报
语言的主要描述语句_第1页
第1页 / 共109页
语言的主要描述语句_第2页
第2页 / 共109页
语言的主要描述语句_第3页
第3页 / 共109页
语言的主要描述语句_第4页
第4页 / 共109页
语言的主要描述语句_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《语言的主要描述语句》由会员分享,可在线阅读,更多相关《语言的主要描述语句(109页珍藏版)》请在金锄头文库上搜索。

1、第五章 VHDL语言的主要描述语句,VHDL语言描述系统硬件行为时,按语句执行顺序可以分为顺序(Sequential)描述语句和并发(Concurrent)描述语句。灵活运用这两类语句就可以正确地描述系统的并发行为和顺序行为。 例如,进程语句(Process Statement)是一个并发语句。在一个构造体内可以有几个进程语句同时存在,各进程语句是并发执行的。但是,在进程内部所有语句应是顺序描述语句,也就是说,是按书写的顺序自上至下,一个语句一个语句地执行的。例如,IF 语句、LOOP语句等都属于此类顺序描述语句。,5.1 顺序描述语句,执行顺序与书写顺序一致,与传统软件设计语言的特点相似。顺

2、序语句只能用在进程与子程序中。 语句中所涉及到的系统行为有时序流、控制、条件和迭代等; 语句的功能操作有算术、逻辑运算,信号和变量的赋值,子程序调用等。 在VHDL语言中顺序描述语句有以下几种:,* WAIT语句; * 断言语句; * 信号代入语句; * 变量赋值语句; * IF语句; * CASE语句; * LOOP语句; * NEXT语句; * EXIT 语句; * 过程调用语句; * NULL语句,5.1.1 WAIT语句,进程在仿真时的两个状态:执行或挂起。 进程状态的变化受WAIT语句的控制。当进程执行到WAIT语句时,就将被挂起,并设置好再次执行的条件。 WAIT语句可以设置4种不

3、同的条件:无限等待、时间到、条件满足以及敏感信号量变化。这几类条件可以混用,其书写格式为:WAIT :无限等待WAIT ON :敏感信号量变化WAIT UNTIL: 条件满足WAIT FOR: 时间到,1、WAIT ON,WAIT ON 语句的完整书写格式为:WAIT ON 信号,信号; WAIT ON 后面跟着的是一个或多个信号量,例如:WAIT ON a , b; 该语句表明,等待信号量a或b中只要有一个发生变化,进程将结束挂起状态,而继续执行WAIT ON 语句的后继语句,从而再次启动进程的执行。从这一点来看,与进程指定的敏感信号量有新的变化时,也会启动进程的情况相类似。,举例1,PRO

4、CESS (a,b)BEGINy=a AND b;END PROCESS;,PROCESS BEGINy=a AND b;WAIT ON a,b;END PROCESS;,上面两个进程的描述是完全等价的,只是WAIT ON和PROCESS中所使用的敏感信号量的书写方法有区别。在使用WAIT ON语句的进程中,敏感信号量应写在进程中的WAIT ON语句后面;而在不使用WAIT ON语句的进程中,敏感信号量只应在进程开头的PROCESS后跟的括号中说明。,敏感信号量列表和 wait on 语句只能选其一,两者不能同时使用。,注意,举例2,如果PROCESS 语句已有敏感信号量说明,那么在进程中再不

5、能使用WAIT ON 语句。例如,下面的描述是非法的。,PROCESS (a,b)BEGINy=a AND b;WAIT ON a,b; 错误语句 END PROCESS;,2、WAIT UNTIL,WAIT UNTIL 语句的完整书写格式为:WAIT UNTIL 表达式;当表达式的值为“真”时,进程被启动,否则进程被挂起。 该语句在表达式中将建立一个隐式的敏感信号量表,当表中的任何一个信号量发生变化时,就立即对表达式进行一次评估。如果评估结果使表达式返回一个“真”值,则进程脱离等待状态,继续执行下一个语句。例如:,WAIT UNTIL (X*10)100); 在这个例子中,当信号量X的值大于

6、或等于10时,进程执行到该语句将被挂起;当X的值小于10时进程再次被启动,继续执行WAIT 语句的后继语句。,例:用wait until语句描述时钟沿,实现D触发器architecture rtl of d isbeginprocessbeginwait until clkevent and clk=1;q = d; end process;end rtl;,举例,3、WAIT FOR,WAIT FOR 语句的完整书写格式为:WAIT FOR 时间表达式; WAIT FOR 语句后面跟着的是时间表达式,当进程执行到该语句时将被挂起,直到指定的等待时间到时,进程再开始执行WAIT FOR 语句后

7、继的语句。 例如:WAIT FOR 20ns; 这个语句中时间表达式是一个常数值20ns,当进程执行到该语句时将等待20ns。一旦20ns时间到,进程将执行WAIT FOR 语句的后继语句。,例如: WAIT FOR (a*(b+c); 此语句中,FOR后面是一个时间表达式,a*(b+c)是时间量。WAIT FOR 语句在等待过程中,要对表达式进行一次计算,计算结果返回的值就作为该语句的等待时间。例如,a=2,b=50ns,c=70ns。那么WAIT FOR (a*(b+c)这个语句将等待240ns,也就是说该语句和WAIT FOR 240ns是等价的。,4、多条件WAIT语句,在前面已叙述的

8、3个WAIT语句中,等待的条件都是单一的,要么是信号量,要么是布尔量,要么是时间量。实际上WAIT语句还可以同时使用多个等待条件。例如:WAIT ON nmi,interrupt UNTIL (nmi=TRUE)OR (interrupt=TRUE) FOR 5us; 上述语句等待的是3个条件:第一,信号量nmi和interrupt任何一个有一次新的变化;第二,信号量nmi或interrupt任何一个取值为“真”;第三,该语句已等待5us。 只要上述3个条件中一个或多个条件满足,进程将再次启动,继续执行WAIT语句的后继语句。,应该注意的是,在多条件等待时,表达式的值至少应包含一个信号量的值,

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

10、但是,如果采用这种方法,应作适当的处理,否则就会产生错误的行为。,超时等待举例,ARCHITECTURE wait_example OF wait_example ISSINGAL sendB,sendA:STD_LOGIC; BEGINsendA= 0 ;A:PROCESSBEGINWAIT UNTIL sendB= 1 ;sendA= 1 AFTER 10 ns;WAIT UNTIL sendB= 0 ;sendA= 0 AFTER 10 ns;END PTROCESS A;B:PROCESSBEGINWAIT UNTIL sendA= 0 ;sendB= 0 AFTER 10 ns;WA

11、IT UNTIL sendA= 1 ;sendB= 1 AFTER 10 ns;END PTROCESS B; END wait_example;,进程A执行到第一条wait语句时处于无限期等待状态,进程B执行到第二条wait语句时处于无限期等待状态。两个进程处于相互等待状态,每个进程的等待条件都需要对方继续执行。这种情况我们称为“死锁”状态。为了能够避免这种无限等待状态,我们可以加入超时等待语句,同时用ASSERT语句进行提示。,加入超时等待的语句,ARCHITECTURE wait_example OF wait_example ISSINGAL sendB,sendA:STD_LOGIC

12、; BEGINsendA= 0 ;A:PROCESSBEGINWAIT UNTIL( sendB= 1 ) FOR 1 us;ASSERT(sendB= 1 )REPORT”sendB timed out at 1 “SEVERITY ERROR;sendA= 1 AFTER 10 ns;WAIT UNTIL (sendB= 0 ) FOR 1 us;ASSERT(sendB= 0 )REPORT”sendB timed out at 0 “SEVERITY ERRORsendA= 0 AFTER 10 ns;END PTROCESS A;,B:PROCESSBEGIN WAIT UNTIL(

13、 sendA= 0 ) FOR 1 us;ASSERT(sendA= 0)REPORT”sendA timed out at 1 “SEVERITY ERROR;sendB= 0 AFTER 10 ns;WAIT UNTIL (sendA= 1 ) FOR 1 us;ASSERT(sendA= 0 )REPORT”sendA timed out at 0 “SEVERITY ERRORsendB= 1 AFTER 10 ns;END PTROCESS B; END wait_example;如果条件不满足则等待1us之后执行后续的程序,而不会无限期等待。,5.1.2 断言语句(ASSERT),

14、ASSERT语句主要用于程序仿真、调试中的人机对话,它可以给出一个文字串作为警告和错误信息。ASSERT语句的书写格式为:ASSERT 条件 REPORT 输出信息 SEVERITY 级别;如果条件为真则向下执行另一个语句,如果条件为假,则输出错误信息和错误级别。REPORT后面的错误信息应用双引号括起来。 ASSERT语句给程序的调试和仿真带来极大的方便,这样的语句一般只用于行为级仿真中,而不能进行逻辑综合。,例:ASSERT(sendB= 1 )REPORT “sendB timed out at 1 ”SEVERITY ERROR;该断言语句的条件信号量是sendB=1。如果执行到该语句

15、时,信号量sendB=0,说明条件不满足,就会输出REPORT后跟的文字串。该文字串说明,出现了超时等待错误。SEVERITY后跟的错误等级告诉操作人员,其出错等级为ERROR。,5.1.3 信号代入语句,书写格式: 目的信号量=信号量表达式; 意义:将右边信号量表达式的值赋给左边的目的信号量。1)代入符号与小于等于的区别;2)代入符号两边信号量的类型和长度应一致;3)信号一般使用的场合及与变量的区别。,注意,5.1.4 变量赋值语句,书写格式: 目的变量:=表达式; 意义:表达式的值替代目的变量的值,立即有效。1)两边的数据类型必须相同; 2)目的变量的类型和范围及初值应事先给出; 3)右边

16、的表达式可以是变量,信号或字符; 4)变量只在进程或子程序中使用,它无法传递到进程之外。,注意,1)赋值方式的不同:变量:= 表达式;信号 = 表达式; 2)硬件实现的功能不同:信号代表电路单元、功能模块间的互联,代表实际的硬件连线;变量代表电路单元内部的操作,代表暂 存的临时数据。 3)有效范围的不同:信号:程序包、实体、结构体;全局量。变量:进程、子程序;局部量。 4)赋值行为的不同:信号赋值延迟更新数值;变量赋值立即更新数值;,补充:变量与信号的差异,信号赋值:architecture rtl of sig issignal a,b : std_logic; - 定义信号begin process(a, b)begina = b ;b = a ;end process ; end rtl ; - 结果是 a 和 b 的值互换,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号