在开发流程中,设计和验证人员关注的点肯定是不一样的,尤其在spec的理解上,验证人员往往需要有自己独立的理解。在拿到spec时,作为验证人员,应该如何提炼其中的功能从而转化为对应的reference model以实现和详细设计的交叉验证。
1
验证人员看spec中的功能点的时候,需要关注输入,输出以及从输入到输出所需要的时间。
首先,“从输入到输出所需要的时间”,也就是RTL内部的延迟,我觉得这是设计reference model的最大的难点。因为你即使问写spec的人,他也很有可能不知道。这个时候我们会去问设计人员或者看RTL代码,但是这样我们就很有可能被设计人员的思路影响,搭出来的ref model就有可能和RTL一起错了,这样你的验证环境有可能永远也查不到那个BUG。
然后就是从输入到输出,这就好比一个真值表,我们需要做的就是按照随机策略设计并约束激励。但是随着逻辑的复杂度的增加,这个真值表会越来越大,大到我们很难写全。这个时候我们可以像设计一个很大的模块一样,把这个大的真值表分成若干小的真值表。说起来简单,但是这里的工作量是随着逻辑复杂度指数上升的。如果要做所谓的交叉验证的话,不如再找一个设计人员,也设计这样一个模块,然后他们比一比结果,再磨合一下延迟,根本不需要验证人员。
最后再说下题外话,我在大学做设计的时候,是先设计reference model(用C++写好,用软件跑一下看看效果),然后再根据这个reference model去设计模块,最后设计完模块上FPGA跑一跑就结束了。这里如果加上验证一步骤的话,就可以直接拿这个reference model去验证了。所以我觉得应该是先有reference model, 再有需要被验证的RTL,这才是最合理的流程。但是我在实际工作的时候,是先有RTL再有ref model, 小编所在公司应该也是这样,不然也不会问这个问题。我们分析一下,ref model虽然是根据spec写的,但是却要获取RTL的内部延迟,然后我们再用这个部分逻辑来源于RTL的ref model 去验证RTL。这里面稍有不慎,就会放过BUG, 因为一般情况下我们的scoreboard里面的auto\_check是直接拿ref model的输出用的,不会去验它内部的逻辑的。
2
reference model更侧重于数据流的对比,时序上面的checker可以使用assertion。个人认为设计人员和验证人员看spec的角度是不同的:
1.设计人员通常是站在功能实现的角度,而验证人员应该更多站在使用者的角度,也就是说如何使用做出来的芯片。
2.如何使用芯片,决定了你的激励,你的激励决定了芯片所面临的状况,芯片在所有可能的状况下都能保持正确,那这个芯片的quality就得到了保证,所以如何设计你的激励是验证的核心。
3
黑盒验证无疑是相对比较省工作量的,只需要关注输入输出,更多精力放在如何判断对错以及根据覆盖率构建激励。但这些问题的根其实还是在对spec的理解上,这个我估计除了好的方法外,还是注重积累。
4
- 在阅读spec的时候,每句话看完都要仔细推敲下,把自己当作客户,想想客户在看到这句话时会怎么想。会怎么用。
- 仔细推敲每个功能点,要多个角度去想想。例如,当某个enable信号打开时,某个输出为1。但是当这个enable信号关闭时,这个输出是多少,0,1还是don‘t care。如果spec没有明确表示,我们需要找系统工程师(写spec的人)确认。
- 系统工程师和设计人员在设计模块的阶段,因为长时间合作,很有可能会有一些默契。比如说,某个开关打开以后,dut需要几个时钟采一下这个信号。而spec里面却是按照理想的情况描述的。
这个默契可能会提高设计模块的效率,但是对于我们验证人员来说却是一个大麻烦。因为spec每句话都有可能藏这么一个默契。而这个默契不仅会影响验证的效率,还有可能影响验证的可靠性。
比如我按照理想的spec为了某个功能点写了自动比对代码,仿真以后发现结果不对,结果系统工程师告诉我有这么个默契在,我只能自动比对代码里面慢慢去找哪里涉及到了这个点,然后改回来。但是这里其实有个风险,假设我的自动比对代码某个地方漏了这几个时钟,导致某个配置下的输出一直在输出默认值0(正确的输出应该是1),而DUT这个配置下正好也出错输出为0,这样我认为自动比对和DUT都是对的,导致漏掉BUG。
5
对于digital IC的验证,自动对比这是基本要求了。系统工程师能给我一个表格,上面列出了所有的输入的组合和对应的输出以及他们之间的时间,也就没这个事了。
-->如果spec真的对响应时间有要求,系统工程师会给每个模块的designer提出响应时间的要求。系统工程师没办法给出确切的时间,这也是可以理解的,毕竟rtl code又不是他写的,内部多了一级sync电路,响应时间就多了1T,多加几级sync电路只会使时间变长,又不会使design功能出错。假设这颗芯片是车载用的,响应时间会直接影响安全性,人命关天的事情,应该没人会不关注吧,而假设这颗芯片只是给家庭影院用的,卡了一次也不会对用户体验造成太坏的影响。
END
作者:验证哥布林
原文链接:
https://mp.weixin.qq.com/s/Lz8eeQfsQwI0UJXhw6Ru4g
微信公众号:
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