1、VHDLVHDL的主要描述语句的主要描述语句 INDEXINDEX顺序语句数据类型及运算符并行语句其它语句VHDLVHDL语言客体及分类语言客体及分类l信号 Signal 信号名:数据类型 约束条件:=表达式l变量 variable 变量名:数据类型 约束条件:=表达式l常数 constant 常数名:数据类型 约束条件:=表达式VHDLVHDL语言客体及分类语言客体及分类客体类别含义说明场合信号信号说明全局量ARCHITECTURE;PACKAGE;ENTITY变量变量说明局部量PROCESS;FUNCTION;PROCEDURE常数常数说明全局量上面两种场合均可存在VHDLVHDL语言标准
2、数据类型语言标准数据类型数据类型数据类型含义含义描述方式描述方式整数整数整数整数3232位位integerinteger实数实数浮点数浮点数realreal位位逻辑逻辑“0”0”或或“1”1”bitbit位矢量位矢量位矢量位矢量bit_vectorbit_vector布尔量布尔量逻辑假或真逻辑假或真booleanboolean字符字符ASCIIASCII字符字符charactercharacter时间时间时间单位时间单位fsfs,psps,nsns等等timetime错误等级错误等级notenote,warningwarning,errorerror,failurefailureseverit
3、y levelseverity level自然数、正整数自然数、正整数整数的子集整数的子集NaturalNatural,PositivePositive字符串字符串字符矢量字符矢量StringString 说明:描述方式为在写数据类型时出现的形式说明:描述方式为在写数据类型时出现的形式VHDLVHDL语言运算符号(一)语言运算符号(一)优先级顺序优先级顺序操作符类型操作符类型操作符操作符功能功能逻辑运算符号逻辑运算符号ANDAND逻辑与逻辑与OROR逻辑或逻辑或NANDNAND逻辑与非逻辑与非NORNOR逻辑或非逻辑或非XORXOR逻辑异或逻辑异或关系运算符关系运算符=等号等号/=/=不等号不
4、等号 大于大于=大于等于大于等于算术运算符号算术运算符号+加加-减减&并置并置优先级顺序优先级顺序操作符类型操作符类型操作符操作符功能功能正负运算符正负运算符+正正-负负乘法运算符乘法运算符*乘法乘法/除法除法MODMOD求模求模REMREM取余取余*指数指数ABSABS取绝对值取绝对值NOTNOT取反取反VHDLVHDL语言运算符号(二)语言运算符号(二)INDEXINDEX顺序语句数据类型及运算符并行语句其它语句 顺序语句是指完全按照程序中书写的顺序执行各语顺序语句是指完全按照程序中书写的顺序执行各语句,并且在结构层次中前面的语句执行结果会直接影句,并且在结构层次中前面的语句执行结果会直接
5、影响后面各语句的执行结果。响后面各语句的执行结果。顺序描述语句只能出现在顺序描述语句只能出现在进程或子程序中,用来定义进程或子程序的算法。顺进程或子程序中,用来定义进程或子程序的算法。顺序语句可以用来进行算术运算、逻辑运算、信号和变序语句可以用来进行算术运算、逻辑运算、信号和变量的赋值、子程序调用等,还可以进行条件控制和迭量的赋值、子程序调用等,还可以进行条件控制和迭代。代。注意,这里的顺序是从仿真软件的运行和顺应注意,这里的顺序是从仿真软件的运行和顺应VHDLVHDL语语法的编程逻辑思路而言的,其相应的硬件逻辑工作方法的编程逻辑思路而言的,其相应的硬件逻辑工作方式未必如此。应该注意区分式未必
6、如此。应该注意区分VHDLVHDL语言的软件行为与描语言的软件行为与描述综合后的硬件行为的差异。述综合后的硬件行为的差异。VHDLVHDL顺序语句顺序语句VHDLVHDL顺序语句主要包括顺序语句主要包括变量赋值语句(变量赋值语句(Variable Evaluate)信号赋值语句(信号赋值语句(Signal Evaluate)WAIT语句语句IF 语句语句 CASE 语句语句LOOP 语句语句 NEXT 语句语句 EXIT 语句语句RETURN 语句语句NULL 语句语句过程调用语句(过程调用语句(Procedure Call)断言语句(断言语句(Assert)REPORT 语句语句 VHDLV
7、HDL顺序语句顺序语句1.变量赋值语句变量赋值语句变量赋值语句语法格式为:变量赋值语句语法格式为:变量赋值目标变量赋值目标 :=:=赋值表达式赋值表达式 例例:VARIABLEVARIABLE s s:BIT BIT :=:=00;PROCESSPROCESS(s s)VARIABLE VARIABLE countcount:INTEGER INTEGER :=:=0 0 -变量说明变量说明 BEGINBEGIN count count:=:=s+1 s+1 -变量赋值变量赋值 END PROCESS;END PROCESS;2.2.信号赋值语句信号赋值语句在在VHDLVHDL语言中,用符号语
8、言中,用符号“=”为信号赋值。为信号赋值。信号赋值语句的规范书写格式如下:信号赋值语句的规范书写格式如下:目的信号量目的信号量 =TRANSPORTINERTIAL TRANSPORTINERTIAL信号变量表达式;信号变量表达式;其中其中 TRANSPORTTRANSPORT 表示传输延迟,表示传输延迟,INERTIALINERTIAL 表示惯性延迟。表示惯性延迟。要求要求“=”=”两边两边的信号变量类型和位长度应该一致。的信号变量类型和位长度应该一致。例例1:1:s s =TRANSPORTTRANSPORT t t AFTER 10ns;AFTER 10ns;d=d=INERTIALIN
9、ERTIAL 2 2 AFTER 3ns,AFTER 3ns,1 1 AFTER 8ns;AFTER 8ns;例例2 2:s s=a NOR a NOR(b AND cb AND c););3 3个敏感量个敏感量a a,b b,c c中任何一个发生变化,该语句都将被执行。中任何一个发生变化,该语句都将被执行。WAIT WAIT语句在进程中起到与敏感信号一样重要的作用,语句在进程中起到与敏感信号一样重要的作用,敏敏感信号触发进程的执行感信号触发进程的执行,WAITWAIT语句同步进程的执行语句同步进程的执行,同步,同步条件由条件由WAITWAIT语句指明。进程在仿真运行中处于执行或挂起语句指明。
10、进程在仿真运行中处于执行或挂起两种状态之一。当进程执行到等待语句时,就将被挂起并两种状态之一。当进程执行到等待语句时,就将被挂起并设置好再次执行的条件。设置好再次执行的条件。WAITWAIT语句可以设置语句可以设置4 4种不同的条件:种不同的条件:无限等待、时间到、条件满足以及敏感信号量变化无限等待、时间到、条件满足以及敏感信号量变化。这几。这几类类WAITWAIT语句可以混合使用。现分别介绍如下:语句可以混合使用。现分别介绍如下:3.3.WAITWAIT语句语句.WAITWAIT -无限等待语句无限等待语句这种形式的这种形式的WAITWAIT语句在关键字语句在关键字“WAIT”WAIT”后面
11、不带任何后面不带任何信息,是无限等待的情况。信息,是无限等待的情况。.WAIT ON WAIT ON 信号表信号表 -敏感信号等待语句敏感信号等待语句 这种形式的这种形式的WAITWAIT语句使进程暂停,直到敏感信号表语句使进程暂停,直到敏感信号表中某个信号值发生变化。中某个信号值发生变化。WAIT ONWAIT ON语句后面跟着的信号语句后面跟着的信号表,在敏感信号表中列出等待语句的敏感信号。当进程表,在敏感信号表中列出等待语句的敏感信号。当进程处于等待状态时,其中敏感信号发生任何变化都将结束处于等待状态时,其中敏感信号发生任何变化都将结束挂起,再次启动进程。挂起,再次启动进程。例例AAPR
12、OCESSPROCESSBEGINBEGINy=a AND by=a AND b;WAIT ON WAIT ON a a,b b;END PROCESSEND PROCESS;例例BBPROCESSPROCESS(a a,b b)BEGINBEGINy=a AND by=a AND b;END PROCESSEND PROCESS;在在例例AA中执行所有语句后,进程将在中执行所有语句后,进程将在WAITWAIT语句处被语句处被挂起挂起,直到,直到a a或或b b中中任何一个信号发生变化,进程才重新开始。任何一个信号发生变化,进程才重新开始。例例AA与与例例BB是等价的。是等价的。需要注意的是需
13、要注意的是,在使用,在使用WAIT ONWAIT ON语句的进程中,语句的进程中,敏感信号量应写在进程中的敏感信号量应写在进程中的WAIT ONWAIT ON语句后面;而在不语句后面;而在不使用使用WAIT ONWAIT ON语句的进程中,敏感信号量应在开头的关语句的进程中,敏感信号量应在开头的关键词键词PROCESSPROCESS后面的敏感信号表中列出。后面的敏感信号表中列出。VHDLVHDL规定,已规定,已列出敏感信号表的进程不能使用任何形式的列出敏感信号表的进程不能使用任何形式的WAITWAIT语句。语句。.WAIT UNTIL WAIT UNTIL 条件条件 -条件等待语句条件等待语句
14、这种形式的这种形式的WAITWAIT语句使进程暂停,直到预期的条件为真。语句使进程暂停,直到预期的条件为真。WAIT UNTILWAIT UNTIL后面跟的是布尔表达式,在布尔表达式中隐后面跟的是布尔表达式,在布尔表达式中隐式地建立一个敏感信号量表,当表中任何一个信号量发式地建立一个敏感信号量表,当表中任何一个信号量发生变化时,就立即对表达式进行一次测评。如果其结果生变化时,就立即对表达式进行一次测评。如果其结果使表达式返回一个使表达式返回一个“真真”值,则进程脱离挂起状态,继值,则进程脱离挂起状态,继续执行下面的语句。即续执行下面的语句。即WAIT UNTILWAIT UNTIL语句需满足以
15、下条件:语句需满足以下条件:在条件表达式中所含的信号发生了变化;在条件表达式中所含的信号发生了变化;此信号改变后,且满足此信号改变后,且满足WAIT UNTILWAIT UNTIL语句中表达式的条件语句中表达式的条件。这两个条件缺一不可,且必须按照上述顺序来完成。这两个条件缺一不可,且必须按照上述顺序来完成。WAIT UNTILWAIT UNTIL语句有以下三种表达方式:语句有以下三种表达方式:WAIT UNTIL WAIT UNTIL 信号信号 =VALUE=VALUE;WAIT UNTIL WAIT UNTIL 信号信号EVENT ANDEVENT AND信号信号 =VALUE=VALUE
16、;WAIT UNTIL WAIT UNTIL 信号信号STABLE ANDSTABLE AND信号信号 =VALUE=VALUE;例如:例如:WAIT UNTIL clock=“1”WAIT UNTIL clock=“1”;WAIT UNTIL rising_edgeWAIT UNTIL rising_edge(clkclk););WAIT UNTIL clk=1AND clkWAIT UNTIL clk=1AND clk EVENT EVENT;WAIT UNTIL NOT clk STABLE AND clkWAIT UNTIL NOT clk STABLE AND clk=“1”=“1”
17、;一般的,在一般的,在一个进程中使用了一个进程中使用了WAITWAIT语句后,综合器会综合产语句后,综合器会综合产生时序逻辑电路。生时序逻辑电路。时序逻辑电路的运行依赖时序逻辑电路的运行依赖WAIT UNTILWAIT UNTIL表达表达式的条件,同时还具有数据存储的功能。式的条件,同时还具有数据存储的功能。例如:例如:WAIT FOR 40 nsWAIT FOR 40 ns;在该语句中,时间表达式为常数在该语句中,时间表达式为常数40ns40ns,当进程执行到,当进程执行到该语句时,将等待该语句时,将等待40ns40ns,经过,经过40ns40ns之后,进程执行之后,进程执行WAIT FOR
18、WAIT FOR的后继语句。的后继语句。例如:例如:WAIT FORWAIT FOR(a a*(b+cb+c););在此语句中,(在此语句中,(a a*(b+cb+c)为时间表达式,)为时间表达式,WAIT FORWAIT FOR语句在执行时,首先计算表达式的值,然后将计算结语句在执行时,首先计算表达式的值,然后将计算结果返回作为该语句的等待时间。果返回作为该语句的等待时间。.WAIT FOR WAIT FOR 时间表达式时间表达式-超时等待语句超时等待语句4.IF4.IF语句语句 在在VHDLVHDL语言中,语言中,IFIF语句的作用是根据指定的条件来确定语句的执行顺语句的作用是根据指定的条
19、件来确定语句的执行顺序。序。IFIF语句可用于选择器、比较器、编码器、译码器、状态机等的设计,语句可用于选择器、比较器、编码器、译码器、状态机等的设计,是是VHDLVHDL语言中最常用的语句之一。语言中最常用的语句之一。IFIF语句按其书写格式可分为以下语句按其书写格式可分为以下3 3种。种。.IF-THEN IF-THEN 控制语句控制语句这类语句书写格式为:这类语句书写格式为:IF IF 条件条件 THENTHEN 顺序语句顺序语句 END IFEND IF;当程序执行到这种控制型当程序执行到这种控制型IFIF语句时,首先判断语句中所指定的条件是否语句时,首先判断语句中所指定的条件是否成立
20、。如果条件成立,则程序继续执行成立。如果条件成立,则程序继续执行IFIF语句中所含的顺序处理语句;如果语句中所含的顺序处理语句;如果条件不成立,程序将跳过条件不成立,程序将跳过IFIF语句所包含的顺序处理语句,而向下执行语句所包含的顺序处理语句,而向下执行IFIF的后的后继语句。继语句。LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ENTITY dffdff IS ISPORTPORT(clkclk,d d:IN STD_LOGICIN STD_LOGIC;q q
21、:OUT STD_LOGIC);OUT STD_LOGIC);ENDEND dff dff;ARCHITECTURE ARCHITECTURE rtlrtl OF OF dff dff IS IS BEGIN BEGIN PROCESS(PROCESS(clkclk)BEGIN BEGIN IF(IF(clkclkEVENTEVENT AND AND clkclk=1)THEN=1)THEN q=d;q=d;END IF;END IF;END PROCESS;END PROCESS;END END rtlrtl;例例:利用利用IFIF语句引入语句引入D D触发器触发器 这种语句的书写格式为:这
22、种语句的书写格式为:TF TF 条件条件 THENTHEN 顺序语句顺序语句 ELSEELSE 顺序语句顺序语句 END IFEND IF;当当IFIF条件成立时,程序执行条件成立时,程序执行THENTHEN和和ELSEELSE之间的顺序语句部分;之间的顺序语句部分;当当IFIF语句的条件得不到满足时,程序执行语句的条件得不到满足时,程序执行ELSEELSE和和END IFEND IF之间的顺序之间的顺序处理语句。即依据处理语句。即依据IFIF所指定的条件是否满足,程序可以进行两条不所指定的条件是否满足,程序可以进行两条不同的执行路径。同的执行路径。.二选一控制语句二选一控制语句ARCHITE
23、CTURE ARCHITECTURE rtlrtl OF OF mux2mux2 IS ISBEGIN BEGIN PROCESS(PROCESS(a a,b b,s s)BEGIN BEGIN IF(IF(s s=1)THEN=1)THEN c c=a a;ELSE ELSE c c=b b;END IF;END IF;END PROCESS;END PROCESS;END END rtlrtl;例例:二选一电路结构体的描述二选一电路结构体的描述这种语句的书写格式为:这种语句的书写格式为:IFIF 条件条件 THENTHEN 顺序语句顺序语句 ELSEIFELSEIF 顺序语句顺序语句 EL
24、SEIFELSEIF 顺序语句顺序语句 ELSEELSE 顺序语句顺序语句 END END IFIF;.多选择控制语句多选择控制语句 这种多选择控制的这种多选择控制的IFIF语句,实际上就是条件嵌套。它设置了语句,实际上就是条件嵌套。它设置了多个条件,当满足所设置的多个条件之一时,就执行该条件后的多个条件,当满足所设置的多个条件之一时,就执行该条件后的顺序处理语句。当所有设置的条件都不满足时,程序执行顺序处理语句。当所有设置的条件都不满足时,程序执行ELSEELSE和和END IFEND IF之间的顺序处理语句。之间的顺序处理语句。例例:利用多选控制语句设计的四选一多路选择器利用多选控制语句设
25、计的四选一多路选择器LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITYENTITY mux4 mux4 IS IS PORT PORT(inputinput:IN STD_LOGIC_VECTOR(3 DOWNTO 0)IN STD_LOGIC_VECTOR(3 DOWNTO 0);selsel:IN STD_LOGIC_VECTOR(1 DOWNTO 0)IN STD_LOGIC_VECTOR(1 DOWNTO 0);y y:OUT STD_LOGIC);OUT ST
26、D_LOGIC);END END mux4mux4;ARCHITECTURE ARCHITECTURE rtlrtl OF OF mux4mux4 IS ISBEGIN BEGIN PROCESSPROCESS(inputinput,selsel)BEGIN BEGIN IF IF(selsel=“=“0000”)THEN”)THEN y=input y=input(0 0););ELSIFELSIF(selsel=“=“0101”)THENTHEN y=input y=input(1 1););ELSIFELSIF(selsel=“=“1010”)THENTHEN y=input y=inp
27、ut(2 2););ELSEELSE y=input y=顺序语句,顺序语句,WHEN WHEN 条件选择值条件选择值 =顺序语句,顺序语句,END END CASECASE;其中其中WHENWHEN条件选择值可以有四种表达方式;条件选择值可以有四种表达方式;(1 1)单个普通数值,形如)单个普通数值,形如WHEN WHEN 选择值选择值 =顺序语句;顺序语句;(2 2)并列数值,形如)并列数值,形如WHEN WHEN 值值/值值/值值 =顺序语句;顺序语句;(3 3)数值选择范围,形如)数值选择范围,形如WHEN WHEN 值值TOTO值值 =顺序语句;顺序语句;(4 4)WHEN OTHE
28、RS=WHEN OTHERS=顺序语句;顺序语句;5.CASE5.CASE语句语句当执行到当执行到CASECASE语句时,首先计算语句时,首先计算CASECASE和和ISIS之间的表达式的值,然后根之间的表达式的值,然后根据条件语句中与之相同的选择值,执行对应的顺序语句,最后结束据条件语句中与之相同的选择值,执行对应的顺序语句,最后结束CASECASE语句语句。使用使用CASECASE语句需注意以下几点:语句需注意以下几点:CASECASE语句中每一条语句的选择值只能出现一次,即不能有相同选择值语句中每一条语句的选择值只能出现一次,即不能有相同选择值的条件语句出现。的条件语句出现。CASECA
29、SE语句执行中必须选中,且只能选中所列条件语句中的一条,即语句执行中必须选中,且只能选中所列条件语句中的一条,即CASECASE语句至少包含一个条件语句。语句至少包含一个条件语句。除非所有条件语句中的选择值能完全覆盖除非所有条件语句中的选择值能完全覆盖CASECASE语句中表达式的取值,语句中表达式的取值,否则最末一个条件语句中的选择必须用否则最末一个条件语句中的选择必须用“OTHERS”OTHERS”表示,它代表已给表示,它代表已给出的所有条件语句中未能列出的其他可能的取值。关键词出的所有条件语句中未能列出的其他可能的取值。关键词OTHERSOTHERS只能只能出现一次,且只能作为最后一种条
30、件取值。使用出现一次,且只能作为最后一种条件取值。使用OTHERSOTHERS是为了使条件是为了使条件语句中的所有选择值能覆盖表达式的所有取值,以免综合过程中插入语句中的所有选择值能覆盖表达式的所有取值,以免综合过程中插入不必要的锁存器。这一点对于定义为不必要的锁存器。这一点对于定义为STD_LOGICSTD_LOGIC和和STD_LOGIC_VECTORSTD_LOGIC_VECTOR数据类型的值尤为重要,因为这些数据对象的取值除了数据类型的值尤为重要,因为这些数据对象的取值除了1 1、0 0之外,还之外,还可能出现输入高阻态可能出现输入高阻态Z Z,不定态,不定态X X等取值。等取值。例例
31、1 CASE1 CASE语句使用语句使用CASE CASE commandcommand IS IS WHEN“WHEN“0000”=c c c c c c c c NULL;WHEN OTHERS=NULL;-无效无效END CASE;END CASE;例例2 CASE2 CASE语句使用语句使用CASE CASE sel sel IS IS WHEN WHEN 1 1TO TO 9 9=c c c c c c=3;END END CASECASE;在在例例22中,第一个中,第一个WHENWHEN语句的意思是当语句的意思是当selsel 的值是从的值是从1 1到到9 9 中任意一个数值时,信
32、号中任意一个数值时,信号c c的的值取值取1 1;第二个;第二个WHENWHEN语句的意思是当语句的意思是当selsel 的值为的值为1111或或1212两者之一时,信号两者之一时,信号 c c 的取值为的取值为2 2;第;第三个三个WHENWHEN语句的意思是当语句的意思是当selsel 的值不为前面两种情况时,信号的值不为前面两种情况时,信号c c 的取值为的取值为3 3。-适合适合4 4选选1 1数据选择器数据选择器LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTIT
33、Y ENTITY decoder3_8decoder3_8 IS IS PORT PORT(a a,b b,c c,g1g1,g2ag2a,g2bg2b:IN STD_LOGICIN STD_LOGIC;y y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END END decoder3_8decoder3_8;ARCHITECTUREARCHITECTURE rtl rtl OF OF decoder3_8decoder3_8 IS IS SIGNAL SIGNAL indataindata:STD_LOG
34、IC_VECTOR(2 DOWNTO 0)STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN BEGIN indataindata=c&b&a y y y y y y y y y y y y y y y y y y=“XXXXXXXX”;END END CASECASE;-X:不定:不定ELSE ELSE -指不满足指不满足g1=1AND g2a=0 AND g2b=0g1=1AND g2a=0 AND g2b=0情况情况 y=“11111111”y=“11111111”;END IFEND IF;ENDEND PROCESS PROCESS;END END rtlrtl;与
35、与IFIF语句相比,语句相比,CASECASE语句语句组的程序语句是组的程序语句是没有先后顺没有先后顺序序的,所有表达式的值都并行处理。的,所有表达式的值都并行处理。IFIF语句是有序的语句是有序的,先处,先处理最起始、最优先的条件,后处理次优先的条件。理最起始、最优先的条件,后处理次优先的条件。LOOPLOOP语句就是循环语句,它可以使包含的一组顺序语句被循环执语句就是循环语句,它可以使包含的一组顺序语句被循环执行,其执行的次数受迭代算法控制。在行,其执行的次数受迭代算法控制。在VHDLVHDL中常用来描述迭代电中常用来描述迭代电路的行为。路的行为。.单个单个LOOPLOOP语句语句单个单个
36、LOOPLOOP语句的书写格式如下:语句的书写格式如下:标号标号:LOOPLOOP 顺序语句顺序语句 END END LOOPLOOP 标号标号;这种循环语句需引入其他控制语句(如这种循环语句需引入其他控制语句(如EXITEXIT)后才能确定,否则)后才能确定,否则为无限循环。其中的标号是可选的。为无限循环。其中的标号是可选的。6.LOOP6.LOOP语句语句例如例如:loop1loop1:LOOPLOOP WAIT UNTIL clk WAIT UNTIL clk=1=1;q q=d AFTER 2 ns d AFTER 2 ns;END END LOOPLOOP loop1 loop1;该
37、语句语法格式为:该语句语法格式为:标号:标号:FOR FOR 循环变量循环变量 IN IN 离散范围离散范围 LOOPLOOP 顺序处理语句顺序处理语句 END END LOOPLOOP 标号标号;.FOR_LOOP.FOR_LOOP语句语句例:例:8 8位奇偶校验电路位奇偶校验电路LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ENTITY parity_checkparity_check IS IS PORT PORT(a a:IN STD_LOGIC_VECT
38、OR(7 DOWNTO 0)IN STD_LOGIC_VECTOR(7 DOWNTO 0);y y:OUT STD_LOGIC)OUT STD_LOGIC);END END parity_checkparity_check ;ARCHITECTUREARCHITECTURE rtl rtl OF OF parity_checkparity_check IS ISBEGIN BEGIN PROCESS PROCESS(a a)VARIABLE VARIABLE tmptmp:STD_LOGICSTD_LOGIC BEGINBEGIN tmptmp:=0=0;FOR i IN 0 TO 7 FOR
39、 i IN 0 TO 7 LOOPLOOP tmptmp:=tmptmp XOR a XOR a(i i););END END LOOPLOOP;y=y=tmp tmp;-y=1-y=1,a a为奇数个为奇数个11。y=0y=0,a a为偶数个为偶数个11。END PROCESSEND PROCESS;END END rtlrtl;这种语句的书写格式为:这种语句的书写格式为:标号:标号:WHILE WHILE 条件条件 LOOPLOOP 顺序处理语句顺序处理语句 END END LOOPLOOP 标号标号;在该在该LOOPLOOP语句中,没有给出循环次数的范围,而是给出语句中,没有给出循环次数
40、的范围,而是给出了循环执行顺序语句的条件;没有自动递增循环变量的功能,而了循环执行顺序语句的条件;没有自动递增循环变量的功能,而是在顺序处理语句中增加了一条循环次数计算语句,用于循环语是在顺序处理语句中增加了一条循环次数计算语句,用于循环语句的控制。循环控制条件为布尔表达式,当条件为句的控制。循环控制条件为布尔表达式,当条件为“真真”时,则时,则进行循环,如果条件为进行循环,如果条件为“假假”,则结束循环。,则结束循环。.WHILE_LOOP.WHILE_LOOP语句语句LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE
41、.STD_LOGIC_1164.ALL;ENTITY ENTITY parity_checkparity_check IS IS PORT PORT(a a:IN STD_LOGIC_VECTOR(7 DOWNTO 0)IN STD_LOGIC_VECTOR(7 DOWNTO 0);y y:OUT STD_LOGIC)OUT STD_LOGIC);END END parity_checkparity_check ;ARCHITECTUREARCHITECTURE behav behav OF OF parity_checkparity_check IS ISBEGIN BEGIN PROCES
42、S PROCESS(a a)VARIABLE VARIABLE tmptmp:STD_LOGICSTD_LOGIC 例:例:8 8位奇偶校验电路的位奇偶校验电路的WHILE_LOOPWHILE_LOOP设计形式设计形式BEGINBEGIN tmp tmp :=:=0 0;i i:=:=0 0;WHILE WHILE(i i 8 8)LOOPLOOP tmptmp :=:=tmptmp XOR a XOR a(i i););i i:=:=i+1i+1;END LOOPEND LOOP;y y=1 LOOPWHILE data 1 LOOP data:=data+1 data:=data+1;NE
43、XT WHEN data=3 NEXT WHEN data=3 -条件成立而无标号,跳出循环条件成立而无标号,跳出循环 data:=datadata:=data*data data;END LOOPEND LOOP;7.NEXT7.NEXT语句语句N1N1:FORFOR i i IN IN 1010 DOWNTO DOWNTO 1 1 LOOP LOOP N2 N2:FOR FOR j j IN IN 0 0 TO TO i i LOOP LOOP NEXT NEXT N1N1 WHEN WHEN i=ji=j;-条件成立,跳到条件成立,跳到N1N1处处 matrixmatrix(i i,j
44、j):=:=j j*i+1i+1;-条件不成立,继续内层循环条件不成立,继续内层循环N2N2 END LOOP N2 END LOOP N2;END LOOP N1END LOOP N1;EXITEXIT语句的书写格式为:语句的书写格式为:EXITEXITLOOPLOOP标号标号WHENWHEN条件条件;EXITEXIT语句也是用来控制语句也是用来控制LOOPLOOP的内部循环,与的内部循环,与NEXTNEXT语句不同的是语句不同的是EXITEXIT语句跳向语句跳向LOOPLOOP终点,结束终点,结束LOOPLOOP语句语句;而;而NEXTNEXT语句是跳向语句是跳向LOOPLOOP语句的起始
45、点,结束本次循环,开始下一次循环。语句的起始点,结束本次循环,开始下一次循环。当当EXITEXIT语句中语句中含有标号时,表明跳到标号处继续执行。含含有标号时,表明跳到标号处继续执行。含WHENWHEN条件条件 时,如果时,如果条件为条件为“真真”,跳出,跳出LOOPLOOP语句;如果条件为语句;如果条件为“假假”,则继续执行,则继续执行LOOPLOOP循环。循环。EXITEXIT语句不含标号和条件时,表明无条件结束语句不含标号和条件时,表明无条件结束LOOPLOOP语句的语句的执行,因此,它为程序需要处理保护、出错和警告状态,提供了执行,因此,它为程序需要处理保护、出错和警告状态,提供了一种
46、快捷、简便的调试方法一种快捷、简便的调试方法。8.EXIT8.EXIT语句语句SIGNAL SIGNAL a a,b b:STD_LOGIC_VECTOR(0 TO 1)STD_LOGIC_VECTOR(0 TO 1);SIGNAL SIGNAL a_less_than_ba_less_than_b:BOOLEANBOOLEAN;a_less_than_b a_less_than_b=FALSE;FALSE;FOR i IN FOR i IN 1 1TO TO 0 0 LOOPLOOP IF IF(a a(i i)=1AND b=1AND b(i i)=0=0)THENTHEN a_less_
47、than_b a_less_than_b=FALSE FALSE;EXITEXIT;ELSEIFELSEIF(a a(i i)=0AND b=0AND b(i i)=1=1)THENTHEN a_less_than_b a_less_than_b=b b)THENTHEN tmptmp :=a:=a;ELSEELSE tmp tmp:=b:=b;END IFEND IF;END END maximummaximum;BEGINBEGIN y=maximum y y y y y y y y y =NULL NULL;END CASEEND CASE;ENDEND PROCESS PROCESS;
48、END END behavebehave;上例是通过对用于选通上例是通过对用于选通8 8位总线的四选一多路选择器进行功能描述,具体位总线的四选一多路选择器进行功能描述,具体说明说明NULLNULL语句的使用。语句的使用。11.11.过程调用语句(过程调用语句(Procedure CallProcedure Call)与其他高级程序设计语言相似,与其他高级程序设计语言相似,VHDLVHDL提供了子程序的概念。其中提供了子程序的概念。其中在进程、函数和过程中,可以使用过程调用语句,此时它是一种在进程、函数和过程中,可以使用过程调用语句,此时它是一种顺序语句。一个过程被调用时将去执行它的过程体。顺序
49、语句。一个过程被调用时将去执行它的过程体。过程调用语过程调用语句的书写格式为:句的书写格式为:例例:LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ENTITY max max ISIS PORT PORT(in1in1:IN STD_LOGIC_VECTOR(7 DOWNTO 0)IN STD_LOGIC_VECTOR(7 DOWNTO
50、0);in2in2:IN STD_LOGIC_VECTOR(7 DOWNTO 0)IN STD_LOGIC_VECTOR(7 DOWNTO 0);in3in3:IN STD_LOGIC_VECTOR(7 DOWNTO 0)IN STD_LOGIC_VECTOR(7 DOWNTO 0);q q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END END maxmax ;过程名过程名(实参表);(实参表);ARCHITECTURE ARCHITECTURE rtlrtl OF OF maxmax IS IS PR