如何在specman中以简单的方式实现fork-join_any?

时间:2015-10-25 08:17:23

标签: specman

我很清楚我可以使用'all'和'first'获得fork-join和fork-disable_fork功能。 但是,如何在Specman中实现fork-join_any功能?

1 个答案:

答案 0 :(得分:1)

不幸的是,没有直接的方式本地做这件事。 由用户来实现他想要实现的同步方法。 例如,在这种情况下,可以使用warpper TCM和一些事件:

event join_any;
tcm1()@clock is {   // some local method
    …
};

tcm1_w()@clock is {  // a wrapper to some local method.
    tcm1();
    emit join_any;
};

 tcm2_w()@sys.a.b.clock is { // a wrapper to some other unit’s method for this context
    sys.a.b.tcm2();
    emit join_any;
};

tcm()@clock is {  
    start tcm1_w();    // starting these wrapper TCMs instead of the iriginal methods.
    start tcm2_w();
    sync @join_any;
    out("continue main thread");
    ...
};

此实施的重要说明:

  1. 包装很重要,因为如果选择的话 使用'is also'扩展方法,只要TCM完成,它就会发出'join_any'事件 当不在fork上下文中时。这可能导致fork块在任何TCM实例完成时加入。

  2. 在所有/第一个块中,子线程有一些关于其父线程的指示,但是TCM 开始使用'start'不保留父线程的记录。