元件例化语句块语句和生成语句课件_第1页
元件例化语句块语句和生成语句课件_第2页
元件例化语句块语句和生成语句课件_第3页
元件例化语句块语句和生成语句课件_第4页
元件例化语句块语句和生成语句课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

元件例化语句、块语句与生成语句(P67-68、73-76)元件例化语句、块语句与生成语句(P67-68、73-76)1本课要解决的问题:掌握元件例化语句的格式与应用;掌握块语句的格式与应用;掌握生成语句的格式与应用。本课要解决的问题:掌握元件例化语句的格式与应用;2顺序语句的总结VHDL的顺序语句包括:赋值语句等待语句返回语句流程控制语句空操作语句顺序语句的总结VHDL的顺序语句包括:赋值语句等待语句返回语3顺序语句的特点:语句的执行与书写顺序一致;顺序语句只能在进程、过程、函数中执行;顺序语句的特点:语句的执行与书写顺序一致;顺序语句只能在4并行语句VHDL的并行语句包括:赋值语句块语句进程语句元件例化语句生成语句并行语句VHDL的并行语句包括:赋值语句块语句进程语句元件例5并行语句的特点语句的执行与书写顺序无关,必须通过敏感信号的变化来启动;每个并行语句相对独立,一个语句一般对应一个电路模块,语句间通过信号通信;并行语句的特点语句的执行与书写顺序无关,必须通过敏感信号的6一、利用元件例化语句描述的

表决器BEGINU1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);U2:an2PORTMAP(a=>SW2,b=>SW3,c=>i2);U3:an2PORTMAP(a=>SW1,b=>SW3,c=>i3);U4:o3PORTMAP(i1,i2,i3,L2);U5:n1PORTMAP(L2,L1);ENDbehav;ENTITYvoterISPORT(SW1,SW2,SW3:INBIT;L1:OUTBIT;L2:BUFFERBIT);ENDvoter;ARCHITECTUREbehavOFvoterISSIGNALi1,i2,i3:BIT;COMPONENTan2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENTan2;COMPONENTo3PORT(l,m,n:INBIT;z:OUTBIT);ENDCOMPONENTo3;COMPONENTn1PORT(x:INBIT;y:OUTBIT);ENDCOMPONENTn1;元件定义语句,将实体an2、o3和n1定义为元件元件调用语句,调用元件an2、o3、n1,U1~U5为元件标号一、利用元件例化语句描述的

表决器BEGINENTITYv7二、元件例化语句(P73-75)作用

