VHDL语法入门 (八) 函数和过程

函数和过程

函数(function)和过程(procedure)统称为子程序。从结构上来看函数和过程和进程(process)十分相似。他们内部都是顺序描述的代码。然而从应用角度来看,process是直接在主代码中使用,而函数和过程主要为建库而使用,他们用于存储常用的代码以达到代码重用和共享的目的。此外,函数和进程也可以在主代码中直接建立并使用

函数

相对于进程,函数中禁止进行信号声明和元件实例化

parameter list指函数的输入参数,可以是常量或信号,具体描述如下

>= [constant] 常量名:常量类型;

>= signal 信号名:信号类型;

参数的个数是任意的,可以没有参数。变量不能作为参数。参数的类型可以是任意一种可综合的数据类型(布尔,标准逻辑,整形等),但不能指定它的范围。

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

--函数体的创建
function function_name [<parameter list>] return data_type is    
    [声明]
begin
    (顺序描述代码)
end function_name;


--例
function f1(a,b: integer; signal c: std_logic_vector)
    return boolean is
begin
    (顺序描述代码)
end f1;


--函数的调用,函数可以单独构成表达式,也可以作为表达式的一部分
x <= conv_integer(a);    --调用conv_integer函数,将a转成整形,此时函数自身构成表达式
if x > maximun(a,b)...    --调用maximun函数,此时函数作为表达式的一个组成部分

函数经常存放在包集中(目的是为了进行有效的代码分割,代码共享和代码重用),但也可以放在主代码中(既可以放在entity中,也可以放在architecture中)。当函数放在package中时,package body是必须的。package用于存放在package中声明的函数的主体

 

过程

过程与函数的主要区别在于过程可以有多个返回值。

procedure procedure_name [<parameter list>] is
    [declaration]
begin
    (顺序描述语句)
end procedure_name

parameter list指过程输入和输出参数,具体描述如下

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

>= signal 信号名:模式类型;

>= variable 变量名:模式类型;

过程的参数可以有任意多个,参数可以是in,out或inout模式的信号,变量或常量。对于输入模式(in)的参数,默认情况下为常量,而对于输入模式(out或inout)的参数,默认情况下为变量

前面我们介绍过函数内部wait语句,信号声明和元件调用是不可综合的,对于过程来说,如果一个过程在一个process中进行了声明,那么其内部可以声明信号。此外,除了wait语句以外的任何边缘检测在过程中都是不可综合的

procedure my_procedure(
                        a: in bit; 
                        signal b,c: in bit;
                        signal x: out bit_vector(7 downto 0);
                        signal y: inout integer range 0 to 99
                        ); is
begin
    ...
end my_procedure;


--调用
compute_min_max(in1,in2,in3,out1,out2);        --过程可以直接调用
if (a>b) then compute_min_max(in1,in2,in3,out1,out2);

断言

断言(ASSERT)是不可综合的,它的作用是将仿真过程中发现的问题通过屏幕显示等方法指出。

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

根据问题的严重程度,仿真过程可以被命令终止,严重程度等级划分如下:

注意,警告,错误和失败

其中错误是默认的。当判断条件(condition)值为假(false)时,就会显示message。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值