硬件验证基础知识转载.pdf
硬件验证基础知识转载
在硬件验证方面,我也是个初学者,但是看过了国内某论坛对于硬件验证
的讨论,觉得现在国内实在对硬件验证理解得太单纯。
什么是硬件验证?
硬件验证(或者说芯片验证,真正的英文是Pre-siliconVerification,
就是流片前验证。硬件验证实际上是对设计模型(RTL)的功能性验证,同时尽量
发现潜在的隐患。也就是说,硬件验证的首要任务是保证设计模型能完成所有
预先设计的功能,其次才是发现设计漏洞(bug)。所以,硬件验证并不是单纯的
调试(debug)。
为什么要硬件验证?
硬件和软件不一样。如果软件出现漏洞(bug),进行相应的升级(update)或
者修补(patch)就可以了。但是硬件就不同了。如果硬件出现故障
(malfunction),唯一的解决方法就是替换(replacement),这将耗费大量的人
力和财力。同时,芯片厂同批产品全部需要销毁,这对于芯片制造企业来讲,
也是一个很大的损失。所以,现在的芯片制造企业大多都成立了专门的硬件验
证部门,其目的就是防患于未然。
硬件验证是硬件生产中非常关键的一步,以至于现在的硬件厂商用二倍于
设计的时间来进行验证。[1]通过验证,不仅可以找出缺失的功能和错误的响应,
也可以测试硬件的性能和发现隐藏的问题。在硬件验证过后,虽然不能保证硬
件100%稳定运行,但是可以确认在绝大多数情况下硬件能正常工作。
怎样进行硬件验证?
最早的硬件验证使用确定性验证法(DeterministicVerification,我觉得
翻译成针对性验证法更恰当些),也就是手工生成激励输入(stimulus),然后
人工比对输出响应(response),如果响应与设计相吻合,则内部电路正确。这
种方法的好处就是针对性非常强,我们可以针对某一个信号或者某一个引脚的
动作(behaviour)进行测试。但是这种方法的弊端也很明显,如果对每一个引脚
都做确定性验证,那将消耗大量的时间和精力。尤其是现在的芯片规模越来越
大,功能越来越复杂,如果做完整的确定性验证,花费的时间可能达到数百年。
现在比较通用的方法是随机验证法(Randomization),就是由程序随机生成
输入激励,然后将输出响应和预测值进行比对,从而判断设计是否工作正常。
这里就需要引入一个参考模型的概念。
由于输入是随机的,不确定的,那么如何得出相对应的输出就是一个很棘
手的问题。如果用人工计算的方法,那就和前面提到的确定性验证法一样了。
为了避免大量的人力劳动,预测的过程将由程序来替代。而这个通过输入预测
输出的模型就叫做参考模型。在实际操作中,参考模型和设计模型由不同的人
员编写,以保证对设计理解的一致性。换句话说,就是避免同一个人犯同样的
错误。
事实上,现在的硬件验证已经将针对性和随意性两种验证方法相结合,发
挥两者的优势,达到验证开销的最小化。整体随机验证法是硬件验证的终极方
案,即所有的输入激励均由程序随机产生。这种方法的好处就是保证了输入的
多样性,同时能检测出只有在特定状态下才会引发的错误(CornerCases)。但
是这种方法对于参考模型的要求非常高,一般到验证后期、待参考模型完善才
会使用。
既然自动验证需要程序预测,那么相应的编程语言也就由此而生。通常,
在设计上,工程师们使用硬件设计语言(HDL,HardwareDesignLanguage或者
HardwareDescriptionLanguage),但是,在验证方面,硬件设计语言无法胜
任大部分要求(比如说,遇错报警,随机产生激励等等)。这时候,硬件验证语
言(HVL,HardwareVerificationLanguage)出现了。目前用得比较广泛的硬件
验证语言是Synopsys的Vera和Cadence的e语言。有人说Sy