精华内容
下载资源
问答
  • 任务和函数的共同点: 1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。 2.任务和函数中可以声明局部变量,如寄存器,时间,整数,实数和事件,但是不能声明线网类型的变量。 3....

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

    任务和函数的共同点:

    1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。
    2.任务和函数中可以声明局部变量,如寄存器,时间,整数,实数和事件,但是不能声明线网类型的变量。
    3.任务和函数中只能使用行为级语句,但是不能包含always和initial块,设计者可以在always和initial块中调用任务和函数。

    任务和函数的不同点:

    函数能调用另一个函数,但是不能调用任务 任务可以调用另一个任务,也可以调用函数
    函数总是在仿真时刻0开始                  任务可以在非零时刻开始执行
    函数一定不能包含任何延迟,事件或者时序控制声明语句     任务可以包含延迟,事件或者时序控制声明语句
    函数至少要有一个输入变量,也可以有多个输入变量       任务可以没有或者有多个输入,输出,输入输出变量
    函数只能返回一个值,函数不能有输出或者双向变量       任务不返回任何值,或者返回多个输出或双向变量值
    由上述的特点决定:函数用于替代纯组合逻辑的verilog代码,而任务可以代替verilog的任何代码。

    任务

    任务使用关键字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=a&b;
    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使任务称为可重入的,这时在调用任务时,会自动给任务声明变量分配动态地址空间,这样有效避免了地址空间的冲突。

    有下列六点需要注意:
    (1)在第一行“task”语句中不能列出端口名称;
    (2)任务的输入、输出端口和双向端口数量不受限制,甚至可以没有输入、输出以及双向端口。
    (3)在任务定义的描述语句中,可以使用出现不可综合操作符语句(使用最为频繁的就是延迟控制语句) ,但这样会造成该任务不可综合。
    (4)在任务中可以调用其他的任务或函数,也可以调用自身。
    (5)在任务定义结构内不能出现 initial和 always过程块。
    (6)在任务定义中可以出现“disable 中止语句” ,将中断正在执行的任务,但其是不可综合的。当任务被中断后,程序流程将返回到调用任务的地方继续向下执行。
    虽然任务中不能出现 initial 语句和 always 语句语句, 但任务调用语句可以在 initial 语句和 always 语句中使用
    其语法形式如下: task_id[(端口1, 端口 2, …, 端口 N)]; 其中 task_id是要调用的任务名,端口 1、端口 2,…是参数列表。参数列表给出传入任务的数据(进入任务的输入端)和接收返回结果的变量(从任务的输出端接收返回结果) 。

    在调用任务时,需要注意以下几点:
    (1)任务调用语句只能出现在过程块内;
    (2)任务调用语句和一条普通的行为描述语句的处理方法一致;
    (3)当被调用输入、输出或双向端口时,任务调用语句必须包含端口名列表,且信号
    端口顺序和类型必须和任务定义结构中的顺序和类型一致。需要说明的是,任务的输出端口
    必须和寄存器类型的数据变量对应。
    (4)可综合任务只能实现组合逻辑,也就是说调用可综合任务的时间为“0” 。而在面向仿真的任务中可以带有时序控制,如时延,因此面向仿真的任务的调用时间不为“0” 。

    函数

    函数使用关键字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; depth>0;clogb2=clogb2+1)
    	depth=depth>1;
    end
    endfunction
    endmodule
    

    函数的目的是返回一个用于表达式的值。
    一、定义函数的语法

    function<返回值的类型或范围>(函数名)<端口说明语句>
    <变量类型说明语句>
    begin
    	<语句>
    end
    endfunction
    

    注意:<返回值的类型或范围>是可选项,如缺省则返回值为一位寄存器类型数据。
    二、从函数返回的值:函数的定义蕴含声明了与函数同名的、函数内部的寄存器。
    三、函数的调用:函数的调用是通过将函数作为表达式中的操作数来实现的。其调用格式如下:
    <函数名>(<表达式><,<表达式>>*)
    其中函数名作为确认符。
    四、函数的使用规则:与任务相比较,函数的使用有较多的约束。
    1、函数的定义不能包含有任何的时间控制语句,即#,@或wait来标识的语句;
    2、函数不能启动任务;
    3、定义函数时至少要有一个输入参量;
    4、在函数的定义中必须有一条赋值语句给函数中的一个内部变量赋以函数的结果值,该内部变量具有和函数名相同的名字。

    展开全文
  • 函数和任务的区别

    2021-02-03 20:05:13
    函数和任务的主要区别是:任务能够消耗时间而函数不能。 以在类外定义函数和任务为例: //1.类 class driver extend uvm_driver#(transaction) … extern virtual function void print_info(); extern task print_...
    函数和任务的主要区别是:任务能够消耗时间而函数不能。
    以在类外定义函数和任务为例:
    

    //1.类
    class driver extend uvm_driver#(transaction)

    extern virtual function void print_info();
    extern task print_information;
    endclass
    //2.函数
    function void driver::print_info();
    info(“driver”," print info!",UVM_LOW);
    endfunction

    //3.任务
    task driver::print_information;
    #10
    info(“driver”,“print information!”,UVM_LOW);
    endtask

        在同一个类中,函数名和任务名不能重;在类外定义方法,函数名和任务名前加上类名和两个冒号。
    
    展开全文
  • 函数和任务的区别: 、function函数函数代表了纯组合逻辑,不能有时序方面的东西。 、task任务:即可以用来表示组合逻辑也可以表示时序逻。 task一般仿真时候用的比较多,比如说只用写一个task,然后执行100遍...

    函数和任务的区别:

    1. 、function函数:函数代表了纯组合逻辑,不能有时序方面的东西。
    2. 、task任务:即可以用来表示组合逻辑也可以表示时序逻。

    task一般仿真时候用的比较多,比如说只用写一个task,然后执行100遍task之类的

    function必需有input而且还比必需返回一个值 

    展开全文
  • 关于什么是sigmoid函数? 参考链接:百度百科 关于什么是softmax函数? 参考链接:百度百科 应用场景:sigmoid应用于二分类任务,如猫狗识别;...另外一篇参考链接:一分钟理解softmax函数(超简单) ...

    关于什么是sigmoid函数?
    参考链接:百度百科
    关于什么是softmax函数?
    参考链接:百度百科
    应用场景:sigmoid应用于二分类任务,如猫狗识别;softmax适用于二分类以上(即多分类)任务,如手写字识别。
    二者的关系:softmax是sigmoid的推广。
    另外一篇参考的链接:一分钟理解softmax函数(超简单)

    展开全文
  • 存储过程: 存储过程是用户定义的SQL...存储过程和函数的区别 1、函数必须有一个且必须只有一个返回值,并且还要制定返回值的数值类型。存储过程可以有返回值,也可以没有返回值,甚至可以有多个返回值,所有返回值...
  • * 程序版权版本声明部分 * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: 时间类.cpp * 作者:王锴英 * 完成日期: 2013 年4 月12日 * 版本号: v1.0 * 输入...
  • 和函数的区别

    2018-09-08 14:51:02
    宏通常被应用于执行简单的运算。比如在两个数中找出较大的一个。 #define MAX(a, b) ((a)&gt;(b)?(a):(b))那为什么不用函数...2. 更更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达...
  • 和函数的区别: 1.宏是与类型无关的; 但函数是跟类型有关的,如果参数的类型不同,就需要使用不同的函数,即使他们执行的任务是相同的; 2. 宏可能会带来运算优先级的问题,导致运算结果出错; 3.宏的参数...
  • * 程序版权版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: * 作者:吴瑕 * 完成日期: 2012年 04月 03日 * 版本号: *对任务及求解方法描述部分 ...
  • 功能函数是执行特定任务的代码块,将包含其自己作用域,并通过名称进行调用。所有函数都可以包含零(无)参数或多个参数。退出时,一个函数可以或不能返回一个或多个值。基本功能语法deffunctionName(arg1,arg2,….)...
  • 烟台大学计算机学院学生 *All right reserved. *文件名称*烟台大学计算机学院学生 ...*对任务及求解方法的描述部分:体验时间类的成员函数、友元函数一般函数的区别 *我的程序: #include using nam
  • 宏函数自定义函数的区别

    千次阅读 2017-11-15 17:02:23
    首先举一个比较两个数或者表达式大小例子。  我们把它写成宏定义函数: #define MAX( a, b) ( (a) > (b) (a) : (b) ) 其次,把它用... } 很显然,我们不会选择用函数来完成这个任务,原因有两个: (1).首先,
  • 01./* 02.* 程序版权版本声明部分 03.* Copyright (c)2013, 烟台大学计算机学院学生 04.* All rightsreserved. 05.* 文件名称:cpoint .cpp 06.* 作 者:赵冠哲
  • 多分类模型任务模型(Multi-task Model)的区别在于: 多分类模型:样本集包含多个类别,但是一个样本只属于一类。 多任务模型:样本集包含多个类别,一个样本可以属于多个类别。 一、多分类模型 1、多分类...
  • 突然发现javascript的函数直接的区别没有搞清楚。这里懒得翻译了,就直接把英文代码粘来了。   Javascript function declarations vs function operators  There are quite a few different ways to creat...
  • /* (程序头部注释开始) * 程序的版权版本声明部分 ... * All rights reserved. ...* 文件名称:理解成员函数、友元函数一般函数的区别 并会熟练使用它们 * 作 者: 雷恒鑫 * 完成日期: 2012 年 03
  • Mysql存储过程和函数的区别

    千次阅读 2013-09-26 13:27:57
    存储过程是用户定义的一系列sql语句... 存储过程和函数存在以下几个区别:  1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操
  • 1.首先存储过程用户在数据库中完成特定操作或者任务(如插入,删除等),函数用于返回特定数据 2、存储过程不需要返回类型,函数需要返回类型 3.声明不一样存储过程用procedure,函数用function 4.存储过程可作为...
  • 1. 任务必须被创建在多任务开始之前或者是运行的任务中。 2. 任务不能由ISR创建。 3. 任务必须在死循环中,并且不能有返回。 //建立一个新任务  #if OS_TASK_CREATE_EN > 0 //允许生成...
  • uCos的任务调用与通常意义下的函数调用的区别 通常意义下的函数调用是指以下情况: 保存当前调用函数(程序)的环境,程序指针跳转到被调用函数入口处,执行完被调用函数后,从堆栈中恢复调用函数的环境,继续执行...
  • * 程序版权版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: object.cpp * 作者:孙永 * 完成日期: 2013年4 月 15 日 * 版本号: v1.0 * 输入描述:无 *...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,437
精华内容 574
关键字:

任务和函数的区别