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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] sv里的fork_join线程问题

[复制链接]
发表于 2016-4-4 11:53:23 | 显示全部楼层 |阅读模式

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

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

x
代码里已经把program声明为qutomatic了,表明for循环里的变量i是automatic,并不是只分配一块共享内存放置i啊

运行结果为:

我觉得应该有16个内存区域放置i的中间值,应该从port0到port15才对啊.请大神解释下,谢谢
 楼主| 发表于 2016-4-4 11:56:35 | 显示全部楼层

结果

结果

代码

代码
回复 1# 打回原形

图片上传失败了,这是图片
 楼主| 发表于 2016-4-4 12:52:01 | 显示全部楼层
回复 2# 打回原形

我把 i 声明为静态的,结果居然和动态 i 运行的一样,怎么回事啊 `@QZBDUY]KC_%YYF5HPQT.png
发表于 2016-4-5 10:37:42 | 显示全部楼层
for (int ii = 0; ii < 16; ii+=)
    fork
        begin
            automatic int jj;
            jj = ii;
            send(jj);
        end
    join_none
end
 楼主| 发表于 2016-4-5 14:17:23 | 显示全部楼层
回复 4# hover99

我知道声明一个中间自动变量可以解决,但是automatic的program里面的变量默认是automatic,那么for循环里的 i 也是automatic, 按道理没必要中间再复制一份吧。一般加中间自动变量用于解决static的program,还望大神解释下我截的两张图中同样在automatic的program
中,automatic的 i 和 static的 i 为啥得到相同的结果,两者的变量内存分配是怎么回事,谢谢
发表于 2016-4-5 15:53:11 | 显示全部楼层




  1. program automatic test ;
  2.     int i; // not within a procedural block - static
  3.     task t ( int a ); // arguments and variables in t are automatic
  4.         ... // unless explicitly declared static
  5.     endtask
  6. endprogram


复制代码
IEEE 1800-2012有解释
发表于 2016-4-5 17:04:06 | 显示全部楼层
回复 5# 打回原形
不好意思,说错了。应该这样改:task automatic send(int j);
fork
  begin
     $display();
     #1;
   end
join_none
endtask


initial begin
    for (int ii = 0; ii < 16; ii ++) begin
       send(ii);
    end
end
仿真器遇到fork join_none语句,会直接跳到join_none之后继续执行直到遇到阻塞语句。在你的例子里,仿真器会先执行16次for循环,然后才会执行16个fork,所以在fork里面看到的ii会是16.
 楼主| 发表于 2016-4-5 19:33:08 | 显示全部楼层
回复 7# hover99

谢谢啊,我懂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-5 14:49 , Processed in 0.023618 second(s), 9 queries , Gzip On, Redis On.

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