您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > FPGA与硬件描述语言_第三章_VHDL硬件描述语言2
FPGA与硬件描述语言2016.41VHDL硬件描述语言—结构体VHDL程序结构—结构体•VHDL结构体的子结构描述在规模较大的电路设计中,全部电路都用唯一的一个模块来描述是非常不方便的。为此,电路设计者将整个电路分成若干个相对比较独立的模块来进行描述。这样,一个结构体可以用几个子结构,即几个相对比较独立的子模块来实现2VHDL硬件描述语言—结构体VHDL程序结构—结构体BLOCK语句•BLOCK语句的结构块标号:BLOCK接口说明;类属说明;BEGIN并行语句;ENDBLOCK块标号;3VHDL硬件描述语言—结构体ENTITYmux21ISPORT(a,b,s:INBIT;y:OUTBIT);ENDmux21;ARCHITECTUREbehaviorOFmux21ISSIGNALtmp1,tmp2,tmp3:BIT;BEGINcale:BLOCKBEGINtmp1=aANDs;tmp2=bAND(NOTs);tmp3=tmp1ORtmp2;y=tmp3;ENDBLOCKcale;ENDbehavior;4VHDL硬件描述语言—结构体VHDL程序结构—结构体BLOCK语句•BLOCK中语句的并发性在对程序进行仿真时,BLOCK语句所描述的各个语句是可以并行执行的,它和书写顺序没有关系,在VHDL语言中将这种可以并行执行的语句称为并发语句5VHDL硬件描述语言—结构体ENTITYexampleISPORT(a,b:INBIT;s,c:OUTBIT);ENDexample;ARCHITECTUREbehavior1OFexampleISBEGINs=aXORb;c=aANDb;ENDbehavior1;ARCHITECTUREbehavior2OFexampleISBEGINcal:BLOCKBEGINPROCESS(a,b)BEGINs=aXORb;ENDPROCESS;PROCESS(a,b)BEGINc=aANDb;ENDPROCESS;ENDBLOCKcal;ENDbehavior2;6VHDL硬件描述语言—结构体VHDL程序结构—结构体PROCESS语句•PROCESS语句的结构[进程编号:]PROCESS[(敏感信号参数表)][IS][进程说明部分;]BEGIN顺序描述语句;ENDPROCESS[进程标号];7VHDL硬件描述语言—结构体ENTITYmux21ISPORT(a,b,s:INBIT;y:OUTBIT);ENDmux21;ARCHITECTUREbehaviorOFmux21ISBEGINcale:PROCESS(a,b,s)VARIABLEtmp1,tmp2,tmp3:BIT;BEGINtmp1:=aands;tmp2:=band(NOTs);tmp3:=tmp1ORtmp2;y=tmp3;ENDPROCESS;ENDbehavior;8VHDL硬件描述语言—结构体VHDL程序结构—结构体PROCESS语句•一个结构体中可以含有多个PROCESS结构,每个PROCESS结构对于其敏感信号参数表中定义的任意敏感参量的变化,每个进程可以在任何时刻被激活或者称为启动•所有被激活的进程都是并行运行的,这就是为什么PROCESS结构本身是并行语句的道理9VHDL硬件描述语言—结构体A进程B进程C进程ao1ai2ai1ao2bo1bi1bi2bo2co110VHDL硬件描述语言—结构体VHDL程序结构—结构体子程序的结构描述•子程序(SUBPROGRAM)可以在VHDL程序的3个不同位置进行定义,即在程序包、结构体和进程中定义•VHDL子程序具有可重载性的特点,即允许有许多重名的子程序,但这些子程序的参数类型及返回值数据类型是不同的•子程序有两种类型,即函数和过程11VHDL硬件描述语言—结构体函数•函数的语句表达格式FUNCTION函数名(参数表)RETURN数据类型;FUNCTION函数名(参数表)RETURN数据类型IS[说明部分;]BEGIN[顺序语句;]ENDFUNCTION函数名;12VHDL硬件描述语言—结构体函数•如果要将一个已编好的函数并入程序包,函数首必须放在程序包的说明部分,而函数体则需要放在程序包的包体内•如果只是在一个结构体中定义并调用函数,则仅仅需要函数体13VHDL硬件描述语言—结构体PACKAGEpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定义函数首RETURNSTD_LOGIC_VECTOR;FUNCTIONfuncl(a,b,c:REAL)--定义函数首RETURNREAL;FUNCTION“*”(a,b:INTEGER)--定义函数首RETURNINTEGER;FUNCTIONas2(SIGNALin1,in2:REAL)--定义函数首RETURNREAL;ENDpackexp;PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定义函数体RETURNSTD_LOGIC_VECTORISBEGINIFabTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;……ENDpackexp;14VHDL硬件描述语言—结构体LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEWORK.packexp.ALL;ENTITYaxampISPORT(data1,data2,data3,data4:INSTD_LOGIC_VECTOR(7DOWNTO0);out1,out2:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYaxamp;ARCHITECTUREbehaviorOFaxampISBEGINout1=max(data1,data2);PROCESS(data3,data4)BEGINout2=max(data3,data4);ENDPROCESS;ENDARCHITECTUREbehavior;15VHDL硬件描述语言—结构体ENTITYfuncISPORT(a:INBIT_VECTOR(0TO2);m:OUTBIT_VECTOR(0TO2));ENDENTITYfunc;ARCHITECTUREbehaviorOFfuncISFUNCTIONsam(x,y,z:BIT)RETURNBITISBEGINRETURN(xANDy)ORz;ENDFUNCTIONsam;BEGINPROCESS(a)BEGINm(0)=sam(a(0),a(1),a(2));m(1)=sam(a(2),a(0),a(1));m(2)=sam(a(1),a(2),a(0));ENDPROCESS;ENDARCHITECTUREbehavior;16VHDL硬件描述语言—结构体过程•过程的语句表达格式PROCEDURE过程名(参数表);PROCEDURE过程名(参数表)IS[定义语句;]BEGIN[顺序语句;]ENDPROCEDURE过程名;17VHDL硬件描述语言—结构体过程—过程首•过程首由过程名和参数表组成•参数表可以对常数、变量和信号三类数据对象目标作出说明,并用关键词IN、OUT和INOUT定义这些参数的工作模式,即信息流向•如果没有指定模式,则默认为IN18VHDL硬件描述语言—结构体PROCEDUREpro1(VARIABLEa,b:INOUTREAL);PROCEDUREpro2(CONSTANTa1:ININTEGER;VARIABLEb1:OUTINTEGER);PROCEDUREpro3(SIGNALsig:INOUTBIT);•在参量表中可定义三种流向模式,即IN、OUT和INOUT•如果只定义了IN模式而未定义目标参量类型,则默认为常量•如果只定义了INOUT和OUT模式,则默认目标参量类型为变量19VHDL硬件描述语言—结构体过程—过程体•过程体是由顺序语句组成的,过程的调用即启动了对过程体的顺序语句的执行•与函数一样,过程体中的说明部分只是局部的,其中的各种定义只能适用于过程体内部•过程体的顺序语句部分可以包含任何顺序执行的语句20VHDL硬件描述语言—结构体过程—过程的调用•在不同的调用环境中,可以有两种不同的语句方式对过程进行调用,即顺序语句方式和并行语句方式•在顺序语句自然执行过程中,一个过程被执行,则属于顺序语句方式•当过程处于并行语句环境中,其过程体中定义的任一IN或INOUT的目标参量发生改变时,将启动过程调用,即并行语句方式21VHDL硬件描述语言—结构体PROCEDUREprg1(VARIABLEvalue:INOUTBIT_VECTOR(0TO3))ISBEGINCASEvalueISWHEN“0000”=value:=“0101”;WHEN“0101”=value:=“0000”;WHENOTHERS=value:=“1111”;ENDCASE;ENDPROCEDUREprg1;•在过程调用中,如果没有特别指定,“IN”将被作为常数处理,而“INOUT”和“OUT”将按变量对待,过程调用返回的值将传递给变量22VHDL硬件描述语言—结构体函数(FUNCTION)过程(PROCEDURE)函数的调用只能返回一个值过程的调用可通过其界面获得多个返回值在函数入口中,所有参数都是输入参数在过程入口中,有输入参数、输出参数和双向参数函数通常是表达式的一部分过程一般被看作一种语句结构函数通常作为语句的一部分被调用过程可以单独存在,其行为类似子进程23VHDL硬件描述语言—程序包、库和配置程序包(PACKAGE)•已在设计实体中定义的数据类型、子程序或数据对象对于其他设计实体是不可用的,或者说是不可见的。为了使已定义的常数、数据类型、元件调用说明以及子程序能被更多的VHDL设计实体方便地访问和共享,可以将它们收集在一个VHDL程序包中•多个程序包可以并入一个VHDL库中,使之适用于更一般的访问和调用范围24VHDL硬件描述语言—程序包、库和配置程序包的4种基本结构常数说明:在程序包中的常数说明结构主要用于预定义系统的宽度,如数据总线通道的宽度VHDL数据类型说明:主要用于在整个设计中通用的数据类型,例如通用的地址总线数据类型定义等元件定义:元件定义主要规定在VHDL设计中参与元件例化的文件(已完成的设计实体)对外的接口界面子程序:并入程序包的子程序有利于在设计中任一位置进行方便地调用25VHDL硬件描述语言—程序包、库和配置程序包(PACKAGE)•一旦定义了一个程序包,各种独立的设计就能方便地调用包中的内容•程序包用来单纯罗列VHDL中所使用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义等例如:USEIEEE.STD_LOGIC_1164.ALL26VHDL硬件描述语言—程序包、库和配置程序包•程序包结构PACKAGE程序包名IS程序包首说明部分;END程序包名;PACKAGEBODY程序包名IS程序包体说明部分以及包体内容;END程序包名;27VHDL硬件描述语言—程序包、库和配置程序包—程序包首•程序包首的说明部分可收集多个不同的VHDL设计所需的公共信息,其中包括数据类型、信号说明、字程序说明及元件说明28PACKAGEpaclISTYPEbyteISRANGE0TO255;--定义数据类型byteSUBTYPEnibbleISbyteRANGE0TO15;--定义子类型CONSTANTbyte_ff:byte:=255;--定义常数byte_ffSIGNALaddend:nibble;--定义信号addendCOMPONENTbyte_adder--定义元件PORT(a,b:INbyte;c:OUTbyte;overflow:OUTBOOLEAN);ENDCOMPONENT;FUNCTIONmy_function(a:INbyte)RETURNbyte;--定义函数ENDpacl;VHDL硬件
本文标题:FPGA与硬件描述语言_第三章_VHDL硬件描述语言2
链接地址:https://www.777doc.com/doc-2872455 .html