task or function

目录

 1. 函数与任务的不同

2. task说明语句

 2.1 task定义    

2.2 任务的调用及变量的传递

3. function说明语句

3.1定义函数的语法


     task语句和function语句是verilog设计中分别用于定义任务和函数的,通过定义task和function,能够将本来很大的程序模块分解为较小的任何和函数,这样更便于理解和调试。在设计中,可能在一些大的程序中经常会某个程序段在不同的地点被反复用到,通过定义task和function进行调用要节省代码量,简化程序的结构,也方便理解。


 1. 函数与任务的不同

先宏观地了解一下函数和任务的不同点,然后带着疑问去学习会有方向。

任务与函数的不同点:

  1. 函数只能与主模块共用一个仿真时间单位,而任务定义自己的仿真时间单位。
  2. 函数不能启动任务,任务可以启动其他任务和函数。
  3. 函数至少要有一个输入变量,而任务可以没有或有多任何类型的变量。
  4. 函数返回一个值,而任务不返回值

注意,函数的目的是通过返回一个函数值来响应输入信号的值,而任务的目的有很多种,能计算过个结果值,这些结果值只能通过被调用的任务的输出的输出或总线端口送出。Verilog HDL模块使用函数时,是将其当作表达式种的操作符(认真体会啊,操作符的话,就会就结果) ,这个操作执行后的结果就是函数的返回值,该返回值可以用于其他操作。

2. task说明语句

  前文就说过,函数的目的就是需要函数返回一个用于其他表达式的值。 

 2.1 task定义    

定义任务的语法如下:

task<任务名>

<端口及数据类型声明语句>

<语句1>

<语句2>

…………

<语句n>

endtask

 在任务内的各种语句,其语法与Vierlilog 的module块中用法一致。

2.2 任务的调用及变量的传递

任务的调用:

      <任务名> (端口1,端口2,…..,端口n);

下面举例子说明怎么定义任务与调用任务:

任务定义:

task my_task;

    input  a,b;  //可以有输入
    inout  c;

    output d,e;  //可以有输出

     <语句>

       ….
     c = fool;   //
     d = foo2;   //对输出变量赋值
     e = foo3;

endtask

      任务调用:

                        my_task(v,w,x);

      任务调用变量(v,w,x)和任务定义的I/O变量(a,b,c)之间是一一对应的,当任务启动时,由v和w传入的变量赋给了a和b,而当任务完成之后的输出又通过c赋给x,

3. function说明语句

       前文就介绍了,调用函数的目的就是需要返回一个用于其他表达式的值 

3.1定义函数的语法

      function<返回值的类型或范围>(函数名);   //返回值的类型可选,默认返回值为一位寄存器类型数据

         <端口说明语句>

        <变量类型说明语句>

       begin

                <语句>

                     ………

        end

       endfunction

注意:<返回值的类型或范围>这一项是可选项,如缺省则返回值位一位寄存器类型数据

  1. 举例说明

下面举一个实际程序的例子,来说明一下function函数的实际定

义与如何调用。

    

猜你喜欢

转载自blog.csdn.net/qq_26652069/article/details/90749298