对 IC 验证有哪些深刻理解?十年资深经验工程师为你解读(一)

Q:语言、方法学有多重要?

A:我的观点是:这两个都不重要。做事情的是验证工程师,来源是 Spec,所以 Testplan (全覆盖 testplan)最重要。重要的是验证的意识,愿不愿意去实现 H-O-T,即使一开始做的 “土”一些也没关系。
比如 tb 里经常要做的“自动比对功能”:
1)维护 queue,然后 foreach 的比较
2)利用 file-operation(fopen fread fwrite fscanf)来做文件比对 3)直接$system(diff a b > c)以后看 c 文件大小。上述三种方法都可以(虽然 2)会导致比较多的文件 IO,硬盘读写 bswk SMT 加工 www.smtsmt.com.cn 会影响仿真速度,
3)不能做实时的比对。不必拘泥于方法,关键是有这个意识。

Q:EDA 行业对验证的支持?

A:个人感觉虽然(动态)验证这些年在理论方面的突破不大(静态验证一直是热点),但是 EDA 行业一直都很重视,实现类的工具主要是在做算法优化,这些年突破不大。但是验证方向 上的点工具一直在不停的出(虽然最终可能也没有几个好使的工具),但是说明 EDA 行业一直在 致力于寻求在验证上的突破。而且由于现在做 SoC 的太多,IP 又太多,大家都是越来越重视验 证,很多上规模的公司里验证人员较设计人员多不少。个人觉得这可能也是 EDA 重视验证的一 个原因(用牛工具替代掉一些人 LL)。

Q:如何跟踪缺陷?

A:可以考虑 bug-zillar 这类的工具---- 自动跟踪问题。

Q:作业提交系统(lsf 或 grid-engine)

A:充分和合理的利用计算资源。

Q:环境变量的管理?

A:个人推荐使用 Module 工具。很多公司都是用这个免费的工具

Q:Testbench 用到的编程语言?

A:我觉得 tb 里 systemverilog 和 verilog 是可以互相替换(当然了,systemverilog 特有 的内容用 verilog 来实现会很复杂),所以推荐 tb 基于 systemverilog 来搭建,一些仿真模型可 bswk SMT 加工 www.smtsmt.com.cn 以用 verilog。C 除了 Cmodel 以外,firmware 也会用 C 和汇编写。 基本上我做过的项目里用到的语言: 脚本:perl、makefile、shell(perl 用的很多,其他用的很少) Tb(包括 vmm 的组件):基本是 systemverilog 仿真模型:systemverilog 和 verilog 混着用 Cmodel :C 或 C++ Firmware :汇编和 C

Q:验证工程师需要掌握的基本技术?

A:分享一份我做的基本培训内容安排,供参考 Perl,Makefile,AMBA 介绍,SVTB.pdf ,sva,几种用到的编程语言的 File operation , Low-power, C-pointer,Cshell-AWK+SED,体系结构相关的一些内容,SV-1Day training , VMM_source_code ,Arm 的嵌入式编程的基本概念

Q:自动化必须吗?

A:不是必须的,但是应该尽量去实现自动化。总之是多让机器跑。如果人均 License 太少 的话,要尽量做到白天 debug、晚上让机器跑。“比对”这种事情太机械了,所以尽量让机器做, 做这种事情机器的效率比人高太多。把精力放在构造 testcase、testbench、coverage 以及 bswk SMT 加工 www.smtsmt.com.cn debug 和分析上。

Q:Testplan 如何做?

A:形式不重要,xls 可以、word 也可以、txt 的也可以。但是来源于 Spec!testplan 里除 了 要 罗 列 function-test-piont , 还 应 该 有 error-injection 和 random-test-point 以 及 cover-point 和 assertion。 需要和各个 team 仔细逐条 review testplan,有些针对具体实现的 coverpoint 可能只有 designer 能提出来,需要尽早提出。Tb 搭建之前,要充分的 review testplan,因为 Testplan 的较大修改有可能会导致整个 testbench 的架构调整,effort 较大。Testplan 是一个需要不停 增加,不停迭代、不停 review 的东西。 Error injection 要和 RTL-designer 逐条 review,一个是看看 RTL-designer 是不是没有想 到,一个是设计是不是本身就不允许、或者架构上本身不可能出现。Error-injection 应该往深里 去好好挖掘。例如:内存控制器长时间不回数据(这里本身是一个随机点)à由于长时间不回数 据是否产生错误中断à产生错误中断以后如何响应à响应不过来如何恢复à必须用 software reset 做恢复的话,对 software 的时机是否有要求àsoftware 前需要遵守什么要求和步骤 虽然现在有一些工具可以根据规范化描述的 testplan 自动生成 cover-point 和 assertion, 不过我觉得自然语言描述的 testplan 应该是最“自然”的。

Q:哪些地方做随机?

bswk SMT 加工 www.smtsmt.com.cn
A:1)随机配置(一般都想得到的),但是对于一个封闭的系统常常是最不重要的,因为 firmware 可以自己开发,从而控制配置的流程和数值
2)随机激励数据(很重要)
3)随机时序(通常容易被忘记) 但是有一点要明确:随机不是全随机,是约束随机,是在合理的范围内尽量充分的随机。

Q:写约束随机哪些地方要注意?

A:推荐看 snug paper。(over-constraint 导致测试不完全,欠约束导致不必要的 debug 和资源的浪费)约束的效率:写的不好会导致随机失败。 Q:Coverage 如何做? A:code-coverage 和 function-coverage(covergroup, assertion coverage)。对于 constraint-random 的 地 方 用 covergroup 做 , 对 于 一 些 时 序 的 coverage 可 以 用 assertion-coverage。

Q:核心脚本?

A:单个仿真的脚本 ---- 建立所使用的不同的目录、不同的 seed(目录可以叫 case_KaTeX parse error: Expected group after '_' at position 37: …stcase,可以是 case_̲casename);环境变量和 license 的管 理;如果需要做离线比对也可以让脚本来自动调用比对脚本或命令(也可以在 tb 的代码里使用 s y s t e m 或者 system 或者 system或者systemf)。 bswk SMT 加工 www.smtsmt.com.cn 批量仿真的脚本----自动批量提交到 lsf 上。自动收集 log 信息以判断哪些 case 失败,对于 失败的 case 能自动重新提交,并且自动 dump 波形。以及产生批量仿真结束以后的汇总信息。

Q:SV 中重要的点?

A:特殊的数据类型,比如新增的三种 array(动态、associate、queue)、string(match 函数、backref 函数,参考 vcs 的 svtb.pdf);面向对象编程思想(handle);coverage; constraint-random。 熟练掌握这些语言点的用法很有必要。

想要了解更多,可以关注IC修真院,下期继续为大家更新!或者可直接ling 全文档

这里放个口:对 IC 验证的深刻理解

猜你喜欢

转载自blog.csdn.net/coachip/article/details/130685735