在英文中有一句俗语,“Pay me now, or pay me later—with inflation.”
在芯片验证中不同阶段发现bug也是一样,越晚发现bug代价越大。毫无夸张地说,这个代价是呈指数级上升的。这也是关于芯片研发(设计、验证、物理实现)分层的原因之一,天下攘攘,皆为利往,很多事情最根本的诉求还是追求最大的利润。
验证工程师发现设计Bug的能力和验证环境中激励可控性和内部状态可观察性直接相关。
可控性表示验证工程师构造边界场景的难易程度。 如果设计包含一个bug,但触发该bug的输入条件永远不会发生,则验证工程师将不会在仿真中发现该bug。可控性与验证层次密切相关。验证层次越高,验证工程师的可控性就越低。验证工程师在较低的验证层次上具有更大的可控性,因为输入激励对周围模块的依赖性较少。
例如,验证工程师希望构造模块内某个buffer满的激励。如果是模块级验证层次,验证环境中不存在周围其他模块的影响,那么验证工程师只需在buffer的入口不停地push数据,同时不pop数据即可。但是,在更高的验证层次中,要构造这个场景可能要困难得多。因为这个时候输入激励可能离buffer比较远,在push数据进入buffer时可能立刻被其他模块pop出去。所以,在更高的验证层次,构造同样的buffer满场景,可能非常困难。
在最初的模块级验证,验证工程师可直接操控RTL的输入以触发到一些很边界的场景。然而在更上层的验证层次,甚至到软件测试,就越难构造这些边界场景。所以说啊,高层次的验证环境只能聚焦低层次模块之间的交互,而无法完全覆盖低层次的测试点,最多只能是一定程度的增补性验证。
可观察性表明验证工程师识别设计行为正确性的难易程度。较低验证级别可观察性更好,bug可能在极短的时间周期范围内表现出来。在更高的验证层次上,只能通过集成低验证层次的断言或者参考模型来发现这些问题。
较低验证层次的验证往往会发现更多的bug,因为它们发生在设计周期的更早阶段。所以等到低验证层次基本上收敛时才开始较高验证级别的验证是一个比较明智高效的做法。
作者: 验证哥布林
原文链接:https://mp.weixin.qq.com/s/RI5K2akx7tNUOcFlRXx8gg
微信公众号:
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏。