1.任务
(1)task和function语句分别用来由用户定义任务和函数。
(2)任务和函数能将一个大的程序模块分解成小的。
(3)当希望能对一些信号进行一些运算并输出多个结果,宜采用任务结构,常将批量的操作以任务的形式独立出来,使设计简单明了。
任务定义
task my_task;
input a,b;
inout c;
output d,e;
<语句>
c=fool1;
d=fool2;
e=fool3;
endtask
任务调用
my_task(x,w,y,z)
1.任务的定义与调用在一个模块内
2.被调用时,需列出端口名列表,必须与I/O一一对应
3.一个任务可以调用其他任务与函数
2.函数
(1)函数的目的是通过返回一个用于某表达式的值,来响应输入信号。适于对不同变量采取同一运算的操作。
(2)函数在模块内部定义,通常在本模块调用,也能根据按模块层次分级命名的函数名从其他模块调用,而任务只能在同一模块定义与调用。
function<返回值位宽或类型说明>函数名;
端口声明;
局部变量定义;
其他语句;
函数调用
function[7:0] gefun; //函数的定义
input[7:0] x;
<语句>
gefun =count;
endfunction
assign number =gefun(rega); //对函数的调用
1.函数不能包含时间控制语句
2.函数不能调用任务
3.函数至少有一个输入参量,不能有任何输入输出双向变量。
4.函数的定义必须有一条赋值语句,给函数的一个内部寄存器赋以函数的结果值,该内部寄存器与函数同名。