《VHDL 数字电路设计教程》电工版/第11章:函数和过程

本文深入探讨了VHDL中的子程序,包括函数和过程的定义、结构、调用方式及其存放位置。同时,对比了函数与过程的异同,并介绍了断言(ASSERT)语句的使用。

        函数(FUNCTION)和过程(PROCEDURE)统称为子程序,且两者与进程(PROCESS)的结构特征十分相似,内部包含的都是顺序描述语句,如IFCASELOOP等(注意:FUNCTIONPROCEDURE中不允许使用WAIT语句)。

        从应用的角度来说,它们的目的都是储存常用的VHDL代码,以达到代码重用和共享的目的。但是,PROCESS是直接在主代码中使用,而FUNCTION或PROCEDURE是为了建库而使用。

11.1  函数

    一个函数(FUNCTION)就是一段顺序描述的代码。而且,在函数中禁止使用WAIT语句、进行信号的声明元件实例化

  • 函数体
function function_name[(
	parameter_list1;    --输入参数
	parameter_list2;
	...
	parameter_listN)]
	return data_type is
	[声明]
begin
	(顺序描述代码)
end function_name;

  parameter_list格式:[CONSTANT]  常量名:data_type;(关键字CONSTANT可以省略

                                            SIGNAL        信号名:data_type;

        函数的输入参数(parameter_list)可以是常量省略即默认)或信号,但不能是变量,且参数的个数可以是任意的,甚至可以不包含参数。参数的类型(data_type)可以是任意一种可综合的数据类型(布尔、标准逻辑、整数等),但不能指定取值范围。

        另外,函数只有一个返回值,这个返回值的类型由RETURN后面的数据类型指定。

  • 函数的调用

        函数可以单独构成表达式,也可以作为表达式的一部分被调用。

--例:positive_edge()函数
--------------------函数体:------------------
function positive_edge(
	signal	s:	std_logic
)
	return boolean is
begin
	return(s'event and s = '1');
end positive_edge;
-------------------函数调用:-----------------
...
if positive_edge(clk) then...
...
---------------------------------------------
  • 函数的存放

        函数及过程的典型存放位置如下图所示。注意,当函数被存放在PACKAGE中时,必须在PACKAGE BODY中进行函数的代码描述。

11.2 过程

        过程与函数类似,主要差别在于过程可以具有多个返回值。 

  • 过程的定义
procedure 过程名[(
	参数列表        --输入和输出参数
)]	is
	[声明]
begin
	(顺序描述语句)
end 过程名;

parameter_list格式:(包含输入输出参数)

                                         [constant]   常量名:  模式类型;

                                         signal          信号名:  模式类型;

                                         variable       变量名:  模式类型;

        其中,模式类型可以是:inoutinout。而且,对于输入模式(in)的参数,默认为常量;对于输出模式(outinout)的参数,默认为变量

        另外,过程与函数类似,都禁止使用WAIT语句、进行信号的声明元件实例化。但如果一个过程(PROCEDURE)在一个进程(PROCESS)中进行了声明,那么其内部可以声明信号。

        此外,除了WAIT语句以外的任何边沿检测在过程中都是不可综合的。(即,与函数相比较,一个可综合的过程内部不能包含或隐含寄存器。)

  • 过程的调用

        函数的调用相当于一个表达式的一部分,而过程的调用相当于一个表达式执行语句

  • 过程的存放

        过程代码的存放位置与函数类似。

11.3 函数与过程小结

 函数(FUNCTION)过程(PROCEDURE)
输入参数任意个,常量(默认)或信号。输入模式(IN)的参数,默认为常量。多个输入、输出或双向参数,可以是信号、变量或常量。
输出参数1个返回值。输出模式(OUT或INOUT)的参数,默认为变量。
存放位置PACKAGE(PACKAGE BODY中存放函数或过程的功能描述代码)、主代码(ENTITY或ARCHITECTURE中)
调用表达式的一部分表达式或执行语句
禁用(不可综合)WAIT语句、信号声明、元件实例化WAIT语句、信号声明、元件实例化、任何边沿检测如果一个过程在一个PROCESS中进行了声明,其内部可以声明信号。

11.4 断言(ASSERT)语句

        ASSERT语句是不可综合的(不会消耗硬件资源),它的作用是将仿真过程中发现的问题通过屏幕显示等方法指出来。

其语法格式如下:

assert condition
[report "message"]
[severity severity_level]

        严重程度的等级可以划分为:注意(Note)、警告(Warning)、错误(Error)和失败(Failure),其中“错误”是默认的。当判断条件(condition)值为假(FALSE)时,就会显示message。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值