EDA技术及应用第5章.ppt_第1页
EDA技术及应用第5章.ppt_第2页
EDA技术及应用第5章.ppt_第3页
EDA技术及应用第5章.ppt_第4页
EDA技术及应用第5章.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,VHDL程序的常用语句,5.3VHDL并行语句(ConcurrentStatements),并行语句是指语句的执行顺序与语句的书写顺序无关,其执行是并发执行的语句,并行语句之间可以有信息的交流,也可以互为独立、互不相关。每一个并发描述语句的内部语句可以有两种不同的运行方式,即并行方式和顺序方式。VHDL结构体中的并行语句主要有八种:,并行语句在结构体中的使用格式如下:ARCHITECTURE结构体名OF实体名IS说明语句;BEGIN并行语句;ENDARCHITECTURE结构体名;,1、进程语句2、块语句3、并行信号赋值语句4、并行过程调用语句5、并行断言语句6、类属语句7、元件例化语句8、生成语句,2,并行语句运行示意图,顺序语句1顺序语句2.顺序语句n,进程语句,生成语句,信号,元件例化语句,并行过程调用语句,并行信号赋值语句,信号,信号,信号,信号,ARCHITECTURE,ENDARCHITECTURE,3,5.3.1进程语句(ProcessStatement),1.进程语句格式PROCESS语句结构的一般表达格式如下:,一个结构体中可以有多个进程语句,同时并行执行。,进程标号:PROCESS(敏感信号参数表)IS进程说明部分;BEGIN顺序描述语句;ENDPROCESS进程标号;,4,ENTITYmulISPORT(a,b,c,x,y:INBIT;data_out:OUTBIT);ENDmul;ARCHITECTUREexOFmulISSIGNALtemp:BIT;BEGINp_a:PROCESS(a,b,x)BEGINIF(x=0)THENtemp=a;ELSEtemp=b;ENDIF;ENDPROCESSp_a;p_b:PROCESS(temp,c,y)BEGINIF(y=0)THENdata_out=temp;ELSEdata_out=c;ENDIF;ENDPROCESSp_b;ENDex;,例:,5,2.进程语句要点,进程的设计需要注意的问题:PROCESS为一无限循环语句,只有两种状态:执行和等待进程必须由敏感信号的变化(变量不能作为敏感信号)来启动或具有一个显式的wait语句来激励使用了敏感表的进程不能再含有等待语句进程语句本身是并行语句,但其内部则为顺序语句信号是多个进程间的通信线,是进程间进行联系的重要途径在任一进程的说明部分不能定义信号一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,进程可以描述组合电路,最重要的是用它设计时序电路,6,进程工作原理示意图,7,5.3.3并行信号赋值语句(ConcurrentSignalAssignmentStatement),例如:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYand_gateISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDand_gate;ARCHITECTUREbehaveOFand_gateISBEGINc=aANDb;ENDARCHITECTUREbehave;,(1)简单信号赋值语句的格式:赋值目标=表达式;结构体中的多条并发赋值语句是并行执行的。,8,(2)条件信号赋值语句(ConditionalSignalAssignment),条件信号赋值语句的表达方式如下:赋值目标=表达式WHEN条件1ELSE表达式WHEN条件2ELSE.表达式;,条件信号赋值语句的几点说明:1)只有当条件满足时,才能将该条件前面表达式的值赋给目标信号;2)对条件的判断是有顺序的,条件1具有最高的优先级;3)条件表达式的值应该是布尔型数值;4)条件的最后一个表达式不含有when的子句。5)条件信号赋值语句允许条件重叠。,9,例:ENTITYmuxISPORT(a,b,c:INBIT;p1,p2:INBIT;z:OUTBIT);ENDmux;ARCHITECTUREbehvOFmuxISBEGINz=aWHENp1=1ELSE-注意,第一句具有最高优先级bWHENp2=1ELSEc;END;,10,libraryieee;useieee.std_logic_1164.all;entityp_encoderisport(i:instd_logic_vector(7downto0);a:outstd_logic_vector(2downto0);end;architecturebehvofp_encoderisbegina=111wheni(7)=1else110wheni(6)=1else101wheni(5)=1else100wheni(4)=1else011wheni(3)=1else010wheni(2)=1else001wheni(1)=1else000wheni(0)=1else111;end;,例:8输入优先编码器,11,(3)选择信号赋值语句(SelectedSignalAssignment),选择信号赋值语句的格式如下:WITH选择表达式SELECT赋值目标信号=表达式1WHEN选择值1,表达式2WHEN选择值2,.表达式nWHEN选择值n;选择信号赋值语句中也有敏感量,即关键字WITH旁边的选择信号表达式,每当选择表达式的值发生变化时,就启动此语句对各子句的选择值同时进行测试对比,没有优先级之分,若有满足条件的子句时,就将此子句表达式中的值赋给赋值目标信号。,12,例:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoderISPORT(a,b,c:INSTD_LOGIC;data1,data2:INSTD_LOGIC;dataout:OUTSTD_LOGIC);ENDdecoder;ARCHITECTUREcontOFdecoderISSIGNALinstruction:STD_LOGIC_VECTOR(2DOWNTO0);BEGINinstruction连接端口名,.);,15,例:按下图电路,使用元件例化语句设计一个全加器,16,程序1:调用库中的元件例化,并使用名称关联方式libraryieee;useieee.std_logic_1164.all;entityfaddisport(a,b,cin:instd_logic;sum,cout:outstd_logic);end;,17,ARCHITECTUREfadd_strucOFfaddISCOMPONENTand2PORT(in1,in2:instd_logic;out:outstd_logic);ENDCOMPONENT;COMPONENTor2PORT(in1,in2:instd_logic;out:outstd_logic);ENDCOMPONENT;COMPONENTxorPORT(in1,in2:instd_logic;out:outstd_logic);ENDCOMPONENT;SIGNALi0,i1,i2:std_logic;BEGIN,18,u1:xorPORTMAP(in1=a,in2=b,out=i0);u2:and2PORTMAP(in1=a,in2=b,out=i1);u3:xorPORTMAP(in1=i0,in2=cin,out=sum);u4:and2PORTMAP(in1=i0,in2=cin,out=i2);u5:or2PORTMAP(in1=i1,in2=i2,out=cout);ENDfadd_struc;,19,ARCHITECTUREfadd_strucOFfaddISCOMPONENTand2PORT(in1,in2:instd_logic;out:outstd_logic);ENDCOMPONENT;COMPONENTor2PORT(in1,in2:instd_logic;out:outstd_logic);ENDCOMPONENT;COMPONENTxorPORT(in1,in2:instd_logic;out:outstd_logic);ENDCOMPONENT;SIGNALi0,i1,i2:std_logic;BEGINu1:xorPORTMAP(a,b,i0);u2:and2PORTMAP(a,b,i1);u3:xorPORTMAP(i0,cin,sum);u4:and2PORTMAP(i0,cin,i2);u5:or2PORTMAP(i1,i2,cout);ENDfadd_struc;,程序2:调用库中的元件例化,并使用位置关联方式,20,ARCHITECTUREfadd_strucOFfaddISCOMPONENTand2aPORT(x,y:instd_logic;z:outstd_logic);ENDCOMPONENT;COMPONENTor2aPORT(x,y:instd_logic;z:outstd_logic);ENDCOMPONENT;COMPONENTxor2PORT(x,y:instd_logic;z:outstd_logic);ENDCOMPONENT;SIGNALi0,i1,i2:std_logic;BEGINu1:xor2PORTMAP(a,b,i0);u2:and2aPORTMAP(a,b,i1);u3:xor2PORTMAP(i0,cin,sum);u4:and2aPORTMAP(i0,cin,i2);u5:or2aPORTMAP(i1,i2,cout);ENDfadd_struc;,程序3:调用自己设计的元件例化,并使用位置关联方式,21,libraryieee;useieee.std_logic_1164.all;entityand2aisport(x,y:instd_logic;z:outstd_logic);end;architecturebehofand2aisbeginz=xandy;end;libraryieee;useieee.std_logic_1164.all;entityor2aisport(x,y:instd_logic;z:outstd_logic);end;architecturebehofor2aisbeginz=xory;end;,libraryieee;useieee.std_logic_1164.all;entityxor2isport(x,y:instd_logic;z:outstd_logic);end;architecturebehofxor2isbeginz=xxory;end;,22,5.3.6类属(Generic)语句,ENTITY实体名ISGENERIC(类属表);PORT(端口表);ENDENTITY文件名;,类属语句用于不同层次之间的信息传递,类属参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。类属和常数不同,常数只能从设计实体的内部得到赋值,且不能再改变,而类属的值可以从设计实体的外部提供。因此设计者可以从外面通过类属参量重新设定,从而容易的改变一个设计实体或一个元件的内部电路结构和规模。,23,类属语句包括类属说明语句和类属映射语句,书写格式分别为:,类属说明语句的一般格式:GENERIC(常数名:数据类型:=设定值;常数名:数据类型:=设定值);,类属映射语句的一般格式:GENERICMAP(类属表),24,libraryieee;useieee.std_logic_1164.all;entityfredeviderisgeneric(n:integer:=4);port(clkin:instd_logic;clkout:outstd_logic);end;,Generic应用举例1:,25,architecturebehoffredeviderissignalcounter:integerrange0ton;signalclk:std_logic;beginprocess(clkin)beginifrising_edge(clkin)thenifcounter=nthenclk=notclk;counter=0;elsecounter4)portmap(clk,clk2);u3:a_21muxportmap(sel,clk1,clk2,clkout);end;,28,5.3.8生成语句(GenerateStatement),生成语句的主要功能是能够进行复制,简化有规则设计结构的逻辑描述。,生成语句的语句格式有如下两种形式:for语句形式和IF语句形式,标号:For循环变量IN取值范围Generate说明语句并行语句EndGenerate标号;,对于for语句的结构,主要用来描述设计中的一些有规律的单元结构。生成参数(循环变量)是自动产生的,它是一个局部变量,根据取值范围自动递增或递减。取值范围的语句格式,有两种形式:表达式TO表达式;-递增方式,如1TO5表达式DOWNTO表达式;-递减方式,如5DOWNTO1其中的表达式必须是整数。,29,对于if语句的结构,主要用来描述设计中不规则的单元结构,如某些边界条件的特殊性。该语句中,若条件为真,则执行生成语句中的并行语句,若为假则不执行该语句。,标号:IF条件Generate说明并行语句EndGenerate标号;,30,两种格式都由四部分组成:,(1)生成方式:有for和if语句结构,规定并行语句的复制方式(2)说明部分:对数据类型和数据对象等进行一些说明(3)并行语句:是复制的基本单元(4)标号:标号是必须的,下面是使用生成语句产生的8个相同的电路模块的示例,31,COMPONENTcompPORT(INPUT:INSTD_LOGIC;OUTPUT:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALa:STD_LOGIC_VECTOR(0TO7);SIGNALb:STD_LOGIC_VECTOR(0TO7);gen:FORiINaRANGEGENERATE-aRANGE为数据区间类属性u1:compPORTMAP(INPUT=a(i),OUTPUT=b(i);名称映射ENDGENERATEgen;.,32,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLatch_1ISPORT(D:INSTD_LOGIC;ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDENTITYLatch_1;ARCHITECTUREoneOFLatch_1ISSIGNALsig_save:STD_LOGIC;BEGINPROCESS(D,ENA)BEGINIFENA=1THENsig_save=D;ENDIF;Q=sig_save;ENDPROCESS;ENDARCHITECTUREone;,下面为使用元件例化语句和FOR_GENERATE语句完成一个8位三态锁存器的设计的例子1.设计底层的1位锁存器:,33,2.设计顶层的8位锁存器,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSN74373ISPORT(D:INSTD_LOGIC_VECTOR(8DOWNTO1);OEN,G:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(8DOWNTO1);ENDENTITYSN74373;,ARCHITECTUREoneOFSN74373ISCOMPONENTLatch_1PORT(D,ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALsig_mid:STD_LOGIC_VECTOR(8DOWNTO1);BEGINGeLatch:FORiIN1TO8GENERATELatchx:Latch_1PORTMAP(D(i),G,sig_mid(i);-位置映射ENDGENERATE;Q=sig_midWHENOEN=0ELSEZZZZZZZZ;-当OEN=1时,Q(8)-Q(1)输出状态呈高阻态ENDARCHITECTUREone;,34,5.4顺序语句(SequentialStatements),顺序语句和并行语句是VHDL中的两大基本描述语句系列。,35,5.4.2if语句(IfStatements),if语句是一种条件语句,其基本结构有四种:,1.if条件句then顺序语句;endif;,2.if条件句then顺序语句;else顺序语句;endif;,4.if条件句thenif条件句thenendif;endif;,3.if条件句then顺序语句;elsif条件句then顺序语句;else顺序语句;endif;,36,1.if条件句then顺序语句;endif;,注意:没有ELSE的IF语句,属于不完备的IF语句,在综合时一般会生成一个时序电路。,libraryieee;useieee.std_logic_1164.all;entitydff1isport(d,clk:instd_logic;q:outstd_logic);enddff1;architecturertlofdff1isbegin,process(clk)beginifclkeventandclk=1thenq=d;endif;endprocess;endrtl;,例:D触发器,37,2.if条件句then顺序语句;else顺序语句;endif;,注意:有ELSE的IF语句,在综合时一般会生成一个二选一的组合电路。,libraryieee;useieee.std_logic_1164.all;entitymux2isport(a,b,sel:instd_logic;c:outstd_logic);endmux2;architecturertlofmux2isbegin,process(a,b,sel)beginifsel=1thenc=a;elsec=b;endif;endprocess;endrtl;,例:2选1数据选择器,38,3.if条件句then顺序语句;elsif条件句then顺序语句;else顺序语句;endif;,这种多选择控制的IF语句,它设置了多个条件,当满足所设的多个条件之一时,就执行该条件后的顺序语句,并不再判断其它条件,直接结束if语句的执行。当所设置的条件都不满足时,程序执行else和endif之间的顺序语句。此语句用于有优先级的条件判断,因此各条件式中的条件可以重叠。如果所需判断的条件没有优先级的差别,且条件之间没有重叠的情况,建议使用case语句。,39,例:四选一的数据选择器。,libraryieee;useieee.std_logic_1164.all;entitymux4isport(input:instd_logic_vector(3downto0);sel:instd_logic_vector(1downto0);y:outstd_logic);endmux4;architecturertlofmux4isbeginprocess(sel,input),40,beginifsel=“00”theny=input(0);elsifsel=“01”theny=input(1);elsifsel=“10”theny=input(2);elsey=input(3);endif;endprocess;endrtl;,41,例:用IF语句设计一个38译码器。,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecode3_8ISPORT(a,b,c:INSTD_LOGIC;y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDdecode3_8;ARCHITECTUREoneOFdecode3_8ISSIGNALcomb:STD_LOGIC_VECTOR(2DOWNTO0);BEGINcomb=c,42,process(comb)beginifcomb=“000”theny=“11111110”;elsifcomb=“001”theny=“11111101”;elsifcomb=“010”theny=“11111011”;elsifcomb=“011”theny=“11110111”;elsifcomb=“100”theny=“11101111”;elsifcomb=“101”theny=“11011111”;elsifcomb=“110”theny=“10111111”;elsifcomb=“111”theny=“01111111”;elsey=“11111111”;endif;endprocess;endone;,43,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(din:INSTD_LOGIC_VECTOR(0TO7);output:OUTSTD_LOGIC_VECTOR(2TO0);ENDcoder;ARCHITECTUREbehavOFcoderISBEGINPROCESS(din)BEGINIF(din(7)=0)THENoutput=000;ELSIF(din(6)=0)THENoutput=001;ELSIF(din(5)=0)THENoutput=010;ELSIF(din(4)=0)THENoutput=011;ELSIF(din(3)=0)THENoutput=100;ELSIF(din(2)=0)THENoutput=101;ELSIF(din(1)=0)THENoutput=110;ELSEoutput=111;ENDIF;ENDPROCESS;ENDbehav;,例:优先编码器描述,44,4.if条件句thenif条件句thenendif;endif;,If语句可以嵌套,但层数不宜过多。,45,libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycounter10isport(en,reset,clk:instd_logic;q:bufferstd_logic_vector(3downto0);co:outstd_logic);endcounter10;architecturebehavofcounter10isbeginprocess(clk,reset,en)beginifreset=1thenq=0000;elsifclkeventandclk=1thenifen=1thenifq1001thenq=q+1;elseq顺序语句;.WhenOthers=顺序语句;ENDCASE;,选择值可以有四种不同的表达方式:单个普通数值,如6。数值选择范围,如(2TO4),表示取值为2、3或4。并列数值,如35,表示取值为3或者5。WHENOTHERS,,CASE语句也只能在进程中使用,当执行到CASE语句时,首先计算CASE和IS之间的表达式的值,然后根据条件语句中与之相对应的选择值来执行相应的顺序语句,最后结束CASE语句。,47,使用CASE语句需要注意:(1)条件句的取值必须在表达式的取值范围之内;(2)除非所有条件句中的选择值能完整覆盖CASE语句中的所有表达式的取值,否则最后一个条件句中的选择值必须为OTHERS;(3)CASE语句的每一条件句的取值只能出现一次,不能有相同选择值的条件句的出现;(4)CASE语句执行中必须选中且只能选择一个条件句,这表明CASE语句至少要包含一个条件句。,48,例:3-8译码器libraryieee;useieee.std_logic_1164.all;entitydecoderisport(a,b,c,G1,G2A,G2B:instd_logic;y:outstd_logic_vector(7downto0);enddecoder;architecturertlofdecoderissignalindata:std_logic_vector(2downto0);beginindatayyyyyyyyy=“XXXXXXXX”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论