1、五、五、VHDLVHDL语言的顺序语句语言的顺序语句顺序语句顺序语句(Sequential Statements)用来用来实现模型的算法描实现模型的算法描述。述。这些语句从多侧面完整地描述数字系统的硬件结构这些语句从多侧面完整地描述数字系统的硬件结构和基本逻辑功能,其中包括通信的方式、信号的赋值、和基本逻辑功能,其中包括通信的方式、信号的赋值、多层次的元件例化以及系统行为等。多层次的元件例化以及系统行为等。顺序语句和并行语句是顺序语句和并行语句是VHDL程序设计中程序设计中两大基本描述语句系列。两大基本描述语句系列。并行语句并行语句(Concurrent Statements)用来用来表示各模
2、型算法描表示各模型算法描述之间的连接关系。述之间的连接关系。顺序语句只能出现在顺序语句只能出现在 进程(进程(PROCESS)过程(过程(PROCEDURE)函数(函数(FUNCTION)中,其它都是并行语句。中,其它都是并行语句。顺序语句是相对于并行语句而言的,其特点顺序语句是相对于并行语句而言的,其特点是每一条顺序语句的执行是每一条顺序语句的执行(指仿真执行指仿真执行)顺序是与顺序是与它们的书写顺序基本一致的,它们的书写顺序基本一致的,理解理解 一个进程是由一系列顺序语句构成的,而进一个进程是由一系列顺序语句构成的,而进程本身属并行语句。也就是说,在同一设计实体程本身属并行语句。也就是说,
3、在同一设计实体中,所有的进程是并行执行的,每个进程内部是中,所有的进程是并行执行的,每个进程内部是顺序执行的。顺序执行的。VHDL有如下六类基本顺序语句:有如下六类基本顺序语句:信号赋值语句信号赋值语句变量赋值语句变量赋值语句1、赋值语句、赋值语句2、流程控制语句、流程控制语句3、等待语句、等待语句4、子程序调用语句、子程序调用语句5、返回语句、返回语句6、空操作语句、空操作语句IF语句语句CASE语句语句LOOP语句语句NEXT语句语句EXIT语句语句RETURN语句语句NULL语句语句WAIT语句语句过程调用过程调用函数调用函数调用目的变量目的变量:=表达式;表达式;变量的说明和赋值限定在
4、顺序区域内,即只能在变量的说明和赋值限定在顺序区域内,即只能在进程或子程序中使用,它无法传递到进程之外。进程或子程序中使用,它无法传递到进程之外。目的信号目的信号=表达式;表达式;例:例:y=1;例:例:x:=15;信号信号赋值可以在顺序区域内作顺序语句,也可以赋值可以在顺序区域内作顺序语句,也可以在结构体中当作并行语句使用。在结构体中当作并行语句使用。1、赋值语句、赋值语句A、变量赋值语句变量赋值语句B、信号赋值语句信号赋值语句2、流程控制语句、流程控制语句第一种第一种第二种第二种A、IF 语句语句IF IF 条件句条件句 THEN THEN 顺序语句顺序语句;END IF;END IF;I
5、F IF 条件句条件句 THEN THEN 顺序语句顺序语句;ELSE ELSE 顺序语句顺序语句;END IFEND IF;第三种第三种IF IF 条件句条件句1 1 THEN THEN 顺序语句顺序语句1;1;ELSIF ELSIF 条件条件2 2 THEN THEN 顺序语句顺序语句2;2;ELSIF ELSIF 条件条件n THEN n THEN 顺序语句顺序语句n;n;ELSE ELSE 顺序语句顺序语句n+1;n+1;END IF;END IF;例例:IF(SET=1)THEN c=b END IF;例例:IF(sel=1)THEN c=a;ELSE c=b;END IF;例例 用
6、用IF语句描述一个四选一电路语句描述一个四选一电路LIBRARY IEEE;USE IEEE.STE_LOGIC_1164.ALL;ENTITY mux4 IS PORT(input:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);Y:OUT STD_LOGIC);END mux4;ARCHITECTURE rt1 OF mux4 ISBEGIN PROCESS(input,sel)BEGIN IF(sel=”00”)THEN Y=input(0);ELSIF(Sel=”01”)THEN Y=input(1
7、);ELSIF(Sel=”10”)THEN Y=input(2);ELSE Y =顺序语句;顺序语句;When When 选择值选择值=顺序语句;顺序语句;.When OTHERS =When OTHERS =顺序语句;顺序语句;END CASE END CASE;选择值可以有四种不同的表达方式:选择值可以有四种不同的表达方式:单个普通数值,如单个普通数值,如6 6。数值选择范围,如数值选择范围,如(2(2 TO 4)TO 4),表示取值为表示取值为2 2、3 3或或4 4。并列数值,如并列数值,如3 3 5 5,表示取值为,表示取值为3 3或者或者5 5。混合方式,以上三种方式的混合。混合方
8、式,以上三种方式的混合。例 用用CASE语句描述语句描述4选选1多路选择器。多路选择器。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(S1,S2:IN STD_LOGIC;A,B,C,D:IN STD_LOGIC;Z:OUT STD_LOGIC);END ENTITY MUX41;ARCHITECTURE ART OF MUX41 ISSIGNA S:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINSZZZZZ10;-当当a大于大于10时跳出循环时跳出循环 END LOOP L2;.(2)FOR L
9、OOP语句,语法格式如下:语句,语法格式如下:(1)单个)单个LOOP语句,其语法格式如下:语句,其语法格式如下:标号标号:LOOP 顺序语句顺序语句;END LOOP 标号标号;标号:标号:WHILE 条件条件 LOOP 顺序语句顺序语句;END LOOP 标号标号;(3)WHILE LOOP语句,语法格式如下:语句,语法格式如下:用法示例:用法示例:FOR I IN 0 TO 7 LOOP Tmp:=tmp XOR a(I);END LOOP;用法示例:用法示例:FOR I IN 0 TO 7 LOOP Tmp:=tmp XOR a(I);END LOOP;用法示例:用法示例:WHILE
10、i4 LOOP b:=b AND a(i);vout(i):=b;I:=I+1;END LOOP;D、NEXT 语句语句NEXT;-第一种语句格式第一种语句格式NEXT LOOP 标号;标号;-第二种语句格式第二种语句格式NEXT LOOP 标号标号 WHEN 条件表达式;条件表达式;-第三种语句格式第三种语句格式NEXT有三种用法,其语法格式如下:有三种用法,其语法格式如下:当当LOOP 标号缺省时,则执行标号缺省时,则执行NEXT 语句时,即语句时,即刻无条件终止当前的循环,跳回到本次循环刻无条件终止当前的循环,跳回到本次循环LOOP语语句开始处,开始下一次循环,否则跳转到指定标号的句开始
11、处,开始下一次循环,否则跳转到指定标号的LOOP语句开始处,重新开始执行循环操作。若语句开始处,重新开始执行循环操作。若WHEN子句出现并且条件表达式的值为子句出现并且条件表达式的值为TRUE,则执则执行行NEXT语句,进入跳转操作,否则继续向下执行。语句,进入跳转操作,否则继续向下执行。用法示例:用法示例:L1:FOR CNT IN 1 TO 8 LOOP S1:A(CNT):=0;NEXT WHEN (B=C);S2:A(CNT+8):=0;END LOOP L1;当程序执行到当程序执行到NEXT语句时,如果条件判断式(语句时,如果条件判断式(b=c)的结果为的结果为TRUE,将执行将执行
12、NEXT语句,并返回到语句,并返回到L1,使使cnt加加1后执行后执行S1开开始的赋值语句,否则执行始的赋值语句,否则执行S2开始的赋值语句。开始的赋值语句。E、EXIT 语句语句EXIT;-第一种语句格式第一种语句格式EXIT LOOP 标号;标号;-第二种语句格式第二种语句格式EXIT LOOP 标号标号 WHEN 条件表达式;条件表达式;-第三种语句格式第三种语句格式EXIT有三种用法,其语法格式如下:有三种用法,其语法格式如下:这种语句格式与前述的这种语句格式与前述的NEXT 语句的格式和操作功能非常相语句的格式和操作功能非常相似,惟一的区别是似,惟一的区别是NEXT语句是跳向语句是跳
13、向LOOP 语句的起始点,语句的起始点,而而EXIT语句则是跳向语句则是跳向LOOP语句的终点。语句的终点。EXIT语句为程序需要处理保护、出错和警告状态时,提供了语句为程序需要处理保护、出错和警告状态时,提供了一种快捷、简便的调试方法。一种快捷、简便的调试方法。3、等待语句、等待语句WAIT语句语句WAIT;-第一种语句格式第一种语句格式WAIT ON 信号表;信号表;-第二种语句格式第二种语句格式 WAIT UNTIL 条件表达式;条件表达式;-第三种语句格式第三种语句格式WAIT FOR 时间表达式;时间表达式;-第四种语句格式,第四种语句格式,超时等待语句超时等待语句EXIT有四种用法
14、,其语法格式如下:有四种用法,其语法格式如下:用法示例用法示例1:SIGNAL s1,s2:STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2;END PROCESS;WAIT ON 信号表信号表 UNTIL 条件表达式条件表达式 FOR 时间表达式时间表达式;用法示例用法示例2:.Wait until enable=1;单独的单独的WAIT表示永远挂起。表示永远挂起。一般地,只有一般地,只有WAIT_UNTIL格式的等待语句可以被综合器接受格式的等待语句可以被综合器接受(其余语其余语句格式只能在句格式只能在VHDL仿真器中使用仿真器中使用),WAIT_UNTIL语句有
15、以下三种表达语句有以下三种表达方式:方式:WAIT UNTIL WAIT UNTIL 信号信号=Value Value;-(1)-(1)WAIT UNTIL WAIT UNTIL 信号信号EVENT AND EVENT AND 信号信号=Value;-(2)Value;-(2)WAIT UNTIL NOT WAIT UNTIL NOT 信号信号STABLE AND STABLE AND 信号信号=Value;-(3)Value;-(3)如果设如果设clock为时钟信号输入端,以下四条为时钟信号输入端,以下四条WAIT语句所设的进程启动条语句所设的进程启动条件都是时钟上跳沿,所以它们对应的硬件结
16、构是一样的:件都是时钟上跳沿,所以它们对应的硬件结构是一样的:WAIT UNTIL clock=1;WAIT UNTIL clock=1;WAIT UNTIL rising_edge(clock);WAIT UNTIL rising_edge(clock);WAIT UNTIL NOT clockSTABLE AND clock=1;WAIT UNTIL NOT clockSTABLE AND clock=1;WAIT UNTIL clock=1 AND clockEVENT;WAIT UNTIL clock=1 AND clockEVENT;例:例:PROCESS BEGINrst_loop
17、:LOOP WAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号等待时钟信号 NEXT rst_loop WHEN(rst=1);-检测复位信号检测复位信号rst x=a;-无复位信号,执行赋值操作无复位信号,执行赋值操作 WAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号等待时钟信号 NEXT rst_loop When(rst=1);-检测复位信号检测复位信号rst y =实参表达式实参表达式 ,形参名形参名=实参表达式实参表达式);一个过程的调用将分别完成以下三个步骤:(1)将)将IN和和INOUT模式的实参值赋给欲调模式的实
18、参值赋给欲调用的过程中与它们对应的形参;用的过程中与它们对应的形参;(2)执行这个过程;)执行这个过程;(3)将过程中)将过程中IN和和INOUT模式的形参值返回给对应的实参。模式的形参值返回给对应的实参。4、子程序调用语句、子程序调用语句A、过程调用语句过程调用语句B、函数调用语句函数调用语句 函数调用与过程调用是十分相似的,不同函数调用与过程调用是十分相似的,不同之处是,调用函数将返还一个指定数据类型的之处是,调用函数将返还一个指定数据类型的值,函数的参量只能是输入值。值,函数的参量只能是输入值。5、返回语句、返回语句RETURN语句是一段子程序结束后,返回主程序的语句是一段子程序结束后,
19、返回主程序的控制语句。它有两种格式:控制语句。它有两种格式:第一种格式只能用于过程,它后面一定不能有表达式;第一种格式只能用于过程,它后面一定不能有表达式;第二种格式只能用于函数,它后面必须有条件表达式,第二种格式只能用于函数,它后面必须有条件表达式,它是函数结束的必要条件,函数结束必须用它是函数结束的必要条件,函数结束必须用RETURN语语句。句。RETURN;-第一种语句格式第一种语句格式RETURN 表达式;表达式;-第二种语句格式第二种语句格式【例】【例】PROCEDURE rs(SIGNAL s,r:IN STD_LOGIC;SIGNAL q,nq:INOUT STD_LOGIC)I
20、S BEGIN IF(s=1 AND r=1)THEN REPORT Forbidden state:s and r are quual to 1;RETURN;ELSE q=s AND nq AFTER 5 ns;nq tmp:=rega AND regb;WHEN 101=tmp:=rega OR regb;WHEN 110=tmp:=NOT rega;WHEN OTHERS =NULL;END CASE;6、断言断言(ASSERT)语句语句ASSERT 条件表达式条件表达式 REPORT 字符串字符串 SEVERITY 错误等级错误等级SEVERITY_LEVEL;ASSERT语句的格式如下:语句的格式如下:断言断言(ASSERT)语句只能在语句只能在VHDL仿真器中使用,综合器仿真器中使用,综合器通常忽略此语句。通常忽略此语句。ASSERT语句判断指定的条件是否为语句判断指定的条件是否为TRUE,如果为如果为FALSE则报告错误。出错级别必须是四则报告错误。出错级别必须是四种错误等级中的一种。种错误等级中的一种。默认报告信息默认报告信息“Assertion Violation”默认错误级别为默认错误级别为“Error”分顺序断言和并行断言语句分顺序断言和并行断言语句