C语言函数和任务的区别 c语言函数和任务的区别和联系

verilog语言中任务和函数的区别

任务和函数有助于简化程序,有点类似与Fortran语言的subroutine和function。

创新互联建站是一家网站设计公司,集创意、互联网应用、软件技术为一体的创意网站建设服务商,主营产品:响应式网站、品牌网站制作成都全网营销。我们专注企业品牌在网站中的整体树立,网络互动的体验,以及在手机等移动端的优质呈现。成都网站建设、成都网站制作、移动互联产品、网络运营、VI设计、云产品.运维为核心业务。为用户提供一站式解决方案,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏析悦目的作品,网站的价值服务。

任务和函数的共同点:

1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。

2.任务和函数中可以声明局部变量,如寄存器,时间,整数,实数和事件,但是不能声明线网类型的变量。

3.任务和函数中只能使用行为级语句,但是不能包含always和initial块,设计者可以在always和initial块中调用任务和函数。

任务和函数的不同点:

函数 任务

函数能调用另一个函数,但是不能调用任务 任务可以调用另一个任务,也可以调用函数

函数总是在仿真时刻0开始 任务可以在非零时刻开始执行

函数一定不能包含任何延迟,事件或者时序控制声明语句 任务可以包含延迟,事件或者时序控制声明语句

函数至少要有一个输入变量,也可以有多个输入变量 任务可以没有或者有多个输入,输出,输入输出变量

函数只能返回一个值,函数不能有输出或者双向变量 任务不返回任何值,或者返回多个输出或双向变量值

由上述的特点决定:函数用于替代纯组合逻辑的verilog代码,而任务可以代替verilog的任何代码。

8.2任务

任务使用关键字task和endtask来进行声明,如果子程序满足下面任何一个条件,则必须使用任务而不能使用函数。

1.子程序中包含有延迟,时序或者事件控制结构

2.没有输出或者输出变量超过一个

3.没有输入变量

例:

module operation;

parameter delay=10;

reg [15:0] A,B, AB_AND,AB_OR,AB_XOR;

always @(A or B)

begin

bitwise_ope(AB_AND,AB_OR,AB_XOR,A,B);

end

task bitwise_oper;

output [15:0] ab_and,ab_or,ab_xor;

input [15:0] a,b;

begin

#delay ab_and=ab;

ab_or=a|b;

ab_xor=a^b;

end

endtask

always @(posedge clk)

bitwise_xor(ef_xor,e,f);

always @(posedege clk2)

bitwise_xor(cd_xor,c,d)

task autumatic bitwise_xor;

output ab_xor;

input a,b;

begin

ab_xor=a^b;

end

endtask

endmodule

自动(可重入)任务:verilog任务中所有声明的变量地址空间都是静态分配的,因此如果在一个模块中多次调用任务时,可能会造成地址空间的冲突,为了避免这个问题,verilog通过在task关键字后面添加automatic使任务称为可重入的,这时在调用任务时,会自动给任务声明变量分配动态地址空间,这样有效避免了地址空间的冲突。

8.3 函数

函数使用关键字function和endfunction定义,对于子程序,如果满足下述所有条件则可以用函数来完成:

1.在子程序中不含有延迟时序或者控制结构

2.子程序只有一个返回值

3.至少有一个输入变量

4.没有输出或者双向变量

5.不含有非阻塞赋值语句

例:

module parity;

reg [31:0] addr;

reg parity;

always @(addr)

begin

parity=calc_parity(addr);

end

function calc_parity;

input [31:0] addr;

begin

calc_parity=^addr;

end

endfunction

endmodule

跟任务调用一样,在模块中如果调用多次函数,也会碰到地址冲突的问题,因此也引入automatic关键字来对函数可重用性声明。没有进行可重用性声明的函数不可以多次或者递归调用,进行了可重用性声明的函数可以递归调用。

常量函数和带符号函数(函数声明时加signed关键字说明)

module ram;

parameter RAM_DEPTH=256;

input [clogb2(RAM_DEPTH)-1:0] addr;//clogb2函数返回值为8

