1

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

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

// 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_item和之间write_item,来自其他序列的项目得到总线。您知道如何从序列中锁定驱动程序的项目队列吗?所以我可以防止其他序列在我的读写项目之间添加他们的项目?

谢谢您的帮助

4

1 回答 1

2

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

// 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);
};

当司机被抓住时,没有其他序列可以向它发送项目。

于 2018-08-12T10:03:59.593 回答