task and function(systemverilog)

本文介绍了SystemVerilog中function和task的区别与用法。function主要用于通过输入信号值返回一个结果,不能启动任务,而task更灵活,可包含时间控制结构,能启动任务或函数,且可以有多个输出。主要差异包括时间单位、启动任务能力、输入变量类型及是否返回值。举例说明了在字节交换场景下,function和task的调用方式。
摘要由CSDN通过智能技术生成

一个复杂的testbench是非常冗长且复杂的。解决这种复杂性的一种途径是将代码分割由一些小的段落组合而成。verilog中的function和task可以帮助我们完成复杂代码段的分割。function包含输入声明并返回一个值,当被调用时,函数立即执行因此在函数中不可以有时间控制结构。相比而言,task结构更加的灵活,该结构可以包含有输入,输出以及双向端口的声明同时可以包含有时间控制结构。可以通过输出和双向端口返回多个值。

二者主要有以下四个不同点:
①、函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位;

②、函数不能启动任务,任务可以启动其他任务或者函数;

③、函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量;

④、函数返回一个值,而任务则不返回值。

--目的
function的目的是通过返回一个值来响应输入信号的值。
task能支持多种目的,能计算多个结果值,这些结果值之恩能通过被调用的task的输出或者总线端口送出。
--举例
Verilog中模块使用函数时是把它当作表达式中的操作符,这个操作的结果就是这个函数的返回值。例如:

定义一个task或者function对一个16位的字进行操作,让高字节与低字节互换,把它变为另一个字(假 定这个任务或函数名为:switch_bytes)。

task返回的新字是通过输出端口的变量,因此16位字字节互换任务的调用源码是这样的:
  switch_bytes(old_word,new_word);
任务switch_bytes把输入old_word的字的高低字节互换放入new_word端口输出。

function返回的新字是通过函数本身的返回值,因此16位字字节互换函数的调用源码是这样的:
  new_word = switch_butes(old_word);
函数switch_bytes把输入的old_word的字的高低字节互换后赋值给new_word。

Task:  With SystemVerilog, there is a default direction of input if no direction has been specified. Once a direction is given, subsequent formals default to the same direction. In the following example, the formal arguments a and b default to inputs, and u and v are both outputs.

task mytask3(a, b, output logic [15:0] u, v);
...
endtask

task ...........endtask中间可不用加begin and,  statements are executed sequentially。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值