首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"fork disable“禁用其他fork,尽管它被包装在fork-join中

"fork disable“禁用其他fork,尽管它被包装在fork-join中
EN

Stack Overflow用户
提问于 2014-03-25 15:34:16
回答 2查看 1.4K关注 0票数 0

我对禁用其他进程的"fork disable“有一个问题。我已经把它包装在fork join".is“中了,有没有其他的解决方案?那就是代理中有问题的代码:

代码语言:javascript
运行
复制
fork
    begin
     fork 
       begin
          this.collect_tr();
          ap.write(collected_trans);
          collected_trans.i2c_trans_cg.sample();
       end
       begin
          wait (this.flow_is_ok == 1'b0);
       end
     join_any;
     disable fork;
    end
    join

“禁用”阻止了我的参考模型中的另一个分支的发生。(当我删除代理的禁用分支时,RM中的分支确实发生了。我尝试了一些打印,它发生在同一个时钟)

EN

回答 2

Stack Overflow用户

发布于 2014-03-25 17:21:02

我解决了这个问题。参考模型中禁用的"other fork“是从参考模型中的ap write()函数实现中调用的。由于代理中的ap.write()被禁用,因此参考模型中的write()也被禁用。所以我只是把ap.write()移到了fork之外。

代码语言:javascript
运行
复制
fork
  begin
    fork 
      begin
        this.collect_tr();
        //ap.write(collected_trans);
        //collected_trans.i2c_trans_cg.sample();
      end
      begin
        wait (this.flow_is_ok == 1'b0);
      end
    join_any;
    disable fork;
  end
join
if(this.flow_is_ok == 1'b1)begin
  ap.write(collected_trans);
  collected_trans.i2c_trans_cg.sample();
end

`

票数 0
EN

Stack Overflow用户

发布于 2014-03-25 20:27:19

如果要禁用内部fork,可以命名fork块,然后禁用已命名的块。

示例:

代码语言:javascript
运行
复制
fork: outer
  begin
    #10;
    $display($stime, " outer");
  end

  begin
    fork: inner

      begin
        #5;
        $display($stime, " inner 1");
      end

      begin
        #7;
        $display($stime, " inner 2");
      end

    join_any
    disable inner;
  end
join

输出:

代码语言:javascript
运行
复制
#          5 inner 1
#         10 outer

完整的可运行示例如下:http://www.edaplayground.com/x/26d

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22628088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档