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

下载本文档

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

文档简介

1、VHDL语言的主要描述语句按照语句的执行顺序对VHD通言进行分类,包含两类语句:并行描述语句该语句的执行与书写顺序无关,总是同时被执行顺序描述语句从仿真的角度,该语句是顺序执行的进程语句(PROCESS是最典型的并行语句,一个构造体内可以有几个进程语句同时存在,而且并发执行。但是进程内部的所有语句都是顺序语句。一、顺序描述语句1. 顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的。如下分别介绍有关的顺序描述语句WAIT语句进程在执行过程中总是处于两种状态:执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进

2、程.等待语句的格式:火WAIT无限等待火WAITON敏感信号变化火WAITUNTIL条件满足火WAITFOR时间到WAITON格式:WAITON信号,信号例5-1PROCESS(a,b)BEGINy<=aANDb;ENDPROCESS;该例中的进程与下例中进程相同:例5-1PROCESSBEGINy<=aANDb;WAITONa,b;ENDPROCESS;例5-2PROCESS(a,b)BEGINy<=aANDb;WAITONa,b;ENDPROCESS;WAITUNTIL直到条件满足格式:WAITUNTIL布尔表达式当进程执行到该语句时,被挂起;若布尔表达式为真时,进程将被

3、启动.例:WAITUNTIL(x*10)<100)WAITFOR等到时间到格式:WAITFOR时间表达式当进程执行到该语句时,被挂起;等待一定的时间后,进程将被启动.例:WAITFOR20ns;WAITFOR(a*(b+c);多条件WAIT语句例:WAITONnmi,interruptUNTIL(nmi=TRUE)OR(interrupt=TRUE)FOR5us该等待有三个条件:第一,信号nmi和interrupt任何一个有一次刷新动作第二,信号nmi和interrupt任何一个为真第三,已等待5us只要一个以上的条件被满足,进程就被启动.*注意:多条件等待时,表达式的值至少应包含一个信

4、号量的值。超时等待例53【例5-3JARCHITECTUREwaitexampleOFwait.exampleISSIGNALsendB.sendA:STD_LOGICfBEGINsendA<='0»A:PROCESSBEGINWAITUNTILsendB=/rfsendA<=/rAFTER10nsi.WAITUNTILsendB=,0SsendA<5=5r0JAFTER10nsiENDPROCESSA<BsPROCESSBEGINWAITUNTILsendA=/(/t七''sendB<=r0/AFTERlOnsiWAITUNTI

5、LsendAf,sendB<=TAFTER10nsiENDPROCESSB*ENDwait-example*例54例SFARCHITECTUREwair-tinrfourOFISSIGNALtendAtbcwIB:STD-LQGIC,BEGINAPROCESSBEGINWAITUNTIL(sendB-,l/)FOR1呻|ASSERT(sendB='l)REPORT"sendBtimedoutat7V"SEVERITYEKRORj8endA<='l'AFTER10n”WAITUNTIL(BendB=U)FOR1sASSERT(sendBW)

6、REPORT"sendBthnedoutSEVERITYERRORtsem!A<=0'AFTER10ns4ENDPROCESSA:BtPROCESSBEGINWAITUNTIL(«ndA=,0,)FOR1心1ASSERT5dA='V)REPORTSendAtimedout玳'矿'SEVERITYERROR#sendB<='0FAFTER10a*WAITUNTIL(rtndA-11)FOR1网1ASSERTC«ndA-,l,>REPORT5dAoutat*ltrtSEVERITYERROft12, »

7、;endB<=,rAFTER10ENimiOCESSB,ENDwait-timeoutf断言语句(ASSERT)(主要用于仿真、调试)格式:ASSERT条件REPORT输出信息SEVERITY级别执行到断言语句时,判断条件,若条件满足就继续执行,否则输出文字串和错误级别信息例:ASSERT(tiaojian='1)REPORTsomethingwrong”3, SEVERITYERROR信号代入语句4. 格式:目的信号量<=信号量表达式例:a<=b;(注意区别小于等于)变量赋值语句格式:目的变量:=表达式例:c:=a+dIF语句三种书写格式:1) IF的门闩控制格式:

8、IF条件THEN顺序执行语句;ENDIF;例55IF(a='1)THENc<=b;ENDIF;例562) 【例】LIBRARYIEEE】VSEIEEE.STD-LOGIC-1164.ALL*ENTITYdffISPORT牝Ik,dtINSTDLOGICiqtOUTSTD-LOGIC)<ENDdfftARCHITECTURErtlOFdffISBEGINPROCESS(dk)BEGINIF(dk*EVENTANDelk=*T)THENq<=chENDIFiENDPROCESS(ENDrthIF语句的二选择控制格式:IF条件THEN顺序执行语句;ELSE顺序执行语句;EN

9、DIF;例5-7ARCHITECTURErt1OFmux2ISBEGINPROCESS(a,b,sel)BEGINIF(sel='1')THENc<=a;ELSEc<=b;ENDIF;ENDPROCESS;3) ENDrt1;IF语句的多选择控制格式:IF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句ENDIF;例如:58LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DO

10、WNTO0);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;注意:条件判断输出是布尔量。

11、5. 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_behaveOFmux

12、43ISSIGNALsel:INTEGERRANGE0TO3;BEGINnn: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译码器LIBRARYi

13、eee;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'andg

14、2b='0')thencaseindataiswhen"000"=>y<="11111110”;when"001"=>y<="11111101"when"010"=>y<="11111011"when"011"=>y<="11110111"when"100"=>y<="11101111"when"101"=>

15、;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

16、:instd_logic_vector(7downto0);y:outstd_logic_vector(2downto0);endencoder;architecturebehaveOFencoderisbeginprocess(input)begincaseinputiswhen""=>y<=111”;when""=>y<=110”;when""=>y<=101”;when""=>y<=100”;when""=>y<=011”;whe

17、n""=>y<=010”;when""=>y<=001”;when""=>y<=000"whenothers=>y<=xxx”endcase;endprocess;endbehave;表5-1优先级编码器的真值表输入输出nput(7)input(6)input(5)iiput(4)iiput(3)input(2)input(1)叩ut(0)Y2Y1Y0XXxXXxX0111XXXXXX0p1110XXXXx011101XXXX0111100XxX01111r011xX01111

18、1010X0111111001X1111111000例512LIBRARYieee;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<

19、;="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&quo

20、t;endif;endprocess;endbe_prior;LOOP语句格式一:标号:FOR循环变量IN离散范围LOOP顺序处理语句;ENDLOOP标号;例:ASUM:FORiIN1TO9LOOPsum=1+sum;ENDLOOPASUM;例513:8位奇偶校验电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpcISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDpc;ARCHITECTUREbehaveOFpcISBEGINcbc:PROCESS(a)VARIABLEtmp:STD_

21、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;例514:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpcISPORT(a:INSTD_LOGIC_VE

22、CTOR(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;6. NEXT语句在LOO晰句中用NEX讷句跳出循环格式:NEXT标号WHEN条件;NEXT句用于控制内循环的结束.例5-15:PROCESS(a,b)CONSTANTmax_lim

23、it:INTEGER:=255BEGINFORIIN0TOmax_limitLOOPIF(done(I)=TRUE)THENNEXT;ELSEdone(I):=TRUE;ENDIF;q(I)<=a(I)ANDb(I);ENDLOOP;ENDPROCESS;7. EXIT语句EXIT语句用于结束LOO晰环状态.格式: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)<=

24、3.1416/REAL(a*I);ENDIFENDLOOP;y<=q;ENDPROCESS;二、并发描述语句进程语句在一个构造体中多个PROCES裙句可以同时并行的执行,该语句有如下特点:可以和其它进程语句同时执行,并可以存取构造体和实体中所定义的信号进程中的所有语句都按照顺序执行为启动进程,在进程中必须包含一个敏感信号表或WAIT语句进程之间的通信是通过信号量来实现的并发信号代入代入语句在进程中使用是顺序语句,但是在进程外即在构造体中使用就是并发语句,相当于一个进程.例:ARCHITECTUREbehaveOFa_varISBEGINOutput<=a(I);ENDbehave;

25、可以等效于:ARCHITECTUREbehaveOFa_varISBEGINssPROCESS(a,I)BEGINOutput<=a(I);ENDPROCESSss;ENDbehave;信号代入语句的右边可以是算数表达式,也可以是逻辑表达式,还可以是关系表达式所以可以仿真加法器、乘法器、除法器、比较器和各种逻辑电路。条件信号代入条件代入语句也是并发语句,它可以将符合条件的表达式代入信号量。格式:目的信号量<云达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3ELSE表达式n;例517:四选一电路LIBRARYIEEE;USEIEEE.STD_LOGIC

26、_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"ELSE11 WHENsel="01"ELSE12 WHENsel="10"ELSE13 WHENsel="11"ENDaa;选择信号代入格式:WITH表达

27、式样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,11 WHEN1,12 WHEN2,WHEN3;sel<=0WHENa='

28、;0'ANDb='0'ELSE1 WHENa='1'ANDb='0'ELSE2 WHENa='0'ANDb='1'ELSEWHENa='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;端口映射语句格式

温馨提示

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

最新文档

评论

0/150

提交评论