本来以为coverage这件事情很多人会写文章讲,结果在公众号上搜了一圈也没找到几篇,那么今天就和大家聊聊coverage。
早期的验证方法学是通过direct test去保证设计的质量。这个阶段是directed-test driven的,但是随着设计规模和复杂度变大,这种直接测试导向会遗漏掉很多问题。于是验证方法学发展到了第二个阶段coverage driven。
Coverage driven这里的coverage主要有功能覆盖率(function coverage) 和代码覆盖率(code coverage)。功能覆盖率覆盖点(coverage point)和断言覆盖率(assertion coverage),代码覆盖率分为行覆盖(linecoverage),翻转覆盖(toggle coverage),分支覆盖(branch coverage),条件覆盖(condition coverage),状态机覆盖(FSM coverage)等。这也是目前大部分公司在执行的验证策略。实际 coveragedrive能够覆盖到大部分问题,但是有些可能因为设计有漏掉,然后写function coverage的时候也有漏掉,导致规格书上有些部分没有真正实现。
验证工程师很大一部分工作在收集coverage,对于80%的coverage我们可能通过几个基本的test就能打到,但是剩下的20%会花很长的时间去打。
为此我们需要建立regression的环境,创造随机的test,跑大量的regression去补齐最后20%的部分。
接下来将是一个非常痛苦的过程,很多公司的做法就会去review code,如果DV的能力比较强,看懂code自己补test,但是到最后发现还是有补不完的。designer的参与就非常有必要了,designer会帮忙一起review,然后几个轮回的造test跑simulation把coverage补齐。
当然目前也有很多公司采用一些tool去收集coverage,比如用formal去验证某些代码是无法被覆盖到的,这样就省去人力去看,这种方法非常高效。
对于收集coverage这件事情,你们还遇到过什么问题,都有哪些小技巧,欢迎留言讨论。