0%

SV之函数与任务

本节主要介绍了SystemVerilog中函数与任务的基础知识

函数function

  • 任务的首要目的在于为运算表达式提供返回值

  • 函数定义时会在内部隐式定义一个变量(默认logic类型),该寄存器变量和函数同名并且位宽也一致

    1
    2
    3
    4
    5
    function logic [15: 0] myfunc2;
    input [7: 0] x;
    input [7: 0] y;
    myfunc1 = x * y -1;
    endfunction

任务

  • 子程序中包含有延迟、时序或者事件控制结构时只能使用任务

  • 若没有声明类型,那么默认是1bit的logic

    1
    2
    3
    task mytask(input [7: 0] x, input [7: 0] y, output [15: 0] z);
    z = x * y - 1;
    endtask

函数与任务的区别

  • function不会消耗仿真时间,而task则可能会消耗仿真时间

    函数 任务
    function无法调用task task可以调用function
    函数一定不能包含任何延迟、事件或者时序控制声明语句 任务可以包含延迟、事件或者时序控制声明语句
    函数至少有一个输入变量,函数可以有多个输入变量 任务可以没有或者有多个输入、输出和双向变量
    函数只能返回一个值,函数不能输出或者双向变量 任务或者function void function_name没有返回值,任务可以通过输出或者双向变量传递多个值
欢迎来到ssy的世界