第6章VHDL描述语句.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6章VHDL描述语句6.1顺序描述语句6.2并行描述语句6.3属性描述与定义语句6.4文本文件操作语句6.1顺序描述语句所谓“顺序”,是指完全按照程序中语句出现的顺序去执行各条语句,而且在结构层次中前面语句的执行结果可能直接影响后面语句的结果。VHDL共有6类顺序语句:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句和空操作语句。第6章VHDL描述语句6.1顺序描述语句6.1.1赋值语句赋值语句将一个值或表达式的运算结果传递给某一数据对象,如变量、信号或由此组成的数组。VHDL设计实体内的数据传递以及端口数据的读写都是通过赋值语句的运行实现的。第6章VHDL描述语句1.变量赋值语句例如:a:=3;b:=c+d;第6章VHDL描述语句2.信号赋值语句(信号代入)例如:y=aANDb;表示将信号量a和b相与的结果赋给目的信号量y。第6章VHDL描述语句①从语句格式看,变量赋值语句用“:=”;信号赋值语句用“=”。②从有效的范围看,变量值是一个局部的、暂时性的数据对象;信号具有全局性特性,它不但可作为一个设计实体内部各单元之间数据传送的载体,而且可通过信号与其他实体进行通信。第6章VHDL描述语句③从有效的时间看,变量赋值是立即发生的(假设进程已启动),即是一种时间延迟为0的赋值行为;信号赋值通常不是立即发生的,而是发生在一个进程结束时,赋值过程总是有某个延时的,它反映了硬件系统的重要性,综合后可以找到与信号对应的硬件结构(如一个I/O口、一个D触发器等)。6.1.2进程语句与WAIT语句然而,顺序语句是不能出现在结构体中的,因此引入一种进程机制,用于顺序语句的仿真。进程语句的一般格式为:[进程标号:]PROCESS[(敏感信号表)][IS][{说明语句}]BEGIN{顺序语句}ENDPROCESS[进程标号];进程语句例D触发器ENTITYdff_2ISPORT(clk,d:INBit;q:OUTBit);ENDdff_2;ARCHITECTUREbhv1OFdff_2ISBEGINPROCESS(clk)BEGINIFclk’EventANDclk=‘1’THENq=d;ENDIF;ENDPROCESS;ENDbhv1;(1)一个进程描述一个数字电路的工作过程,可以抽象为一个数字元器件。(2)PROCESS的启动:当敏感信号表中任一信号发生变化时,将启动该PROCESS语句,由顺序语句描述的行为将从上到下执行一次。行为的结果可以赋给信号,并通过信号被其他的PROCESS或BLOCK读取或赋值。进程语句的特点(3)进程的设计要点:①同一构造体中的进程之间是并行运行的,同一进程中的逻辑描述语句则是顺序运行的;②进程既可以由敏感信号的变化来启动,也可以由满足条件的WAIT语句来激活,但它们不能同时存在于一个进程中;③构造体中多个进程之所以能并行同步运行,一个很重要的原因是进程之间的通信是通过传递信号和共享变量值来实现的;④进程是重要的建模工具,进程结构不但为综合器所支持,而且进程的建模方式将直接影响仿真和综合结果。1、WAIT语句WAIT语句的作用是将正在仿真的进程挂起,并在WAIT语句的条件为真时,再次激活该进程。因此WAIT语句的功能,是将进程在“挂起”和“激活”两种状态之间进行转换。WAIT语句的一般格式为:WAIT[ON敏感信号表][UNTIL条件表达式][FOR时间表达式];因此,当一个进程语句中没有敏感信号表,同时在该进程内部的顺序语句中也没有WAIT语句,则仿真器永远也不会跳出初始化阶段。所以,一个进程语句要么含有敏感信号表,要么在该进程的内部有WAIT语句,否则该进程将陷入无限循环!WAIT语句WAIT;--无限等待WAITON信号表;--等待敏感信号发生变化,就激活进程WAITUNTIL条件表达式;--等待条件表达式中的敏感信号发---生变化且条件表达式为“true”,就执行后面的语句。WAITFOR时间表达式;--超时等待语句,等待时间超过时间表达式规定的时间后,就执行后面的语句。下面是WAIT语句的常见例子:WAITONreset,clk;--等待信号reset或者clk的值变化WAITUNTILclk’eventandclk=‘1’;--等待信号clk变化,并且clk的值=‘1’描述一个附有清零功能的D触发器?进程如何描述?p1:PROCESS(clear,clk)BEGINIFclear=‘0’THENq=“00000000”;ELSIF(clk’EventANDclk=’1’)THEN--clk的上升沿q=d;ENDIF;ENDPROCESSp1;p2:PROCESSBEGINIFclear=‘0’THENq=(OTHERS=’0’);ELSIF(clk’EventANDclk=’1’)THENq=d;ENDIF;WAITONclear,clk;ENDPROCESSp2;6.1.3IF语句IF条件句Then顺序语句;ENDIF;1IF条件句Then顺序语句;ELSIF条件句Then顺序语句;...ELSE顺序语句;ENDIF;4IF条件句Then顺序语句;ELSE顺序语句ENDIF;2IF条件句ThenIF条件句Then...ENDIFENDIF;3(1) IF语句的一般形式是以保留字“IF”开始,而以保留字“ENDIF”结尾。IF语句的保留字“IF”和保留字“ENDIF”之间可以包含有多个ELSIF子句和一个ELSE子句,它们是可选项。(2) IF语句的条件是一个布尔表达式,返回值为布尔类型(“TRUE/FALSE”)。当条件满足时执行接下来的顺序语句;当条件不满足时执行下面的ELSIF子句或ELSE子句或结束该IF语句。说明:第6章VHDL描述语句【例6.4】IF语句示例。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);output:OUTSTD_LOGIC);ENDmux4;第6章VHDL描述语句ARCHITECTURErtlOFmux4ISBEGINPROCESS(input,sel)BEGINIF(sel=“00”)THENoutput=input(0);ELSIF(sel=“01”)THENoutput=input(1);第6章VHDL描述语句ELSIF(sel=“10”)THENoutput=input(2);ELSEoutput=input(3);ENDIF; ENDPROCESS;ENDrtl;第6章VHDL描述语句说明:(1) IF_ELSIF_ELSE语句经常用来描述具有多控制条件的硬件电路。(2) IF_ELSIF语句中顺序语句的执行条件具有向上相“与”的功能。(3) IF语句不仅可用于选择器设计,而且用于比较器、译码器等也是相当方便的。(1) IF_ELSIF_ELSE语句经常用来描述具有多控制条件的硬件电路。(2) IF_ELSIF语句中顺序语句的执行条件具有向上相“与”的功能。(3) IF语句不仅可用于选择器设计,而且用于比较器、译码器等也是相当方便的。说明:第6章VHDL描述语句6.1.4CASE语句CASE语句格式如下://----------------------------------------------------------CASE条件表达式ISWHEN选择值1=顺序处理语句1;WHEN选择值2=顺序处理语句2;[WHENOTHERS=顺序处理语句n;]ENDCASE;-----------------------------------------------------------//第6章VHDL描述语句(1) CASE语句的一般形式是以保留字“CASE”后跟一个条件表达式和一个保留字“IS”开始,而以保留字“ENDCASE”结尾。CASE语句的保留字“CASE”和保留字“ENDCASE”之间可以包含有多个WHEN语句,它们是可选项。(2) VHDL程序具体执行哪一个顺序处理语句,取决于条件表达式的值与哪一个WHEN语句的选择值或OTHERS相匹配。如果条件表达式的值与某一个WHEN语句的选择值或OTHERS相匹配,则执行它们后面所跟的顺序处理语句,执行完顺序处理语句后将结束该CASE语句。说明:第6章VHDL描述语句(3) WHEN语句中的选择值必须在条件表达式的取值范围内。(4) CASE语句中每一条件语句的选择只能出现一次,相选择值的条件语句不能重复出现。(5)所有条件表达式的值都必须穷举,不能穷举的值用OTHERS表示(OTHERS代表已给的所有条件语句中未能列出的其他可能取值,这样可以避免综合器插入不必要的寄存器)。第6章VHDL描述语句(6) CASE语句执行时必须选中,且只能选中所列条件语句中的一条。(7)CASE语句中,WHEN语句可以颠倒次序而不影响语句功能,IF语句却不能(IF隐含有优先级判别)。但是,同样的逻辑功能,CASE结构综合后比IF语句将消耗更多的芯片资源。值域的表达方式①单个普通数值,如6②数值选择范围,如2TO4,表示取值为2,3,4③并列数值,如2|4,表示取值为2或者4④以上三种的混合方式例子:WHEN4TO7|2=z3=‘1’;--表示选项值为2,4,5,6,7时选中。例如:用case语句来描述四选一多路选择器的进程语句PROCESS(sel,a,b,c,d)BEGINCASEselISWHEN˝00˝=outc=a;WHEN˝01˝=outc=b;WHEN˝10˝=outc=c;WHENOTHERS=outc=d;ENDCASE;ENDPROCESS;abcdseloutc200011110练习1、将上述进程的结构体和实体补充完整,完成4选1数据选择器的设计练习2、用if语句来描述四选一多路选择器的进程语句最后,比较if和case语句完成的系统的rtl电路图,哪一个更简单?哪一个速度快?用if语句来描述四选一多路选择器的进程语句PROCESS(sel,a,b,c,d)BEGINIFsel=˝00˝THENouti=a;ELSIFsel=˝01˝THENouti=b;ELSIFsel=˝10˝THENouti=c;ELSEouti=d;ENDIF;ENDPROCESS;010101abcdseloutisel=˝10˝sel=˝01˝sel=˝00˝(1)在描述同样逻辑功能的硬件电路时,由于CASE语句的条件与执行语句的对应关系十分明显,因此它的可读性要比IF语句强的多。(2)CASE语句不存在优先级的问题。由于sel的输出值只有一种可能,因此CASE语句中WHEN引导的语句的排列顺序与程序运行先后没有任何关系,这点与IF_THEN语句有着明显的不同。(3) CASE语句不仅可用于选择器设计,而且可用于总线、编码、译码等行为。CASE和IF语句比较:4、NULL语句空操作语句NULL;例如:CASEOpcodeISWHEN001=tmp:=regaANDregb;WHEN101=tmp:=regaORregb;WHEN110=tmp:=NOTrega;WHENOTHERS=NULL;ENDCASE;5、LOOP语句LOOP语句用于循环体中。LOOP语句的一般格式为:[语句标号:][重复模式]LOOP{顺序语句}ENDLOOP[语句标号];重复模式可以是“WHILE布尔表达式”;也可以是“FOR循环变量IN离散范围”;例奇校验电路ENTITYodd_checkISPORT(z:INBit_Vector(7DOWNTO0);odd:OUTBit);ENDodd_check;ARCHITECTUREarch_whileOFodd_checkIS--“WHILE布尔表达式”的结构体BEGINp1:PROCESS(z

1 / 104
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功