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_item
和 write_item
之间,来自其他序列的项目获得了总线。您知道如何从序列中锁定驱动程序的项目队列吗?所以我可以防止其他序列在我的读写项目之间添加他们的项目?
感谢您的帮助
您可以使用 any_sequence
的 grab(...)
和 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);
};
当驱动程序被抓取时,没有其他序列可以向它发送项目。
在我的验证环境中,很少有序列 运行 同时在同一个驱动程序上运行(与其他序列的项目相关的项目何时获得总线无关紧要)。
但是,现在我需要添加额外的序列,这将同时 运行 到其他序列,执行原子读-修改-写。 我的新序列看起来像这样:
// 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
之间,来自其他序列的项目获得了总线。您知道如何从序列中锁定驱动程序的项目队列吗?所以我可以防止其他序列在我的读写项目之间添加他们的项目?
感谢您的帮助
您可以使用 any_sequence
的 grab(...)
和 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);
};
当驱动程序被抓取时,没有其他序列可以向它发送项目。