函数和任务都具有减少代码冗杂度的功能,但两者不完全相同。
- 函数function只有input变量,在调用时就用函数名,形参和实参传递,本质上和matlab相同。函数有返回值任务是没有返回值的
function [7:0] sum;
input [7:0] a ,b;
begin
sum = a + b;
end
endfunction
调用格式:assign sum1 = sum(din1,din2);
- 任务task具有input output inout三种类型变量
task result
input [7:0] A;
input [7:0] B;
output [7:0] C;
begin
C = A + B;
end
endtask
- 两者都只能够放在module里面,任务可以调用函数,函数不能调用任务。函数能返回值,而任务没有返回值。两者里面不能不能有过程赋值,也就是出现always和initial模块
- 说说generate
主要针对同一个模块中信号例化链接,就如同平时的复制操作相同。用此模块一般情况必定有循环语句。
genvar i ;
generate
for (i=0;i<8;i=i+1)begin
NOR NOR_U1(
.a(din_a[i]);
);
end
endgenerate
模块的意思是指把din_a八位有效数据的每bit都进行或非操作。generate-- endgenerate就起这样一个作用,搭配genvar使用。