[SystemVerilog语法拾遗] systemverilog中task的局部变量串扰问题

本文讨论了SystemVerilog中task的局部变量可能出现的串扰问题,由于task在不同时间调用时共享内存,可能导致数据干扰。通过使用`automatic`关键字,可以为每个调用分配独立存储空间。UVM中的task默认为automatic,因此不易遇到此类问题。

[SystemVerilog语法拾遗] systemverilog中task的局部变量串扰问题

同一个task在不同时间调用时可能存在局部变量的相互串扰问题。(这里一定是task才会出现这种问题,function没有时间消耗,不存在内部变量不同时间点调用的相互串扰)。以下面的例子为例:在这里插入图片描述

仿真结果如下:在这里插入图片描述

可以看到在50、100、150、200这四个传入"call1111111"参数的task里打印的确实"call2222222"的值,即在30这个时刻调用的task传入的值,并且task内部的变量i的值再两次调用也出现的串扰的情况。
这是因为systemverilog内部在调用task的时候,给task分配的空间里所有相关的参数都共享同一块内存区域,这样只要两次task调用的时候有时间重合,那必然会出现变量串扰的问题,这一点在绿皮书第二版60页的地方有提到,避免串扰的方法就是增加关键字automatic,让每次调用task时各自分配独立的存储空间,如下图所示:在这里插入图片描述

仿真结果在这里插入图片描述

从仿真结果可以看到,无论是task的接口参数还是内部定义的局部变量都没有出现串扰的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值