一个小白的数字IC验证入门之路--一个简单的验证例子

继上一篇。这次举一个4位计数器作为一个验证例子。

先自己简单定义一个spec:
4位同步计数器,可控制自加,自减。可以加载初始值。
确认下接口信息

portcomment
clkinput; source clk
rst_ninput; reset
loadinput; for load initial data
data_loadinput; initial data
dirinput; decide count up or count down
data_outoutput; data

接下来制定一个testplan,这方面我并没有什么特别的理论知识,都是我自己的工作经验,所以大家如果有这方面的理论上的总结,希望可以互相交流一下。
对于一个模块,最基本的验证,我们把它当成一个黑盒子,我基于我的理解以及平时工作,给这个计数器做以下划分。这里表格编辑不太好操作,就只做第一级划分,其他大概说一下。

一级分类说明及验证方法
基本时序基本时序主要测试与时钟,复位有关的。如异步复位是否在一开始起作用,是否在工作过程中起作用。时钟和数据之间的关系,数据是在上升沿,还是下降沿之后才变化。dir 切换时,几个时钟后才起作用等等。这个验证加入assertion 来验会比较方便。不过验证环境不完善基本就一一确认波形了,regression时会比较麻烦。
基本功能基本功能就是spec所描述的功能了,这里就有是否能load 初始值,向上计数,向下计数。再细节可增加向上计时load初始值,向下计时load初始值等等。这种验证可以通过黄金模型去比对输出数据。
随机测试随机测试一般给给一些随机值作为测试向量,或者固定一些,随机给另一些。对于4位计数器而言,很容易做全覆盖,所以这里有点多余。但是对于一些模块而言,不可能做到全覆盖(case 会特别多)。这种也是通过黄金模型来比对了
边界值一般随机值可能测不到边界,所以特别做了这一项,比如我给数据一个最大值开始跑看看,最小值开始跑看看。这样也可以检查到一些溢出的情况。还是用黄金模型比对
异常设定这一类基本就是一个防呆机制了,或者预测外部可能出现的问题。比如dir 一直变,时钟和dir之间有skew, load的时候数据变化了,时钟占空比不规律等等。对于这个模块而言这些都是比较好判断的,但是对于其他复杂的模块,要考虑的可能就比较多了。这个也是用assertion 验证比较好,但我一般都是看波形,验证环境不完善啊

综上,大家其实也发现,制定testplan就是各种吹毛求疵啦,各种细化,各种分类。有时验证的过程会慢慢让人觉得枯燥无趣(我是这样的),然后很容易遗漏。所以一开始耐心,细心制定一个完善的验证计划特别重要。便于查漏补缺。

至于验证的乐趣在哪呢?(除了工资)那自然是你能非常详细了了解到一个你感兴趣的模块(数字)的功能,可能比designer更了解。你可以找出designer的bug,然后会有成就感,你保证一颗芯片流片出来更加尽善尽美,这对一个半导体工作者而言还是挺自豪的。

哦对了还有验证报告。这里就不做了,大概说一说。
验证报告主要是用于跟领导review,和便于以后的人查询功能,找bug的(我的理解)。
主要就是基于testplan 一个一个case说明啦。这个case你是怎么验证的,你是怎么确认它是对的,看波形(贴出波形),看log(贴出信息), 和黄金模型比对(说明下黄金模型)。反正一切要求是可复现的,因为有时工作繁忙会产生一些臆断(我是这样啦),所以作报告要有理有据,可复现来要求自己,可以避免一些错误判断。

最后还有各种覆盖率,功能覆盖率,代码覆盖率,条件覆盖率,assertion覆盖率,toggle 覆盖率,静态时序分析,功耗(clk gate) 也要检查。这方面之后再详说吧。

一个小白的数字IC验证入门之路–其它知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

triplelue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值