VHDL并行语句

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

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

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

资源描述

六、VHDL语言的并行语句1、并行信号赋值语句4、进程语句3、块语句2、条件信号赋值语句5、元件例化语句6、生成语句7、并行过程调用语句结构体生成语句条件信号赋值语句元件例化语句并行信号赋值语句块语句进程语句并行过程调用语句信号信号信号信号信号信号ARCHITECTUREENDARCHITECTURE结构体中的并行语句模块1、并行信号赋值语句赋值目标=表达式例ARCHITECTUREcurtOFbc1ISSIGNALs1,e,f,g,h:STD_LOGIC;BEGINoutput1=aANDb;output2=c+d;g=eORf;h=eXORf;s1=g;ENDARCHITECTUREcurt;2、条件信号赋值语句赋值目标=表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE...表达式;例ENTITYmuxISPORT(a,b,c:INBIT;p1,p2:INBIT;z:OUTBIT);END;ARCHITECTUREbehvOFmuxISBEGINz=aWHENp1='1'ELSEbWHENp2='1'ELSEc;END;选择信号赋值语句WITH选择表达式SELECT赋值目标信号=表达式WHEN选择值,表达式WHEN选择值,...,表达式WHEN选择值;例...WITHseltSELECTmuxout=aWHEN0|1,--0或1bWHEN2TO5,--2或3,或4或5cWHEN6,dWHEN7,'Z'WHENOTHERS;...3、块语句块标号:BLOCK[(块保护表达式)]接口说明;类属说明;BEGIN并行语句;ENDBLOCK块标号;与大部分的VHDL语句不同,BLOCK语句的应用,包括其中的类属说明和端口定义,都不会影响对原结构体的逻辑功能的仿真结果。例...b1:BLOCKSIGNALs1:BIT;BEGINS1=aANDb;b2:BLOCKSIGNALs2:BIT;BEGINs2=cANDd;b3:BLOCKBEGINZ=s2;ENDBLOCKb3;ENDBLOCKb2;y=s1;ENDBLOCKb1;...4、进程语句[进程标号:]PROCESS[(敏感信号参数表)][IS][进程说明部分]BEGIN顺序描述语句;ENDPROCESS[进程标号];PROCESS语句结构的一般表达格式如下在一个结构体中多个PROCESS语句可以同时并发运行,而进程内部语句之间是顺序关系。PROCESS语句在VHDL程序中,是描述硬件并行工作行为的最常用、最基本的语句。PROCESS组成PROCESS语句结构进程说明顺序描述语句敏感信号参数表信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句(1)进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。(2)顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。(3)为启动进程,在进程中必须包含有一个显式的敏感信号量表或者包含一个WAIT语句;敏感信号表应当紧跟在PROCESS之后,含有敏感信号表的进程语句中不允许再显式出现WAIT语句。说明1.PROCESS为一无限循环语句2.PROCESS语句具有顺序/并行运行双重性3.进程必须由敏感信号的变化来启动4.信号是多个进程间的通信线PROCESS语句特点5.一个进程中只允许描述对应于一个时钟信号的同步时序逻辑例:ENTITYmulISPORT(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;ENDIF;ENDPROCESSp_a;p_b:PROCESS(temp,c,sely)BEGINIF(sely='0')THENdata_out=temp;ELSEdata_out=c;ENDIF;ENDPROCESSp_b;ENDex;上例的综合结果例:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLR:INSTD_LOGIC;IN1:INSTD_LOGIC_VECTOR(3DOWNTO0);OUT1:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYCNT10;ARCHITECTUREARTOFCNT10ISBEGINPROCESS(IN1,CLR)ISBEGINIF(CLR=‘1’ORIN1=1001)THENOUT1=0000;--有清零信号,或计数已达9,OUT1输出0ELSE--否则作加1操作OUT1=IN1+1;--注意,使用了重载算符+,重载算符+是在库ENGIF;--STD_LOGIC_UNSIGNED中预先声明的ENDPROCESS;ENDARCHITECTUREART;组合电路型十进制加法器CNT10综合后的RTL硬件结构图MUX42CLROUT1[0]ADDER41IN1[3]IN1[2]IN1[1]IN1[0]0OUT1[3]OUT1[2]OUT1[1]S0Z3Z2Z1Z0B3B2B1B0A3A2A1A0A3A2A1A0VCC1S3S2S1S0B0OR2AND4NOTS0=1:=Z[3..0]=B[3..0]S0=0:=Z[3..0]=A[3..0]一般用于组合电路进程模式__进程标记:PROCESS(__信号名,__信号名,__信号名)VARIABLE__变量名:STD_LOGIC;VARIABLE__变量名:STD_LOGIC;BEGIN--指定信号--指定变量--过程调用--如果语句--CASE语句--循环语句ENDPROCESS__进程标记;用于时序电路进程模式__进程标记:PROCESS(__信号名,__信号名,__信号名)VARIABLE__变量名:STD_LOGIC;VARIABLE__变量名:STD_LOGIC;BEGINWAITUNTIL__时钟信号=‘1’;或CLK'eventandCLK='1'--指定信号--指定变量--过程调用--如果语句--CASE语句--循环语句ENDPROCESS__进程标记;5、元件例化语句例化名:元件名PORTMAP(--元件例化语句[端口名=]连接端口名,...);元件例化就是将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。COMPONENT元件名ISGENERIC(类属表);--元件定义语句PORT(端口名表);ENDCOMPONENT文件名;元件定义(声明)语句元件例化语句A1U1U2Z1U3B1C1D1ABABABCCCS1S2ND2ND2ND2例:利用元件例化语句设计如下所示电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYND2ISPORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDENTITYND2;ARCHITECTUREARTND2OFND2ISBEGINC=ANANDB;ENDARCHITECTUREARTND2;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYORD41ISPORT(A1,B1,C1,D1:INSTD_LOGIC;Z1:OUTSTD_LOGIC);ENDENTITYORD41;ARCHITECTUREARTORD41OFORD41ISCOMPONENTND2ISPORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDCOMPONENTND2;SIGNALS1,S2:STD_LOGIC;BEGINU1:ND2PORTMAP(A1,B1,S1);--位置关联方式U2:ND2PORTMAP(A=C1,C=S2,B=D1);--名字关联方式U3:ND2PORTMAP(S1,S2,C=Z1);--混合关联方式ENDARCHITECTUREARTORD41;例:A1U1U2Z1U3B1C1D1ABABABCCCS1S2ND2ND2ND26、生成语句[标号:]FOR循环变量IN取值范围GENERATE说明;BEGIN并行语句;ENDGENERATE[标号];表达式TO表达式;--递增方式,如1TO5表达式DOWNTO表达式;--递减方式,如5DOWNTO1[标号:]IF条件GENERATE说明;BEGIN并行语句;ENDGENERATE[标号];取值范围生成语句有一种复制作用,在设计中,只要根据某些条件,设定好某一元件或设计单位,就可以利用生成语句复制一组完全相同的并行元件或设计单元电路结构。:生成语句的两种形式A[0]COMPINPUTOUTPUTB[0]A[1]COMPINPUTOUTPUTB[1]A[7]COMPINPUTOUTPUTB[7]…例:利用生成语句产生的八个相同的电路模块主要的VHDL程序如下:…COMPONENTCOMPISPORT(X:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDCOMPONENTCOMP;SIGNALA,B:STD_LOGIC_VECTOR(0TO7);…GEN:FORIINA'RANGEGENERATEU1:COMPPORTMAP(X=A(I),Y=B(I));ENDGENERATEGEN;…7、并行过程调用语句PROCEDURE过程名(参数1;参数2;)IS[声明语句;]BEGIN[顺序处理语句;]END过程名;并行过程调用语句可以作为一个并行语句直接出现在结构体或块语句中。并行过程调用语句的功能等效于包含了同一个过程调用语句的进程。并行过程调用语句的语句调用格式与前面讲的顺序过程调用语句是相同的。过程调用的实质内容要先装入程序包中(Package):过程名(关联参数表);并行过程调用:位置关联方式名字关联方式=参数关联方式例:设有一过程PROCEDUREvect(a,b:INBIT;x,y:INOUTBIT);则调用时:位置关联方式:vect(in1,in2,out1,out2);名字关联方式:vect(a=in1,b=in2,x=out1,y=out2);使用说明1、过程的参数表中可以使用IN、OUT、INOUT三种;(不能理解为端口)2、过程可以返回多个变量(通过OUT、INOUT定义的参数返回);3、参数对象可以为常量(IN方式)、信号、变量;4、在进程外的过程调用为并行过程调用;在进程内的为顺序过程调用;函数调用:FUNCTION函数名(参数1;参数2)RETURN数据类型名IS[定义变量语句;]BEGIN[顺序处理语句;]RETURN[返回变量名];END函数名;函数调用的实质内容要先装入程序包中(Package):函数名(关联参数表);使用说明1、函数的参数表中只能为IN的信号与常量;2、函数返回值只有一个(通过RETURN实现,由函数名传给调用者);3、也可以像过程一样使用位置关联方式和名字关联方式;1、过程可以有多个返回值,函数只有一个;2、参数传递方式不同:过程(INOUTINOUT)函数(IN)过程(Procedure)函数(Function)两者的主要区别:1库的种类A.IEEE库B.STD库C.WORK库D.VITAL库七、VHDL库2库的用法LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.STD_ULOGIC;USEIEEE.STD_LOGIC_1164.RISING_EDGE;USE语句的使用有两种常用格式:USE库名.程序

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

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

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

×
保存成功