欢迎来到天天文库
浏览记录
ID:50354716
大小:1.33 MB
页数:257页
时间:2020-03-08
《EDA技术及应用 第二版 教学课件 作者 谭会生 第1-4章第3章 VHDL编程基础B.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.6子程序(SUBPROGRAM)3.6.1函数(FUNCTION)在VHDL中有多种函数形式,如库中现成的具有专用功能的预定义函数和用于不同目的的用户自定义函数。函数的语言表达格式如下:FUNCTION函数名(参数表)RETURN数据类型;--函数首FUNCTION函数名(参数表)RETURN数据类型IS--函数体开始[说明部分;]BEGIN顺序语句;ENDFUNCTION函数名;--函数体结束一般地,函数定义由两部分组成,即函数首和函数体。1.函数首函数首是由函数名、参数表和返回值的数据类型三部分组成的。函数首的名称即为函数的名称,需放在关键词FUNCT
2、ION之后,它可以是普通的标识符,也可以是运算符(这时必须加上双引号)。【例3.6.1】FUNCTIONFUNC1(A,B,C:REAL)RETURNREAL;FUNCTION"*"(A,B:INTEGER)RETURNINTEGER;--注意函数名*要用引号括住FUNCTIONAS2(SIGNAIN1,IN2:REAL)RETURNREAL;--注意信号参量的写法以上是三个不同的函数首,它们都放在某一程序包的说明部分。2.函数体函数体包括对数据类型、常数、变量等的局部说明以及用以完成规定算法或转换的顺序语句,并以关键词ENDFUNCTION以及函数名结尾。一
3、旦函数被调用,就将执行这部分语句。【例3.6.2】ENTITYFUNCISPORT(A:INBIT_VECTOR(0TO2);M:OUTBUT_VECTOR(0TO2));ENDENTITYFUNC;ARCHITECTUREARTOFFUNCISFUNCTIONSAM(X,Y,Z:BIT)RETURNBITIS--定义函数SAM,该函数无函数首BEGINRETURN(XANDY)ORY;ENDFUNCTIONSAM;BEGINPROCESS(A)ISBEGINM(0)<=SAM(A(0),A(1),A(2));--当A的三个位输入元素A(0)、A(1)和A(2
4、)中的M(1)<=SAM(A(2),A(0),A(1));--任何一位有变化时,将启动对函数SAM的调用,M(2)<=SAM(A(1),A(2),A(0));--并将函数的返回值赋给M输出ENDPROCESS;ENDARCHITECTUREART;3.6.2重载函数(OVERLOADEDFUNCTION)VHDL允许以相同的函数名定义函数,即重载函数。但这时要求函数中定义的操作数具有不同的数据类型,以便调用时用以分辨不同功能的同名函数。在不同数据类型操作数构成的同名函数中,以运算符重载式函数最为常用。【例3.6.3】LIBRARYIEEE;--程序包首USEI
5、EEE.STD_LOGIC_1164.ALL;USEIEEESTD_LOGIC_ARITH.ALL;PACKAGESTD_LOGIC_UNSIGNEDISFUNCTION“+”(L:STD_LOGIC_VECTOR;R:INTEGER)RETURNSTD_LOGIC_VECTOR;FUNCTION“+”(L:INTEGER;R:STD_LOGIC_VECTOR)RETURNSTD_LOGIC_VECTOR;FUNCTION“+”(:STD_LOGIC_VECTOR;R:STD_LOGIC)RETURNSTD_LOGIC_VECTOR;FUNCTIONSHR(A
6、RG:STD_LOGIC_VECTOR;COUNT:STD_LOGIC_VECTOR)RETURNSTD_LOGIC_VECTOR;…ENDPACKAGESTD_LOGIC_UNSIGNED;LIBRARYIEEE;--程序包体USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;PACKAGEBODYSTD_LOGIC_UNSIGNEDISFUNCTIONMAXIMUM(L,R:INTEGER)RETURNINTEGERISBEGINIFL>RTHENRETURNL;ELSERETURNR;ENDIF;
7、ENDFUNCTIONMAXIMUM;FUNCTION“+”(L:STD_LOGIC_VECTOR;R:INTEGER)RETURNSTD_LOGIC_VECTORISVARIABLERESULT:STD_LOGIC_VECTOR(L'RANGE);BEGINRESULT:=UNSIGNED(L)+R;RETURNSTD_LOGIC_VECTOR(RESULT);ENDFUNCT10N"+";…ENDPACKAGEBODYSTD_LOGIC_UNSIGNED;通过此例,不但可以从中看到在程序包中完整的函数置位形式,而且还将注意到,在函数首的三个函数名都是同名的
8、,即都是以加法运算符“+”作为函数名。
此文档下载收益归作者所有