子程序(subprogram).ppt

子程序(subprogram).ppt

ID:48733185

大小:322.50 KB

页数:43页

时间:2020-01-20

子程序(subprogram).ppt_第1页
子程序(subprogram).ppt_第2页
子程序(subprogram).ppt_第3页
子程序(subprogram).ppt_第4页
子程序(subprogram).ppt_第5页
资源描述:

《子程序(subprogram).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、8.3子程序(subprogram)子程序是一个VHDL程序模块能更有效地完成重复性工作只能通过子程序调用及与子程序的界面端口进行通信在程序包、结构体和进程中定义具有可重载特点,但参数类型及返回值数据类型是不同的有两种类型:过程和函数子程序有过程(Procedure)和函数(Function)两种类型。过程的调用可以获得多个返回值;过程有输入参数,输出参数及双向参数,过程一般被看作一种语句结构,即在调用过程语句时是作为一条完整的语句出现的。函数参数表中所有参数都是输入参数,函数的每次调用只有一个返回值,因此函数调用通常是语句中表达式的一部分。8.3

2、.1函数(function)在VHDL中有多种函数形式,如:用于不同目的用户自定义函数和在程序中现成的具有特定功能的预定义函数。函数可分为函数首与函数体两个部分。如果该函数仅在结构体中定义和使用,则只要函数体部分即可,但函数的定义一定要放在结构体的定义语句部分。如果将定义的函数放入程序包时,函数体与函数首都应具备;其中函数首放入程序包的包首中,函数体放入程序包的包体中。函数语句表达式格式:函数首的描述结构:Function函数名(参数表)Return数据类型----函数首的定义函数首的定义只有函数名(参数表)以及返回的数据类型,该部分一般放在程序包

3、的包首中,函数首是程序包中众多函数的索引,它没有具体的描述语句和算法,函数详细描述都放在函数体中,函数体的定义除了以上部分外,还应有函数的算法描述。Libraryieee;Useieee.std_logic_1164.all;Packagepackexpis--定义程序包functionmax(a,b:instd_logic_vector)returnstd_logic_vector;--定义函数首functionfuncl(a,b,c:real)returnreal;--定义函数首function“+”(a,b:std_logic)returns

4、td_logic;--定义函数首End;函数体的描述结构:Function函数名(参数表)Return数据类型is--函数体的定义[说明部分]Begin顺序语句;return…;End[function]函数名;函数体的第一部分与函数首的定义很类似,只是在最后多一个“is”。Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_arith.all;Packagepackexpis--定义程序包functionmax(a,b:instd_logic_vector)returnstd_logi

5、c_vector;--定义函数首functionfuncl(a,b,c:real)returnreal;--定义函数首function“+”(a,b:std_logic)returnstd_logic;--定义函数首End;packagebodypackexpis--程序包的包体functionmaximum(L,R:integer)returnintegeris--函数体的定义variableresult:integer;beginifL>Rthenresult:=L;elseresult:=R;endif;returnresult;endfou

6、nctionmaximum;end;子程序调用语句从硬件角度讲,一个子程序的调用类似于一个元件模块的例化。VHDL综合器为子程序(函数和过程)的每一次调用都生成一个电路逻辑块,所不同的是,元件的例化将产生一个新的设计层次,而子程序调用只对应于当前层次的一个部分。Libraryieee;--调用函数Useieee.std_logic_1164.allUsework.packexp.all;EntityaxampisPort(dat1,dat2:instd_logic_vector(3downto0);dat3,dat4:instd_logic_vec

7、tor(3downto0);out1,out2:outstd_logic_vector(3downto0));End;Architecturebhvofaxampisbeginout1<=max(dat1,dat2);--用在赋值语句中的并行函数调用语句process(dat3,dat4)beginout2<=max(dat3,dat4);--顺序函数调用语句Endprocess;End;Libraryieee;Useieee.std_logic_1164.all;Entityfuncisport(a:instd_logic_vector(0to2

8、);m:outstd_logic_vector(0to2));Endentityfunc;Architecturedemo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。