您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > eda技术与vhdl语言第三章_3
3.4VHDL语言的基本语句VHDL语言描述系统硬件行为时,按语句执行顺序可以分为顺序(Sequential)描述语句和并发(Concurrent)描述语句。灵活运用这两类语句就可以正确地描述系统的并发行为和顺序行为。例如,进程语句(ProcessStatement)是一个并发语句。在一个构造体内可以有几个进程语句同时存在,各进程语句是并发执行的。但是,在进程内部所有语句应是顺序描述语句,也就是说,是按书写的顺序自上至下,一个语句一个语句地执行的。例如,IF语句、LOOP语句等都属于此类顺序描述语句。1、顺序描述语句执行顺序与书写顺序一致,与传统软件设计语言的特点相似。顺序语句只能用在进程与子程序中。在VHDL语言中顺序描述语句主要有以下几种:*信号代入语句;*变量赋值语句;*WAIT语句;*IF语句;*CASE语句;*LOOP语句;*NEXT语句;*EXIT语句;2、并发描述语句VHDL的并发语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。*进程语句(PROCESS);*并发(CONCURRENT)信号代入语句;*条件(CONDITIONAL)信号代入语句;*选择(SELECTIVE)信号代入语句;*并发(CONCURRENTPROCEDURE)过程调用语句;*块(BLOCK)语句。3.4.1信号代入语句信号代入语句的作用是将数据或表达式的结果赋给一个目标对象,目标对象可以是内部信号,也可以是端口信号。信号代入语句可分为:简单信号代入语句、条件信号赋值语句和选择信号赋值语句三种。1、简单信号代入语句简单代入语句可以在进程内部使用,按顺序执行;代入语句也可以在构造体内部的进程外使用,且并发执行。并发代入语句在仿真时刻同时运行,它表征了各个独立器件的各自的独立操作。如:a=b+c;d=e*f;--分别描述加法器和乘法器行为。在实际系统中加法器和乘法器是同时并发执行的。书写格式:目的信号量=信号量表达式;意义:将右边信号量表达式的值赋给左边的目的信号量。1、简单信号代入语句(续)代入符号“=”的右边可以用算术表达式,也可以用逻辑运算表达式,还可以用关系操作表达式。注意1)代入符号与小于等于的区别;2)代入符号两边信号量的类型和长度应一致;a.一个进程:最后一次赋值有效补充:信号的多次赋值architecturertlofexissignala:std_logic;beginprocess(…)begina=b;…a=c;endprocess;endrtl;--结果是a=c2、条件信号代入语句格式:目的信号量=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3ELSE┆表达式n;┆ELSE在每个表达式后面都跟有用“WHEN”所指定的条件,如果满足该条件,则该表达式值代入目的信号量;如果条件不满足,则再判断下一个表达式所指定的条件。最后一个表达式可以不跟条件,即所有条件都不满足时条件信号代入语句举例利用条件信号代入语句实现四选一逻辑电路。ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErtlOFmux4ISSIGNALsel:STD_LOGIC_VECTOR(1DOWNTO0);BEGINsel=b&a;q=i0WHENsel=“00”ELSEi1WHENsel=“01”ELSEi2WHENsel=“10”ELSEi3WHENsel=“11”ELSE‘X’;ENDrtl;目的信号量=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3ELSE┆表达式n;i1i3qmuxi0i2sel(0)sel(1)格式:WITH表达式SELECT目的信号量=表达式1WHEN条件1,表达式2WHEN条件2,┆表达式nWHEN条件n;1)不能有重叠的条件分支。2)最后条件可为others。否则,全部条件必须能包含表达式的所有可能值。3)选择信号赋值语句与进程中的case语句等价。3、选择信号代入语句注用选择信号代入语句实现四选一电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmuxISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux;ARCHITECTUREbehaveOFmuxISSIGNALsel:INTEGER;BEGINWITHselSELECTq=i0WHEN0,i1WHEN1,i2WHEN2,i3WHEN3,‘X’WHENOTHERS;sel=0WHENa=‘0’ANDb=‘0’ELSE1WHENa=‘0’ANDb=‘1’ELSE2WHENa=‘1’ANDb=‘0’ELSE3WHENa=‘1’ANDb=‘1’ELSE4;ENDbehave;选择信号代入语句,根据sel的不同值来完成选择功能条件信号代入语句,根据a和b不同取值,对信号sel代入值i1i3qmuxi0i2ab4、变量赋值语句书写格式:目的变量:=表达式;意义:表达式的值替代目的变量的值,立即有效。注意1)两边的数据类型必须相同;2)目的变量的类型和范围应事先给出;3)右边的表达式可以是变量,信号或字符;4)变量只在进程或子程序中使用,它无法传递到进程之外。1)赋值方式的不同:变量:=表达式;信号=表达式;2)硬件实现的功能不同:信号代表电路单元、功能模块间的互联,代表实际的硬件连线;变量代表暂存的临时数据。3)有效范围的不同:信号:程序包、实体、结构体;全局量。变量:进程、子程序;局部量。4)赋值行为的不同:信号赋值延迟更新数值;变量赋值立即更新数值;补充:变量与信号的差异信号赋值:architecturertlofsigissignala,b:std_logic;--定义信号beginprocess(a,b)begina=b;b=a;endprocess;endrtl;补充举例:信号赋值与变量赋值的比较在进程内部信号是延时更新,信号只有在整个过程执行完毕后(endprocess)才更新完成。此例中,a=b先是b的值赋给a,但a的值并不立即更新;所以在执行b=a时,a还是先前的a,即是要将a的原值赋给b;当程序执行到endprocess时,a和b才更新完成,最终a和b值互换。--结果是a和b的值互换变量赋值:architecturertlofvarisbeginprocessvariablea,b:std_logic;--定义变量begina:=b;b:=a;endprocess;endrtl;补充举例:信号赋值与变量赋值的比较变量的赋值立即生效,a的值立即更新为b的初始值此时的a已经变为b的初值,于是就是将b的初值代入b--结果是a和b的值都等于b的初值3.4.2IF语句IF语句是VHDL语言中最基础、最常用的语句,常用于选择器、比较器、编码器、译码器状态机的设计,。IF语句根据制定的条件来执行指定的语句,共有三种类型:1、单选控制;2、二选控制;3、多选控制。1、IF语句的单选控制格式:IF条件THEN顺序处理语句;ENDIF;当程序执行到该IF语句时,就要判断IF语句所指定的条件是否成立。如果条件成立,则执行顺序处理语句;不成立则跳过IF语句所包含的顺序处理语句,而向下执行IF语句的后续语句。这里的条件起到门闩的控制作用。D触发器的描述举例LIBRARYIEEE;USEIEEE.STD.LOGIC.1164.ALL;ENTITYdffISPORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff;ARCHITECTURErtlOFdffISBEGINPROCESS(clk)BEGINIF(clk’EVENTANDclk=‘1‘)THENq=d;ENDIF;ENDPROCESS;ENDtrl;注此例中,IF语句的条件是时钟信号clk事件发生,且时钟clk=‘1’(时钟脉冲上升沿到来)。只有在这个时候d端信号值才赋值给q端。当该条件不满足时,q端维持原来的输出值。DQcdclkq2、IF语句的二选择控制格式:IF条件THEN顺序处理语句;ELSE顺序处理语句;ENDIF;当条件满足时,则执行THEN和ELSE之间的顺序处理语句;如不满足则执行ELSE和ENDIF之间的顺序处理语句。IF二选择控制举例二选一电路ARCHITECTURErtlOFmux2ISBEGINPROCESS(a,b,sel)BEGINIF(sel=‘1‘)THENc=a;ELSEc=b;ENDIF;ENDPROCESS;ENDrtl;此例中,二选一电路的输入端为a和b,选择控制端为sel,输出端为c。注abcselmux23、IF语句的多条件控制格式:IF条件THEN顺序处理语句;ELSIF条件THEN顺序处理语句;┄ELSIF条件THEN顺序处理语句;ELSE顺序处理语句;ENDIF;在多选择控制的IF语句中,设置了多个条件。当某个条件满足时就执行跟在该条件这后的顺序处理语句,如果条件都不满足则执行ELSE和ENDIF之间的语句。注IF语句多条件控制语句举例四选一电路:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErtlOFmux4ISBEGINPROCESS(input,sel)BEGINIF(sel=“00”)THENy=input(0);ELSIF(sel=“01”)THENy=input(1);ELSIF(sel=“10”)THENy=input(2);ELSEy=input(3);ENDIF;ENDPROCESS;ENDrtl;注if_then_elsif语句中隐含了优先级别的判断,最先出现的条件优先级最高,可用于设计具有优先级的电路。如8-3优先级编码器。ymuxinput(0)sel(1)input(1)input(2)input(3)sel(0)3、IF语句小结(1)IF语句可以用于凡是可以进行条件控制的逻辑电路设计。(2)IF语句的条件判断的输出是布尔量,即是“真”(true)或“假”(FALSE)。因此在IF语句的条件表达式中只能使用关系运算操作符(=,/=,,,=,=)及逻辑运算操作符的组合表达式。(3)IF语句只能在进程内部使用。条件信号赋值语句与进程中的多选择if语句等价:q=aWHENsela=‘1’ELSEbWHENselb=‘1’ELSEc;PROCESS(sela,selb,a,b,c)BEGINIFsela=‘1’THENq=a;ELSIFselb=‘1’THENq=b;ELSEq=c;ENDIF;ENDPROCESS;3.4.3CASE语句case语句常用来描述总线或编码、译码行为。可读性比if语句强。格式:CASE表达式ISWHEN条件表达式=顺序处理语句;ENDCASE;当CASE和IS之间的表达式的取值满足指定的条件表达式的值时,程序将执行后跟的,由符号“=”所指的顺序处理语句。CASE语句中条件表达式的形式可以是:1)一个值;2)多个值的逻辑“或”关系;3)一个取值范围;4)表示其它所有的缺省值(OTHERS)。如:WHEN值=顺序处理语句;---单个值WHEN值|值|值|…|值|=顺序处理语句;--多个值的“或”WHEN值TO值=顺序处理语句;-----一个取值范围WHENOTHERS=顺序处理语句;-----其它所有缺省值CASE语句使用举例ENTITYmux4ISPORT(a,b,i0,i1,i2,i3:INSTD_LOGIC;q:OUTSTD_LOGIC);EN
本文标题:eda技术与vhdl语言第三章_3
链接地址:https://www.777doc.com/doc-6317889 .html