Verilog语句中task & function的区别

task与function的不同点:

1.  function只能与主模块共用同一个仿真时间单元,而task可以定义自己的仿真时间单元;

2. task能调用function和其他task,而function不能调用task;

3. function至少要有一个输入变量,而任务可以没有,也可以有多个任何类型的变量;

4. 函数返回一个值,而任务不返回值。

例子:

    让一个字的高字节和低字节互换。

task switch_bytes;

  input [15:0]old_word; //输入输出端口及类型定义
  output [15:0]new_word; 

  begin
  new_word={old_word[7:0],old_word[15:8]};
  end

endtask

// 调用任务
 switch_bytes(old_word,new_word);

function [15:0]switch_bytes;  //定义的函数需标明位数,否则默认为一位

  input [15:0]old_word;   //输入变量及类型定义

  begin
  switch_bytes={old_word[7:0],old_word[15:8]};
  end

endfunction

//调用函数
 new_word=switch_bytes(old_word);

其中,函数的名称定义需要标明位数,因为函数的定义把函数的返回值所赋值寄存器名称初始化为与函数同名的内部变量。

与任务相比,函数的定义有较多的约束,如下:

1. 函数的定义不能包含有任何的时间控制语句,例如#,@或者wait来标识的语句;

2. 函数不能启动任务;

3. 函数的定义至少要有一个输入变量;

4. 函数的定义中必须要有一条赋值语句给函数中的一个内部变量赋以函数的结果值,该变量需与函数同名。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值