Specman e:如何从序列中锁定驱动程序的项目队列?

Specman e: How driver's items queue can be locked from a sequence?

在我的验证环境中,很少有序列 运行 同时在同一个驱动程序上运行(与其他序列的项目相关的项目何时获得总线无关紧要)。

但是,现在我需要添加额外的序列,这将同时 运行 到其他序列,执行原子读-修改-写。 我的新序列看起来像这样:

// Atomic READ-MODIFY-WRITE
body() @driver.clock is only {

    do read_item keeping {
        .cmd                == RD; 
        .addr               == addr;
    };

    // Wait random time;

    do write_item keeping {
        .cmd                == WR;
        .addr               == addr;
        .data               == data;  
    };
};

问题是在 read_itemwrite_item 之间,来自其他序列的项目获得了总线。您知道如何从序列中锁定驱动程序的项目队列吗?所以我可以防止其他序列在我的读写项目之间添加他们的项目?

感谢您的帮助

您可以使用 any_sequencegrab(...)ungrab(...) 方法来获得对序列驱动程序的独占访问权:

// Atomic READ-MODIFY-WRITE
body() @driver.clock is only {

    grab(driver);

    do read_item keeping {
        .cmd                == RD; 
        .addr               == addr;
    };

    // Wait random time;

    do write_item keeping {
        .cmd                == WR;
        .addr               == addr;
        .data               == data;  
    };

    ungrab(driver);
};

当驱动程序被抓取时,没有其他序列可以向它发送项目。