- 1、本文档共590页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VHDL的预定义数据类型-数字系统设计
在实用中必须注意,综合后的子程序将映射于目标芯片中的一个相应的电路模块,且每一次调用都将在硬件结构中产生具有相同结构的不同的模块,这一点与在普通的软件中调用子程序有很大的不同。因此,在面向VHDL的实用中,要密切关注和严格控制子程序的调用次数,每调用一次子程序都意味着增加了一个硬件电路模块。 3.6.1 函数(FUNCTION) 在VHDL中有多种函数形式,如在库中现成的具有专用功能的预定义函数和用于不同目的的用户自定义函数。函数的语言表达格式如下: FUNCTION 函数名(参数表) RETURN 数据类型; --函数首 FUNCTION 函数名(参数表) RETURN 数据类型 IS --函数体开始 [说明部分]; BEGIN 顺序语句; END FUNCTION 函数名; --函数体结束 一般地,函数定义由两部分组成,即函数首和函数体。 1.函数首 函数首是由函数名、参数表和返回值的数据类型三部分组成的。函数首的名称即为函数的名称,需放在关键词FUNCTION之后,它可以是普通的标识符,也可以是运算符(这时必须加上双引号)。函数的参数表是用来定义输入值的,它可以是信号或常数,参数名需放在关键词CONSTANT或SIGNAL之后,若没有特别说明,则参数被默认为常数。如果要将一个已编制好的函数并入程序包,函数首必须放在程序包的说明部分,而函数体需放在程序包的包体内。如果只是在一个结构体中定义并调用函数,则仅需函数体即可。由此可见,函数首的作用只是作为程序包的有关此函数的一个接口界面。 【例3.6.1】 FUNCTION FOUC1(A,B,C:REAL) RETURN REAL; FUNCTION * (A,B:INTEGER) RETURN INTEGER; --注意函数名*要用引号括住 FUNCTION AS2(SIGNAL IN1,IN2:REAL) RETURN REAL; --注意信号参量的写法 以上是三个不同的函数首,它们都放在某一程序包的说明部分。 2. 函数体 函数体包括对数据类型、常数、变量等的局部说明,以及用以完成规定算法或转换的顺序语句,并以关键词END FUNCTION 以及函数名结尾。一旦函数被调用,就将执行这部分语句。 【例3.6.2】 ENTITY FUNC IS PORT ( A:IN BIT_VECTOR(0 TO 2); M:OUT BUT_VECTOR (0 TO 2)); END ENTITY FUNC; ARCHITECTURE ART OF FUNC IS FUNCTION SAM(X,Y,Z:BIT)RETURN BIT IS --定义函数SAM,该函数无函数首 BEGIN RETURN (X AND Y) OR Y; END FUNCTION SAM; BEGIN PROCESS(A) BEGIN M(0)=SAM (A(0),A(1),A(2)); --当A的3个位输入元素A(0)、A(1)和A(2)中的 M(1)=SAM (A(2),A(0),A(1)); --任何一位有变化时,将启动对函数SAM的调用, M(2)=SAM (A(1),A(2),A(0)); --并将函数的返回值赋给M输出 END PROCESS; END ARCHITECTURE ART; 3.6.2 重载函数(OVERLOADED FUNCTION) VHDL允许以相同的函数名定义函数,即重载函数。但这时要求函数中定义的操作数具有不同的数据类型,以便调用时用以分辨不同功能的同名函数。在具有不同数据类型操作数构成的同名函数中,以运算符重载式函数最为常用。这种函数为不同数据类型间的运算带来极大的方便,例3.6.3中以加号“+”为函数名的函数即为运算符重载函数。VHDL中预定义的操作符如“+”、“AND”、“MOD”、“”等运算符均可以被重载,以赋予新的数据类型操作功能,也就是说,通过重新定义运算符的方式,允许被重载的运算符能够对新的数据类型进行操作,或者允许不同的数据类型之间用此运算符进行运算。 例3.6.3给出了一个Syno
文档评论(0)