SystemVerilog测试台模拟(VCS)的非活动终止开关

SystemVerilog测试台模拟(VCS)的非活动终止开关,verilog,system-verilog,Verilog,System Verilog,嗨,谢谢你看这个 我在考虑为SystemVerilog模拟设计一个非活动killswitch的想法 在运行“simv”时,是否有一种方式可以使延长的(可编程的)不活动时间触发调用“$finish”的内部事件?或者是否可以使用VCS命令 让我们集思广益。如果有不清楚的地方,请告诉我 RRS在我工作过的芯片设计公司内部,这被称为“静态检查”,但我不确定这是否是一个行业标准名称。您实现了“检测代码”,用于检查系统是否达到静止状态。V̶e̶r̶i̶s̶i̶t̶y̶̶̶s̶̶s̶r̶i̶s̶i̶t̶̶̶̶

嗨,谢谢你看这个

我在考虑为SystemVerilog模拟设计一个非活动killswitch的想法

在运行“simv”时,是否有一种方式可以使延长的(可编程的)不活动时间触发调用“$finish”的内部事件?或者是否可以使用VCS命令

让我们集思广益。如果有不清楚的地方,请告诉我


RRS

在我工作过的芯片设计公司内部,这被称为“静态检查”,但我不确定这是否是一个行业标准名称。您实现了“检测代码”,用于检查系统是否达到静止状态。V̶e̶r̶i̶s̶i̶t̶y̶̶̶s̶̶s̶r̶i̶s̶i̶t̶̶̶̶y̶s̶̶Cadence’s通过反对测试结束机制。基本上,整个系统中的监控器在模拟开始时“提出”异议(即递增计数器),然后在模拟运行时,确定其DUT部件处于静止状态,并“降低”异议(即递减此全局计数器)。如果不再有人反对结束测试(即全局计数器为0),则调用
$finish
。监视器可以在整个测试过程中提出和降低异议,但如果计数器达到0,则测试为
$finish
'd


通用验证方法(UVM)采用了Specman提供的这种方法,并在其。UVM首先是用Verilog实现的,所以您完全可以使用他们免费提供的库来实现“静态检查”。Cadence的《Specman UVM参考手册》也对这一机制进行了详细描述。不幸的是,Cadence要求你在他们向你展示他们的文档之前先成为客户,因此你必须使用非谷歌搜索引擎来找到你想要的东西。这有点痛苦。

在VHDL中,我使用解析信号

每个生成或分析数据的进程都会在工作时向该信号写入
0
。一旦处于模拟完成的状态,它将写入
1

只有当所有进程都满意时,信号才会变为
1
(其余时间是
X
0

时钟生成过程监控该信号,当信号变为
1
时,它们停止产生时钟脉冲;没有安排进一步的转换,模拟器知道停止


大概Verilog也可以做类似的事情。

谢谢你的回答。。。这很有道理。我使用的是Synopsys VCS,所以我猜我必须在VCS中找到“静态检查”的等效项。有没有一种方法可以在不经过UVM的情况下访问事件列表/计数器?好吧,静态检查默认情况下不是来自VCS(就像在Specman环境中一样)。您可以自己实现这个全局计数器,也可以从UVM导入它。顺便说一句,为了调试的目的,有必要跟踪谁对测试结束有异议。在C++中,我将它实现为<代码> SET/CODE,然后用DPI调用VCS,将其调用到<代码> iCR(MyOrrtLyPATH) <代码> DECR(MyRyTLYPATH)。这听起来是个好主意。在这一点上,我使用了一个killswitch,它倒计时到0并触发$finish。我在想,是否有一种方法可以访问模拟器中的事件列表,然后在没有其他事件可供模拟时触发。我想这里最大的问题是时钟转换被认为是一个事件。如果我错了,请纠正我。模拟器正是这样做的(它查看事件列表,并在没有计划事件时终止),我确保关闭所有事件源(在我的测试台中,它只是时钟,即使测试台非常行为化)。