![深入理解FPGA电子系统设计:基于Quartus Prime与VHDL的Altera FPGA设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/453/34061453/b_34061453.jpg)
上QQ阅读APP看书,第一时间看更新
2.5 子程序及子程序调用语句
VHDL中的子程序包括过程(procedure)和函数(function)两类,子程序调用即调用过程或函数,并将结果赋值给信号。过程调用相当于描述语句,没有返回值,可以包含任意的in、out或inout类型参数,参数数据类型一般可用signal、variable或constant;而函数调用相当于表达式,包含多个输入参数,但只会有一个返回值,而且输入参数类型不能是variable,多使用constant。子程序调用语句都属于顺序语句的范畴,需要注意的是它们都不能使用wait语句和元件例化语句。下面分别对它们做介绍。
1. 过程(procedure)
过程用过程语句定义,其格式如下:
![](https://epubservercos.yuewen.com/A3A866/18225431901802806/epubprivate/OEBPS/Images/Figure-P65_28142.jpg?sign=1738895191-lwjnaN90QyCmRVs4gm7GnRQkY6ZvscZu-0-45ec9e60e417696c4f63fa61e48eaea0)
过程的参数可以是输入in、输出out或双向inout属性,返回值可以有多个,其返回值在声明语句中说明。
【例2.8】返回两数中的较小数值的过程描述。
![](https://epubservercos.yuewen.com/A3A866/18225431901802806/epubprivate/OEBPS/Images/Figure-P65_28141.jpg?sign=1738895191-HF1RxT6ldKAxw24SwvBbANwbVjSXaKte-0-3a6db6e283e8b1ddbb2dec406402e12f)
2. 过程调用
过程调用语句的格式如下:
过程名 (信号列表)
例如对于上述获取最小值的过程min的调用如下:
![](https://epubservercos.yuewen.com/A3A866/18225431901802806/epubprivate/OEBPS/Images/Figure-P66_6080.jpg?sign=1738895191-6OKKukfcrZl0r55hsA3YYY8l8GUASS7r-0-941c3a95f7a3c6fa631d5ebed3b31d8c)
3. 函数(function)
函数的格式说明如下:
![](https://epubservercos.yuewen.com/A3A866/18225431901802806/epubprivate/OEBPS/Images/Figure-P66_28145.jpg?sign=1738895191-I8sWxOV2fnXg9s5XLzp1V6AaReNyPg6r-0-b0d77f3b8c5e1323a9ca402a01075d1f)
函数的所有参数都是in属性,返回值只有一个,在声明语句之外说明。
例如:返回两数中的较小数值的函数描述。
![](https://epubservercos.yuewen.com/A3A866/18225431901802806/epubprivate/OEBPS/Images/Figure-P66_28143.jpg?sign=1738895191-LNfUw6N9L7xKGX3dV6ParNodbRrxvdxG-0-a5a8c6a73e82be3cf9529db29c895b84)
4. 函数调用
函数调用语句的格式如下:
函数名 (信号列表)
例如对于上述获取最小值的函数min的调用如下:
![](https://epubservercos.yuewen.com/A3A866/18225431901802806/epubprivate/OEBPS/Images/Figure-P66_28144.jpg?sign=1738895191-t0BRewd6k41kQkohHG7lrzEJ37dshoTD-0-7b90298915a6f1c313dc74e55f2d49b9)
注意:如果将过程或函数集合到包(package)中,再利用use语句使包对设计成为可见、可使用的,那么就不需要再在结构体的说明部分对过程或函数进行说明,而可以直接使用过程调用语句或函数调用语句进行调用即可。