EDA第五章VHDL设计进阶3节-并行语句-定稿

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

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

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

资源描述

黑龙江大学电子工程学院第五章VHDL设计进阶本章对VHDL的语言规则和语句类型做系统的论述。一、VHDL语言要素二、VHDL顺序语句三、VHDL并行语句※四、子程序五、库、程序包及其配置六、VHDL描述风格七、常用元件设计举例八、VHDL与原理图混合设计方式黑龙江大学电子工程学院三、VHDL并行语句VHDL中并行语句具有多种语句格式,各种并行语句在结构体中是并行执行的,执行方式与书写的顺序无关。并行语句内部还可以包括并行语句和顺序语句。并行语句主要有:进程语句、并行信号赋值语句、块语句、元件例化语句,生成语句和并行过程调用语句等。1、进程语句√2、并行信号赋值语句3、块语句结构4、并行过程调用语句5、元件例化语句6、生成语句黑龙江大学电子工程学院1、进程(PROCESS)语句–使用最频繁,最能体现VHDL语言特点的语句进程语句提供了一种使用顺序语句描述硬件行为的方法。一个结构体中可以包含多个进程,各进程是并行运行的,而进程内部是顺序执行的。(1)、PROCESS语法[进程标号:]PROCESS[(敏感信号参数表)][IS][进程说明部分]--用于定义该进程所需的局部数据环境BEGIN顺序描述语句;--用于描述进程的行为ENDPROCESS[进程标号];顺序描述语句部分是用于描述进程行为的顺序执行语句。PROCESS中规定每个进程语句在参量表中列出的某一个敏感信号的值改变的时候,立刻完成某一功能行为。行为的结果一般通过信号传递给其他的进程或者块语句。当进程的最后一个语句执行后,立即返回到进行的第一个语句,等待敏感信号的下一次变化。但是当进程执行时遇到WAIT语句时候,进程会被挂起。如果一个结构体中含有多个激活的进程,那么这些进程是并行运行的。黑龙江大学电子工程学院(2)、进程的组成进程(PROCESS)语句由进程说明部分,顺序描述语句部分和敏感信号参量表三部分组成。I、进程说明部分主要定义了一些局部量,可包括数据类型、常量、属性、子程序等。但是不能在此处定义信号和共享变量。II、顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。信号赋值语句:在进程中将计算或者处理的结果向信号赋值。变量赋值语句:在进程中以变量的形式存储计算的中间值。进程启动语句:当进程没有列出敏感信号列表的时候,进程的启动是通过进程里面的WAIT语句的条件来监视信号的变化,来决定进程是否启动的。子程序调用语句:对已定义的过程和函数进行调用,并参与计算。顺序描述语句:包括IF语句、CASE语句、LOOP语句和NULL语句等。进程跳出语句:包括NEXT语句和EXIT语句。III、敏感信号列表需要列出用于启动本进程的可读入的信号名(有WAIT语句的除外)。黑龙江大学电子工程学院(3)、进程设计要点I、虽然结构体中的进程是并行的,但同一个进程中的逻辑描述语句是顺序进行的,因此进程中只能设置顺序语句。II、进程的执行需要敏感信号列表中列出的敏感信号的变化来启动,或者由WAIT语句来激活。也就是进程中必须设置显示的或者隐式的敏感信号。且有了敏感信号列表的的进程中不能有WAIT语句。III、结构体的多个进程之间通过信号和共享变量来实现进程之间的并行执行。敏感信号列表需要列出用于启动本进程的可读入的信号名(有WAIT语句的除外)。IV、进程是一个重要的建模工具,进程的建模方式影响仿真结果。综合后对应于进程的硬件结构是对所有的读入信号都是敏感的,而在仿真时候,只是使用了列举的部分,这和综合后的电路功能有区别的,除非仿真时候将所有的可读入信号都列进去。当把所有的信号都列举进去后,这个进程就和并行赋值语句很相似了。一般IF语句被综合为组合逻辑电路,WAIT语句被综合为时序逻辑电路。黑龙江大学电子工程学院例5-22进程的应用,要是两进程都把所有输入信号都列为敏感信号时,ENTITYmulIS--这两进程才能同时执行PORT(a,b,c,selx,sely:INBIT;data_out:OUTBIT);ENDmul;ARCHITECTUREexOFmulISSIGNALtemp:BIT;BEGINp_a:PROCESS(a,b,selx)BEGINIF(selx=‘0’)THENtemp=a;ELSEtemp=b;--第一个进程启动会改变temp的值ENDIF;ENDPROCESSp_a;p_b:PROCESS(temp,c,sely)--temp是第二个进程的敏感信号BEGINIF(sely=‘0’)THENdata_out=temp;ELSEdata_out=c;ENDIF;ENDPROCESSp_b;ENDex;--第一个进程启动,第二个接着就会启动,而第二个可以独立启动黑龙江大学电子工程学院2、并行信号赋值语句并行赋值语句要求赋值目标必须是信号,在结构体中是同时执行的,每一个赋值语句相当于缩写的进程语句。所有的输入信号都被隐性的列为敏感信号列表中,任何信号变化都会启动相关的并行语句的赋值操作。(1)、简单信号赋值语句---是VHDL并行语句结构的最基本的单元赋值目标=表达式;要求赋值目标必须是信号,且要求数据类型和表达式类型一致。例5-23–简单的信号赋值语句,结构体中信号赋值语句是并行的ARCHITECTUREcurtOFbelISSIGNALs,e,f,g,h:STD_LOGIC;BEGINoutput1=aANDb;--结构体中的这5个赋值操作是同时发生的output2=c+d;g=eORf;h=eXORf;s1=g;ENDARCHITECTUREcurt;黑龙江大学电子工程学院(2)、条件信号赋值语句赋值目标=表达式1WHEN赋值条件1ELSE表达式2WHEN赋值条件2ELSE:表达式n;程序顺序检查各个赋值条件是否为真,将第一个为真的赋值条件的表达式结果赋给赋值目标。赋值条件允许有重叠的情况。且ELSE不能省略,这两点和CASE语句不同。条件中不能出现时钟判断,因为属性属于顺序语句ENTITYmuxIS例5-24–条件信号赋值语句PORT(a,b,c:INBIT;p1,p2:INBIT;z:OUTBIT);ENDmux;ARCHITECTUREbehaveOFmuxISBEGINz=aWHENp1=‘1’ELSE--顺序查找各个条件,只执行第一个满足bWHENp2=‘1’ELSE--条件的赋值操作,有优先级c;END;黑龙江大学电子工程学院(3)、选择信号赋值语句WITH选择表达式SELECT---选择表达式就是敏感信号列表赋值目标=表达式1WHEN选择值1,表达式2WHEN选择值2,:表达式nWHEN选择值n;和进程中的CASE语句很相似,当选择表达式中的敏感信号列表发生变化时,启动各子句的选择值进行测试对比,满足条件的进行赋值操作。和CASE一样不允许各条件有重叠的现象,也不允许存在条件涵盖不全的情况例5-25选择信号赋值LIBIARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdecoderISPORT(a,b,c:INSTD_LOGIC;data1,data2:INSTD_LOGIC;dataout:OUTSTD_LOGIC);ENDdecoder;黑龙江大学电子工程学院ARCHITECTUREconcuntOFdecoderISSIGNALinstruction:STD_LOGIC_VECTOR(2DOWNTO0);BEGINinstruction=c&b&a;WITHinstructionSELECTdataout=data1ANDdata2WHEN“000”,--逗号data1ORdata2WHEN“001”,data1NANDdata2WHEN“010”,data1NORdata2WHEN“011”,data1XORdata2WHEN“100”,data1XNORdata2WHEN“101”,‘z’WHENOTHERS;--选择赋值最后才用分号ENDconcunt;黑龙江大学电子工程学院3、块语句结构(BLOCK)块是VHDL中的一种划分机制,通常将结构体按照功能划分为好多个块,而结构体本身也相当于一个块,其机构和结构体是类似的,相当于将结构体中的并行语句进行组合,来改善并行语句及程序的可读性。(1)、语法块标号:BLOCK[(块保护表达式)]–块标号必须有说明语句;--包括类属说明和端口说明BEGIN并行语句;--可使用结构体中的任何并行语句ENDBLOCK[块标号];其中说明部分用于进行块的接口设置以及外界信号的连接状态的说明。包括类属说明和端口说明,类属说明主要用于参数的定义,端口说明主要用于信号的定义。通常使用GENERIC、GENERICMAP、PORT、PORTMAP语句来说明。说明部分语句有效范围仅限于当前的块,及其内部的子块,可以定义的项目有USE子句、子程序、数据类型、子程序、常数、信号和元件。块中并行语句部分可包含结构体中的任何并行语句结构。利用块语句可以将结构体划分为多个并行的块语句。黑龙江大学电子工程学院例5-26块应用本目录中有两个程序文件bit32.VHD和cpu.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEbit32ISTYPEtw32ISARRAY(31DOWNTO0)OFSTD_LOGIC;ENDbit32;--以上文件中定义了一个包LIBRARYIEEE;--以下为本程序文件USEIEEE.STD_LOGIC_1164.ALL;USEWORK.bit32.ALL;--使用本工作目录中的程序包bit32ENTITYcpuISPORT(clk,interrupt:INSTD_LOGIC;add:OUTtw32;data:INOUTtw32);ENDcpu;黑龙江大学电子工程学院ARCHITECTUREbehaveOFcpuISSIGNALibus,dbus:tw32;BEGINalu:BLOCKSIGNALqbus:tw32;BEGIN--ALU行为描述部分语句ENDBLOCKalu;reg8:BLOCKSIGNALzbus:tw32;BEGINreg1:BLOCKSIGNALqbus:tw32;BEGIN--REG1行为描述部分语句ENDBLOCKreg1;--其他reg8的行为描述部分语句ENDBLOCKreg8;ENDbehave;黑龙江大学电子工程学院4、并行过程调用语句(PROCEDURE)并行过程调用语句可以作为一个并行语句出现在结构体或者块语句中。和进程类似,过程中的语句也是顺序语句。过程的参数只能是IN、OUT和INOUT三种。当参数之一改变时,过程调用被激活。并行过程调用和顺序过程调用的调用格式是相同的。并行过程调用过程定义在结构体的说明部分,顺序过程调用过程定义在结构体的功能描述部分。[过程标号]:PROCEDURE过程名(关联参数表);--过程调用格式例5-27并行过程的调用LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmftISPORT(a:INSTD_LOGIC;b:INSTD_LOGIC;c:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmft;黑龙江大学电子工程学院ARCHITECTUREbehaveOFmftISPROCEDUREmax(ina,inb:INSTD_LOGIC;--constant省略过程定义SIGNALoutc:OUTSTD_LOGIC)ISVARIABLEtemp:STD_LOGIC;--并行过程定义在结构体的说明部分BEGIN--而顺序过程定义在进程的说明部分,在进程用调用IF(inainb)THEN–将ina和inb中最大的传递给outctemp:=inb;ELSEtemp:=ina;ENDIF;outc=te

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

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

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

×
保存成功