子程序(subprogram).ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
子程序(subprogram)

8.3 子程序(subprogram) 子程序是一个VHDL程序模块 能更有效地完成重复性工作 只能通过子程序调用及与子程序的界面端口进行通信 在程序包、结构体和进程中定义 具有可重载特点,但参数类型及返回值数据类型是不同的 有两种类型:过程和函数 子程序有过程(Procedure)和函数(Function)两种类型。 过程的调用可以获得多个返回值;过程有输入参数,输出参数及双向参数,过程一般被看作一种语句结构,即在调用过程语句时是作为一条完整的语句出现的。 函数参数表中所有参数都是输入参数,函数的每次调用只有一个返回值,因此函数调用通常是语句中表达式的一部分。 8.3.1 函数(function) 在VHDL中有多种函数形式,如:用于不同目的用户自定义函数和在程序中现成的具有特定功能的预定义函数。 函数可分为函数首与函数体两个部分。 如果该函数仅在结构体中定义和使用,则只要函数体部分即可,但函数的定义一定要放在结构体的定义语句部分。 如果将定义的函数放入程序包时,函数体与函数首都应具备;其中函数首放入程序包的包首中,函数体放入程序包的包体中。 函数语句表达式格式: 函数首的描述结构: Function 函数名(参数表) Return 数据类型 ----函数首的定义 函数首的定义只有函数名(参数表)以及返回的数据类型,该部分一般放在程序包的包首中,函数首是程序包中众多函数的索引,它没有具体的描述语句和算法,函数详细描述都放在函数体中,函数体的定义除了以上部分外,还应有函数的算法描述。 Library ieee; Use ieee.std_logic_1164.all; Package packexp is --定义程序包 function max (a, b: in std_logic_vector) return std_logic_vector; --定义函数首 function funcl ( a,b,c : real ) return real; --定义函数首 function “+” (a,b: std_logic ) return std_logic; --定义函数首 End; 函数体的描述结构: Function 函数名 (参数表)Return 数据类型 is --函数体的定义 [说明部分] Begin 顺序语句; return …; End [function] 函数名; 函数体的第一部分与函数首的定义很类似,只是在最后多一个“is”。 Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_arith.all; Package packexp is --定义程序包 function max (a, b: in std_logic_vector) return std_logic_vector; --定义函数首 function funcl ( a,b,c : real ) return real; --定义函数首 function “+” (a,b: std_logic ) return std_logic; --定义函数首 End; package body packexp is -- 程序包的包体 function maximum(L, R: integer) return integer is --函数体的定义 variable result: integer; begin if L R then result := L; else result := R; end if; return result; end founction maximum ; end ; 子程序调用语句 从硬件角度讲,一个子程序的调用类似于一个元件模块的例化。VHDL综合器为子程序(函数和过程)的每一次调用都生成一个电路逻辑块,所不同的是,元件的例化将产生一个新的设计层次,而子程序调用只对应于当前层次的一个部分。 Library ieee; --调用函数 Use ieee.std_logic_1164.all Use work.pack

文档评论(0)

sh4125733 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档