您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第四章 VHDL顺序语句
第四章VHDL顺序语句(SequentialStatement)Process,Function,Procedure中的语句都是顺序执行,以Process为例Process与Process之间,与其他并行语句之间都是并行的关系4.1、赋值语句1.顺序信号赋值语句信号名=赋值源;赋值符号左边必须是信号名,但不能是端口声明中指定为in的信号。右边表达式中可以出现任意对象类,但不能出现端口声明中指定为out的信号。例:B=A;--惯性延迟,无时间延迟子句,即δ延迟D=Cafter5ns;--传输延迟,指定延迟时间2.变量赋值语句变量赋值的含义是:用计算赋值符号右边的表达式所得新值取代变量原来的值。变量赋值的语法形式为:变量名:=表达式;3、赋值目标a:=‘1’;C1:=“1100”;G(2)=y;H(I)=z;F(1to4):=“1001”;SIGNALa,b,c,d:STD_LOGIC;SIGNALS:STD_LOGIC_VECTOR(1TO4);…VARIABLEe,f:STD_LOGIC;VARIABLEg:STD_LOGIC_VECTOR(1TO2);VARIABLEh:STD_LOGIC_VECTOR(1TO4);S=(‘0’,‘1’,‘0’,‘0’);(a,b,c,d)=s;--a=‘0’;b=‘1’;c=‘0’;d=‘0’;…(3=e,4=f,2=g(1),1=g(2)):=h;--g(2):=h(1);g(1):=h(2);e:=h(3);f:=h(4);4.2流程控制结构VHDL为用户提供了若干控制进程内部执行流的结构,可分为条件控制和循环控制两种。•IF语句•CASE语句•LOOP语句•NEXT语句•EXIT语句1.if语句(条件控制语句)if条件表达式then顺序语句endif;if条件表达式then顺序语句else顺序语句endif;if条件表达式then顺序语句elsif条件表达式then顺序语句else顺序语句endif;求取最大值BEGINIF(ab)THENy=b;ELSEy=a;ENDIF;ENDmax;B用VHDL设计一个D触发器ddf1引进内部节点信号进程和敏感信号检测CLK上升沿将数据输出端口顺序语句PROCESS(clock,clear)BEGINIFclear=‘0’THENq=‘0’;ELSIFclock’EVENTandclock=‘1’THENq=d;ENDIF;ENDPROCESS;T触发器Process(clk)beginif(clk’eventandclk=‘1’)thenif(t=‘1’)thenq=not(q);elseq=q;endif;endif;endprocess;ENTITYmuxISPORT(a,b,sel:INBIT;data_out:OUTBIT);ENDmux;ARCHITECTUREexOFmuxISSIGNALtemp:BIT;BEGINprocess_a:PROCESS(a,b,selx)BEGINIF(sel=‘0’)THENtemp=a;ELSEtemp=b;ENDIF;data_out=temp;ENDPROCESSprocess_a;case语句的一般形式为:case值表达式iswhen选择值=语句;when选择值=语句;…[whenothers=语句;]endcase;case语句选择项的要求:选择唯一,覆盖全集。2、case语句选择值的表达方式单个普通数值8数值选择范围(2to4)并列数值3|5|8混合方式LIBRARYieee;USEieee.std_logic_1164.all;ENTITYmux41isPORT(s1,s2,a,b,c,d:INSTD_LOGIC;z:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREactivOFmux41ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINs=s1&s2;PROCESS(s,a,b,c,d)BEGINCASEsISWHEN“00”=z=a;WHEN“01”=z=b;WHEN“10”=z=c;WHEN“11”=z=d;WHENOTHERS=z=‘x’;ENDCASE;ENDPROCESS;ENDactiv;azmuxcbdS1,s22例:signalC:Integerrange1to20;signalOut1:('0','1','2','3');process(C)begincaseCiswhen1=Out1='0';--C=1when2|4|8=Out1='1';--C=2,4,8when3|5to7|10to15=Out1='2';--C=3,5,6,7,10,11,12,13,14,15whenothers=Out1='3';--C=9,16,17,18,19,20endcase;endprocess;3.循环控制语句(loop语句)有三种循环语句:简单循环语句,for循环语句以及while循环语句。Next语句和exit语句是与循环密切相关的两个顺序语句,用来控制特殊的循环过程。(1)无条件loop语句(2)for…loop语句(3)while…loop语句(4)next语句(5)exit语句(1)无条件loop语句无条件loop语句是简单循环语句,其中包含一个无限循环执行的语句集,其形式为;[loop标号]:loop顺序语句;endloop[loop标号];循环标号是可选项。从语法上讲,循环体中的语句中还可以有循环语句,因而在一个循环语句里可以嵌套另外的循环语句。如果语句中没有exit语句,则这样的循环语句无限循环,不会停止。但exit语句可以使它结束循环,参看下面的exit语句的介绍。loop2:loopa:=a+1;exitloop2whena10;endlooploop2;(2)for…loop语句[loop标号:]for循环变量in循环次数范围loop顺序语句;endloop[loop标号];循环变量由循环次数范围确定其类型,无需声明。循环变量可用在循环体中,但一旦循环结束,循环变量不再起作用,即不能把循环变量的值带到循环体外。8位奇偶校验电路ENTITYp_checkisPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);Y:OUTSTD_LOGIC);ENDp_check;ARCHITECTUREoptOFp_checkISSIGNALtmp:STD_LOGIC;BEGINPROCESS(a)BEGINtmp=‘0’;fornin0to7looptmp=tmpXORa(n);endloop;y=tmp;ENDPROCESS;ENDopt;(3)while…loop语句标号:while循环控制条件loop语句;endloop标号;循环控制条件是布尔类型。每次执行完循环体之后,都要检测条件表达式的值是真还是假。只要其值为真,就要在执行一次循环体内的语句。在条件为假时结束循环。process(inputx)variablen:Integer:=1;beginL1:whilen=8loopoutputx(n)=inputx(n+8);n:=n+1;endloopL1;endprocess;(4)next语句该语句控制循环提前进入下一次循环,即跳过该语句后面的语句执行指定标号的下一个循环next;nextloop标号;nextloop标号when条件表达式;loop2:loopB:=B+1;nextloop2whenB10;..endlooploop2;(5)exit语句exit语句使得从循环标号所标明的循环中退出。exit;exitloop标号;exitloop标号when条件表达式如果指定条件,必须要在所绐条件为真的前提下,才从循环标号所标明的循环中退出。两种情况下的循环标号都是可选项。如果语句中末给出循环标号,则从当前循环中退出。signala,b:std_logic_vector(1downto0);signala_less_then_b:BOOLEAN;…a_less_then_b=false;foriin1downto0loopIF(a(i)=‘1’ANDb(i)=‘0’THENa_less_then_b=false;EXIT;Elsif(a(i)=‘0’ANDb(i)=‘1’THENa_less_then_b=true;EXIT;ELSENULL;ENDIF;ENDLOOP;3.WAIT语句等待语句是进程中专门控制进程激活与挂起的的顺序语句。可以出现在进程的任何位置,也可以有多个进程语句。wait--永远挂起waitonA,B;--A或B变化时,进程激活waituntilEnable=‘1’;--满足条件时,进程激活waitfor5ns;--过5ns后,进程激活任意组合:waitonA,BuntilEnable='1';--等待A,B变化,且Enable=‘1’时激活。waitonA,Bfor5ns;--等待A,B变化,或到达5ns时激活。waituntilEnable=‘1’for5ns;--等待Enable=‘1’时激活,或者到达5ns时激活。waitonA,BuntilEnable=‘1’for5ns;--等待A,B变化,且Enable=‘1’时激活,或者到达5ns时激活。p1:process--()begin…waitons1;…waitons2;…waitons1;…endprocessp1;进程中可以由若干等待语句。运行开始时,进程处于激活状态,从第一个顺序语句开始执行,遇到第一个等待语句是挂起。当该等待语句的条件满足时,进程再次激活,从该等待语句接着运行,直到遇到下一个等待语句再次挂起。以后每次激活后,运行到下一个等待语句挂起。如果进程执行到最后一个语句,则下一个语句是第一个语句。----子程序可以在结构体的任何位置被调用,而且可以反复调用。VHDL的子程序有两种类型:过程(PROCEDURE)函数(FUNCTION)子程序的特点:四、子程序调用语句过程(PROCEDURE)过程语句的结构:PROCEDURE过程名(形式参数1;形式参数2;…)IS[定义语句];BEGIN[顺序处理语句];END过程名;过程语句的调用格式:过程名[([形数名=]实参表达式{,[形数名=]实参表达式})];PACKAGEdata_typeISsubtypedata_elementisintegerrange0to3;typedata_arrayisarray(1to3)ofdata_element;enddata_type;usework.data_type.all;ENTITYsortisPORT(in_array:indata_array;out_array:outdata_array;ENDsort;ARCHITECTUREexmpOFsortISBEGINPROCESS(in_array)procedureswap(data:inoutdata_array;low,high:ininteger)isvariabletemp:data_element;BEGINif(data(low)data(high))thentmp:=data(low);data(low):=data(high);data(high):=temp;endif;Endswap;Variblemy_array:data_array;Beginmy_array:=in_array;Swap(my_ar
本文标题:第四章 VHDL顺序语句
链接地址:https://www.777doc.com/doc-3373296 .html