硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1

上传人:新** 文档编号:569541923 上传时间:2024-07-30 格式:PPT 页数:61 大小:312KB
返回 下载 相关 举报
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1_第1页
第1页 / 共61页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1_第2页
第2页 / 共61页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1_第3页
第3页 / 共61页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1_第4页
第4页 / 共61页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1》由会员分享,可在线阅读,更多相关《硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句1(61页珍藏版)》请在金锄头文库上搜索。

1、第5章VHDLVHDL语言的主要描述语句语言的主要描述语句VHDL5(1)1 在在用用VHDLVHDL语语言言描描述述系系统统硬硬件件行行为为时时,按按语语句句执执 行行 顺顺 序序 对对 其其 进进 行行 分分 类类 , 可可 以以 分分 为为 顺顺 序序(Sequential)(Sequential)描描述述语语句句和和并并发发(Concurrent)(Concurrent)描描述述语语句句。灵灵活活运运用用这这两两类类语语句句就就可可以以正正确确地地描描述述系系统的并发行为和顺序行为。统的并发行为和顺序行为。VHDL5(1)25.1 5.1 顺序描述语句顺序描述语句 顺序语句的特点是,每

2、一条顺序语句的执行顺序是与它们顺序语句的特点是,每一条顺序语句的执行顺序是与它们的书写顺序基本一致的。顺序描述语句只能出现在进程或子程的书写顺序基本一致的。顺序描述语句只能出现在进程或子程序中,由它定义进程或子程序所执行的算法。序中,由它定义进程或子程序所执行的算法。 WAIT语句; 断言语句; 信号代入语句; 变量赋值语句; IF语句; CASE语句; LOOP语句; NEXT语句; EXIT语句; 过程调用语句; NULL语句;VHDL5(1)35.1.1 WAIT5.1.1 WAIT语句语句 进程在仿真运行中总是处于下述两种状态之一:进程在仿真运行中总是处于下述两种状态之一:执行或挂起。

3、进程状态的变化受等待语句的控制,执行或挂起。进程状态的变化受等待语句的控制,当进程执行到等待语句时,就将被挂起,并设置好当进程执行到等待语句时,就将被挂起,并设置好再次执行的条件。再次执行的条件。 WAIT WAIT 无限等待无限等待 WAIT ON WAIT ON 敏感信号量变化敏感信号量变化 WAIT UNTIL WAIT UNTIL 条件满足条件满足 WAIT FOR WAIT FOR 时间到时间到VHDL5(1)41.WAIT ON (1.WAIT ON (敏感信号等待语句)敏感信号等待语句) WAIT ON WAIT ON 语句的完整书写格式为:语句的完整书写格式为: WAIT ON

4、 WAIT ON 信号信号 ,信号,信号 ; WAIT WAIT ON ON 语语句句后后面面跟跟着着的的是是一一个个或或多多个个信信号号量量,例如:例如: WAIT ON aWAIT ON a,b b; VHDL5(1)5例例5 51 1PROCESS(a,b)BEGINyaANDb;ENDPROCESS;-PROCESSBEGINyaANDb;WAITONa,b;ENDPROCESS; 例例5 5 2 2PROCESS(a,b)BEGINyaANDb;WAITONa,b;ENDPROCESS;例例5 25 2的描述是非法的。的描述是非法的。VHDL5(1)62 2WAlTWAlT UNTI

5、L( UNTIL(条件等待语句条件等待语句) ) WAIT UNTILWAIT UNTIL语句的完整书写格式为;语句的完整书写格式为; WAIT UNTIL WAIT UNTIL 表达式;表达式; WAIT WAIT UNTILUNTIL语语句句后后面面跟跟的的是是布布尔尔表表达达式式,当当进进程程执执行行到到该该语语句句时时将将被被挂挂起起,直直到到表表达达式式返返回回一一个个“真真”值,进程才被再次启动。值,进程才被再次启动。 例如:例如: WAIT UNTIL(x * 10) 100)WAIT UNTIL(x * 10) 100); 一一般般的的,只只有有WAIT WAIT UNTILU

6、NTIL格格式式的的等等待待语语句句可可以以被被综综合器接受,其余语句格式只能在合器接受,其余语句格式只能在VHDLVHDL仿真器中使用。仿真器中使用。VHDL5(1)7LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CH2 ISPORT( A,RST1 : IN STD_LOGIC; OP1 : OUT STD_LOGIC );END CH2;ARCHITECTURE BEHAV OF CH2 ISBEGIN PROCESS

7、 BEGIN OP1=A; WAIT UNTIL RST1=1; END PROCESS;END BEHAV;VHDL5(1)83 3WAIT FOR(WAIT FOR(超时等待语句超时等待语句) ) WAIT FOR WAIT FOR 语句的完整书写格式为:语句的完整书写格式为: WAIT FOR WAIT FOR 时间表达式;时间表达式; WAIT WAIT FORFOR语语句句后后面面跟跟的的是是时时间间表表达达式式,当当进进程程执执行行到到该该语语句句时时将将被被挂挂起起,直直到到指指定定的的等等待待时时间间到到时,进程再开始执行时,进程再开始执行WAIT FORWAIT FOR语句后

