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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1823|回复: 4

[求助] system Verilog中异步线程使用信箱通信

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

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

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

x
本帖最后由 天涯_0 于 2016-11-16 16:39 编辑

最近在看sv,其中有个问题问大家一下,哪位能解惑一下,谢谢。下面是绿皮书上的一个程序块
program automatic unsynchronized
mailbox mbx;

class Producer;
    task run();
         for(int i=1; i<4; i++) begin
        $display("Producer: before put(%0d)", i);
        mbx.put(i);
        end
    endtask
endclass

class Consumer
     task run();
      int i;
      repeat (3) begin
            mbx.get(i);
            $display("Consumer: after get(%0d)", i);
      end
     endtask
endclass

initial begin
mbx = new();
    p = new();
    c = new();
fork
    p.run();
    c.run();
join
end
endprogram
书上说程序执行时,先put方法执行完,在执行get方法。这里不理解为什么全部执行完put方法,才进行get方法。我的想法是get开始阻塞,执行一个put后不就可以get到了吗,本来fork ..join,里面两个任务不是并行执行吗?

哪位大神解答一下疑惑,, 十分感谢。
发表于 2016-11-16 19:19:27 | 显示全部楼层
书上没说全部执行完吧?觉得你的想法没错。
发表于 2016-11-16 19:53:03 | 显示全部楼层
执行速度太快,在get前一瞬间就全put进去了,你在后面加个延时就可以看出来了
发表于 2016-11-20 14:08:23 | 显示全部楼层
verilog设计与综合中有提到过,并行块中的语句虽然是同时执行,但是在实际运行中CPU只能执行一条语句,仿真器不同执行顺序也不同。
我觉得和这个有关系,估计一般仿真器都是默认顺序执行。
 楼主| 发表于 2016-11-28 23:06:53 | 显示全部楼层
回复 3# 573399611


   是的,加个延时可以看出来。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-9-22 01:22 , Processed in 0.017718 second(s), 9 queries , Gzip On, Redis On.

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