VHDL语言的主要描述语句_第1页
VHDL语言的主要描述语句_第2页
VHDL语言的主要描述语句_第3页
VHDL语言的主要描述语句_第4页
VHDL语言的主要描述语句_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...VHDL语言的主要描述语句按照语句的执行顺序对VHDL语言进展分类,包含两类语句:并行描述语句该语句的执行与书写顺序无关,总是同时被执行顺序描述语句从仿真的角度,该语句是顺序执行的进程语句〔PROCESS〕是最典型的并行语句,一个构造体内可以有几个进程语句同时存在,而且并发执行。但是进程内部的所有语句都是顺序语句。顺序描述语句顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的。如下分别介绍有关的顺序描述语句.WAIT语句进程在执行过程中总是处于两种状态:执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程.等待语句的格式:*WAIT无限等待WAITON敏感信号变化WAITUNTIL条件满足WAITFOR时间到〔1〕WAITON格式:WAITON信号[,信号]例5-1PROCESS(a,b)BEGINy<=aANDb;ENDPROCESS;该例中的进程与下例中进程一样:例5-1PROCESSBEGINy<=aANDb;WAITONa,b;ENDPROCESS;例5-2PROCESS(a,b)BEGINy<=aANDb;WAITONa,b;ENDPROCESS;〔2〕WAITUNTIL直到条件满足格式:WAITUNTIL布尔表达式当进程执行到该语句时,被挂起;假设布尔表达式为真时,进程将被启动.例:WAITUNTIL((x*10)<100)〔3〕WAITFOR等到时间到格式:WAITFOR时间表达式当进程执行到该语句时,被挂起;等待一定的时间后,进程将被启动.例:WAITFOR20ns;WAITFOR〔a*〔b+c〕;〔4〕多条件WAIT语句例:WAITONnmi,interruptUNTIL((nmi=TRUE)OR(interrupt=TRUE))FOR5us该等待有三个条件:第一,信号nmi和interrupt任何一个有一次刷新动作第二,信号nmi和interrupt任何一个为真第三,已等待5us只要一个以上的条件被满足,进程就被启动.*注意:多条件等待时,表达式的值至少应包含一个信号量的值。(5)超时等待例5-3例5-4断言语句(ASSERT)〔主要用于仿真、调试〕格式:ASSERT条件[REPORT输出信息][SEVERITY级别]执行到断言语句时,判断条件,假设条件满足就继续执行,否则输出文字串和错误级别信息.例:ASSERT(tiaojian=’1’)REPORT“somethingwrong〞SEVERITYERROR;信号代入语句格式:目的信号量<=信号量表达式例:a<=b;〔注意区别小于等于〕变量赋值语句格式:目的变量:=表达式例:c:=a+dIF语句三种书写格式:1)IF的门闩控制格式:IF条件THEN顺序执行语句;ENDIF;例5-5IF(a=’1’)THENc<=b;ENDIF;例5-6IF语句的二选择控制格式:IF条件THEN顺序执行语句;ELSE顺序执行语句;ENDIF;例5-7ARCHITECTURErt1OFmux2ISBEGINPROCESS(a,b,sel)BEGIN IF(sel=’1’c<=a;ELSEc<=b;ENDIF;ENDPROCESS;ENDrt1;3〕IF语句的多项选择择控制格式:IF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句::ELSIF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句ENDIF;例如:5-8LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);q:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErt1OFmux4ISBEGINnn:PROCESS(input,sel)BEGINIF(sel='00')THENq<=input(0);ELSIF(sel='01')THENq<=input(1);ELSIF(sel='10')THENq<=input(2);ELSEq<=input(3);ENDIF;ENDPROCESSnn;ENDrt1;注意:条件判断输出是布尔量。CASE语句常用来描述总线、编码和译码的行为。格式:CASE表达式ISWHEN条件表达式=>顺序处理语句ENDCASE;其中WHEN的条件表达式可以有4种形式:WHEN值=>顺序处理语句WHEN值|值|值|…|值=>顺序处理语句WHEN值TO值=>顺序处理语句WHENOTHERS=>顺序处理语句例:5-9LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux43ISPORT(a,b,i0,i1,i2,i3:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux43;ARCHITECTUREmux4_behaveOFmux43ISSIGNALsel:INTEGERBEGINnn:PROCESS(a,b,i0,i1,i2,i3)BEGINsel<=0;IF(a='1')THENsel<=sel+1;ENDIF;IF(b='1')THENsel<=sel+2;ENDIF;CASEselISWHEN0=>q<=i0;WHEN1=>q<=i1;WHEN2=>q<=i2;WHEN3=>q<=i3;ENDCASE;ENDPROCESSnn;ENDmux4_behave;例5-103-8译码器LIBRARYieee;USEieee.std_logic_1164.all;entitydecoder38isport(a,b,c,g1,g2a,g2b:instd_logic;y:outstd_logic_vector(7downto0));enddecoder38;architecturebehave38OFdecoder38issignalindata:std_logic_vector(2downto0);beginindata<=c&b&a;process(indata,g1,g2a,g2b)beginif(g1='1'andg2a='0'andg2b='0')thencaseindataiswhen"000"=>y<="11111110";when"001"=>y<="11111101";when"010"=>y<="11111011";when"011"=>y<="11110111";when"100"=>y<="11101111";when"101"=>y<="11011111";when"110"=>y<="10111111";when"111"=>y<="01111111";whenothers=>y<="XXXXXXXX";endcase;elsey<="11111111";endif;endprocess;endbehave38;例5-11LIBRARYieee;USEieee.std_logic_1164.all;entityencoderisport(input:instd_logic_vector(7downto0);y:outstd_logic_vector(2downto0));endencoder;architecturebehaveOFencoderisbeginprocess(input)begincaseinputiswhen〞01111111”=>y<=“111when〞10111111”=>y<=“110when〞11011111”=>y<=“101when〞11101111”=>y<=“100when〞11110111”=>y<=“011when〞11111011”=>y<=“010when〞11111101”=>y<=“001when〞11111110”=>y<=“000whenothers=>y<=“xxx〞;endcase;endprocess;endbehave;表5-1优先级编码器的真值表输入输出input(7)input(6)input(5)input(4)input(3)input(2)input(1)input(0)Y2Y1Y0XXxXXxX0111XXXXXX01110XXXXx011101XXXX0111100XxX01111011xX011111010X0111111001X1111111000例5-12LIBRARYieee;USEieee.std_logic_1164.all;entitypriorisport(input:instd_logic_vector(7downto0);y:outstd_logic_vector(2downto0));endprior;architecturebe_priorOFpriorisbeginprocess(input)beginif(input(0)='0')theny<="111";elsif(input(1)='0')theny<="110";elsif(input(2)='0')theny<="101";elsif(input(3)='0')theny<="100";elsif(input(4)='0')theny<="011";elsif(input(5)='0')theny<="010";elsif(input(6)='0')theny<="001";elsey<="000";endif;endprocess;endbe_prior;7.LOOP语句格式一:[标号]:FOR循环变量IN离散范围LOOP顺序处理语句;ENDLOOP[标号];例:ASUM:FORiIN1TO9LOOPsum=1+sum;ENDLOOPASUM;例5-13:8位奇偶校验电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpcISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDpc;ARCHITECTUREbehaveOFpcISBEGINcbc:PROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:='0';FORiIN0TO7LOOPtmp:=tmpXORa(i);ENDLOOP;y<=tmp;ENDPROCESScbc;ENDbehave;格式二:[标号]:WHILE条件LOOP顺序处理语句;ENDLOOP[标号];在该语句中,如果条件为真,则进展循环,否则完毕循环.例:I:=1;sum:=0abcd:WHILE(I<10)LOOPsum:=I+sum;I:=I+1;ENDLOOPabcd;例5-14:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpcISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDpc;ARCHITECTUREbehaveOFpcISBEGINcbc:PROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:='0';i:=0;WHILE(i<8)LOOPtmp:=tmpXORa(i);i=i+1;ENDLOOP;y<=tmp;ENDPROCESScbc;ENDbehave;8.NEXT语句在LOOP语句中用NEXT语句跳出循环.格式:NEXT[标号][WHEN条件];NEXT语句用于控制内循环的完毕.例5-15:PROCESS(a,b)CONSTANTmax_limit:INTEGER:=255BEGINFORIIN0TOmax_limitLOOPIF(done(I)=TRUE)THENNEXT;ELSEdone(I):=TRUE;ENDIF;q(I)<=a(I)ANDb(I);ENDLOOP;ENDPROCESS;9.EXIT语句EXIT语句用于完毕LOOP循环状态.格式:EXIT[标号][WHEN条件]例5-16:PROCESS(a)VARIABLEint_a:INTEGER;BEGINint_a:=aFORI=0IN0TOmax_limitLOOPIF(int_a<=0)THENEXIT;ELSEint_a:=int_a-1;q(I)<=3.1416/REAL(a*I);ENDIFENDLOOP;y<=q;ENDPROCESS;并发描述语句进程语句在一个构造体中多个PROCESS语句可以同时并行的执行,该语句有如下特点:可以和其它进程语句同时执行,并可以存取构造体和实体中所定义的信号进程中的所有语句都按照顺序执行为启动进程,在进程中必须包含一个敏感信号表或WAIT语句进程之间的通信是通过信号量来实现的并发信号代入代入语句在进程中使用是顺序语句,但是在进程外即在构造体中使用就是并发语句,相当于一个进程.例:ARCHITECTUREbehaveOFa_varISBEGINOutput<=a(I);ENDbehave;可以等效于:ARCHITECTUREbehaveOFa_varISBEGINssPROCESS(a,I)BEGINOutput<=a(I);ENDPROCESSss;ENDbehave;信号代入语句的右边可以是算数表达式,也可以是逻辑表达式,还可以是关系表达式,所以可以仿真加法器、乘法器、除法器、比拟器和各种逻辑电路。条件信号代入条件代入语句也是并发语句,它可以将符合条件的表达式代入信号量。格式:目的信号量<=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3:ELSE表达式n;例5-17:四选一电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux44ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux44;ARCHITECTUREaaOFmux44ISSIGNALsel:STD_LOGIC_VECTOR(1DOWNTO0);BEGINsel<=b&a;q<=i0WHENsel="00"ELSEi1WHENsel="01"ELSEi2WHENsel="10"ELSEi3WHENsel="11";ENDaa;选择信号代入格式:WITH表达式样SELECT目的信号量<=表达式1WHEN条件1表达式2WHEN条件2:表达式nWHEN条件n;该语句很象CASE语句.例5-18:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux45ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux45;ARCHITECTUREbbOFmux45ISSIGNALsel:INTEGERrange0to3;BEGINWITHselSELECTq<=i0WHEN0,i1WHEN1,i2WHEN2,i3WHEN3;sel<=0WHENa='0'ANDb='0'ELSE1WHENa='1'ANDb='0'ELSE2WHENa='0'ANDb='1'ELSE3WHENa='1'ANDb='1';ENDbb;并发过程调用语句过程调用语句可以并发执行,但要注意如下问题:并发过程调用是一个完整的语句,在它之前可以加标号并发过程调用语句应带有IN,OUT或INOUT的参数,他们应该列在过程名后的括号内并发过程调用可以有多个返回值例:ARCHITECTURE….BEGINvector_to_int(z,x_flag,q);:END;等同于:ARCHITECTURE….BEGINPROCESS(z,q)BEGINvector_to_int(z,x_flag,q);:ENDPROCESS;END;Block语句通用模块调用语句ComponentCOMPONENT元件名PORT说明;ENDCOMPONENT;8.端口映射语句格式:标号名:元件名PORTMAP(信号,…);9.参数传递语句LIBRARYIEEE;USEIEEE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论