#systemverilog# 关键字之 task 和 function(1)

本文介绍了SystemVerilog中的task和function,function用于根据输入返回单一值,不具备时间控制结构,而task则更灵活,允许有输入、输出及时间控制结构,可返回多个值。举例说明了在Verilog中如何使用task和function进行16位字的字节交换操作。
摘要由CSDN通过智能技术生成

一 概述      

 一个复杂的testbench是非常冗长且复杂的。解决这种复杂性的一种途径是将代码分割由一些小的段落组合而成。verilog中的function和task可以帮助我们完成复杂代码段的分割。

function包含输入声明并返回一个值,当被调用时,函数立即执行因此在函数中不可以有时间控制结构。

相比而言,task结构更加的灵活,该结构可以包含有输入,输出以及双向端口的声明同时可以包含有时间控制结构。可以通过输出和双向端口返回多个值。

不同之处详细说明备注
仿真时间单位函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位
输入参数函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量
返回数值

function 返回一个值,可以使用函数本身名字返回数值,也可以使用return 返回; 而 task 则不返回值,task无法通过return返回结果,因此只能通过output, inout, ref的参数来返回

这里单单指返回值。并不是说:task 和 function 都可以有 output 
耗时特性task内可以内置耗时语句,而function不能。
互调权限function和task都可以对function进行调用;而在调用task时,当task内部存在耗时语句时,不能使用function对其进行调用

《目的》: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。


二 Systermverilog 中的task 和 function 


 

function int crc( byte packet [1000:1] );
    for( int j= 1; j <= 1000; j++ )
    begin
    crc ^= packet[j];
    end
endfunction

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值