SV-任务(task)

task:

    1)task无法通过return返回结果,因此只能通过output、inout或者ref的参数来返回。

    2)task内可以置入耗时语句,而function不能,常见的耗时语句有:@event、wait event、#delay等。

task mytask1 (output logic [31:0] x, input logic y);
    
    ...
endtast

 ps: 1)在非耗时方法定义时使用function,

       2)在内置耗时语句时使用task

       3)function和task均可调用function,task只能用task调用。(因为task可能内置耗时语句)

习题1
typedef struct{
    bit [1:0]  cmd;
    bit [7:0]  addr;
    bit [31:0] data;
} trans;

function automatic void op_copy(trans t , trans s);//trans t , trans s默认都是输入
    t = s;
endfunction

initial begin
    trans s;
    trans t;
    s.cmd = 'h1;
    s.addr = 'h10;
    s.data = 'h100;
    op_copy(t,s);
    t.cmd = 'h2; 
end

   习题1中,变量t中的三个成员 cmd,addr,data最后数值为多少?

A 'h1,'h10,'h100    B 'h2,'h0,'h0    C'h2,'h10,'h100     D 'h0,'h0,'h0

答案:B

解析:因为trans t , trans s都是输入,虽然在function中赋值了,但退出function时,变量t仍为0,然后通过t.cmd = 'h2,给变量t的cmd赋值为'h2,addr、data没有赋值,所以最后为 'h2,'h0,'h0。

若前面定义变量t为输出,则在function中会被赋值为'h1,'h10,'h100,最后变成'h2,'h10,'h100。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值