资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,五、,VHDL,语言的顺序语句,顺序语句,(,Sequential Statements),用来实现模型的算法描述。,这些语句从多侧面完整地描述数字系统的硬件结构和基本逻辑功能,其中包括通信的方式、信号的赋值、多层次的元件例化以及系统行为等。,顺序语句和并行语句是,VHDL,程序设计中两大基本描述语句系列。,并行语句,(,Concurrent Statements),用来表示各模型算法描述之间的连接关系。,顺序语句只能出现在,进程(,PROCESS),过程(,PROCEDURE),函数(,FUNCTION),中,其它都是并行语句。,顺序语句是相对于并行语句而言的,其特点是每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本一致的,,理解,一个进程是由一系列顺序语句构成的,而进程本身属并行语句。也就是说,在同一设计实体中,所有的进程是并行执行的,每个进程内部是顺序执行的。,VHDL,有如下六类基本顺序语句:,信号赋值语句,变量赋值语句,1、赋值语句,2、流程控制语句,3、等待语句,4、子程序调用语句,5、返回语句,6、空操作语句,IF,语句,CASE,语句,LOOP,语句,NEXT,语句,EXIT,语句,RETURN,语句,NULL,语句,WAIT,语句,过程调用,函数调用,目的变量:=表达式;,变量的说明和赋值限定在顺序区域内,即只能在进程或子程序中使用,它无法传递到进程之外。,目的信号=表达式;,例:,y=1;,例:,x:=15;,信号,赋值可以在顺序区域内作顺序语句,也可以在结构体中当作并行语句使用。,1、赋值语句,A、,变量赋值语句,B、,信号赋值语句,2、流程控制语句,第一种,第二种,A、IF,语句,IF,条件句,THEN,顺序语句;,END IF;,IF,条件句,THEN,顺序语句;,ELSE,顺序语句;,END IF;,第三种,IF,条件句1,THEN,顺序语句1;,ELSIF,条件2,THEN,顺序语句2;,ELSIF,条件,n THEN,顺序语句,n;,ELSE,顺序语句,n+1;,END IF;,例:,IF,(SET=1),THEN,c=b,END IF;,例:,IF,(,sel,=1),THEN,c=a;,ELSE,c=b;,END IF;,例,用,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,IS,BEGIN,PROCESS,(input,sel,),BEGIN,IF,(,sel,=”00”),THEN,Y=input(0);,ELSIF,(,Sel,=”01”),THEN,Y=input(1);,ELSIF,(,Sel,=”10”),THEN,Y=input(2);,ELSE,Y 顺序语句;,When,选择值=顺序语句;,.,When OTHERS =,顺序语句;,END CASE;,选择值可以有四种不同的表达方式:,单个普通数值,如6。,数值选择范围,如(2,TO 4),,表示取值为2、3或4。,并列数值,如3,5,表示取值为3或者5。,混合方式,以上三种方式的混合。,例,用,CASE,语句描述4选1多路选择器。,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY MUX41 IS,PORT(S1,S2:IN STD_LOGIC;,A,B,C,D:IN STD_LOGIC;,Z:OUT STD_LOGIC);,END ENTITY MUX41;,ARCHITECTURE ART OF MUX41 IS,SIGNA S:STD_LOGIC_VECTOR(1 DOWNTO 0);,BEGIN,SZZZZZ10;-,当,a,大于10时跳出循环,END LOOP L2;,.,(2),FOR LOOP,语句,语法格式如下:,(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,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,语句开始处,开始下一次循环,否则跳转到指定标号的,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,,将执行,NEXT,语句,并返回到,L1,,使,cnt,加1后执行,S1,开始的赋值语句,否则执行,S2,开始的赋值语句。,E、EXIT,语句,EXIT;,-,第一种语句格式,EXIT LOOP,标号;,-第二种语句格式,EXIT LOOP,标号,WHEN,条件表达式;-第三种语句格式,EXIT,有三种用法,其语法格式如下:,这种语句格式与前述的,NEXT,语句的格式和操作功能非常相似,惟一的区别是,NEXT,语句是跳向,LOOP,语句的起始点,而,EXIT,语句则是跳向,LOOP,语句的终点。,EXIT,语句为程序需要处理保护、出错和警告状态时,提供了一种快捷、简便的调试方法。,3、等待语句,WAIT,语句,WAIT;,-,第一种语句格式,WAIT ON,信号表;,-第二种语句格式,WAIT UNTIL,条件表达式;-第三种语句格式,WAIT FOR,时间表达式;-第四种语句格式,超时等待语句,EXIT,有四种用法,其语法格式如下:,用法示例1:,SIGNAL s1,s2:STD_LOGIC;,.,PROCESS,BEGIN,.,WAIT ON s1,s2;,END PROCESS;,WAIT ON,信号表,UNTIL,条件表达式,FOR,时间表达式;,用法示例2:,.,Wait until enable=1;,单独的,WAIT,表示永远挂起。,一般地,只有,WAIT,_,UNTIL,格式的等待语句可以被综合器接受(其余语句格式只能在,VHDL,仿真器中使用),,WAIT,_,UNTIL,语句有以下三种表达方式:,WAIT UNTIL,信号=,Value;-(1),WAIT UNTIL,信号,EVENT AND,信号=,Value;-(2),WAIT UNTIL NOT,信号,STABLE AND,信号=,Value;-(3),如果设,clock,为时钟信号输入端,以下四条,WAIT,语句所设的进程启动条件都是时钟上跳沿,所以它们对应的硬件结构是一样的:,WAIT UNTIL clock=1;,WAIT UNTIL rising_edge(clock);,WAIT UNTIL NOT clock,STABLE AND clock=1;,WAIT UNTIL clock=1 AND clockEVENT;,例:,PROCESS,BEGIN,rst,_loop:LOOP,WAIT UNTIL,clock=1 AND clock,EVENT,;-,等待时钟信号,NEXT,rst,_loop WHEN(,rst,=1);-,检测复位信号,rst,x=a;-,无复位信号,执行赋值操作,WAIT UNTIL,clock=1 AND clock,EVENT,;-,等待时钟信号,NEXT,rst,_loop When(,rst,=1);-,检测复位信号,rst,y 实参表达式,,形参名=实参表达式);,一个过程的调用将分别完成以下三个步骤:,(1)将,IN,和,INOUT,模式的实参值赋给欲调,用的过程中与它们对应的形参;,(2)执行这个过程;,(3)将过程中,IN,和,INOUT,模式的形参值返回给对应的实参。,4、子程序调用语句,A、,过程调用语句,B、,函数调用语句,函数调用与过程调用是十分相似的,不同之处是,调用函数将返还一个指定数据类型的值,函数的参量只能是输入值。,5、返回语句,RETURN,语句是一段子程序结束后,返回主程序的控制语句。它有两种格式:,第一种格式只能用于过程,它后面一定不能有表达式;第二种格式只能用于函数,它后面必须有条件表达式,它是函数结束的必要条件,函数结束必须用,RETURN,语句。,RETURN;,-,-,第一种语句格式,RETURN,表达式;,-,第二种语句格式,【例】,PROCEDURE,rs,(SIGNAL s,r:IN STD_LOGIC;,SIGNAL q,nq,:INOUT STD_LOGIC)IS,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”,分顺序断言和并行断言语句,
展开阅读全文