子程序和程序包.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
子程序和程序包 VHDL向设计者提供了自定义子程序的机制,设计者可以在结构体说明部分或者进程语句的说明部分中定义子程序,并可以在该结构体或者该进程中调用这个子程序;如果某个子程序是一个共享资源,即在某个设计实体的多个结构体中都要调用该子程序,或者在不同的设计实体中要调用该子程序,则应当在程序包中定义该子程序。 设计者在设计实体中说明的数据类型、对象、子程序、元件和属性等等,对于其它实体而言,是不可见的。VHDL向设计者提供了将共享资源封装在程序包中单独编译,并对多个设计实体均可见的机制。 4.1 子程序 子程序可以被看作是设计者自己定义的运算符。VHDL提供了两种子程序:过程和函数。过程和函数的区别在于:过程被过程调用语句启动执行,并可以返回多个结果;而函数则被表达式所调用,并且只返回一个值。 4.1.1 过程 当设计者自己定义了某种“运算”,而这种“运算”将产生多个返回值或者说多个结果时,通常使用过程来描述这种“运算”。其优点是:当设计者需要进行这种已定义好的“运算”时,使用过程调用语句,并用实际参数代替定义“运算”时说明的形式参数,即可以完成这种“运算”;而且可以在一个结构体甚至一个进程语句中,多次调用这种“运算”。定义一种“运算”实际上就是说明一个过程。 过程说明的一般格式为: PROCEDURE 过程名(形参表)IS { 说明语句 } BEGIN { 顺序语句 } END [ PROCEDURE ][ 过程名 ]; 在过程说明的形参表中,形式参数可以是常量、信号和变量,对象模式可以是IN、OUT或INOUT;如果没有说明形式参数的对象模式,则其缺省模式为IN;如果没有说明形式参数的数据类型,则其缺省模式为:IN模式的形式参数是常量类型,OUT和INOUT模式的形式参数是变量类型;对于并行过程调用语句所调用的过程,由于VHDL’87的限制,形式参数不能为变量。在说明语句部分,可以说明过程内部的数据类型和局部对象。过程中的语句都是顺序语句;如果顺序过程调用语句所在的进程没有敏感信号表,则在所调用的过程中,可以包含WAIT语句,否则不能包含WAIT语句。 不正确地使用过程,可能导致出现意想不到的结果。例如:由于全局信号可以在结构体中的任何地方被访问,在某个过程中对一个全局信号赋值是合法的。但如果该信号没有作为一个实参传递给过程的话,那么,就有可能出现副作用:一个意想不到的多余返回值。因此,不推荐这种使用过程的方法。 4.1.2 函数 当设计者自己定义的“运算”只有一个返回值时,虽然可以用过程描述这个“运算”,但更为常见的是用函数来描述该“运算”。 函数说明的一般格式为: FUNCTION 函数名(形参表)RETURN 返回值类型 IS { 说明语句 } BEGIN { 顺序语句 } END [ FUNCTION ][ 函数名 ]; 在函数说明的形参表中,形式参数可以是常量和模式为IN的信号;如果没有说明形式参数的数据类型,则其缺省模式为常量类型。在说明语句部分,可以说明函数内部的数据类型和局部对象。函数中的语句都是顺序语句;在函数内部,不容许包含WAIT语句和信号赋值语句。 在程序包Std_Logic_1164中,定义了下面几种数据类型之间的类型转换函数(参阅附录C:“STD_LOGIC_1164程序包”): ①Std_Logic与Bit类型之间; ②Std_Logic_Vector与Bit_vector类型之间; ③Std_ULogic与Bit类型之间; ④Std_ULogic_Vector与Bit_vector类型之间。 例如,程序包Std_Logic_1164中的函数 FUNCTION To_BitVector(s:Std_Logic_Vector;xmap:Bit:=‘0’) RETURN Bit_Vector; 就定义了一个将Std_Logic_Vector类型转换为 Bit_Vector类型的类型转换函数。 例4-1 类型转换函数 FUNCTION To_BitVector(s:Std_Logic_Vector; xmap:Bit:=’0’)RETURN Bit_Vector IS ALIAS sv:Std_Logic_Vector(s’Length-1 DOWNTO 0)IS s; VARIABLE result:Bit_Vector(s’Length-1 DOW

文档评论(0)

seunk + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档