|
发表于 2006-10-27 10:33:59
|
显示全部楼层
验证工程师的工作范围是比较广的.从前端设计到后端设计,都需要验证.因为在ASIC的全部设计流程中,没经过一个设计阶段,就有增加新的bug的可能,而验证工程师的主要工作就是要保证没一个中间与设计规范保持功能的一致. 这包括前期的RTL设计,中间的物理网表,和后面的版图. 目前我们讨论的验证工作还是指前端的RTL设计.
验证技术不过分为基于模拟仿真和基于形式化的两种方法. 其中还是以模拟仿真方法为主导.
使用模拟仿真的方法进行的验证的主要验证环境(testbench)可以分三个主要问题:
1 测试生成:
2 结果检测:
3 覆盖率分析
在考虑测试生成时经常使用的方法是:
a 手工的编写测试向量,这种方法更有针对性,当然需要验证工程师对设计也必须相当的熟悉.这种方法的工作量也是很大的.主要有两种场合比较适合这种方法,第一在验证的前期,由设计人员进行的初步测试,针对设计的基本结构. 二 在进行一定的测试后,针对测试遗留下来的一些覆盖率漏洞,编写相应的测试向量.
b 自动的测试向量生成方法: 主要是使用随机以及带约束的随机方法来生成测试向量.这种方法可以用来进行主要的验证工作,通过不同的约束条件来控制测试的主要验证方向.
其他的方法:使用相同设计的测试向量. 如果是处理器设计可以使用相应的应用程序来作为测试向量等.
结果检测方法:
a 参考模型比较方法: 这是最常用的结果检测方法,需要开发相应的参考模型,将生成的测试向量同时输入设计和参考模型,并比较两者的结果,以次来发现设计错误. 比较的方法可以使用仿真时同步比较,也可以在一段测试完成后进行比较. 两种方法也会对参考模型提出不用的要求
b 自检测的方法:主要在编写测试程序时加入检测的代码, 在仿真的过程中自动检测.
覆盖率分析: 主要来衡量验证工作的完备程度.主要分为代码覆盖率和功能覆盖率.
代码覆盖率主要衡量设计代码在仿真过程中的执行情况,可以分为line, condition, toogle, expression, FSM等.
功能覆盖率主要是由验证工程师编写的监控模型,针对验证的测试点,比如某些事件 事件序列, 状态非法迁移等.功能覆盖率更能直观的反应验证的程度,也越来越受到工程师的重视.
其实一个验证环境把上面三个问题考虑清楚后就可以了,至于使用verilog C systemC vera e systemverilog等,只不过是工具的问题,比如在开发参考模型的时候可能使用C 或者systemC 等会由优势,因为它的高抽象级别.
开发功能覆盖率模型时使用vera, systemverilog等会更有优势,
至于什么覆盖率驱动的验证(coverage driven verification) 基于断言的验证(assertion based verification)等不过是提高验证的效率一些高级方法而以,其基本思想还是一样的.
我的一点认识,呵呵,希望大家多交流. |
|