function integer clogb2(input integer depth);

begin

for(clogb2=0; depth0;clogb2=clogb2+1)

depth=depth1;

end

endfunction

endmodule

练习:用两种不同的方法设计一个功能相同的模块,完成4个8位2进制输入数据的冒泡排序。第一种,用纯组合逻辑实现;第二种,假设8位数据按照时钟节拍串行输入,要求时钟触发任务的执行,每个时钟周期完成一次数据交换的操作。

//----------------- 第一种 ------------------

module sort4(ra,rb,rc,rd,a,b,c,d);

output[7:0] ra,rb,rc,rd;

input[7:0] a,b,c,d;

reg[7:0] ra,rb,rc,rd;

reg[7:0] va,vb,vc,vd;

always @ (a or b or c or d)

begin

{va,vb,vc,vd}={a,b,c,d};

change(va,vb);

change(vb,vc);

change(vc,vd);

change(va,vb);

change(vb,vc);

change(va,vb);

{ra,rb,rc,rd}={va,vb,vc,vd};

end

task change; //make a task of comparing

inout[7:0] x,y;

reg[7:0] tmp;

if(xy)

begin

tmp=x;

x=y;

y=tmp;

end

endtask

endmodule

//----------------- 第二种 ------------------

module sort4(clk,reset,ra,rb,rc,rd,a);

output[7:0] ra,rb,rc,rd;

input[7:0] a;

input clk,reset;

reg[7:0] ra,rb,rc,rd;

reg[7:0] va,vb,vc,vd;

always @ (posedge clk)

begin

if(!reset)

begin

va=0;vb=0;vc=0;vd=0;

end

else

va=a;

end

always @ (posedge clk)

begin

change(va,vb);

change(vb,vc);

change(vc,vd);

change(va,vb);

change(vb,vc);

change(va,vb);

{ra,rb,rc,rd}={va,vb,vc,vd};

end

task change; //make a task of comparing

inout[7:0] x,y;

reg[7:0] tmp;

if(xy)

begin

tmp=x;

x=y;

y=tmp;

end

endtask

endmodule

C语言函数的特点及其定义?

C语言中一个函数(function)是一个可以从程序其它地方调用执行的语句块。

1、通过使用函数(functions)我们可以把我们的程序以更模块化的形式组织起来,从而利用C语言所支持的结构化程序设计。

2、从数学角度,函数即集合A和集合B之间的映射关系。实际上计算机中的函数概念也是源于此,因此,一般函数,都有形参和返回值。

3、从计算机组成原理的角度来看,函数即是一个小型的计算机系统,依据冯诺伊曼的“存储程序原理”,每一个计算机系统包含:输入系统、输出系统、运算器以及控制器,实际上对于C语言中的函数来说,它是“存储程序原理”的软实现,其中形参、实参这是输入系统,返回值是输出系统,函数体中的运算符,比如+、-、*、/四则运算即为运算器,而逻辑运算符以及if、while等控制语句便是一个控制器。

C语言的关键字和函数有什么区别

关键字通俗的说就是命令。例如int关键字是定义int类型变量的命令。 函数是封装了一些代码可以完成某项任务。例如printf()函数,是封装了输出代码,至于里边有什么代码不必知道,知道函数是干什么的就成。函数可以自定义,你也可以把自己常用的一段代码封装起来,最为一个函数,下次用就不用再写这段代码了,直接调用函数就ok了。

C语言中函数和函数体的区别是什么?

C语言中函数和函数体的区别为:传递参数不同、返回值不同、调用不同。

一、传递参数不同

1、函数:函数具有明确的入口传递参数。

2、函数体:函数体没有明确的入口传递参数,内部进行定义和说明。

二、返回值不同

1、函数:函数可以有返回值也可以设为void,不返回返回值。

2、函数体:函数体没有返回值。

三、调用不同

1、函数:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。

2、函数体:函数体可以调用一个或多个函数,但函数体之间不能互相调用。


分享标题:C语言函数和任务的区别 c语言函数和任务的区别和联系
标题来源:http://pwwzsj.com/article/ddojgse.html