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