将事先设计好的实体看作是一个“元件”,在新的设计中调用这个元件,定义这个元件与其他信号、元件与元件、元件与外部端口的连接关系。调用了与门调用了或门定义元件与端口的连接定义调用元件间的连接定义元件与端口的连接调用了反相器i3i2i1二、元件例化语句(P73-75)作用调用了与门调用了或门定义8格式元件例化语句由两部分组成,包括元件定义语句和元件调用语句。元件定义语句:把已经设计好的实体定义为一个可以调用的元件。实体的端口为该元件的引脚。COMPONENT元件名GENERIC(类属表);PORT(端口名表);ENDCOMPONENT元件名;COMPONENTND2GENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENTND2;格式COMPONENT元件名COMPONENTND29实体与元件的对应:ENTITYan2ISPORT(a,b:INBIT;c:OUTBIT);ENDan2;ARCHITECTUREbehavOFan2ISBEGINc<=aANDb;ENDbehav;COMPONENTan2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENTan2;ENTITYn1ISPORT(x:INBIT;y:OUTBIT);ENDn1;ARCHITECTUREbehavOFn1ISBEGINy<=NOTx;ENDbehav;COMPONENTo3PORT(l,m,n:INBIT;z:OUTBIT);ENDCOMPONENTo3;COMPONENTn1PORT(x:INBIT;y:OUTBIT);ENDCOMPONENTn1;ENTITYo3ISPORT(l,m,n:INBIT;z:OUTBIT);ENDo3;ARCHITECTUREbehavOFo3ISBEGINz<=lORmORn;ENDbehav;实体与元件的对应:ENTITYan2ISCOMPONEN10元件调用语句:GENERICMAP(…)为类属映射语句,确定调用元件的实体中定义的类属参数;PORTMAP(…)为端口映射语句,定义调用元件与其他部分的连接关系。标号名可看作是插座的名称,而元件名则是调用芯片的实际型号名称。标号名:元件名GENERICMAP(类属关联);PORTMAP(端口关联);u2:andnGENERICMAP(n=>2);PORTMAP(a(0)=>C1,a(1)=>D1,c=>Y);ULN2003U1芯片型号->元件名插座->标号名元件调用语句:标号名:u2:andnGENERICMA11元件调用的对应关系:i3i2i1U1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);U2:an2PORTMAP(a=>SW2,b=>SW3,c=>i2);U3:an2PORTMAP(a=>SW1,b=>SW3,c=>i3);U4:o3PORTMAP(i1,i2,i3,L2);U5:n1PORTMAP(L2,L1);元件调用的对应关系:i3i2i1U1:an2PORTM12端口连接定义的方法:名字关联方式:把元件的端口与它要连接的系统端口通过”=>”对应起来。位置关联方式:系统端口在端口映射语句中的位置,与它连接的元件端口在元件的端口说明语句中的位置相对应。U1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);SW2SW1i1abcCOMPONENTan2PORT(a:INBIT;b:IN_BIT;c:OUTSTD_BIT);ENDCOMPONENTan2;...u1:an2PORTMAP(SW1,SW2,i1);SW1SW2i1abc端口连接定义的方法:U1:an2PORTMAP(a=13混合关联方式:i1ababcCOMPINENTan2PORT(a:INBIT;b:INBIT;c:OUTBIT);ENDCOMPONENTan2;...u1:an2PORTMAP(SW1,SW2,c=>i1);位置关联方式名字关联方式混合关联方式:i1ababcCOMPINENTan2位置关14LIBRARYIEEE;USEIEEE.STD.LOGIC_1164.ALL;ENTITYND2ISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDND2;ARCHITECTUREbehavOFND2ISBEGINPROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:=‘0’;FORiIna’LENGTH-1DOWNTO0LOOPIFa(i)=‘0’THENint:=‘1’;ENDIF;ENDLOOP;c<=int;ENDPROCESS;END;P74【例3-12多输入与非门】a(0)a(n)c……LIBRARYIEEE;P74【例3-12多输入与非门】15P75【例3-13元件例化】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYORD41ISPORT(A1,B1,C1,D1:INSTD_LOGIC;Z1:OUTSTD_LOGIC);ENDORD41;ARCHITECTUREORD41BEHVOFORD41ISCOMPONENTND2GENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENTND2;SIGNALX,Y:STD_LOGIC;BEGINU1:ND2GENERICMAP(n=>2);PORTMAP(A1,B1,X);U2:ND2GENERICMAP(n=>2);PORTMAP(a(1)=>C1,a(0)=>D1,C=>Y);U3:ND2GENERICMAP(n=>2);PORTMAP(X,Y,C=>Z1);ENDARCHITECTUREORD41BEHV;Z1XYa(1)a(0)cC1D1a(1)a(0)cA1B1a(1)a(0)cU1U2U3P75【例3-13元件例化】LIBRARYIEEE;Z116【流水灯】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYno2ISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDno2;ARCHITECTUREbehavOFno2ISBEGINc<=NOT(aORb);ENDbehav;

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdf1ISPORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdf1;ARCHITECTUREbehavOFdf1ISBEGINPROCESS(clk)BEGINIF(clk'EVENTANDclk='1')THENq<=d;ENDIF;ENDPROCESS;ENDbehav;COMPONENTdf1PORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENTdf1;COMPONENTno2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENTno2;【流水灯】LIBRARYIEEE;LIBRARYIEEE17LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdISPORT(CP:INSTD_LOGIC;Q1,Q2:BUFFERSTD_LOGIC;Q3:OUTSTD_LOGIC);ENDlsd;ARCHITECTUREbehavOFlsdISSIGNALi1:STD_LOGIC;COMPONENTdf1PORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENTdf1;COMPONENTno2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENTno2;BEGINU1:df1PORTMAP(clk=>CP,d=>i1,q=>Q1);U2:df1PORTMAP(clk=>CP,d=>Q1,q=>Q2);U3:df1PORTMAP(clk=>CP,d=>Q2,q=>Q3);U4:no2PORTMAP(Q1,Q2,i1);ENDbehav;i1LIBRARYIEEE;BEGINi118三、VHDL不同描述风格(P82-86)【表决器描述】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYvoterISPORT(a,b,c:INSTD_LOGIC;x:BUFFERSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYvoter;ARCHITECTUREthreeOFvoterISSIGNALt1,t2,t3:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALt:INTEGERRANGE0TO3;BEGINt1<='0'&a;t2<='0'&b;t3<='0'&c;t<=CONV_INTEGER(t1)+CONV_INTEGER(t2)+CONV_INTEGER(t3);x<='1'WHEN(t>1)ELSE'0';y<=NOTx;ENDARCHITECTUREthree;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYvoterISPORT(a,b,c:INSTD_LOGIC;x:BUFFERSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYvoter;ARCHITECTUREtwoOFvoterISSIGNALt:STD_LOGIC_VECTOR(2DOWNTO0);BEGINt<=a&b&c;WITHtSELECTx<=‘1’WHEN“011”,‘1’WHEN“110”,‘1’WHEN“101”,‘0’WHENOTHERS;y<=NOTx;ENDARCHITECTUREtwo;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYvoterISPORT(a,b,c:INSTD_LOGIC;x:BUFFERSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYvoter;ARCHITECTUREoneOFvoterISBEGINx<=(aANDb)OR(bANDc)OR(cANDa);y<=NOTx;ENDARCHITECTUREone;数据流描述RTL描述行为描述三、VHDL不同描述风格(P82-86)【表决器描述】LIB19BEGINU1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);U2:an2PORTMAP(a=>SW2,b=>SW3,c=>i2);U3:an2PORTMAP(a=>SW1,b=>SW3,c=>i3);U4:o3PORTMAP(i1,i2,i3,L2);U5:n1PORTMAP(L2,L1);ENDbehav;ENTITYvoterISPORT(SW1,SW2,SW3:INBIT;L1:OUTBIT;L2:BUFFERBIT);ENDvoter;ARCHITECTUREbehavOFvoterISSIGNALi1,i2,i3:BIT;COMPONENTan2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENTan2;COMPONENTo3PORT(l,m,n:INBIT;z:OUTBIT);ENDCOMPONENTo3;COMPONENTn1PORT(x:INBIT;y:OUTBIT);ENDCOMPONENTn1;结构描述结构描述就是描述元件之间的互联关系。它将一个大的设计划分成若干个小的单元,逐一完成个单元的设计,然后用结构描述将它们组合起来,形成更复杂的设计。结构描述体现了模块化的设计思想。BEGINENTITYvoterIS结构描述结构描述就是20【流水灯描述】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdisPORT(clk:inSTD_LOGIC;led1:outSTD_LOGIC_VECTOR(2DOWNTO0));ENDlsd;ARCHITECTUREbehavOFlsdISBEGINPROCESS(clk)VARIABLEcount1:INTEGERRANGE0TO3;BEGINIF(clk’EVENTANDclk=‘1’)THENIF(count1=3)THENcount1:=0;ENDIF;CASEcount1ISWHEN0=>led1<=“100”;WHEN1=>led1<=“010”;WHEN2=>led1<=“001”;WHENOTHERS=>null;ENDCASE;count1:=count1+1;ENDIF;ENDPROCESS;ENDbehav;

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdisPORT(clk:inSTD_LOGIC;led1:bufferSTD_LOGIC_VECTOR(2DOWNTO0));ENDlsd;ARCHITECTUREbehavOFlsdISBEGINPROCESS(clk)VARIABLEcount1:INTEGERRANGE0TO3;BEGINIF(clk'EVENTANDclk='1')THENIF(count1=3)THENcount1:=0;ELSEcount1:=count1+1;ENDIF;led1<=(OTHERS=>'0');led1(count1)<='1';ENDIF;ENDPROCESS;ENDbehav;数据流描述行为描述【流水灯描述】LIBRARYIEEE;21LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdISPORT(CP:INSTD_LOGIC;Q1,Q2:BUFFERSTD_LOGIC;Q3:OUTSTD_LOGIC);ENDlsd;ARCHITECTUREbehavOFlsdISSIGNALi1:STD_LOGIC;COMPONENTdf1PORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENTdf1;COMPONENTno2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENTno2;BEGINU1:df1PORTMAP(clk=>CP,d=>i1,q=>Q1);U2:df1PORTMAP(clk=>CP,d=>Q1,q=>Q2);U3:df1PORTMAP(clk=>CP,d=>Q2,q=>Q3);U4:no2PORTMAP(Q1,Q2,i1);ENDbehav;结构描述LIBRARYIEEE;BEGIN结构描述22四、块语句(P67-68)作用把一个大的系统分成几个模块,把一段代码分类为几个部分。格式接口说明和类属说明可以把块封装起来,块与外部通过端口连接;若块语句中定义了保护表达式,则保护表达式的值为真时,块里的并行语句才可以执行。

块标号:BLOCK【(保护表达式)】接口说明类属说明BEGIN并行语句ENDBLOCK块标号;HA1:BLOCKGENERIC(C_DELAY:TIME);GENERICMAP(C_DELAY=>5ns);PORT(IN1,IN2:INBIT;SUM,CARRY:OUTBIT);PORTMAP(IN1=>A,IN2=>B,SUM=>S1,CARRY=>C1);BEGINSUM<=(IN1XORIN2);CARRY<=IN2ANDIN2afterC_DELAY;ENDBLOCKHA1;四、块语句(P67-68)作用块标号:BLOCK【(保护表23ARCHITECTUREbolck_viewOFf_adderISSIGNALS1,C1,C2:BIT;BEGINENDblock_view;【全加器描述】ENTITYf_adderISPORT(A,B,CIN:INBIT;SUM,COUT:OUTBIT);ENDf_adder;HA1:BLOCKGENERIC(C_DELAY:TIME);GENERICMAP(CARRY_DELAY=>5ns);PORT(IN1,IN2:INBIT;SUM,CARRY:OUTBIT);PORTMAP(IN1=>A,IN2=>B,SUM=>S1,CARRY=>C1);BEGINSUM<=(IN1XORIN2);CARRY<=IN2ANDIN2afterC_DELAY;ENDBLOCKHA1;OR1:BLOCKPORT(A,B:INBIT;C:OUTBIT);PORTMAP(A=>C1,C=>COUT,B=>C2);COMPONENTOR_GATEPORT(X,Y:INBIT;Z:OUTBIT);ENDCOMPONENT;BEGINO1:OR_GATEPORTMAP(A,B,C);ENDBLOCKOR1;HA2:BLOCKPORT(X,Y:INBIT;S,C:OUTBIT);PORTMAP(X=>CIN,Y=>S1,S=>SUM,C=>C2);BEGINS<=(XXORY);C<=XANDY;ENDBLOCKHA2;【全加器描述】ENTITYf_adderISHA1:B24HA1:BLOCKGENERIC(C_DELAY:TIME);GENERICMAP(C_DELAY=>5ns);PORT(IN1,IN2:INBIT;SUM,CARRY:OUTBIT);PORTMAP(IN1=>A,IN2=>B,SUM=>S1,CARRY=>C1);BEGINSUM<=(IN1XORIN2);CARRY<=IN1ANDIN2afterC_DELAY;ENDBLOCKHA1;IN1IN2SUMCARRYABS1C1块HA1描述了一个半加器。HA1:BLOCKIN1IN2SUMCARRYABS1C125块HA2定义了一个半加器。HA2:BLOCKPORT(X,Y:INBIT;S,C:OUTBIT);PORTMAP(X=>CIN,Y=>S1,S=>SUM,C=>C2);BEGINS<=(XXORY);C<=XANDY;ENDBLOCKHA2;XYSCCINS1SUMC2块HA2定义了一个半加器。HA2:BLOCKXYS26OR1:BLOCKPORT(A,B:INBIT;C:OUTBIT);PORTMAP(A=>C1,C=>COUT,B=>C2);COMPONENTOR_GATEPORT(X,Y:INBIT;Z:OUTBIT);ENDCOMPONENT;BEGINO1:OR_GATEPORTMAP(A,B,C);ENDBLOCKOR1;C1C2COUTABC块OR1定义了一个或门。OR1:BLOCKC1C2COUTABC块OR1定义了一个27IN1IN2SUMCARRYS1C1XYSCC2BACBACOUTSUMCIN整个电路:IN1IN2SUMCARRYS1C1XYS28块语句可以嵌套:块语句中定义的信号只在该块范围内有效。B1:BLOCKSIGNALS1:BIT;BEGIN:S1<=AANDB;Y<=S1;ENDBLOCKB1;B2:BLOCKSIGNALS2:BIT;BEGIN:S2<=CANDD;ENDBLOCKB2;B3:BLOCKSIGNALS3:BIT;BEGIN:S3<=S2;Z<=S3;ENDBLOCKB3;AYZBCDS1可使用在B1、B2和B3中S2可使用在B2和B3中S3可使用在B3中块语句可以嵌套:B1:BLOCKB2:BLOCKB3:BLO29五、生成语句(P75-76)作用产生多个相同的结构或逻辑描述。格式

标号:FOR循环变量IN取值范围GENERATE生成语句ENDGENERATE[标号];循环变量是局部变量,不需要事先定义,循环变量只能在生成语句中使用。标号:IF条件GENERATE生成语句ENDGENERATE[标号];当条件成立时,把生成语句中描述的结构或逻辑复制一次。五、生成语句(P75-76)作用标号:FOR循环变量I30……COMPONENTcompPORT(X:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALa,b:STD_LOGIC_VECTOR(0TO7);G1:FORIIN0TO7GENERATEU1:compPORTMAP(X=>a(i),Y=>b(i));ENDGENERATEG1;……【FOR…GENERATE举例】利用生成语句,对comp元件复制8次,每复制一次循环变量i加1。8个comp元件形成了一个新的元件。……【FOR…GENERATE举例】利用生成语句,对comp31ENTITYCOUNTER4IS PORT(COUNT,CLOCK:INBIT; Q:BUFFERBIT_VECTOR(0TO3)); ENDCOUNTER4;ARCHITECTUREa_counter4OFCOUNTER4IS COMPONENTdfPORT(d,clk:INBIT;q:OUTBIT);ENDCOMPONENT;(到右边)【FOR…GENERATE举例-由触发器组成的4位计数器】BEGIN(接左边)

GK:FORKIN0TO3GENERATE

GK0:IFK=0GENERATE

df1:dfPORTMAP(COUNT,CLOCK,Q(K));

ENDGENERATEGK0;

GK1_3:IFK>0GENERATE

df1:dfPORTMAP(Q(K-1),CLOCK,Q(K));

ENDGENERATEGK1_3;ENDGENERATEGK;ENDa_counter4;Q(0)Q(1)Q(2)Q(3)ENTITYCOUNTER4IS【FOR…GENERAT32【FOR…GENERATE举例-流水灯】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsd5ISPORT(CP:INSTD_LOGIC;Q:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0));ENDlsd5;ARCHITECTUREbehavOFlsd5ISCOMPONENTno4PORT(a:INSTD_LOGIC_VECTOR(3DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENTno4;COMPONENTdf1PORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENTdf1;SIGNALi1:STD_LOGIC;BEGINLS:FORKIN0TO4GENERATELS0:IFK=0GENERATEU1:df1PORTMAP(clk=>CP,d=>i1,q=>Q(K));ENDGENERATELS0;LS1:IFK>0GENERATEU2:df1PORTMAP(CP,Q(K-1),Q(K));ENDGENERATELS1;ENDGENERATELS;U3:no4PORTMAP(a(0)=>Q(0),a(1)=>Q(1),a(2)=>Q(2),a(3)=>Q(3),c=>i1);ENDbehav;i1【FOR…GENERATE举例-流水灯】LIBRARYIE33练习根据电路图,用结构描述方式完成电路设计。练习根据电路图,用结构描述方式完成电路设计。34元件例化语句、块语句与生成语句(P67-68、73-76)元件例化语句、块语句与生成语句(P67-68、73-76)35本课要解决的问题:掌握元件例化语句的格式与应用;掌握块语句的格式与应用;掌握生成语句的格式与应用。本课要解决的问题:掌握元件例化语句的格式与应用;36顺序语句的总结VHDL的顺序语句包括:赋值语句等待语句返回语句流程控制语句空操作语句顺序语句的总结VHDL的顺序语句包括:赋值语句等待语句返回语37顺序语句的特点:语句的执行与书写顺序一致;顺序语句只能在进程、过程、函数中执行;顺序语句的特点:语句的执行与书写顺序一致;顺序语句只能在38并行语句VHDL的并行语句包括:赋值语句块语句进程语句元件例化语句生成语句并行语句VHDL的并行语句包括:赋值语句块语句进程语句元件例39并行语句的特点语句的执行与书写顺序无关,必须通过敏感信号的变化来启动;每个并行语句相对独立,一个语句一般对应一个电路模块,语句间通过信号通信;并行语句的特点语句的执行与书写顺序无关,必须通过敏感信号的40一、利用元件例化语句描述的

表决器BEGINU1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);U2:an2PORTMAP(a=>SW2,b=>SW3,c=>i2);U3:an2PORTMAP(a=>SW1,b=>SW3,c=>i3);U4:o3PORTMAP(i1,i2,i3,L2);U5:n1PORTMAP(L2,L1);ENDbehav;ENTITYvoterISPORT(SW1,SW2,SW3:INBIT;L1:OUTBIT;L2:BUFFERBIT);ENDvoter;ARCHITECTUREbehavOFvoterISSIGNALi1,i2,i3:BIT;COMPONENTan2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENTan2;COMPONENTo3PORT(l,m,n:INBIT;z:OUTBIT);ENDCOMPONENTo3;COMPONENTn1PORT(x:INBIT;y:OUTBIT);ENDCOMPONENTn1;元件定义语句,将实体an2、o3和n1定义为元件元件调用语句,调用元件an2、o3、n1,U1~U5为元件标号一、利用元件例化语句描述的

表决器BEGINENTITYv41二、元件例化语句(P73-75)作用

将事先设计好的实体看作是一个“元件”,在新的设计中调用这个元件,定义这个元件与其他信号、元件与元件、元件与外部端口的连接关系。调用了与门调用了或门定义元件与端口的连接定义调用元件间的连接定义元件与端口的连接调用了反相器i3i2i1二、元件例化语句(P73-75)作用调用了与门调用了或门定义42格式元件例化语句由两部分组成,包括元件定义语句和元件调用语句。元件定义语句:把已经设计好的实体定义为一个可以调用的元件。实体的端口为该元件的引脚。COMPONENT元件名GENERIC(类属表);PORT(端口名表);ENDCOMPONENT元件名;COMPONENTND2GENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENTND2;格式COMPONENT元件名COMPONENTND243实体与元件的对应:ENTITYan2ISPORT(a,b:INBIT;c:OUTBIT);ENDan2;ARCHITECTUREbehavOFan2ISBEGINc<=aANDb;ENDbehav;COMPONENTan2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENTan2;ENTITYn1ISPORT(x:INBIT;y:OUTBIT);ENDn1;ARCHITECTUREbehavOFn1ISBEGINy<=NOTx;ENDbehav;COMPONENTo3PORT(l,m,n:INBIT;z:OUTBIT);ENDCOMPONENTo3;COMPONENTn1PORT(x:INBIT;y:OUTBIT);ENDCOMPONENTn1;ENTITYo3ISPORT(l,m,n:INBIT;z:OUTBIT);ENDo3;ARCHITECTUREbehavOFo3ISBEGINz<=lORmORn;ENDbehav;实体与元件的对应:ENTITYan2ISCOMPONEN44元件调用语句:GENERICMAP(…)为类属映射语句,确定调用元件的实体中定义的类属参数;PORTMAP(…)为端口映射语句,定义调用元件与其他部分的连接关系。标号名可看作是插座的名称,而元件名则是调用芯片的实际型号名称。标号名:元件名GENERICMAP(类属关联);PORTMAP(端口关联);u2:andnGENERICMAP(n=>2);PORTMAP(a(0)=>C1,a(1)=>D1,c=>Y);ULN2003U1芯片型号->元件名插座->标号名元件调用语句:标号名:u2:andnGENERICMA45元件调用的对应关系:i3i2i1U1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);U2:an2PORTMAP(a=>SW2,b=>SW3,c=>i2);U3:an2PORTMAP(a=>SW1,b=>SW3,c=>i3);U4:o3PORTMAP(i1,i2,i3,L2);U5:n1PORTMAP(L2,L1);元件调用的对应关系:i3i2i1U1:an2PORTM46端口连接定义的方法:名字关联方式:把元件的端口与它要连接的系统端口通过”=>”对应起来。位置关联方式:系统端口在端口映射语句中的位置,与它连接的元件端口在元件的端口说明语句中的位置相对应。U1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);SW2SW1i1abcCOMPONENTan2PORT(a:INBIT;b:IN_BIT;c:OUTSTD_BIT);ENDCOMPONENTan2;...u1:an2PORTMAP(SW1,SW2,i1);SW1SW2i1abc端口连接定义的方法:U1:an2PORTMAP(a=47混合关联方式:i1ababcCOMPINENTan2PORT(a:INBIT;b:INBIT;c:OUTBIT);ENDCOMPONENTan2;...u1:an2PORTMAP(SW1,SW2,c=>i1);位置关联方式名字关联方式混合关联方式:i1ababcCOMPINENTan2位置关48LIBRARYIEEE;USEIEEE.STD.LOGIC_1164.ALL;ENTITYND2ISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDND2;ARCHITECTUREbehavOFND2ISBEGINPROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:=‘0’;FORiIna’LENGTH-1DOWNTO0LOOPIFa(i)=‘0’THENint:=‘1’;ENDIF;ENDLOOP;c<=int;ENDPROCESS;END;P74【例3-12多输入与非门】a(0)a(n)c……LIBRARYIEEE;P74【例3-12多输入与非门】49P75【例3-13元件例化】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYORD41ISPORT(A1,B1,C1,D1:INSTD_LOGIC;Z1:OUTSTD_LOGIC);ENDORD41;ARCHITECTUREORD41BEHVOFORD41ISCOMPONENTND2GENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);c:OUTSTD_LOGIC);ENDCOMPONENTND2;SIGNALX,Y:STD_LOGIC;BEGINU1:ND2GENERICMAP(n=>2);PORTMAP(A1,B1,X);U2:ND2GENERICMAP(n=>2);PORTMAP(a(1)=>C1,a(0)=>D1,C=>Y);U3:ND2GENERICMAP(n=>2);PORTMAP(X,Y,C=>Z1);ENDARCHITECTUREORD41BEHV;Z1XYa(1)a(0)cC1D1a(1)a(0)cA1B1a(1)a(0)cU1U2U3P75【例3-13元件例化】LIBRARYIEEE;Z150【流水灯】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYno2ISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDno2;ARCHITECTUREbehavOFno2ISBEGINc<=NOT(aORb);ENDbehav;

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdf1ISPORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdf1;ARCHITECTUREbehavOFdf1ISBEGINPROCESS(clk)BEGINIF(clk'EVENTANDclk='1')THENq<=d;ENDIF;ENDPROCESS;ENDbehav;COMPONENTdf1PORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENTdf1;COMPONENTno2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENTno2;【流水灯】LIBRARYIEEE;LIBRARYIEEE51LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdISPORT(CP:INSTD_LOGIC;Q1,Q2:BUFFERSTD_LOGIC;Q3:OUTSTD_LOGIC);ENDlsd;ARCHITECTUREbehavOFlsdISSIGNALi1:STD_LOGIC;COMPONENTdf1PORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENTdf1;COMPONENTno2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENTno2;BEGINU1:df1PORTMAP(clk=>CP,d=>i1,q=>Q1);U2:df1PORTMAP(clk=>CP,d=>Q1,q=>Q2);U3:df1PORTMAP(clk=>CP,d=>Q2,q=>Q3);U4:no2PORTMAP(Q1,Q2,i1);ENDbehav;i1LIBRARYIEEE;BEGINi152三、VHDL不同描述风格(P82-86)【表决器描述】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYvoterISPORT(a,b,c:INSTD_LOGIC;x:BUFFERSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYvoter;ARCHITECTUREthreeOFvoterISSIGNALt1,t2,t3:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALt:INTEGERRANGE0TO3;BEGINt1<='0'&a;t2<='0'&b;t3<='0'&c;t<=CONV_INTEGER(t1)+CONV_INTEGER(t2)+CONV_INTEGER(t3);x<='1'WHEN(t>1)ELSE'0';y<=NOTx;ENDARCHITECTUREthree;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYvoterISPORT(a,b,c:INSTD_LOGIC;x:BUFFERSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYvoter;ARCHITECTUREtwoOFvoterISSIGNALt:STD_LOGIC_VECTOR(2DOWNTO0);BEGINt<=a&b&c;WITHtSELECTx<=‘1’WHEN“011”,‘1’WHEN“110”,‘1’WHEN“101”,‘0’WHENOTHERS;y<=NOTx;ENDARCHITECTUREtwo;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYvoterISPORT(a,b,c:INSTD_LOGIC;x:BUFFERSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYvoter;ARCHITECTUREoneOFvoterISBEGINx<=(aANDb)OR(bANDc)OR(cANDa);y<=NOTx;ENDARCHITECTUREone;数据流描述RTL描述行为描述三、VHDL不同描述风格(P82-86)【表决器描述】LIB53BEGINU1:an2PORTMAP(a=>SW1,b=>SW2,c=>i1);U2:an2PORTMAP(a=>SW2,b=>SW3,c=>i2);U3:an2PORTMAP(a=>SW1,b=>SW3,c=>i3);U4:o3PORTMAP(i1,i2,i3,L2);U5:n1PORTMAP(L2,L1);ENDbehav;ENTITYvoterISPORT(SW1,SW2,SW3:INBIT;L1:OUTBIT;L2:BUFFERBIT);ENDvoter;ARCHITECTUREbehavOFvoterISSIGNALi1,i2,i3:BIT;COMPONENTan2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENTan2;COMPONENTo3PORT(l,m,n:INBIT;z:OUTBIT);ENDCOMPONENTo3;COMPONENTn1PORT(x:INBIT;y:OUTBIT);ENDCOMPONENTn1;结构描述结构描述就是描述元件之间的互联关系。它将一个大的设计划分成若干个小的单元,逐一完成个单元的设计,然后用结构描述将它们组合起来,形成更复杂的设计。结构描述体现了模块化的设计思想。BEGINENTITYvoterIS结构描述结构描述就是54【流水灯描述】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdisPORT(clk:inSTD_LOGIC;led1:outSTD_LOGIC_VECTOR(2DOWNTO0));ENDlsd;ARCHITECTUREbehavOFlsdISBEGINPROCESS(clk)VARIABLEcount1:INTEGERRANGE0TO3;BEGINIF(clk’EVENTANDclk=‘1’)THENIF(count1=3)THENcount1:=0;ENDIF;CASEcount1ISWHEN0=>led1<=“100”;WHEN1=>led1<=“010”;WHEN2=>led1<=“001”;WHENOTHERS=>null;ENDCASE;count1:=count1+1;ENDIF;ENDPROCESS;ENDbehav;

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdisPORT(clk:inSTD_LOGIC;led1:bufferSTD_LOGIC_VECTOR(2DOWNTO0));ENDlsd;ARCHITECTUREbehavOFlsdISBEGINPROCESS(clk)VARIABLEcount1:INTEGERRANGE0TO3;BEGINIF(clk'EVENTANDclk='1')THENIF(count1=3)THENcount1:=0;ELSEcount1:=count1+1;ENDIF;led1<=(OTHERS=>'0');led1(count1)<='1';ENDIF;ENDPROCESS;ENDbehav;数据流描述行为描述【流水灯描述】LIBRARYIEEE;55LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlsdISPORT(CP:INSTD_LOGIC;Q1,Q2:BUFFERSTD_LOGIC;Q3:OUTSTD_LOGIC);ENDlsd;ARCHITECTUREbehavOFlsdISSIGNALi1:STD_LOGIC;COMPONENTdf1PORT(clk,d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENTdf1;COMPONENTno2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENTno2;BEGINU1:df1PORTMAP(clk=>CP,d=>i1,q=>Q1);U2:df1PORTMAP(clk=>CP,d=>Q1,q=>Q2);U3:df1PORTMAP(clk=>CP,d=>Q2,q=>Q3);U4:no2PORTMAP(Q1,Q2,i1);ENDbehav;结构描述LIBRARYIEEE;BEGIN结构描述56四、块语句(P67-68)作用把一个大的系统分成几个模块,把一段代码分类为几个部分。格式接口说明和类属说明可以把块封装起来,块与外部通过端口连接;若块语句中定义了保护表达式,则保护表达式的值为真时,块里的并行语句才可以执行。

块标号:BLOCK【(保护表达式)】接口说明类属说明BEGIN并行语句ENDBLOCK块标号;HA1:BLOCKGENERIC(C_DELAY:TIME);GENERICMAP(C_DELAY=>5ns);PORT(IN1,IN2:INBIT;SUM,CARRY:OUTBIT);PORTMAP(IN1=>A,IN2=>B,SUM=>S1,CARRY=>C1);BEGINSUM<=(IN1XORIN2);CARRY<=IN2ANDIN2afterC_DELAY;ENDBLOCKHA1;四、块语句(P67-68)作用块标号:BLOCK【(保护表57ARCHITECTUREbolck_viewOFf_adderISSIGNALS1,C1,C2:BIT;BEGINENDblock_view;【全加器描述】ENTITYf_adderISPORT(A,B,CIN:INBIT;SUM,COUT:OUTBIT);ENDf_adder;HA1:BLOCKGENERIC(C_DELAY:TIME);GENERICMAP(CARRY_DELAY=>5ns);PORT(IN1,IN2:INBIT;SUM,CARRY:OUTBIT);PORTMAP(IN1=>A,IN2=>B,SUM=>S1,CARRY=>C1);BEGINSUM<=(IN1XORIN2);CARRY<=IN2ANDIN2afterC_DELAY;ENDBLOCKHA1;OR1:BLOCKPORT(A,B:INBIT;C:OUTBIT);PORTMAP(A=>C1,C=>COUT,B=>C2);COMPONENTOR_GATEPORT(X,Y:INBIT;Z:OUTBIT);ENDCOMPONENT;BEGINO1:OR_GATEPORTMAP(A,B,C);ENDBLOCKOR1;HA2:BLOCKPORT(X,Y:INBIT;S,C:OUTBIT);PORTMAP(X=>CIN,Y=>S1,S=>SUM,C=>C2);BEGINS<=(XXORY);C<=XANDY;ENDBLOCKHA2;【全加器描述】ENTITYf_adderISHA1:B58HA1:BLOCKGENERIC(C_DELAY:TIME);GENERICMAP(C_DELAY=>5ns);PORT(IN1,IN2:INBIT;SUM,CARRY:OUTBIT);PORTMAP(IN1=>A,IN2=>B,SUM=>S1,CARRY=>C1);BEGINSUM<=(IN1XORIN2);CARRY<=IN1ANDIN2afterC_DELAY;ENDBLOCKHA1;IN1IN2SUMCARRYABS1C1块HA1描述了一个半加器。HA1:BLOCKIN1IN2SUMCARRYABS1C159块HA2定义了一个半加器。HA2:BLOCKPORT(X,Y:INBIT;S,C:OUTBI

温馨提示

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

评论

0/150

提交评论