|
发表于 2017-10-16 12:04:40
|
显示全部楼层
我觉得验证人员看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的输出用的,不会去验它内部的逻辑的。 |
|