在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3107|回复: 7

[求助] 关于system verilog的automatic问题

[复制链接]
发表于 2019-12-3 11:03:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 静心聆听 于 2019-12-3 14:35 编辑

最近遇到一个情况:
task function1(bit [31:0] dat[]);
        foreach(dat)begin
             bit [2:0]  offset = dat[2:0];
             .............
        end
endtask
这样书写就会报错说bit [2:0]  offset = dat[2:0];这一行的 i 是非法的,但是:
automatic task function1(bit [31:0] dat[]);

        foreach(dat)begin

             bit [2:0]  offset = dat[2:0];

             .............

        end

endtask

这样有没有问题了,不知道这是什么原因,请大神指点一下。(注:这个task是一个全局的,不在类里面)

发表于 2019-12-3 12:22:21 | 显示全部楼层
贴代码~
 楼主| 发表于 2019-12-3 14:33:43 | 显示全部楼层
本帖最后由 静心聆听 于 2019-12-3 14:36 编辑


看不到代码吗?我不是写了吗?就是为啥加了automatic在那里用哪个 i 就没问题,没加就报非法,(foreach里面是dat i  打不出来不知道为啥)
 楼主| 发表于 2019-12-3 14:40:33 | 显示全部楼层


用图片试试吧
微信图片_20191203143746.png
发表于 2019-12-3 19:12:49 | 显示全部楼层
哥来告诉你,   
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了。
发表于 2019-12-3 21:35:46 | 显示全部楼层


saipolo 发表于 2019-12-3 19:12
哥来告诉你,   
task function1(bit [31:0] dat[]);
       foreach(dat)begin


你好,你说的那本书的话在哪可以找到呢。
发表于 2019-12-4 09:07:12 | 显示全部楼层
你这个主要是因为offset默认是static local variable,不能被automatic variable dat[i]初始化。

改成这样就行了。
task function1(bit [31:0] dat[]);
       foreach(dat[i])begin
            bit [2:0]  offset;
            offset = dat[i][2:0];
       end
endtask
发表于 2019-12-4 09:27:00 | 显示全部楼层
楼上都解释了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 06:24 , Processed in 0.027852 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表