版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 VHDLVHDL语言的描述语句主要用来描述系统的硬件语言的描述语句主要用来描述系统的硬件结构、行为功能及信号之间的逻辑关系。分为顺序结构、行为功能及信号之间的逻辑关系。分为顺序语句和并行语句两大类。语句和并行语句两大类。 顺序语句是按照语句书写的前后顺序自上而下、顺序语句是按照语句书写的前后顺序自上而下、一条接一条地按顺序执行,用来定义进程、过程和一条接一条地按顺序执行,用来定义进程、过程和函数的行为。函数的行为。 并行语句又称并发语句,出现在结构体中,各并行语句又称并发语句,出现在结构体中,各语句并行(同步)执行,与书写的顺序无关。语句并行(同步)执行,与书写的顺序无关。 有些语句既可作
2、为并行语句又可作为顺序语句,有些语句既可作为并行语句又可作为顺序语句,如赋值语句、过程调用语句和断言语句。如赋值语句、过程调用语句和断言语句。 2VHDL有如下六类基本顺序语句:有如下六类基本顺序语句:信号赋值语句信号赋值语句变量赋值语句变量赋值语句1、赋值语句、赋值语句2、流程控制语句、流程控制语句3、等待语句、等待语句4、子程序调用语句、子程序调用语句5、返回语句、返回语句6、空操作语句、空操作语句IF语句语句CASE语句语句LOOP语句语句NEXT语句语句EXIT语句语句RETURN语句语句NULL语句语句WAIT语句语句过程调用过程调用函数调用函数调用3 赋值语句的功能是将一个值或一个
3、表达式的运赋值语句的功能是将一个值或一个表达式的运算结果传递给某一数据对象,如信号、变量或由它算结果传递给某一数据对象,如信号、变量或由它们组成的数组。们组成的数组。 通过赋值语句,可以实现设计实体内部的数据通过赋值语句,可以实现设计实体内部的数据传送,以及端口外部数据的读写。传送,以及端口外部数据的读写。 赋值语句由赋值源、赋值目标和赋值符构成。赋值语句由赋值源、赋值目标和赋值符构成。 要求赋值源和赋值目标的数据类型必须相同。要求赋值源和赋值目标的数据类型必须相同。 根据赋值对象(赋值目标)的不同,赋值语句根据赋值对象(赋值目标)的不同,赋值语句可分为信号赋值和变量赋值两种。可分为信号赋值和
4、变量赋值两种。 1 1. 赋值语句赋值语句 4 信号赋值具有延时性、全局性,赋值符用信号赋值具有延时性、全局性,赋值符用“=”表示。表示。 (1 1)信号赋值语句信号赋值语句 格式:格式: 目标信号名目标信号名= 赋值源;赋值源; 该语句是将赋值源的当前值赋给目标信号。要该语句是将赋值源的当前值赋给目标信号。要求赋值号两边信号量的类型和长度应该一致。求赋值号两边信号量的类型和长度应该一致。 例如:例如: Y Y =11; X X = Y Y; A A = B B ANDAND C C;- - 字符赋值,信号字符赋值,信号Y Y被赋值为被赋值为1 1- - 信号赋值,将信号信号赋值,将信号Y Y
5、的当前值赋给目标信号的当前值赋给目标信号X X- - 表达式赋值,将表达式赋值,将B B和和C C的与逻辑赋给目标信号的与逻辑赋给目标信号A A5 对于数组赋值,可采用下列格式:对于数组赋值,可采用下列格式: (1 1)信号赋值语句信号赋值语句 SIGNALSIGNAL x x,y:y: STD_LOGIC_VECTOR (STD_LOGIC_VECTOR ( 0 0 TOTO 3 3 ) ); x x = “1011”“1011”; y y ( ( 0 0 TOTO 1 1 ) ) = “01”“01”; y y ( ( 2 2 TOTO 3 3 ) ) = x x ( ( 1 1 TOTO
6、 2 2 ) ); -整体赋值,数组整体赋值,数组“1011”1011”赋值赋值x x -部分赋值部分赋值, ,“01”01”赋值赋值y y的部分位的部分位 - -位置关联赋值位置关联赋值,x,x的部分的部分位赋值位赋值y y的部分位的部分位 6 变量赋值具有即时性、局部性,并且变量赋值变量赋值具有即时性、局部性,并且变量赋值只限定在进程和子程序中,赋值符用只限定在进程和子程序中,赋值符用“:=”:=”表示。表示。 (2 2)变量赋值语句变量赋值语句 格式:格式: 目标变量名目标变量名: := 赋值源;赋值源; 该语句是将赋值源的当前值赋给目标变量。要该语句是将赋值源的当前值赋给目标变量。要求
7、赋值号两边变量的类型和长度应该一致。求赋值号两边变量的类型和长度应该一致。 例如:例如: A A : := 5.05.0; Y Y : :=00; X X := Y Y;-将数值将数值5.05.0赋值给变量赋值给变量A A -变量变量Y Y被赋值为被赋值为00 -将变量将变量Y Y的当前值赋给目标变量的当前值赋给目标变量X X 7 对于数组赋值,可采用下列格式:对于数组赋值,可采用下列格式: (2 2)变量赋值语句变量赋值语句 VARIBLEVARIBLE x x,y:y: STD_LOGIC_VECTOR (STD_LOGIC_VECTOR ( 0 0 TOTO 3 3 ) ); x x :
8、 := “1011”“1011”; y y ( ( 0 0 TOTO 1 1 ) :) := “10”“10”; y y ( ( 2 2 TOTO 3 3 ) ) : := x x ( ( 1 1 TOTO 2 2 ) ); -整体赋值,数组整体赋值,数组“1011”1011”赋值赋值x x -部分赋值部分赋值, ,“10”10”赋值赋值y y的部分位的部分位 - -位置关联赋值位置关联赋值,x,x的部分的部分位赋值位赋值y y的部分位的部分位 8A 变量的说明和赋值限定在顺序区域内,即只能变量的说明和赋值限定在顺序区域内,即只能在进程或子程序中使用,它无法传递到进程之外。在进程或子程序中使用
9、,它无法传递到进程之外。B 信号赋值可以在顺序区域内作顺序语句,也可以在结信号赋值可以在顺序区域内作顺序语句,也可以在结构体中当作并行语句使用。构体中当作并行语句使用。变量赋值语句与信号赋值语句区别变量赋值语句与信号赋值语句区别9 流程控制语句通过条件控制来决定是否执行一流程控制语句通过条件控制来决定是否执行一条或几条语句,或重复执行一条或几条语句,或跳条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。过一条或几条语句。 2 2. 流程控制语句流程控制语句 流程控制语句共有五种:流程控制语句共有五种: IFIF语句语句 CASECASE语句语句 LOOPLOOP语句语句 NEXTN
10、EXT语句语句 EXITEXIT语句语句 10 IFIF语句是一种条件语句,在语句是一种条件语句,在IFIF语句中至少应有语句中至少应有一个条件句,该条件句必须由一个条件句,该条件句必须由BOOLEANBOOLEAN表达式构成。表达式构成。 IFIF语句依据条件产生的判断结果语句依据条件产生的判断结果TRUETRUE或或FALSEFALSE,有选择地去执行指定的语句。有选择地去执行指定的语句。 利用利用IFIF语句可以实现两个或两个以上的条件分语句可以实现两个或两个以上的条件分支判断。其格式有三种:支判断。其格式有三种: (1 1)IFIF语句语句 单选择控制单选择控制 二选择控制二选择控制
11、多选择控制多选择控制 11 IFIF语句的单选择控制语句的单选择控制 格式:格式: IF 条件句条件句 THEN 顺序语句;顺序语句; END IF; 若条件句的逻辑值为真,则执行若条件句的逻辑值为真,则执行THENTHEN后面的顺后面的顺序语句,否则结束该条件的执行。序语句,否则结束该条件的执行。 例如:例如:IFIF (x x = 11) THENTHEN A A = B B; END IFEND IF; 当条件当条件x x =1 1成立时,信号成立时,信号B B的值赋给信号的值赋给信号A A;否则,不执行否则,不执行A A = B B语句。语句。 12 IFIF语句的二选择控制语句的二选
12、择控制 格式:格式: IF 条件句条件句 THEN 顺序语句;顺序语句; ELSE 顺序语句;顺序语句; END IF; 若条件句的逻辑值为真,则执行若条件句的逻辑值为真,则执行THENTHEN后面的顺后面的顺序语句,否则执行序语句,否则执行ELSEELSE后面的顺序语句。后面的顺序语句。 13 【例例6.16.1】用用IFIF语句描述二选一数据选择器。语句描述二选一数据选择器。 设数据输入信号为设数据输入信号为d1d1和和d0d0,选择控制信号为,选择控制信号为s s,数据输出信号为数据输出信号为y y。 ARCHITECTUREARCHITECTURE example1 example1
13、OFOF mux2 mux2 ISIS BEGINBEGIN PROCESSPROCESS(d1, d0, sd1, d0, s) BEGINBEGIN IFIF ( ( s s =0) 0) THENTHEN y y = d0d0; ELSEELSE y y = d1d1; END IFEND IF; END PROCESSEND PROCESS; END END example1 example1;14 IFIF语句的多选择控制语句的多选择控制 格式:格式: IF 条件句条件句 THEN 顺序语句;顺序语句; ELSIF 条件句条件句 THEN 顺序语句;顺序语句; END IF; 当满足
14、多个条件之一时,执行该条件当满足多个条件之一时,执行该条件THENTHEN后面后面的顺序语句;如果所设条件都不满足,则执行的顺序语句;如果所设条件都不满足,则执行ELSEELSE后面的顺序语句。后面的顺序语句。 15 【例例6.26.2】用用IFIF语句描述四选一数据选择器。语句描述四选一数据选择器。 设数据输入信号为设数据输入信号为d3d3、d2d2、d1d1、d0d0,选择控制,选择控制信号为信号为s=s1, s0s=s1, s0 ,数据输出信号为,数据输出信号为y y。 ARCHITECTUREARCHITECTURE example2 example2 OFOF mux4 mux4 I
15、SIS BEGINBEGIN PROCESSPROCESS(d3, d2, d1, d0, sd3, d2, d1, d0, s ) BEGINBEGIN IFIF ( ( s s =“00”) “00”) THENTHEN y y = d0d0; ELSIFELSIF ( ( s s =“01”) “01”) THENTHEN y y = d1d1; ELSIF ELSIF ( ( s s =“10”) “10”) THENTHEN y y = d2d2; ELSE ELSE y y 顺序语句;顺序语句; WHEN 选择值选择值 = 顺序语句;顺序语句; WHEN OTHERS = 顺序语句
16、;顺序语句; END CASE; 说明:先计算表达式的值,然后根据条件句中的选说明:先计算表达式的值,然后根据条件句中的选择值执行相对应的顺序语句。择值执行相对应的顺序语句。 注意:条件句中的注意:条件句中的“=”不是操作符,它相当于不是操作符,它相当于THENTHEN作用。作用。 17 表达式可以是一个整数类型或枚举类型的值,表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。也可以是由这些数据类型的值构成的数组。 (2 2)CASECASE语句语句 选择值可以有四种不同的表达方式:选择值可以有四种不同的表达方式: 单个普通数值,如:单个普通数值,如:5 5; 数值
17、选择范围,如:(数值选择范围,如:(1 TO 3)1 TO 3); 并列值,如:并列值,如:4 4 | 6 6,表示取值为,表示取值为4 4或或6 6; 混合方式,即以上三种方式的混合。混合方式,即以上三种方式的混合。18 使用使用CASECASE语句时,应注意以下几点:语句时,应注意以下几点: (2 2)CASECASE语句语句 选择值必须在表达式的取值范围内;选择值必须在表达式的取值范围内; CASECASE语句中至少要包含一个语句中至少要包含一个WHENWHEN语句;语句; 每个选择值只能出现一次,不能在其他每个选择值只能出现一次,不能在其他WHENWHEN语句中重复出现;语句中重复出现
18、; 除非所有选择值能完全覆盖除非所有选择值能完全覆盖CASECASE语句中的表语句中的表达式的取值,否则最后一个条件句的选择值达式的取值,否则最后一个条件句的选择值必须用必须用“OTHERS”OTHERS”表示。表示。 选择值可以颠倒次序选择值可以颠倒次序, ,但但OTHERSOTHERS必须放在最后必须放在最后; ; “=”不是操作符,相当于不是操作符,相当于THENTHEN语句的作用。语句的作用。 19 【例例6.36.3】用用CASECASE语句描述四选一数据选择器。语句描述四选一数据选择器。 ARCHITECTUREARCHITECTURE example3 example3 OFOF
19、 mux4 mux4 ISIS SIGNALSIGNAL s: STD_LOGIC_VECTOR s: STD_LOGIC_VECTOR(1 1 DOWNTODOWNTO 0 0) BEGINBEGIN s sy yy yy yy yy y=XX; END CASEEND CASE; END PROCESSEND PROCESS; END END example3 example3;20 LOOP LOOP语句是一种循环语句,它可以使所包含的语句是一种循环语句,它可以使所包含的一组顺序语句被循环执行,其执行的次数由设定的一组顺序语句被循环执行,其执行的次数由设定的循环参数决定。循环参数决定。
20、(3 3)LOOPLOOP语句语句 LOOPLOOP语句有三种格式:语句有三种格式: FOR_LOOPFOR_LOOP语句语句 WHILE_LOOPWHILE_LOOP语句语句 单个单个LOOPLOOP语句语句21 FOR_LOOP FOR_LOOP语句主要用于循环次数已知的循环程序设计。语句主要用于循环次数已知的循环程序设计。可分为递增方式和递减方式。可分为递增方式和递减方式。 FOR_LOOPFOR_LOOP语句语句 循环标号循环标号: FOR 循环变量循环变量 IN 初值初值 TO 终值终值 LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号; 递增格式:递增格式: 递减
21、格式:递减格式:循环标号循环标号: FOR 循环变量循环变量 IN 初值初值 DOWNTO 终值终值 LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号; 22 说明:循环从循环变量的说明:循环从循环变量的“初值初值”开始,到开始,到“终值终值”结束,每执行一次循环体中的顺序语句后,结束,每执行一次循环体中的顺序语句后,循环变量的值递增或递减循环变量的值递增或递减1 1。 FOR_LOOPFOR_LOOP语句语句 循环标号为任选项,循环标号为任选项,用来给循环语句定位。用来给循环语句定位。 循环变量的初值和终值决定了循环次数(取整循环变量的初值和终值决定了循环次数(取整数)。数
22、)。 循环次数:循环次数: 循环次数循环次数 = | |终值终值- -初值初值|+1|+1 23 【例例6.46.4】用用FOR_LOOPFOR_LOOP语句描述八位奇偶校验器。语句描述八位奇偶校验器。 输入信号输入信号X X是一个长度为是一个长度为8 8位的标准逻辑矢量。位的标准逻辑矢量。当当X X中中1 1的个数为奇数时,输出的个数为奇数时,输出Y=1Y=1,否则,否则,Y=0Y=0。 算法:用算法:用FOR_LOOPFOR_LOOP语句对语句对X X的值逐位进行异或的值逐位进行异或运算。运算。 循环次数:由循环变量循环次数:由循环变量n n控制,记录异或运算控制,记录异或运算的次数。的次
23、数。 循环变量的初值为循环变量的初值为0 0,终值为,终值为7 7。 24 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY loop1 loop1 ISIS PORTPORT(X: X: ININ STD_LOGIC_VECTOR STD_LOGIC_VECTOR(7 7 DOWNTODOWNTO 0 0);); Y: Y: OUTOUT STD_LOGIC STD_LOGIC);); ENDEND loop1 loop1; ARCHITECTUREAR
24、CHITECTURE example4 example4 OFOF loop1 loop1 ISIS BEGINBEGIN PROCESSPROCESS ( ( X X ) ) VARIABLEVARIABLE temp: STD_LOGIC temp: STD_LOGIC; BEGINBEGIN temp temp :=00; FORFOR n n ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP temp temp := temp temp XORXOR X( X( n n ) ); END LOOPEND LOOP; Y Y = temptemp; END PROCE
25、SSEND PROCESS; ENDEND example4 example4;25 WHILE_LOOP WHILE_LOOP语句是一种条件循环语句,用于循语句是一种条件循环语句,用于循环次数未知的循环程序设计。环次数未知的循环程序设计。 WHILE_LOOPWHILE_LOOP语句语句 循环标号循环标号: : WHILE 循环控制条件循环控制条件 LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号 ; 格式:格式:说明:说明:若循环控制条件为若循环控制条件为“真真”, ,则进行循环执行则进行循环执行顺序语句;顺序语句; 若循环控制条件为若循环控制条件为“假假”,则结束循环。
26、,则结束循环。26 【例例6.56.5】用用WHILE_LOOPWHILE_LOOP语句描述八位奇偶校验器。语句描述八位奇偶校验器。 ARCHITECTUREARCHITECTURE example5 example5 OFOF loop2 loop2 ISIS BEGINBEGIN PROCESS PROCESS ( ( X X ) ) VARIABLEVARIABLE temp: STD_LOGIC temp: STD_LOGIC; VARIABLEVARIABLE n: INTEGER n: INTEGER; BEGINBEGIN temp temp :=00; n n := 0 0;
27、WHILEWHILE n n 8 8 LOOPLOOP temp temp := temp temp XORXOR X( X( n n ) ); n n := n+1n+1; END LOOPEND LOOP; Y Y1010; END LOOPEND LOOP L2 L2;- 控制语句,当控制语句,当A A大大 于于1010时,跳出循环时,跳出循环 28 NEXT NEXT语句是一种循环控制语句,通常嵌套在语句是一种循环控制语句,通常嵌套在LOOPLOOP语句中使用,用于进行有条件或无条件的控制语句中使用,用于进行有条件或无条件的控制执行程序的转向。执行程序的转向。 (4 4)NEXTNEX
28、T语句语句 NEXT 循环标号循环标号 WHEN 条件表达式条件表达式 ; 格式:格式:29 根据可选项,根据可选项,NEXTNEXT语句有三种格式:语句有三种格式: (4 4)NEXTNEXT语句语句 格式格式1 1: NEXT 功能:功能:无条件结束本次循环,无条件结束本次循环,跳回到循环体的开始位置,跳回到循环体的开始位置,执行下一次循环。执行下一次循环。 格式格式2 2: NEXT 循环标号循环标号 功能:功能:无条件结束本次循环,无条件结束本次循环,从循环标号规定的位置,从循环标号规定的位置,执行下一次循环。执行下一次循环。 格式格式3 3: NEXT WHEN 条件表达式条件表达式
29、 功能:功能:有条件结束本次循环,有条件结束本次循环,当条件表达式满足时,结当条件表达式满足时,结束本次循环,否则继续循环。束本次循环,否则继续循环。30 【例例6.66.6】用用NEXT_WHENNEXT_WHEN语句实现单循环。语句实现单循环。 ARCHITECTUREARCHITECTURE example6 example6 OFOF NEXT_WHEN1 NEXT_WHEN1 ISIS BEGINBEGIN PROCESS PROCESS ( ( s s ) ) VARIABLE VARIABLE i: INTEGER i: INTEGER; BEGINBEGIN L1: L1: F
30、ORFOR i i ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP y( y( i i ) ) =00; NEXTNEXT WHENWHEN s( s( i i ) ) =11; y(y( i i ) ) =11; END LOOPEND LOOP L1 L1; END PROCESSEND PROCESS; ENDEND example6 example6;- - 若若s(s( i i )=1)=1成立,成立, 终止本次循环终止本次循环, ,返回到返回到L1L1 否则否则, ,继续本次循环。继续本次循环。 - - 返回到返回到L1L1 31 【例例6.76.7】试用多重
31、循环实现四组八位数据的奇校验。试用多重循环实现四组八位数据的奇校验。 LIBRARYLIBRARY IEEE IEEE; USE USE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY NEXT_WHEN2 NEXT_WHEN2 ISIS PORTPORT ( ( d: d: ININ STD_LOGIC_VECTOR ( STD_LOGIC_VECTOR ( 0 0 TOTO 31) 31); y: y: OUTOUT STD_LOGIC_VECTOR ( STD_LOGIC_VECTOR ( 0 0 TOTO 3
32、3 ) ) ) ); ENDEND NEXT_WHEN2 NEXT_WHEN2; ARCHITECTUREARCHITECTURE example7 example7 OFOF NEXT_WHEN2 NEXT_WHEN2 ISIS BEGINBEGIN PROCESS PROCESS ( ( d d ) ) VARIABLE VARIABLE i,k,j: INTEGER i,k,j: INTEGER; VARIABLE VARIABLE tmp: STD_LOGIC tmp: STD_LOGIC; 四组八位数据由四组八位数据由d0.31d0.31输入,内循环完成各组数据输入,内循环完成各组数
33、据的奇校验,外循环确定校验的组数,校验结果存放在输出的奇校验,外循环确定校验的组数,校验结果存放在输出y0.3y0.3中。当某八位数据中中。当某八位数据中1 1的个数为奇数时,所对应的的个数为奇数时,所对应的输出位输出位yiyi=1 1,否则,否则,yiyi=0 0。 32 BEGIN BEGIN k k: = 0 0;L1: L1: FORFOR i i ININ 0 0 TOTO 3 3 LOOPLOOP y( y( i i ) ) =00; tmptmp :=00; j j := 0 0; k k := i i * * 8 8;L2: L2: LOOPLOOP tmp tmp := tm
34、p tmp XORXOR d( d( k k ) ); y(y( i i ) ) = tmptmp; NEXTNEXT L1 L1 WHENWHEN j j = 7 7; j j := j j + + 1 1; k k := k k + + 1 1; NEXTNEXT L2 L2; END LOOPEND LOOP L2 L2; NEXTNEXT L1 L1; END LOOP END LOOP L1 L1; END PROCESSEND PROCESS; ENDEND example7 example7;内循环内循环 外循环外循环 在内循环中,当在内循环中,当j j 7 7时,继续执行时,继
35、续执行内循环;内循环; 当当j j = 7 7时,终止内循环,跳转到时,终止内循环,跳转到L1L1处,执行一次外循环。处,执行一次外循环。33 EXIT EXIT语句和语句和NEXTNEXT语句一样,都是循环控制语句,语句一样,都是循环控制语句,主要在主要在LOOPLOOP语句中使用,用于进行有条件或无条件语句中使用,用于进行有条件或无条件的跳转控制。的跳转控制。 (5 5)EXITEXIT语句语句 EXIT 循环标号循环标号 WHEN 条件表达式条件表达式 ; 格式:格式:34 根据可选项,根据可选项,EXITEXIT语句有三种格式:语句有三种格式: (5 5)EXITEXIT语句语句 格式
36、格式1 1: EXIT 功能:功能:无条件跳出循环无条件跳出循环, ,从从END LOOPEND LOOP下面的语句开始执行。下面的语句开始执行。 格式格式2 2: EXIT 循环标号循环标号 功能:功能:无条件跳出循环,从循环标号规定的位置开始执行无条件跳出循环,从循环标号规定的位置开始执行循环体外的语句。循环体外的语句。 格式格式3 3: EXIT WHEN 条件表达式条件表达式 功能:功能:有条件跳出循环,有条件跳出循环,当条件表达式不成立时,继续执当条件表达式不成立时,继续执行循环,否则跳出循环。行循环,否则跳出循环。35 【例例6.86.8】用用EXITEXIT语句实现两个数组的比较
37、。语句实现两个数组的比较。 PROCESSPROCESS ( ( X, YX, Y ) ) BEGINBEGIN Z Z =“00”“00”; FORFOR n n ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP IFIF ( ( X(X( n n ) )= Y(Y( n n ) ) THENTHEN NEXTNEXT; ELSIFELSIF ( ( X(X( n n ) ) Y(Y( n n ) ) ) ) THENTHEN Z Z =“01”“01”; EXITEXIT; ELSEELSE Z Z Y Y时,时,Z=10Z=10;当;当X XY Y时,时,Z=01Z=
38、01。 36 【例例6.96.9】用用EXIT_WHENEXIT_WHEN语句实现两个数组的比较。语句实现两个数组的比较。 PROCESSPROCESS ( ( X, YX, Y ) ) BEGINBEGIN Z Z =“00”“00”; FORFOR n n ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP NEXT WHENNEXT WHEN ( ( X(X( n n ) ) = Y(Y( n n ); Z Z =“01”“01”; EXIT WHENEXIT WHEN ( ( X(X( n n ) ) Y(Y( n n ); Z Z =“10”“10”; EXITEX
39、IT; END LOOPEND LOOP; END PROCESSEND PROCESS;37 等待(等待(WAITWAIT)语句在进程或过程中使用,用于)语句在进程或过程中使用,用于程序的暂停和等待。程序的暂停和等待。 3 3. 等待语句等待语句 格式:格式:WAITWAIT ONON 敏感信号表敏感信号表 UNTILUNTIL 条件表达式条件表达式 FORFOR 时间表达式时间表达式; 当执行到当执行到WAITWAIT语句时,程序执行被暂停,直到语句时,程序执行被暂停,直到满足此语句设置的等待结束条件后,重新执行程序。满足此语句设置的等待结束条件后,重新执行程序。 38 根据可选项,根据可
40、选项,WAITWAIT语句有四种格式:语句有四种格式: 格式格式1 1: WAIT 功能:功能:永远处于等待状态永远处于等待状态 格式格式2 2: WAIT ON 敏感信号表;敏感信号表; 功能:功能:程序进入等待状态,直至敏感信号表中的任一信程序进入等待状态,直至敏感信号表中的任一信号发生变化时,结束等待重新执行程序。号发生变化时,结束等待重新执行程序。 例如:例如: SIGNALSIGNAL a a,b b: STDSTD LOGICLOGIC; PROCESSPROCESS WAIT ONWAIT ON a a,b b; END PROCESSEND PROCESS;- 暂停程序的执行,
41、直到暂停程序的执行,直到a a或或b b发生发生 变化才重新启动。变化才重新启动。 3 3. 等待语句等待语句 39 格式格式3 3: WAIT UNTIL 条件表达式;条件表达式; 功能:功能:程序进入等待状态,直至表达式中的敏感信号发程序进入等待状态,直至表达式中的敏感信号发生变化,而且满足表达式设置的条件时,结束等生变化,而且满足表达式设置的条件时,结束等待重新执行程序。待重新执行程序。 例如:例如: WAIT UNTILWAIT UNTIL clk clk =11ANDAND clk clkEVENTEVENT; z z = x x OROR y y; 3 3. 等待语句等待语句 执行
42、到执行到WAITWAIT语句后,暂停程序的执行,直到语句后,暂停程序的执行,直到clkclk的上升的上升沿到来时,才恢复程序的运行,执行其后的赋值语句。沿到来时,才恢复程序的运行,执行其后的赋值语句。 40 格式格式4 4: WAIT FOR 时间表达式;时间表达式; 功能:功能:从执行到当前的从执行到当前的WAITWAIT语句开始,在此时间段内,语句开始,在此时间段内,程序处于等待状态,当超过时间表达式给定的时程序处于等待状态,当超过时间表达式给定的时间后,程序自动恢复执行。间后,程序自动恢复执行。 例如:例如: WAIT FORWAIT FOR 25ns 25ns; z z y y y y
43、 y y NULLNULL; END CASEEND CASE; - 排除一些其他不用的条件排除一些其他不用的条件 42 课堂练习(The second)6.1 简述顺序语句与并行语句的区别?简述顺序语句与并行语句的区别?6.2 简述简述VHDL的六类基本顺序语句?的六类基本顺序语句?6.3 写出写出IF的三种格式及每种格式的功能?的三种格式及每种格式的功能?6.4 写出写出LOOP的三种格式及每种格式的功能?的三种格式及每种格式的功能?6.5 写出写出NEXTNEXT语句的三种格式及每种格式的功能?语句的三种格式及每种格式的功能?6.6 写出写出EXITEXIT语句的三种格式及每种格式的功能
44、?语句的三种格式及每种格式的功能?6.7 写出写出WATEWATE语句的四种格式及每种格式的功能?语句的四种格式及每种格式的功能?43 6.2 VHDL语言的并行描述语句语言的并行描述语句 并行语句又称并发语句,是最具有并行语句又称并发语句,是最具有VHDLVHDL特色的特色的语句结构。语句结构。 并行语句具有多种语言格式,各并行语句在结并行语句具有多种语言格式,各并行语句在结构体中的执行是同步进行的,或者说是并发运行的,构体中的执行是同步进行的,或者说是并发运行的,其执行方式与书写的顺序无关。其执行方式与书写的顺序无关。 同一结构中的各并行语句之间可以是相互独立同一结构中的各并行语句之间可以
45、是相互独立的、不相关的,也可以进行信息传递。的、不相关的,也可以进行信息传递。 在并行语句内部可以嵌套其他语句,嵌套的语在并行语句内部可以嵌套其他语句,嵌套的语句可以并行执行,也可以顺序执行。句可以并行执行,也可以顺序执行。44 6.2 VHDL语言的并行描述语句语言的并行描述语句 在在VHDLVHDL语言中,并行语句主要有六种:语言中,并行语句主要有六种: 进程语句进程语句 并行信号赋值语句并行信号赋值语句 块语句块语句 元件例化语句元件例化语句 生成语句生成语句 断言语句断言语句45 进程(进程(PROCESSPROCESS)语句是在结构体中用来描述)语句是在结构体中用来描述特定电路功能的
46、程序模块,它提供了一种用顺序语特定电路功能的程序模块,它提供了一种用顺序语句描述电路逻辑功能的方法。句描述电路逻辑功能的方法。 1 1. 进程语句进程语句 一个结构体中可以有多个并行运行的进程结构,一个结构体中可以有多个并行运行的进程结构,而每个进程结构的内部由一组顺序语句组成。而每个进程结构的内部由一组顺序语句组成。 进程语句结构具有并行执行和顺序处理的双重进程语句结构具有并行执行和顺序处理的双重特性。特性。 4647 (1 1)进程语句的结构)进程语句的结构 进程标号进程标号: PROCESS (敏感信号参数表敏感信号参数表) IS进程说明部分进程说明部分 BEGIN顺序描述语句顺序描述语
47、句 END PROCESS 进程标号进程标号; 格式:格式: 当敏感信号表中的某个信号发生变化时,立即当敏感信号表中的某个信号发生变化时,立即启动进程语句,将进程中的顺序语句按顺序循环执启动进程语句,将进程中的顺序语句按顺序循环执行,直到敏感信号稳定不变为止。行,直到敏感信号稳定不变为止。 48 (2 2)进程语句的组成)进程语句的组成 进程说明部分进程说明部分 进程语句的结构由三部分组成,即进程说明部进程语句的结构由三部分组成,即进程说明部分、顺序描述语句部分和敏感信号参数表。分、顺序描述语句部分和敏感信号参数表。 用于定义该进程所需要的局部数据环境。如:用于定义该进程所需要的局部数据环境。
48、如:数据类型、常数、属性、子程序等。数据类型、常数、属性、子程序等。 注意:注意:不能在进程内部定义信号和共享变量,不能在进程内部定义信号和共享变量,信号只能在结构体说明中定义。信号只能在结构体说明中定义。 49 (2 2)进程语句的组成)进程语句的组成 顺序描述语句部分顺序描述语句部分 是一段顺序执行语句,用于描述该进程的行为。是一段顺序执行语句,用于描述该进程的行为。 信号赋值语句:信号赋值语句:在进程中将计算或处理的结果赋在进程中将计算或处理的结果赋值给信号。值给信号。 变量赋值语句:变量赋值语句:在进程中以变量的形式存储计算在进程中以变量的形式存储计算的中间值。的中间值。 子程序调用语
49、句:子程序调用语句:对已定义的过程和函数进行调对已定义的过程和函数进行调用,并参与计算。用,并参与计算。50 (2 2)进程语句的组成)进程语句的组成 顺序描述语句部分顺序描述语句部分 进程启动语句:进程启动语句:当当PROCESSPROCESS语句未列出任何敏感语句未列出任何敏感信号时,进程的启动可通过信号时,进程的启动可通过WAITWAIT语句来实现。语句来实现。 顺序描述语句:顺序描述语句:包括包括IFIF语句、语句、CASECASE语句、语句、LOOPLOOP语语句和句和NULLNULL语句。语句。 进程跳出语句:进程跳出语句:包括包括NEXTNEXT语句和语句和EXITEXIT语句。
50、语句。 敏感信号参数表敏感信号参数表 用于启动本进程可读入的信号名。用于启动本进程可读入的信号名。51 PROCESS 组成组成PROCESS语句结构语句结构进程说明进程说明顺序描述语句顺序描述语句敏感信号参数表敏感信号参数表信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句52 【例例6.106.10】用进程语句描述异步清零计数器。用进程语句描述异步清零计数器。 异步清零方式与时钟信号异步清零方式与时钟信号clkclk无关,当清零端无关,当清零端clr=0clr=0时,时,计数状态计数状态Q=0Q=0;当;当clr=1clr=1时,计数器为计数状态。时,计数器为计数状
51、态。 PROCESSPROCESS ( ( clk, clrclk, clr ) ) BEGINBEGIN IFIF clr clr =0 0 THENTHEN Q Q =00 ; ELSIF ELSIF ( ( clkclk =11ANDAND clkclkEVENTEVENT ) ) THENTHEN Q Q = Q Q + + 1 1; END IFEND IF; END PROCESSEND PROCESS;53 【例例6.106.10】用进程语句描述异步清零计数器。用进程语句描述异步清零计数器。 若计数器采用同步清零,则敏感表中可无若计数器采用同步清零,则敏感表中可无clrclr信号
52、,此信号,此时进程如下:时进程如下: PROCESSPROCESS ( ( clk)clk) BEGINBEGIN IFIF ( ( clkclk =11ANDAND clkclkEVENTEVENT ) ) THENTHEN IF IF clrclr =0 0 THENTHEN Q Q= X“00”X“00”; ELSE ELSE Q Q = Q Q + + 1 1; END IFEND IF; END IF END IF; END PROCESSEND PROCESS;54(1) 进程说明部分主要定义一些局部量,可包括数据进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等
53、。但需注意,在进程说类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。明部分中不允许定义信号和共享变量。(2) 顺序描述语句部分可分为赋值语句、进程启动语顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句句、子程序调用语句、顺序描述语句和进程跳出语句等。等。(3)为启动进程,在进程中必须包含有一个显式的为启动进程,在进程中必须包含有一个显式的敏感敏感信号量表信号量表或者包含一个或者包含一个WAITWAIT语句语句;敏感信号表应当紧;敏感信号表应当紧跟在跟在PROCESSPROCESS之后,含有敏感信号表的进程语句中不之后,含有
54、敏感信号表的进程语句中不允许再显式出现允许再显式出现WAITWAIT语句。语句。说明说明551. 1. PROCESSPROCESS为一无限循环语句为一无限循环语句2. 2. PROCESSPROCESS语句具有顺序语句具有顺序/ /并行运行双重性并行运行双重性3. 3. 进程必须由敏感信号的变化来启动进程必须由敏感信号的变化来启动4. 4. 信号是多个进程间的通信线信号是多个进程间的通信线PROCESS语句特点语句特点5. 5. 一个进程中只允许描述对应于一个时钟信号的一个进程中只允许描述对应于一个时钟信号的同步时序逻辑同步时序逻辑 56 并行信号赋值语句是将一个数据或一个表达式的运算结果并
55、行信号赋值语句是将一个数据或一个表达式的运算结果送给一个数据对象送给一个数据对象, ,其赋值目标必须是信号而不能是变量。其赋值目标必须是信号而不能是变量。 信号赋值语句可以位于进程语句中,也可以在进程语句之信号赋值语句可以位于进程语句中,也可以在进程语句之外。若出现在进程语句结构内,则属于顺序语句,否则为并外。若出现在进程语句结构内,则属于顺序语句,否则为并行信号赋值语句。行信号赋值语句。 2 2. 并行信号赋值语句并行信号赋值语句 并行信号赋值语句有三种形式:并行信号赋值语句有三种形式: 简单信号赋值语句简单信号赋值语句 条件信号赋值语句条件信号赋值语句 选择信号赋值语句选择信号赋值语句 5
56、7 (1 1)简单信号赋值语句简单信号赋值语句 是是VHDLVHDL并行语句结构中最基本的单元。并行语句结构中最基本的单元。 格式:格式: 赋值目标赋值目标=表达式;表达式; 规则:规则: 赋值目标必须是信号;赋值目标必须是信号; 赋值目标的数据类型必须与表达式数据赋值目标的数据类型必须与表达式数据类型一致。类型一致。 例如:例如: OUT_1OUT_1 = B B ANDAND C C; 58 (2 2)条件信号赋值语句条件信号赋值语句 该语句与该语句与IFIF语句相类似,根据不同的赋值条件,语句相类似,根据不同的赋值条件,选择表达式中的值赋给赋值目标。选择表达式中的值赋给赋值目标。 赋值目
57、标赋值目标 = 表达式表达式1 WHEN 赋值条件赋值条件1 ELSE 表达式表达式2 WHEN 赋值条件赋值条件2 ELSE 表达式表达式n; 格式:格式:59 【例例6.116.11】用条件赋值语句实现四选一数据选择器。用条件赋值语句实现四选一数据选择器。 ARCHITECTUREARCHITECTURE example5 example5 OFOF mux41 mux41 IS IS SIGNALSIGNAL s: STD_LOGIC_VECTOR( s: STD_LOGIC_VECTOR( 1 1 DOWNTODOWNTO 0 0 ) ); BEGINBEGIN s s = s1&am
58、p;s0s1&s0; y y= d0 d0 WHENWHEN s s =“00” “00” ELSEELSE d1 d1 WHENWHEN s s =“01” “01” ELSEELSE d2 d2 WHENWHEN s s =“10” “10” ELSEELSE d3 d3; ENDEND example5 example5; - - 当当s s = 0000时,时,y y = d0d0 - - 当当s s = 0101时,时,y y = d1d1 - - 当当s s = 1010时,时,y y = d2d2 - - 当当s s取其他值时,取其他值时,y y = d3d360 (3
59、3)选择信号赋值语句选择信号赋值语句 与与CASECASE语句相类似,以选择表达式的不同取值为选择条语句相类似,以选择表达式的不同取值为选择条件,将多个表达式的值赋给赋值目标。件,将多个表达式的值赋给赋值目标。 WITH 选择表达式选择表达式 SELECT 赋值目标赋值目标 = 表达式表达式1 1 WHEN 选择值选择值1, 1, 表达式表达式2 2 WHEN 选择值选择值2, 2, 表达式表达式n n WHEN 选择值选择值n n; 格式:格式: 该语句对子句中的该语句对子句中的“选择值选择值”进行选择,当子句中进行选择,当子句中“选择值选择值”与与“选择表达式选择表达式”的值相同时,则将子
60、句中的的值相同时,则将子句中的“表达式表达式”的值赋给赋值目标。的值赋给赋值目标。 规则:规则: 该语句不允许有选择值重叠现象;该语句不允许有选择值重叠现象; 该语句不允许选择值涵盖不全的情况;该语句不允许选择值涵盖不全的情况; 每个子句以每个子句以“,”,”号结束,最后一个子句以号结束,最后一个子句以“;”;”结束。结束。61 用选择信号赋值语句实现四选一数据选择器。用选择信号赋值语句实现四选一数据选择器。 ARCHITECTUREARCHITECTURE example6 example6 OFOF mux41 mux41 IS IS SIGNALSIGNAL s: STD_LOGIC_VECTOR( s: STD_L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社会组织用工合同范本
- 租地种植苗木合同范本
- 2025年小学四年级美术上学期模拟试卷
- 货物购销合同补充协议
- 网店租赁合伙合同范本
- 烟酒购销合同合同范本
- 烘焙行业加盟协议合同
- 灌溉机井使用协议合同
- 灵活用工销售合同范本
- 社保局终止合同协议书
- 2025智联招聘行测题库及答案解析
- 人教版高中物理精讲精练-必修1专题强化一:受力分析和整体法与隔离法专题 (原卷版)
- GB/T 12643-2025机器人词汇
- 《认知行为疗法》课件
- 15个小测试-测测您家孩子注意力是否达标
- 《阴极保护原理》课件
- 西南大学《模拟电路》2023-2024学年第一学期期末试卷
- 边缘计算与云计算
- 汉语拼音默写表及拼读专练
- 风电项目审批、开发、建设、运营所需手续全流程
- 尊重学术道德遵守学术规范学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论