首页 > 其他 > 详细

automatic task

时间:2020-03-28 17:08:03      阅读:75      评论:0      收藏:0      [点我收藏+]

task function1(bit [31:0] dat[]);
       foreach(dat[i])begin
            bit [2:0]  offset = dat[i][2:0];
       end
endtask
这个任务中,foreach的迭代索引变量 ”i“ 是自动变量,data[i][2:0]是由自动变量索引出来的一个数据。自动变量有个规定就是:声明于自动task或function中的变量对于域来说是本地的,其生命周期从这些task或function调用开始到这些task或function调用结束(引自赛宝龙所著的《IC验证工程师的口袋书》)。放到你这个例子中,自动索引变量 ”i“ 到foreach结束后就释放了,而变量 ”bit [2:0]  offset“是静态变量,因为task没有被声明为automatic,那么offset默认就是静态的,这样就有矛盾了,这与C语言中,一个指针指向的空间被释放了但继续使用该指针一样,可以编译通过,但是运行就会崩溃。SystemVerilog是高级语言,直接在编译阶段就禁止这种操作了。
如果你想编译通过,可以在task前面加上automatic,也可以使用 "automatic bit [2:0] offset = dat[i][2:0]",这样task中所有的变量都被显式声明为automatic了

automatic task

原文:https://www.cnblogs.com/camellia3371----/p/12587899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!