下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 硬件描述语言VHDL

硬件描述语言VHDL.doc

硬件描述语言VHDL

王诗芝
2017-11-13 0人阅读 举报 0 0 暂无简介

简介:本文档为《硬件描述语言VHDLdoc》,可适用于IT/计算机领域

硬件描述语言VHDLVHDL语言通常包含实体(Entity)构造体(Architecture)配置(Configuration)包集合(Package)和库(Library)五部分其中实体用于描述所设计的系统的外部接口信号构造体用于描述系统内部的结构和行为建立输入和输出之间的关系配置语句安装具体元件到实体结构体对可以被看作是设计的零件清单包集合存放各个设计模块共享的数据类型、常数和子程序等库是专门存放预编译程序包的地方。如下详细介绍。VHDL的基本设计单元就是实体无论数字电路复杂还是简单都是由实体和构造体组成。实体说明有如下结构:ENTITY实体名IS端口说明END实体名(VHDL语言中不分大小写字母)其中:端口说明是对设计实体中输入和输出借口进行描述格式如下:PORT(端口名(端口名):方向数据类型名::端口名(端口名):方向数据类型名)端口名是赋予每个系统引脚的名称一般用几个英文字母组成。端口方向是定义引脚是输入还是输出见下表:方向说明IN输入到实体OUT从实体输出输出INOUT双向BUFFER输出(但可以反馈到实体内部)LINKAGE不指定方向常用的端口数据类型有两种:BIT和BITVECTOR当端口被说明为BIT时只能取值“”或“”当端口被说明为BITVECTOR时它可能是一组二进制数。例:PORT(n,n,select:INBITq:OUTBITbus:OUTBITVECTOR(DOWNTO))本例中n,n,select是输入引脚属于BIT型q是输出引脚BIT型bus是一组位二进制总线属于BITVECTOR,例:LIBRARYIEEEUSEIEEESTDLOGICALLENTITYmmISPORT(n,n,select:INSTDLOGICQ:OUTSTDLOGICBus:OUTSTDLOGICVECTOR(DOWNTO))ENDmm在此例中端口数据类型取自IEEE标准库(该库中有数据类型和函数的说明)其中STDLOGIC取值为“”“”“X”和“Z‖。因为使用了库所以在实体说明前要增加库说明语句。构造体是实体的一个重要部分每一个实体都有一个或一个以上的构造体。)一般说明构造体格式如下:ARCHITECTURE构造体名OF实体名IS定义语句内部信号常数数据类型函数等的定义BEGIN并行处理语句END构造体名例:ENTITYnaxISPORT(a,a:INBITSel:INBITSh:OUTBIT)ENDnaxARCHITECTUREdataflowOFnaxISBEGINsh<=(aANDsel)OR(NOTselANDa)ENDdataflow构造体描述设计实体的具体行为它包含两类语句:,并行语句并行语句总是在进程语句(PROCESS)的外部该语句的执行与书写顺序无关总是同时被执行,顺序语句顺序语句总是在进程语句(PROCESS)的内部从仿真的角度该语句是顺序执行的一个构造体包含几个类型的子结构描述这些描述是:*BLOCK描述(块描述)*PROCESS描述(进程描述)*SUNPROGRAMS描述(子程序描述))BLOCK语句描述使用BLOCK语句描述的格式如下:块标号:BLOCKBEGIN::ENDBLOCK块标号:例:二选一电路ENTITYmuxISPORT(d,d,sel:INBITq:OUTBIT)ENDmuxARCHITECTUREconnectOFmuxISSIGNALtmp,tmp,tmp:BITBEGINcale:BLOCKBEGINtmp<=dANDseltmp<=dAND(NOTsel)tmp<=tmpORtmpq<=tmpENDBLOCKcaleENDconnect在对程序进行仿真时BLOCK中的语句是并行执行的与书写顺序无关这一点和构造体中直接写的语句是一样的。)进程(PROCESS)描述进程描述的格式如下:进程名:PROCESS(信号信号。。。)BEGIN::ENDPROCESS进程名*一般用于组合电路进程模式:进程标记:PROCESS(信号名,信号名,信号名)VARIABLE变量名:STDLOGICVARIABLE变量名:STDLOGICBEGIN指定信号指定变量过程调用如果语句CASE语句循环语句ENDPROCESS进程标记*用于时序电路进程模式:进程标记:PROCESS(信号名,信号名,信号名)VARIABLE变量名:STDLOGICVARIABLE变量名:STDLOGICBEGINWAITUNTIL时钟信号=''指定信号指定变量过程调用如果语句CASE语句循环语句ENDPROCESS进程标记例:ENTITYmuxISPORT(d,d,sel:INBITq:OUTBIT)ENDmuxARCHITECTUREconnectOFmuxISBEGINcale:PROCESS(d,d,sel)VARIABLEtmp,tmp,tmp:BIT在进程中定义的变量BEGINtmp:=dANDsel输入端口向变量赋值tmp:=dAND(NOTsel)tmp:=tmpORtmpq<=tmpENDPROCESScaleENDconnect在PROCESS中的语句是顺序执行的这一点和BLOCK中的语句是不一样的。当PROCESS所带的信号量发生变化时PROCESS中的语句就会执行一遍。)子程序描述子程序的概念和其它高级程序中子程序的概念相同在VHDL中有两种类型:,过程(Procedure),函数(Function)过程的格式:PROCEDURE过程名(参数参数。。。。)IS定义变量语句BEGIN顺序处理语句END过程名例:PROCEDUREvectortoint(z:INSTDLOGICVECTORxflag:OUTBOOLEANq:ININTEGER)ISBEGINq:=xflag:=FALSEFORiINzRANGELOOPq:=q*IF(z(i)=)THENq:=qELSEIF(z(i)=)THENxflag:=TRUEENDIFENDLOOPENDvectortoint在过程中语句是顺序执行的。.函数函数的格式:FUNCTION函数名(参数参数。。。。)RETURN数据类型名IS定义变量语句BEGIN顺序处理语句RETURN返回变量名END函数名在VHDL语言中函数的参数都是输入信号例:FUNCTIONmin(x,y:INTEGER)RETURNINTEGERISBEGINIFX<YTHENRETURN(x)ELSERETURN(y)ENDIFENDmin库是经编译后的数据的集合它存放包定义、实体定义、构造定义和配置定义。在设计单元内的语句可以使用库中的结果所以库的好处就是设计者可以共享已经编译的设计结果在VHDL中有很多库但他们相互独立。IEEE库:在IEEE库中有一个STDLOGIC的包它是IEEE正式认可的包。STD库:STD库是VHDL的标准库在库中有名为STANDARD的包还有TEXTIO包。若使用STANDARD包中的数据可以不按标准格式说明但是若使用TEXTIO包则需要按照如下格式说明:LIBRARYSTDUSESTDTEXTIOALL另外还有ASIC库、WORK库和用户自定义库等。库的使用:在使用库之前一定要进行库说明和包说明库和包的说明总是放在设计单元的前面:LIBRARY库名USELIBRARYnamepackagenameITEMname例:LIBRARYIEEEUSEIEEESTDLOGICALL该例说明要使用IEEE库中的包中所有项目库的作用范围:库的作用范围从一个实体说明开始到它所属的结构体、配置为止当有两个实体时第二个实体前要另加库和包的说明。通常在一个实体中对数据类型、常量等进行的说明只可以在一个实体中使用为使这些说明可以在其它实体中使用VHDL提供了程序包结构包中罗列VHDL中用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义它是一个可编译的设计单元也是库结构中的一个层次使用包时可以用USE语句说明例如:USEIEEESTDLOGICALL程序包分为包头和包体包结构的格式如下:)包头格式:PACKAGE包名IS说明语句END包名包头中列出所有项的名称。)包体格式:PACKAGEBODY包名IS说明语句END包名包体给出各项的具体细节。例:包头USESTDSTDLOGICALLPACKAGElogicISTYPEthreelevellogicIS(‘,‘‘,‘z‘)数据类型项目CONSTANTunknownvalue:threelevellogic:=‘‘常数项目FUNCTIONinvert(input:threelevellogic)函数项目RETURNthreelevellogicENDlogic例:包体PACKAGEBODYlogicISFUNCTIONinvert(input:threelevellogic)函数项目描述BEGINCASEinputISWHEN‘=>RETURN‘WHEN‘=>RETURN‘WHENZ‘=>RETURNZ‘ENDCASEENDinvertENDlogic该包使用例:USElogicthreelevellogic,logicinvert使用数据类型和函数两个项目ENTITYinverterISPORT(x:INthreelevellogicy:OUTthreelevellogic)ENDinverterARCHITECTUREinverterbodyOFinverterISBEGINkk:PROCESSBEGINY<=invert(x)AFTERnsWAITONxENDPROCESSENDinverterbody用于在多构造体中的实体中选择构造体例如在做RS触发器的实体中使用了两个构造体目的是研究各个构造体描述的RS触发器的行为性能如何但是究竟在仿真中使用哪一个构造体的问题就是配置问题。配置语句格式:CONFIGURATION配置名OF实体名IS说明语句END配置名例:最简单的配置CONFIGURATION配置名OF实体名ISFOR被选构造体名ENDFOREND配置名例:ENTITYrsISPORT(set,reset:INBITq,qb:BUFFERBIT)ENDrsARCHITECTURErsffOFrsISCOMPONENTnandPORT(a,b:INBITc:OUTBIT)ENDCOMPONENTBEGINU:nandPORTMAP(a=>set,b=>qb,c=>q)U:nandPORTMAP(a=>reset,b=>q,c=>qb)ENDrsffARCHITECTURErsffOFrsISBEGINq<=NOT(qbANDset)qb<=NOT(qANDreset)ENDrsff两个构造体,可以用配置语句进行设置:CONFIGRATIONrsconOFrsIS选择构造体rsffFORrsffENDFORENDrsconVHDL可以象其它高级语言一样定义数据类型但还可以用户自己定义数据类型。信号:通常认为信号是电路中的一根线常数:可以在数字电路中代表电源、地线等等变量:可以代表某些数值.常数常数的描述格式:CONSTANT常数名:数据类型:=表达式例:CONSTANTVcc:REAL:=CONSTANTDALY:TIME:=nsCONSTANTFBUS:BITVECTOR:=‖‖.变量变量只能在进程、函数和过程中使用一旦赋值立即生效。变量的描述格式:VARIABLE变量名:数据类型约束条件:=表达式例:VARIABLEx,y:INTEGERVARIABLEcount:INTEGERRANGETO:=.信号信号除了没有方向的概念以外几乎和端口概念一致。信号的描述格式:SIGNAL信号名:数据类型约束条件:=表达式例:SIGNALsysclk:BIT:=‘‘SIGNALground:BIT:=‘‘在程序中信号值输入信号时采用代入符‖<=‖而不是赋值符“:=”同时信号可以附加延时。信号传送语句:s<=sAFTERns信号是一个全局量可以用来进行进程之间的通信.信号与变量的区别信号赋值可以有延迟时间变量赋值无时间延迟信号除当前值外还有许多相关值如历史信息等变量只有当前值进程对信号敏感对变量不敏感信号可以是多个进程的全局信号但变量只在定义它之后的顺序域可见信号可以看作硬件的一根连线但变量无此对应关系.整数(INTEGER)范围:.实数(REAL)范围:EE书写时一定要有小数。.位(BIT)在数字系统中信号经常用位的值表示位的值用带单引号的‘’和‘’来表示明确说明位数值时:BIT‘(‘’).位矢量(BITVECTOR)位矢量是用双引号括起来的一组位数据“”.布尔量(BOOLEAN)只有“真”和“假”两个状态可以进行关系运算.字符(CHARACTER)字符量通常用单引号括起来对大小写敏感明确说明是字符时:CHARACTER‘(‘’).字符串(STRING)字符串是双引号括起来的一串字符:“laksdklakld‖.时间(TIME)时间的单位:fs,ps,ns,ms,sec,min,hr例:ns整数数值和单位之间应有空格.错误等级(SEVERITYLEVEL)用来表示系统的状态它共有种:NOTE(注意)WARNING(警告)ERROR(错误)FAILURE(失败)大于等于零的整数(NATURAL)、正整数(POSITIVE)只能是正整数数据除定义类型外有时还需要定义约束范围。例:INTEGERRANGEDOWNTOBITVECTOR(DOWNTO)REALRANGETO用户定义的数据类型的一般格式:TYPE数据类型名{数据类型名}数据类型定义不完整的数据类型格式:TYPE数据类型名{数据类型名}可由用户定义的数据类型为:*枚举(ENUMERATED)格式:TYPE数据类型名IS(元素、元素、…)例:TYPEweekIS(Sun,Mon,Tue,wed,Thu,Fri,Sat)例:TYPESTDLOGICIS(U‘,‘X‘,‘‘,‘‘,‘Z‘,‘W‘,‘L‘,‘H‘,‘)*整数(INTEGER)格式:TYPE数据类型名IS数据类型定义约束范围例:TYPEdigitISINTEGERRANGETO*实数(REAL)格式:TYPE数据类型名IS数据类型定义约束范围例:TYPEcurrentISREALRANGEETOE*数组(ARRAY)格式:TYPE数据类型名ISARRAY范围OF原数据类型名例:TYPEwordISARRAY(TO)OFSTDLOGICTYPEwordISARRAY(INTEGERTO)OFSTDLOGICTYPEinstructionIS(ADD,SUB,INC,SRL,SRF,LDA,LDB)SUBTYPEdigitISINTEGERTOTYPEindflagISARRAY(instructionADDTOSRF)OFdigit数组常在总线、ROM和RAM中使用。*时间(TIME)格式:TYPE数据模型名不副实IS范围UNITS基本单位单位ENDUNITSTYPEtimeRANGE–ETOEUNITSfsps=fsns=psus=nsms=ussec=msmin=sechr=minENDUNITS*记录(RECODE)将不同的数据类型放在一块就是记录类型数据格式:TYPE数组类型名ISRECORD元素名:数据类型名元素名:数据类型名::ENDRECORD例:TYPEbankISRECORDaddr:STDLOGICVECTOR(DOWNTO)addr:STDLOGICVECTOR(DOWNTO)r:INTEGERENDRECORD存取(ACCESS)文件(FILE)数据类型转换函数有VHDL语言的包提供例如:STDLOGIC,STDLOGICARITH等等转换函数见表:TOSTDLOGICVECTOR(A)由BITVECTOR转换成STDLOGICVECTORTOBITVECTOR(A)由STDLOGICVECTOR转换成BITVECTORTOLOGIC(A)由BIT转换成STDLOGICTOBIT(A)由STDLOGIC转换成BITCONVSTDLOGICVECTOR(A,位长)由INTEGER,UNSIGNED和SIGNED转换成CONVINTEGER(A)STDLOGICVECTOR由UNSIGNED和SIGNED转换成INTEGERCONVINTEGERSTDLOGICVECTOR转换成INTEGER例:由STDBITVECTOR转换成INTEGERLIBRARYIEEEUSEIEEESTDLOGICALLUSEIEEESTDLOGICUNSIGNEDALLENTITYaddISPORT(num:INSTDLOGICVECTOR(DOWNTO)::)ENDaddARCHITECTURErtlOFaddISSIGNALinnum:INTEGERRANGETO::BEGINInnum<=CONVINTEGER(num)ENDrtlSIGNALa:BITVECTOR(DOWNTO)SIGNALb:STDLOGICVECTOR(DOWNTO)a<=X‖A‖十六进制可以赋予位矢量b<=X‖A‖十六进制不可以赋予逻辑矢量所以此句错逻辑量中只能赋予二进制b<=TOSTDLOGICVECTOR(X‖AF‖)十六进制变换b<=TOSTDLOGICVECTOR(O‖‖)八进制变换b<=TOSTDLOGICVECTOR(B‖‖)三位二进制变换”””年制定的标准IEEESTD对STDLOGIC的值做如下规定:‘U’初始值‘X’不定‘’‘’‘Z’高阻‘W’弱信号不定‘L’弱信号‘H’弱信号‘’不可能情况优先级别类型操作符说明高逻辑运算符AND逻辑与OR逻辑或NAND逻辑与非NOR逻辑或非XOR逻辑异或关系运算符=等号=不等号<小于>大于<=小于等于>=大于等于加、减、并置运加算符减并置正负运算符正负乘除法运算符*乘除MOD取模REM取余**指数ABS取绝对值NOT取反低要求运算符左右的数据类型必须相同例:x<=(aANDb)OR(NOTcANDd)x<=bANDaANDdANDex<=bORcORdORex<=aXORdXORea<=(xANDx)OR(yANDy)在使用乘法运算符时应该特别慎重因为它可以使逻辑门数大大增加。应该注意小于等于<=和代入运算符的不同(从上下文区别)并置运算符‖‖用于位连接例如:y()=b()eny()=b()eny()=b()eny()=b()eny()=a()y()=a()y()=a()y()=a()从上可以看出a,b是四位长度的矢量,而y的位长是位,上述情况可以表示成:tmpb<=bAND(enenenen)y<=atmpb若是位连接,可以简单写为:tmpb<=bAND(en,en,en,en)有三种描述方式:行为描述RTL描述和ASIC描述采用后两种描述方式可以进行逻辑综合。描述数字系统的行为主要用于仿真和系统工作原理的研究。下面介绍一些专用语句。)代入语句格式:信号量<=敏感信号量表达式例如:z<=aNOR(bNANDc)该例中有三个敏感量无论哪一个发生变化都可以使z变化。具有时间延迟的代入语句:a<=bAFTERns表示当b发生变化ns后a才变化。例:与门电路ENTITYandISPORT(a,b:INBITc:OUTBIT)ENDandARCHITECTUREandbehaveOFandISBEGINc<=aANDbENDandbehave)延时语句VHDL中有两种延时语句:惯性延时和传输延时。*惯性延时VHDL中惯性延时是缺省的因为逻辑硬件电路总是有时间延迟的若延迟时间是ns那末输入信号时间若小于ns则输出信号将不跟随输入信号的变化。有时为使延迟时间更逼真实际电路就专门设置惯性时间:b<=aAFTERns*传输延时传输延时常代表总线、连接线的延迟时间该时间必须专门说明。该传输延时只对信号起纯延时作用。例:b<=TRANSPORTaAFTERns数据流描述方式是一种可以进行逻辑综合的描述方式由于要进行逻辑综合所以对使用的语句有一定的限制,VHDL中的每一个命令和语句都对逻辑综合能力进行了定义要进行逻辑综合的设计实体就要使用有逻辑综合能力的命令和语句。例:四选一电路使用数据流描述方式应该注意的问题:.‘X’状态的传递问题有时‘X’状态会逐级传递造成系统的输出为不确定或者错误所以要在设计中考虑‘X’状态对输出的影响。一些限制*禁止在一个进程中使用两个寄存器*在IF语句描述寄存器时禁止ELSE项*在寄存器描述中禁止将变量代入信号*关连性强的信号应该放在一个进程中注重调用已有的元件、元件或门级电路之间的连线是结构描述的特点,结构描述可以提高设计效率)元件声明语句:元件声明语句用于调用已生成的元件,这些元件可能在库中,也可能是预先编写的元件实体描述元件语句的格式:COMPONENT元件名PORT说明端口说明ENDCOMPONENT元件语句可以在ARCHITECTURE,PACKAGE和BLOCK的说明部分)元件调用:格式:标号名:元件名PORTMAP(信号,…)两层信号之间的关系为映射关系,该映射有两种:位置映射例:有一元件的端口说明为:port(a,b:inbitc:outbit)调用该元件时:u:元件名portmap(n,n,m)这里n对应a,n对应b,m对应c名称映射例:该映射就是将库中已有模块的端口名称,赋予设计中的信号名U:元件名portmap(a=>nb=>n,c=>m)顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的如下分别介绍有关的顺序描述语句WAIT语句进程在执行过程中总是处于两种状态:执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程等待语句的格式:*WAIT无限等待*WAITON敏感信号变化格式:WAITON信号,信号例:PROCESS(a,b)BEGINy<=aANDbENDPROCESS*WAITUNTIL直到条件满足格式:WAITUNTIL布尔表达式当进程执行到该语句时,被挂起若布尔表达式为真时,进程将被启动例:WAITUNTIL((x*)<)*WAITFOR等到时间到格式:WAITFOR时间表达式当进程执行到该语句时,被挂起等待一定的时间后,进程将被启动例:WAITFORns*多条件WAIT语句例:WAITONnmi,interruptUNTIL((nmi=TRUE)OR(interrupt=TRUE))FORus该等待有三个条件:第一,信号nmi和interrupt任何一个有一次刷新动作第二,信号nmi和interrupt任何一个为真第三,等待us只要一个以上的条件被满足,进程就被启动*超时等待若在程序中所设置的等待条件永远不会满足,则进程就永远不能启动,为防止进入无限等待情况,应做一些处理断言语句(ASSERT)格式:ASSERT条件REPORT输出信息SEVERITY级别执行到断言语句时,判断条件,若条件满足就继续执行,否则输出文字串和错误级别信息例:ASSERT(tiaojian=‘‘)REPORT―somethingwrong‖SEVERITYERROR信号代入语句格式:目的信号量<=信号量表达式例:a<=b变量赋值语句格式:目的变量:=表达式例:c:=adIF语句)IF的门闩控制格式:IF条件THEN顺序执行语句ENDIF例:IF(a=‘‘)THENc<=bENDIF)IF语句的选择控制格式一:IF条件THEN顺序执行语句ELSE顺序执行语句ENDIF格式二:IF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句::ELSIF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句ENDIFCASE语句常用来描述总线、编码和译码的行为。格式:CASE表达式ISWHEN条件表达式=>顺序处理语句ENDCASE其中WHEN的条件表达式可以有种形式:WHEN值=>顺序处理语句WHEN值|值|值|…|值=>顺序处理语句WHEN值TO值=>顺序处理语句WHENOTHERS=>顺序处理语句格式二:[标号]:WHILE条件LOOP顺序处理语句ENDLOOP标号在该语句中,如果条件为真,则进行循环,否则结束循环例:sum:=abcd:WHILE(I<)LOOPsum:=IsumI:=IENDLOOPabcdNEXT语句在LOOP语句中用NEXT语句跳出循环格式:NEXT标号WHEN条件NEXT语句用于控制内循环的结束EXIT语句EXIT语句用于结束LOOP循环状态格式:EXIT标号WHEN条件例:进程语句在一个构造体中多个PROCESS语句可以同时并行的执行,该语句有如下特点:)可以和其它进程语句同时执行,并可以存取构造体和实体中所定义的信号)进程中的所有语句都按照顺序执行)为启动进程,在进程中必须包含一个敏感信号表或WAIT语句)进程之间的通信是通过信号量来实现的并发信号代入代入语句在进程中使用是顺序语句,但是在进程外即在构造体中使用就是并发语句,相当于一个进程例:ARCHITECTUREbehaveOFavarISBEGINOutput<=a(I)ENDbehave可以等效于:ARCHITECTUREbehaveOFavarISBEGINssPROCESS(a,I)BEGINOutput<=a(I)ENDPROCESSssENDbehave信号代入语句的右边可以是算数表达式,也可以是逻辑表达式,还可以是关系表达式,所以可以仿真加法器、乘法器、除法器、比较器和各种逻辑电路。条件信号代入条件代入语句也是并发语句它可以将符合条件的表达式代入信号量。格式:目的信号量<=表达式WHEN条件ELSE表达式WHEN条件ELSE表达式WHEN条件:ELSE表达式n选择信号代入格式:WITH表达式样SELECT目的信号量<=表达式WHEN条件表达式WHEN条件:表达式nWHEN条件n该语句很象CASE语句并发过程调用语句过程调用语句可以并发执行,但要注意如下问题:,并发过程调用是一个完整的语句,在它之前可以加标号,并发过程调用语句应带有IN,OUT或INOUT的参数,他们应该列在过程名后的括号内,并发过程调用可以有多个返回值例:ARCHITECTURE…BEGINvectortoint(z,xflag,q):END等同于:ARCHITECTURE…BEGINPROCESS(z,q)BEGINvectortoint(z,xflag,q):ENDPROCESSEND例输入与非门电路例:输入或非门例输入异或门电路例译码器例优先编码器例四选一选择器例:加法器例半加器例全加器,由半加器组成,以元件方式调用例:三态门例三态单向总线时钟信号和复位信号)时钟信号的描述*若进程的敏感信号是时钟信号,这时时钟信号出现在PROCESS后的括号中例:process(clocksignal)beginif(clockedgecondition)thensignalout<=signalin:其它语句:endifendprocess*在进程中用WAITON语句等待时钟这样的电路没有敏感信号,进程通常停留在WAITON语句上,只有时钟信号到来且满足一定条件时,其余语句才能执行例:processbeginwaiton(clocksignal)until(clockedgecondition)signalout<=signalin:其它语句:endprocess*敏感表中只能有一个时钟信号*waiton语句只能放在进程的最前面或者最后面*时钟的边沿描述描述时钟一定要指明是上升沿还是下降沿上升沿到来的条件:IFclk=‘‘ANDclk‘LASTVALUE=‘‘ANDclk‘EVENT下降沿到来的条件:IFclk=‘‘ANDclk‘LASTVALUE=‘‘ANDclk‘EVENT关于时钟信号的总结:IFclocksignal=currentvalueANDclocksignal‘LASTANDclocksiganl‘EVENT可以简单写为:IFclocksignal=clocksiganl‘EVENTANDcurrentvalue例:对于上升沿D触发器,其描述为:例:对于上升沿D触发器的另一描述为:复位信号*同步复位当复位信号有效且在给定的时钟边沿到来时,触发器才被复位例:process(clock)beginif(clockedgecondition)thenif(resetcondition)thensignalout<=resetvalueelsesignalout=signalin:其它语句:endifendifendprocess例:process(clock)if(clock‘eventandclock=‘‘)thenifreset=‘‘thencount<=‘‘elsecount<=countendifendifendprocess此例中,敏感表中只有时钟信号,因为只有时钟到来时才能复位*异步复位只要复位信号有效,触发器就被复位,所以敏感表中除时钟信号外,还需要复位信号例:process(resetsignal,clocksignal)beginif(resetsignal)thensignalout<=resetvalueelsif(clockeventandclockedgecondition)thensignalout<=signalin:其它语句:endifendprocess例:process(clock,reset)beginifreset=‘‘thencount<=‘‘elsifclock‘eventandclock=‘‘thencount<=countendifendprocess触发器)D锁存器)异步复位D锁存器)异步复位置位D锁存器)同步复位置位D触发器)异步复置位D触发器)寄存器例)D触发器组成的位移位寄存器)带请零端的位并行输入串行输出移位寄存器()管脚定义:a,bh位并行输入信号se串行输入信号q串行输出信号clk时钟信号fe时钟信号禁止端s移位装载控制端reset复位信号)十二进制同步计数器引脚定义:reset复位en计数控制clk时钟qa,qb,qc,qd计数器输出)位二进制可逆计数器管脚定义:reset复位clk时钟updn加减计数控制qa,qb,qc,qd输出)可预置数的六十进制计数器管脚定义:clk时钟bcdwr个位预置数控制bcdwr十位预置数控制datain预置数据cin进位输入(计数脉冲)co进位输出bcdp个位数据输出bcdp十位数据输出)各种计数器例)直接调用小规模数字电路例)选择信号如果sel信号为‖‖时,选择信号input,否则选择信号input)三信号分别控制输出数值输入信号high=输出q=mid=输出q=low=输出q=)由状态机方法描述的模加减计数器如果updown=状态变化为:zero,one,two,three如果updown=状态变化为:zero,three,two,one)状态机例

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/39

硬件描述语言VHDL

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利