子程序是利用顺序语句来定义和完成算法的,它可以在VHDL程序的三个不同位置进行定义,即在程序包、结构体或进程中定义。但由于只有在程序包中定义的子程序可被其他不同的设计所调用,所以一般应该将子程序放在程序包中。必须注意综合后的子程序将映射于目标芯片中的一个相应的电路模块,每调用一次都会在硬件结构中产生一个这样的电路模块。
1.函数
函数分为预定义函数和用户自定义函数两种,预定义函数是指在库中已定义的具有专用功能的那些函数,这种函数在库打开的情况下直接调用。而用户自定义函数必须先定义,然后才能调用,其定义格式为:
2.重载函数
VHDL允许以相同的函数名定义函数,即重载(overloaded)函数。但这时要求函数中定义的操作数具有不同的数据类型,以便调用时可以分辨不同功能的同名函数。在具有不同数据类型操作数构成的同名函数中,以运算符重载式函数最为常用。这种函数为不同数据类型间的运算带来极大的方便。VHDL中预定义的运算符如“+”,“and”和“>”等均可以被重载,赋予其新的数据类型操作功能,允许不同数据类型之间用此运算符进行运算。如例8.1.1中的运算“Q1+1”就是两种不同数据类型之间进行运算。(www.xing528.com)
3.过程
过程与函数类似,但过程的调用可通过其界面获得多个返回值,而函数只能返回一个值。在函数的入口所有的参数都是输入参数,而过程的入口有输入参数、输出参数和双向参数。过程在结构体或进程中以分散语句的形式存在,而函数经常在赋值语句或表达式中使用。过程可以单独存在,而函数通常作为语句的一部分调用。
过程和函数都有两种形式,即并行过程和并行函数,顺序过程和顺序函数。并行过程和并行函数存在于进程或者其他子程序的外部,而顺序过程和顺序函数存在于进程或者其他子程序的内部。当某个过程处于并行环境中,其过程体中定义的任一in或inout类型的目标参量发生改变时将启动过程的调用。
过程的定义格式为:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。