8、继的语句。语句后继的语句。 例如:例如: WAIT FOR 20 nsWAIT FOR 20 ns; WAIT FOR (a * (b+c)WAIT FOR (a * (b+c); 假设假设: a: a2 2,b=50nsb=50ns,c c70ns70ns。 WAIT FOR 240nsWAIT FOR 240nsVHDL5(1)94 4多条件多条件WAITWAIT语句语句 在在前前面面已已叙叙述述的的3 3个个WAITWAIT语语句句中中,等等待待的的条条件件都都是是单单一一的的,要要么么是是信信号号量量,要要么么是是布布尔尔量量,要要么么是是时时间间量量。实实际际上上WAITWAIT语语

9、句句还可以同时使用多个等待条件。还可以同时使用多个等待条件。 WAIT WAIT ON ON nminmi, interrupt interrupt UNTIL(nmiUNTIL(nmi TRUE) TRUE) OR OR (interrupt(interruptTRUE) FOR 5sTRUE) FOR 5s; 应应该该注注意意的的是是,在在多多条条件件等等待待时时,表表达达式式的的值值至至少少应应包包含含一一个信号量的值。个信号量的值。 例如:例如:WAIT UNTIL(interruptWAIT UNTIL(interruptTRUE)OR(old_clkTRUE)OR(old_clk1

10、 1) ); VHDL5(1)105 5超时等待超时等待 往往存在这样一种情况,在你所设计的程序模往往存在这样一种情况,在你所设计的程序模块中,等待语句所等待的条件,在实际执行时不能块中,等待语句所等待的条件,在实际执行时不能保证一定会碰到。在这种情况下,等待语句通常要保证一定会碰到。在这种情况下,等待语句通常要加一项超时等待项,以防止该等待语句进入无限期加一项超时等待项,以防止该等待语句进入无限期的等待状态。但是,如果采用这种方法,应作适当的等待状态。但是,如果采用这种方法,应作适当的处理,否则就会产生错误的行为。的处理,否则就会产生错误的行为。VHDL5(1)11例例5-3 ARCHITE

11、CTURE wait_example OF wait_example IS SIGNAL sendB,sendA:STD_LOGIC; BEGIN sendA 0; A:PROCESS BEGIN WAIT UNTIL sendB 1; - - 死锁 sndA = 1AFTER 10 ns; WAIT UNTIL sendB 0; sendA = 0AFTER 10 ns; END PROCESS A; B:PROCESS BEGIN WAIT UNTIL sendA = 0; sendB = 0 AFTER 10 ns; WAIT UNTIL sendA 1; - - 死锁 sendB =

12、1 AFTER 10 ns; END PROCESS B; END wait_example;VHDL5(1)125.1.2 5.1.2 断言断言(ASSERT)(ASSERT)语句语句 ASSERTASSERT语语句句主主要要用用于于程程序序仿仿真真、调调试试中中的的人人机机会会话话,它可以给出一个文字串作警告和错误信息。它可以给出一个文字串作警告和错误信息。 ASSERTASSERT语句的书写格式为:语句的书写格式为: ASSERT ASSERT 条件条件 REPORTREPORT输出信息输出信息SEVERITYSEVERITY级别级别 ; 在在VHDLVHDL语言中错误严重程度分为语言中

13、错误严重程度分为4 4个级别:个级别: FAILUREFAILURE,ERRORERROR,WARNINGWARNING,NOTENOTE。 VHDL5(1)13 例5 - 4 ARCHITECTURE wait_timeout OF wait_example IS SIGNAL sendA,sendB:STD_LOGICI; BEGIN A:PROCESS BEGIN WAIT UNTIL(sendB = 1) FOR 1s; ASSERT(sendB = 1) REPORT ”sendB timed out at 1” SEVERITY ERROR; sendA 1 AFTER 10 ns

14、; WAIT UNTIL(sendB 0) FOR 1s; ASSERT(sendB 0) REPORT sendB timed out at 0” SEVERITY ERROR; sendA = 0AFTER 10 ns; END PROCESS A:VHDL5(1)14 B:PROCESS BEGIN WAIT UNTIL(sendA:= 0) FOR 1s; ASSERT(sendB = 0) REPORT ”sendB timed out at 0” SEVERITY ERROR; sendB = 0 AFTER 10 ns; WAIT UNTIL(sendA 1) FOR 1s; A

15、SSERT(sendA 1) REPORT ”sendA timed out at 1” SEVERITY ERROR; sendB = 1 AFTER 10 ns; END PROCESS B; END wait_timeout;VHDL5(1)155.1.35.1.3信号代入语句信号代入语句 信号代入语句的书写格式为:信号代入语句的书写格式为: 目的信号量目的信号量 信号量表达式;信号量表达式; 代入符号两边信号量的类型和位长度应该是一致的。代入符号两边信号量的类型和位长度应该是一致的。VHDL5(1)165.1.4 5.1.4 变量赋值语句变量赋值语句 变量赋值语句的书写格式为:变量赋值

16、语句的书写格式为: 目的变量目的变量 := = 表达式表达式; 但是两者的类型必须相同。但是两者的类型必须相同。 变变量量值值只只在在进进程程或或子子程程序序中中使使用用,它它无无法法传传递到进程之外。局部变量只在局部范围内有效。递到进程之外。局部变量只在局部范围内有效。 VHDL5(1)175.1.5 IF5.1.5 IF语句语句 IFIF语语句句是是根根据据所所指指定定的的条条件件来来确确定定执执行行哪哪些些语语句句的的,其其书写格式通常可以分成书写格式通常可以分成3 3种类型。种类型。 1 1IFIF语句的门闩控制语句的门闩控制 用作门闩控制的用作门闩控制的IFIF语句的书写格式为:语句

17、的书写格式为: IF IF 条件条件 THENTHEN 顺序处理语句顺序处理语句 END IFEND IF; IF(aIF(a 1 1)THEN)THEN c c b b; END IFEND IF;VHDL5(1)18例例56D触发器描述。触发器描述。 LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; ENTITY dff IS PORT(clk,d:IN STD_LOGIC; q:OUT STD_LOGIC); END dff; ARCHITECTURE rt1 OF dff IS BEGIN PROCESS(clk) BEGIN IF(clkEVENT A

18、ND clk = 1) THEN q d; END IF; END PROCESS; END rt1;VHDL5(1)19当当IFIF语句用作二选择控制时的书写格式为:语句用作二选择控制时的书写格式为: IF IF 条件条件 THENTHEN 顺序处理语句;顺序处理语句; ELSEELSE 顺序处理语句;顺序处理语句; END IFEND IF; 2 2IFIF语句的二选择控制语句的二选择控制VHDL5(1)20例例5 5 7 7 二选一电路二选一电路 ARCHITECTURE rtl 0F roux2 1S BEGIN PROCESS(a,b,sel) BEGIN IF(sel = 1)TH

19、EN c = a; ELSE c = b; END IF; END PROCESS; END rtl;VHDL5(1)213. IF3. IF语句的多选择控制语句的多选择控制 IFIF语语句句的的多多选选择择控控制制又又称称IFIF语语句句的的嵌嵌套套,在在这种情况下,它的书写格式为:这种情况下,它的书写格式为: IF IF 条件条件 THENTHEN; 顺序处理语句;顺序处理语句; ELSIF ELSIF 条件条件 THEN THEN 顺序处理语句;顺序处理语句; ELSIF ELSIF 条件条件 THENTHEN 顺序处理语句;顺序处理语句; ELSE ELSE 顺序处理语句;顺序处理语句

20、; END IFEND IF;VHDL5(1)22LIBRARYIEEE;USEIEEESTD_LOGIC_1164ALL;ENTITYmux41SPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDrnux4;ARCHITECTURErt1OFmux41SBEGINPROCESS(input,sel)BEGINIF(sel=”00”)THENy=input(0);ELSIF(sel=”01”)THENy=input(1);ELSIF(sel=”10”)THENy

21、=input(2);ELSEy=input(3);ENDIF;ENDPROCESS;ENDrtl;需要注意的是,需要注意的是,IFIF语语句的条件判断输出是布尔句的条件判断输出是布尔量,即是量,即是“真真”(TRUE)(TRUE)或或“假假”(FALSE)(FALSE)。因此在因此在IFIF语句的条件表达式中只语句的条件表达式中只能使用关系运算操作能使用关系运算操作(=(=,/=/=, ,=)=)及逻及逻辑运算操作的组合表达式辑运算操作的组合表达式。例例58四四选一电路选一电路VHDL5(1)235.1.6 CASE5.1.6 CASE语句语句 CASECASE语语句句根根据据满满足足的的条条

22、件件直直接接选选择择多多项项顺顺序序语语句句中中的的一一项执行。项执行。 CASECASE语句的书写格式如下所示:语句的书写格式如下所示: CASE CASE 表达式表达式 ISIS WHEN WHEN 选择值选择值=顺序处理语句;顺序处理语句; WHEN WHEN 选择值选择值=顺序处理语句;顺序处理语句; END CASE END CASE;VHDL5(1)24 CASECASE语句中选择值可以有四种不同的表达方式:语句中选择值可以有四种不同的表达方式:单个普通数值,单个普通数值, WHEN WHEN 值值 = = 顺序处理语句;顺序处理语句;数值选择范围,数值选择范围, WHEN WHE

23、N 值值 TO TO 值值 = = 顺序处理语句;顺序处理语句; 如,如,(2 TO 4)(2 TO 4),表示取值为表示取值为 2 2,3 3或或4 4。并列数值,并列数值, WHEN WHEN 值值| |值值|.|.|值值 = = 顺序处理语句;顺序处理语句; 如,如,3 3|5|5,表示取值为,表示取值为3 3或者或者5 5。混合方式,混合方式, WHEN OTHERS = WHEN OTHERS = 顺序处理语句。顺序处理语句。 VHDL5(1)25 使用使用CASECASE语句需注意一下几点:语句需注意一下几点:1.1.条件句中的选择值必在表达式的取值范围内。条件句中的选择值必在表达

24、式的取值范围内。2.2.除非所有条件句中的选择值能完整覆盖除非所有条件句中的选择值能完整覆盖CASECASE语语句中表达式的取值,否则最末一个条件句中的句中表达式的取值,否则最末一个条件句中的选择必须用选择必须用OTHERSOTHERS表示。关键词表示。关键词OTHERSOTHERS只能出只能出现一次,且只能作为最后一种条件取值。现一次,且只能作为最后一种条件取值。3.3.CASECASE语句中每一条件句的选择值只能出现一次,语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。不能有相同选择值的条件语句出现。4.4.CASECASE语句执行中必须选中且只能选中所列条件语句执行

25、中必须选中且只能选中所列条件语句中的一条。语句中的一条。 VHDL5(1)26LIBRARYIEEE,USEIEEESTD_LOGIC_1164ALL;ENTITYmux41SPORT(a,b,i0,i1,i2,i3:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREmux4_behaveOFmux41SSIGNALsel:INTEGERRANGE0TO3;BEGINB:PROCESS(a,b,i0,i1,i2,i3)BEGINsel0;IF(a1)THENselsel+1;ENDIF;IF(b1)THENselqqqqi3;ENDCASE;END

26、PROCESS;ENDmux4_behave; 上上例例选选择择器器的的行行为为描描述述不不仅仅可可以以用用IF语语句句,而而且且也也可可以以用用CASE语语句句。但但是是它它们们两两者者还还是是有有区区别别的的。首首先先在在IF语语句句中中,先先处处理理最最起起始始的的条条件件;如如果果不不满满足足,再再处处理理下下一一 个个 条条 件件 。 而而 在在CASE语语句句中中,没没有有值值的的顺顺序序号号,所所有有值是并行处理的。值是并行处理的。 例例5-9VHDL5(1)27例例510带有带有WHENOTHERS项的三一八译码器的行为描述的例子项的三一八译码器的行为描述的例子LIBRARYI

27、EEE;USEIEEESTD_LOGIC_1164ALL;ENTITYdecode_3to81SPORT(a,b,c,G1,G2A,G2B:INSTD_LOGIC;y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDdecode_3to8;ARCHITECTURErtlOFdecode_3to81SSIGNALindata:STD_LOGIC_VECTOR(2DOWNTOo);BEGINindatayyyyyyyyy=”XXXXXXXX”;ENDCASE;ELSEyyyyyyyyyy=”XXX”;ENDCASE;ENDPROCESS;ENDrtl; 在在例例5 51111中中

28、的的WHEN WHEN OTHERSOTHERS语语句句和和例例5 51010中中的的WHEN WHEN OTHERS OTHERS 语语句句尽尽管管最最后后都将使都将使“X X”值代入值代入y y 。但是其含义是不一样的。但是其含义是不一样的。 VHDL5(1)315 51 17 LOOP7 LOOP语句语句 LOOPLOOP语句的书写格式一般有两种:语句的书写格式一般有两种:1 1FORFOR循环变量循环变量 标号标号 :FOR FOR 循环变量循环变量 IN IN 离散范围离散范围 LOOPLOOP 顺序处理语句;顺序处理语句; END LOOPEND LOOP标号标号 ; 例如:例如:

29、ASUMASUM:FOR i IN 1 TO 9 LOOPFOR i IN 1 TO 9 LOOP sum sumi+sumi+sum END LOOP ASUM END LOOP ASUM; 也可以也可以 FOR i IN 9 DOWNTO 1 LOOPFOR i IN 9 DOWNTO 1 LOOP VHDL5(1)32P81例例513是是8位的奇偶校验电路的位的奇偶校验电路的VHDL语言描述的实例。语言描述的实例。 LIBRARY IEEE; USE IEEESTD_LOGIC_1164All; ENTITY parhy_check IS PORT(a:IN STD_LOGIC_VECT

30、OR(7 DOWNTO 0); y:OUT STD_LOGIC); END parity_check IS ARCHITECTURE n1 OF parity_check IS BEGIN PROCESS(a) VARIABLE tmp:STD_LOGIC; BEGIN tmp:=0; FOR i IN 0 TO 7 LOOP tmp:tmp XOR a(i); END LOOP; ytmp; END PROCESS; END rtl; VHDL5(1)332 2WHILEWHILE条件条件 这种这种LOOPLOOP语句的书写格式如下:语句的书写格式如下: 标号标号 :WHILE WHILE

31、条件条件 LOOPLOOP 顺序处理语句;顺序处理语句; END LOOPEND LOOP标号标号 ; 在在该该LOOPLOOP语语句句中中,如如果果条条件件为为“真真”,则则进进行行循循环;如果条件为环;如果条件为“假假”,则结束循环。,则结束循环。 例如:例如: i:i:1 1; sum:sum:0 0; sbcdsbcd:WHILE (i10) LOOPWHILE (i10) LOOP sum: sum:i+sumi+sum; i:i:i+1i+1; END LOOP END LOOP sbcdsbcd;VHDL5(1)34P83例例5_138位奇偶校验电路的行为如果用位奇偶校验电路的行

32、为如果用WHILE条件的条件的LOOP语句来描述语句来描述。LIBRARYIEEE;USEIEEESTD_LOGIC_1164ALL;ENTITYparity_checkISPORT(a:INSTD_L0GIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDparity_check;ARCHITECTUREbehavOFparity_checkISBEGINPROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:=0;i:=0;WHILE(i8)LOOPtmp:=tmpXORa(i);i:=i+1;ENDLOOP;y=tmp;ENDPROCE

33、SS;ENDbehav; 虽然FOR LOOP和WHILE LOOP语句都可以用来进行逻辑综合,但是一般都不太采用WHILE LOOP语句来进行RTL描述。VHDL5(1)35518 NEXT语句 NEXTNEXT语语句句主主要要用用在在LOOPLOOP语语句句执执行行中中进进行行有有条条件件的的或或无无条条件件的的转转向向控控制制。在在LOOPLOOP语语句句中中NEXTNEXT语语句句用用来跳出本次循环,其书写格式有:来跳出本次循环,其书写格式有: NEXT; NEXT; NEXT NEXT 标号;标号; NEXT NEXT 标号标号 WHENWHEN条件表达式条件表达式; ; NEXT

34、NEXT语句执行时将停止本次迭代,而转入下一语句执行时将停止本次迭代,而转入下一次新的迭代。次新的迭代。 VHDL5(1)36P83例例515 PROCESS(a,b) CONSTANT max_limit:INTEGER:=255; BEGIN FOR i IN 0 TO max_1imit LOOP IF(done(i)=TRUE) THEN NEXT; -结束本次迭代,转入下一次。 ELSE done(i):=TRUE; END IF; q(i)a(i)AND b(i); END LOOP; END PROCESS; VHDL5(1)37当当LOOPLOOP语句嵌套时,通常语句嵌套时,通

35、常NEXTNEXT语句应标有语句应标有“标号标号”和和“WHENWHEN条件条件”。例如,有一个。例如,有一个LOOPLOOP嵌套的程序如下所示:嵌套的程序如下所示: L1:WHILE i10 LOOPL1:WHILE i10 LOOP L2:WHILE j20 LOOP L2:WHILE j20 LOOP : NEXT NEXT LlLl WHEN i WHEN ij;j; : : END LOOP L2; END LOOP L2; END LOOP L1; END LOOP L1; 在上例中,当在上例中,当i=ji=j时,时,NEXTNEXT语句被执行,程序将从内语句被执行,程序将从内循环

36、跳出,而再从下一次外循环开始执行。循环跳出,而再从下一次外循环开始执行。 VHDL5(1)38519 EXIT语句 EXITEXIT语语句句与与NEXTNEXT语语句句具具有有十十分分相相似似的的语语句句格格式式和和跳跳转转功功能能,也也是是LOOPLOOP语语句句中中使使用用的的循循环环控控制制语语句句,与与NEXTNEXT语语句句不不同同的的是是,执执行行EXITEXIT语语句句将将结结束束循循环环状状态态,而而从从LOOPLOOP语语句句中中跳跳出出,结结束束LOOPLOOP语句的正常执行。语句的正常执行。EXITEXIT语句的书写格式有:语句的书写格式有: EXIT; EXIT; EX

37、IT LOOP EXIT LOOP标号;标号; EXIT LOOPEXIT LOOP标号标号 WHENWHEN条件表达式条件表达式; ; 执行执行EXITEXIT,程序将仅仅从当前所属的程序将仅仅从当前所属的LOOPLOOP语句中退出。语句中退出。 如果如果EXITEXIT语句位于一个内循环语句位于一个内循环LOOPLOOP语句中,即该语句中,即该LOOPLOOP语句语句嵌在任何其它的一个嵌在任何其它的一个LOOPLOOP语句中。那么执行语句中。那么执行EXITEXIT,程序仅仅退程序仅仅退出内循环,而仍然留在外循环的出内循环,而仍然留在外循环的LOOPLOOP语句中。语句中。VHDL5(1)

38、39nP84例例516 PROCESS(a) VARIABLE int_a:INTEGER; BEGIN int_a:a; FOR I IN 0 TO max_1imit LOOP IF(int_a0)THEN EXIT; ELSE int_a:=int_a - l; q(i)31416REAL(a*i); END IF; END LOOP; yq; END PROCESS; VHDL5(1)405 52 2 并发描述语句并发描述语句 在在VHDLVHDL语言中能进行并发处理的语句有:语言中能进行并发处理的语句有:o进程语句进程语句(PROCESS)(PROCESS)o并发信号代入语句并发信号

39、代入语句(Concurrent Signal Assignment)(Concurrent Signal Assignment)o条件信号代入语句条件信号代入语句(Conditional Signal Assignment)(Conditional Signal Assignment)o选择信号代入语句选择信号代入语句(Selective Signal Assignment)(Selective Signal Assignment)o并发过程调用语句并发过程调用语句(Concurrent Procedure)(Concurrent Procedure)o块语句块语句(BLOCK)(BLOCK)

40、 由由于于硬硬件件描描述述语语言言所所描描述述的的实实际际系系统统,其其许许多多操操作作是是并并发发的的,所所以以在在对对系系统统进进行行仿仿真真时时,这这些些系系统统中中的的元元件件在在定定义义的的仿仿真真时时刻刻应应该该是是并并发发工工作作的的。并并发发语语句句就就是是用用来来表表示这种并发行为的。示这种并发行为的。VHDL5(1)415.2.15.2.1进程进程(PROCESS)(PROCESS)语句语句进进程程语语句句PROCESSPROCESS是是种种并并发发处处理理语语句句,在在一一个个构构造造体体中中多多个个PROCESSPROCESS语语句句可可以以同同时时并并发发运运行行。因

41、因此此,PROCESSPROCESS语语句是句是VHDLVHDL语言中描述硬件系统并发行为的最基本的语句。语言中描述硬件系统并发行为的最基本的语句。 PROCESSPROCESS语句归纳起来有如下几个特点:语句归纳起来有如下几个特点:1.1.它它可可以以与与其其它它进进程程并并发发运运行行,并并可可存存取取构构造造体体或或实实体体号号中中所定义的信号。所定义的信号。2.2.进程结构中的所有语句都是按顺序执行的。进程结构中的所有语句都是按顺序执行的。3.3.为为启启动动进进程程,在在进进程程结结构构中中必必须须包包含含一一个个显显式式的的敏敏感感信信号号量表或者包含一个量表或者包含一个WAITW

42、AIT语句语句。4.4.进程之间的通信是通过信号量传递来实现的。进程之间的通信是通过信号量传递来实现的。 一些并发语句,可以看成是一种进程的缩写形式。一些并发语句,可以看成是一种进程的缩写形式。VHDL5(1)42522 并发信号代入语句1.1.代代入入语语句句可可以以在在进进程程内内部部使使用用,此此时时它它作作为为顺顺序序语语句句形形式式出出现。现。2.2.代代入入语语句句(并并发发信信号号代代人人语语句句)也也可可以以在在构构造造体体的的进进程程之之外外使用,此时它作为并发语句形式出现。使用,此时它作为并发语句形式出现。一个并发信号代入语句实际上可以看成是一种进程的缩写。一个并发信号代入

43、语句实际上可以看成是一种进程的缩写。 例如:例如: ARCHITECTURE ARCHITECTURE behavbehav OF OF a_vara_var IS IS BEGIN BEGIN output = a(i) output = a(i); END END behavbehav; VHDL5(1)43 可以等效于可以等效于 ARCHITECTURE ARCHITECTURE behavbehav OF OF a_vara_var IS IS BEGIN BEGIN PROCESS(aPROCESS(a,i)i) BEGIN BEGIN output = a(i) output =

44、a(i); END PROCESSEND PROCESS; END END behavbehav; 由由上上面面叙叙述述可可知知,并并发发信信号号代代入入语语句句和和进进程程语语句句在在这这种特定情况下是等效的。种特定情况下是等效的。VHDL5(1)44 并并发发信信号号代代入入语语句句在在仿仿真真时时刻刻同同时时运运行行,它它表表征征了了各各个个独独立器件的各自的独立操作。立器件的各自的独立操作。 例如:例如: a = b + ca = b + c; d = e * fd = e * f; 第第一一个个语语句句描描述述了了一一个个加加法法器器的的行行为为,而而第第二二个个语语句句描描述述了了

45、一一个个乘乘法法器器的的行行为为。在在实实际际硬硬件件系系统统中中,加加法法器器和和乘乘法法器器是是独独立立并并行行工工作作的的。现现在在第第一一个个语语句句和和第第二二个个语语句句都都是是并并发发信信号号代代入入语语句句,在在仿仿真真时时刻刻,两两个个语语句句是是并并发发处处理理的的,从从而而真真实实地地模拟了实际硬件系统中的加法器和乘法器的工作。模拟了实际硬件系统中的加法器和乘法器的工作。 在在代代入入符符号号“ ”的的右右边边可可以以用用算算术术运运算算表表达达式式,也也可可以用逻辑运算表达式,还可以用关系操作表达式来表示。以用逻辑运算表达式,还可以用关系操作表达式来表示。 VHDL5(

46、1)455.2.3 条件信号代入语句 条条件件信信号号代代入入语语句句也也是是并并发发描描述述语语句句,它它可可以以根根据据不不同同条件将不同的多个表达式之一的值代入信号量。条件将不同的多个表达式之一的值代入信号量。 其书写格式为:其书写格式为: 目的信号量目的信号量 = = 表达式表达式 A WHENA WHEN条件条件 1 ELSE 1 ELSE 表达式表达式 B WHENB WHEN条件条件 2 ELSE2 ELSE 表达式表达式 C WHENC WHEN条件条件 3 ELSE3 ELSE ELSE ELSE 表达式表达式 n n;VHDL5(1)46P87例例5-17用条件信号代入语句

47、来描述四选一逻辑电路。用条件信号代入语句来描述四选一逻辑电路。ENTITYroux41SPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4tARCHITECTURErtlroux41SSIGNALsel:STD_LOGIC_VECTOR(1DOWNTO0);BEGINsel=b&a;q=i0WHENsel=”00”ELSEi1WHENsel=”01”ELSEi2WHENsel=”10”ELSEi3WHENsel=”11”ELSEXENDrt1;VHDL5(1)471.1.IFIF只能在进程内部使用只能在进程内部使用( (因为它们是顺

48、序语句因为它们是顺序语句) ),而且与,而且与IFIF语语句相比,句相比,条件信号代入语句中的条件信号代入语句中的ELSEELSE是一定要有的是一定要有的,而,而IFIF语语句则可以有也可以没有。句则可以有也可以没有。2.2.条件信号代入语句不能进行嵌套,不能生成锁存电路。条件信号代入语句不能进行嵌套,不能生成锁存电路。3.3.用条件信号代入语句所描述的电路,与逻辑电路的工作情况用条件信号代入语句所描述的电路,与逻辑电路的工作情况比较贴近,这样,往往要求设计者具有较多的硬件电路知识,比较贴近,这样,往往要求设计者具有较多的硬件电路知识,从而使一般设计者难于掌握。从而使一般设计者难于掌握。4.4

49、.一般来说,只有当用进程语句、一般来说,只有当用进程语句、IFIF语句和语句和CASECASE语句难于描述语句难于描述时,时,才使用条件信号代入语句才使用条件信号代入语句。 条件信号代入语句与条件信号代入语句与IFIF语句的不同之处就在于:语句的不同之处就在于:VHDL5(1)48524选择信号代入语句 选选择择信信号号代代入入语语句句类类似似于于CASECASE语语句句,它它对对表表达达式式进进行行测测试试,当当表表达达式式取取值值不不同同时时将将使使不不同同的的值值代代入入目目的的信信号号量量。选选择择信信号号代代入入语语句句的的书书写写格格式如下:式如下: WITH WITH 表达式表达

50、式 SELECTSELECT 目的信号量目的信号量 = = 表达式表达式 1 WHEN 1 WHEN 条件条件1 1, 表达式表达式 2 WHEN 2 WHEN 条件条件2 2, 表达式表达式 n WHEN n WHEN 条件条件n n:VHDL5(1)49P88例例518用选择信号代入语句来描述四选一逻辑电路。用选择信号代入语句来描述四选一逻辑电路。 LIBRARYIEEE;USEIEEESTD_LDGIC_1164ALL;ENTITYmuxISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD-LOGIC);ENDmux;ARCHITECTUREbehavO

51、FmuxISSIGNALsel:INTEGER;BEGINWITHselSELECTq=i0WHEN0,-选择信号代入语句选择信号代入语句i1WHEN1,i2WHEN2,i3WHEN3,XWHENOTHERS;selqqqqq=X;ENDCASE;ENDPROCESS;ENDrt1;VHDL5(1)51525 并发过程调用语句并发过程调用语句 并并发发过过程程调调用用语语句句可可以以出出现现在在构构造造体体中中,而而且且是是一一种种可可以以在在进进程程之之外外执执行行的的过过程程调调用用语语句句。有有关关过过程程的的结结构构及及书书写写方方法法在在2 22 2节节中中已已详详述述(子子程程序序

52、),这里仅就调用时应注意的几个问题进行说明:,这里仅就调用时应注意的几个问题进行说明: 1.1.并发过程调用语句是一个完整的语句,在它的前面可以加标号。并发过程调用语句是一个完整的语句,在它的前面可以加标号。 2 2并并发发过过程程调调用用语语句句应应带带有有ININ,OUTOUT或或者者INOUTINOUT的的参参 数数,它它们们应应列列于于过过程名后跟的括号内。程名后跟的括号内。 3 3并并发发过过程程调调用用可可以以有有多多个个返返回回值值,但但这这些些返返回回值值必必须须通通过过过过程程中中所所定定 义的输出参数带回。义的输出参数带回。 在构造体中采用并发过程调用语句的实例如下所示:在

53、构造体中采用并发过程调用语句的实例如下所示: ARCHITECTURE ARCHITECTURE BEGIN BEGIN vector_to_int(z,x_flag,qvector_to_int(z,x_flag,q) ); ENDEND; VHDL5(1)52过过程程调调用用语语句句可可以以出出现现在在进进程程语语句句中中,如如果果该该进进程程的的作作用用就就是是进进行行过过程程调调用用,完完成成该该过过程程的的操操作作功功能能,那那么么两两者者是是完完全全等等效效的的。由由此此可可知知,上上例例的的并并发发过过程程调调用用语语句句和和下下面面的的过程调用进程完全等效。过程调用进程完全等效

54、。 ARCHITECTURE BEGIN PROCESS(z,q) BEGIN vector_to_int(z,x_flag,q); END PROCESS; END; VHDL5(1)53526 块语句块语句(BLOCK)(BLOCK) BLOCKBLOCK语语句句是是一一个个并并发发语语句句,而而它它所所包包含含的的一一系系列列语语句句也也是是并并发发语语句句,而而且且块块语语句句中中的的并并发发语语句句的的执执行行与与次次序序无无关关。BLOCKBLOCK语句的书写格式一般为;语句的书写格式一般为; 标号:标号:BLOCKBLOCK 接口说明;接口说明; 类属说明;类属说明; BEGIN

55、BEGIN 并发处理语句;并发处理语句; END BLOCK END BLOCK 标号名;标号名; 1 1接接口口说说明明类类似似于于实实体体的的定定义义部部分分,主主要要用用于于信信号号的的映映射射及及参参数数的的定定义义,通通常常通通过过GENERICGENERIC语语句句,GENERIC_MAPGENERIC_MAP语语句句以以及及PORTPORT语语句句和和PORT_MAPPORT_MAP语语句句引引导导,对对BLOCKBLOCK的的接接口口设设置置以以及及对对外外部部信信号号的联接加以说明。的联接加以说明。VHDL5(1)54 2类类属属说说明明语句与构造体的说明语句相同,主要是对该

56、BLOCK所要用到的客体加以说明。这些说明都是局部的,仅限与本BLOCK。这些说明有: 定义USE语句; 定义子程序说明及子程序体; 定义类型及子类型; 定义常数; 定义信号; 定义元件。 VHDL5(1)5553 其它语句和有关规定的说明其它语句和有关规定的说明5.3.1 5.3.1 命名规则和注解的标记命名规则和注解的标记 在在VHDLVHDL语言中大写字母和小写字母是没有区别的,语言中大写字母和小写字母是没有区别的,但是,用单引号括起来的字符常数和用双引号括起来的字符但是,用单引号括起来的字符常数和用双引号括起来的字符, ,其大写字母和小写字母是有区别的。例如,在其大写字母和小写字母是有

57、区别的。例如,在STD_LOGICSTD_LOGIC和和STD_LOGIC_VECTORSTD_LOGIC_VECTOR代入不定值代入不定值XX时应注意。时应注意。 SIGNAL a:STD_LOGIC; SIGNAL a:STD_LOGIC; SIGNAL b:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL b:STD_LOGIC_VECTOR(3 DOWNTO 0); a=X;-X a=X;-X用小写字母是错误的用小写字母是错误的 b=XXXX;-Xb=XXXX;-X用小写字母是错误的用小写字母是错误的 VHDL5(1)56 在在VHDLVHDL语语言言中中所所使

58、使用用的的名名字字( (名名称称) ),如如信信号号名名、实实体体名名、构造体名、变量名等在命名时应遵守如下规则:构造体名、变量名等在命名时应遵守如下规则: (1)(1)名字的最前面应该是英文字母;名字的最前面应该是英文字母; (2)(2)能使用的字符只有英文字母、数字和能使用的字符只有英文字母、数字和_ _; (3)(3)不不能能连连续续使使用用_ _符符号号,在在名名字字的的最最后后也也不不能能使使用用符符号号_ _。 例如:例如: SIGNAL a_busSIGNAL a_bus;STD_LOGIC_VECTOR(7 DOWNTO 0)STD_LOGIC_VECTOR(7 DOWNTO

59、0); SIGNAL 302_busSIGNAL 302_bus; 数字开头的名字是错误的。数字开头的名字是错误的。 SIGNAL b_busSIGNAL b_bus; 符号不能作为名称的字母符号不能作为名称的字母 SIGNAL a_ _busSIGNAL a_ _bus; _ _符号在名称中不能连着使用符号在名称中不能连着使用 SIGNAL b_bus_SIGNAL b_bus_; _ _符号不能在名称最后使用符号不能在名称最后使用VHDL5(1)57532 ATTRIBUTE(属性)描述与定义语句 VHDLVHDL语语言言有有属属性性预预定定义义功功能能,通通过过预预定定义义属属性性描描述

60、述语语句句,可可以以得得到到客客体体的的有有关关值值、功功能能、类类型型和和范范围围( (区区间间) )。预预定定义义的的属性类型有以下几种:属性类型有以下几种: 数值类;数值类; 函数类;函数类; 信号类;信号类; 数据类型类;数据类型类; 数据范围类。数据范围类。VHDL5(1)581 1数值类属性数值类属性 数数值值类类属属性性用用来来得得到到数数组组、块块或或者者一一般般数数据据的的有有关关值值。在在数值类属性中还可以再分成数值类属性中还可以再分成3 3个子类,它们是:个子类,它们是: 一般数据的数值属性;一般数据的数值属性; 数组的数值属性;数组的数值属性; 块的数值属性。块的数值属

61、性。 1) 1) 一般数据的数值属性一般数据的数值属性 一般数据的数值属性有以下一般数据的数值属性有以下4 4种:种: T TLEFT LEFT 得到数据类或子类区间的最左端的值;得到数据类或子类区间的最左端的值; T TRIGHT RIGHT 得到数据类或子类区间的最右端的值;得到数据类或子类区间的最右端的值; T THIGH HIGH 得到数据类或子类区间的高端值;得到数据类或子类区间的高端值; T TLOW LOW 得到数据类或子类区间的低端值。得到数据类或子类区间的低端值。VHDL5(1)59 TYPE number IS 0 To 9;TYPE number IS 0 To 9; i

62、:= number i:= numberLEFT LEFT i=0i=0 i:= number i:= numberRIGHT RIGHT i=9i=9 i:= number i:= numberHIGH HIGH i=9i=9 i:= number i:= numberLOW LOW i=0i=0 变变量量i i的的数数据据类类型型应应与与赋赋值值的的区区间间的的数数据据类类型型相相同同。例例如如,上例的上例的numbernumber是正整数,那么是正整数,那么i i也应该是正整数。也应该是正整数。VHDL5(1)60 数值类属性不光适用于数字类型,而且该属性还可以适用于任何标量类型。用于枚

63、举类型的情况如例523所示。 例例523 ARCHITECTURE timel OF time IS TYPE tim IS(sec,min,hous,day,month,year); SUBTYPE reverse_tim IS tim RANGE month DOWNTO min: SIGNAL timl,tim2,tim3,tim4,tim5,tim6,tim7,tim8:TIME BEGIN timl=timLEFT: 得到sec tim2=timRIGHT: 得到year tim3=timHIGH: 得到year tim4=timLOW: 得到sec tim5=reverse_timLEFT: 得到month tim6=reverse_timRIGHT: 得到min tim7=reverse_timHIGH; 得到month tim8=reverse_timLOW 得到min END tiVHDL5(1)61

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号