嗨,谢谢你看到这个。
我正在思考 SystemVerilog 模拟的不活动终止开关的想法。
有没有一种方法可以在运行“simv”时延长(可编程)不活动持续时间来触发内部事件来调用 '$finish' ?或者是否可以使用 VCS 命令?
让头脑风暴一下。如果有不清楚的地方,请告诉我。
RRS
嗨,谢谢你看到这个。
我正在思考 SystemVerilog 模拟的不活动终止开关的想法。
有没有一种方法可以在运行“simv”时延长(可编程)不活动持续时间来触发内部事件来调用 '$finish' ?或者是否可以使用 VCS 命令?
让头脑风暴一下。如果有不清楚的地方,请告诉我。
RRS
在 VHDL 中,我使用已解析的信号。
每个生成或分析数据的进程都会0
在其工作时写入该信号。一旦它处于模拟完成的状态,它就会写入1
.
只有当所有进程都满意时,信号才会将状态更改为 a 1
(要么是要么X
是0
其余时间)。
时钟生成过程监控这个信号,当它变成时,1
它们停止产生时钟脉冲;没有安排进一步的转换,模拟器知道停止。
大概 Verilog 可以做类似的事情。
在我工作过的芯片设计公司内部,这被称为“静态检查”,但我不确定这是否是行业标准名称。您实施“仪器代码”来检查系统是否已达到静止状态。V̶e̶r̶i̶s̶i̶t̶y̶'̶s̶ Cadence 的Specman-e 工具非常优雅地做到了这一点,它反对结束测试机制 ( raise_objection(MAIN_TEST_DONE)/drop_objection(MAIN_TEST_DONE)
)。本质上,整个系统的监视器在模拟开始时“提出”反对意见(即增加计数器),然后当模拟运行时,他们确定他们的 DUT 部分是静止的并且他们“降低”反对意见(即减少这个全局计数器)。当没有更多反对结束测试时,(即全局计数器为0),则$finish
叫做。监视器可以在整个测试过程中提出和降低反对意见,但是如果当计数器达到 0 时,测试是$finish
'd。
通用验证方法 (UVM) 采用了 Specman 的这种方法,并在其UVM 参考手册中对其进行了描述。UVM 首先是用 Verilog 实现的,所以你绝对可以使用他们免费提供的库来实现“静态检查”。Cadence 的 Specman UVM 参考手册也在http://support.cadence.com上描述了这种机制。不幸的是,Cadence 要求您先成为客户,然后他们才会向您展示他们的文档,因此您必须使用非 Google 搜索引擎来查找您想要的内容。这有点痛苦。