2012年8月2日星期四

我对验证的一些理解


我对验证的一些理解【zz】


Q:验证的目的?
A:发现Bug,发现所有的Bug,或者证明没有Bug(转自夏晶的帖子)

Q:对验证工程师的要求?
A:Hacker mentality ,Organized testing ,Tool automation。
  也就是,如何做更多的testcase、如何覆盖更多的测试点、如何充分的利用服务器、如何尽可能最大化的自动比对。
  强调一下:注重细节”是验证工程师一个非常非常好的工作习惯。

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,硬盘读写会影响仿真速度,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来搭建,一些仿真模型可以用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以及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:哪些地方做随机?
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_$seed这样的格式;当然对于直接的testcase,可以是case_$casename);环境变量和license的管理;如果需要做离线比对也可以让脚本来自动调用比对脚本或命令(也可以在tb的代码里使用$system或者$systemf)。
  批量仿真的脚本----自动批量提交到lsf上。自动收集log信息以判断哪些case失败,对于失败的case能自动重新提交,并且自动dump波形。以及产生批量仿真结束以后的汇总信息。

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

Q:VMM 1.0够不够?
A:刚开始用1.0来建立起vmm的概念,然后转到1.1或者1.2上。个人觉得不是必须一下子就转到1.1或1.2上(当然,1.1的一些扩展宏的确很好用)。个人建议vmm1.0+1.1的扩展宏+subenv

Q:是否要使用VIP?
A:VIP的使用 --- 复杂仿真模型推荐用VIP,简单的建议自己做。如果自己开发仿真模型的话,也推荐看看VIP的文档,经常可以看到一些有价值的error-injection和random-test-points来完善你自己的testplan。

Q:要不要做门级仿真?
A:如果是走design-service,不知道最终带sdf的netlist仿真是否需要做,如果做的话,最好在release 综合后netlist的时候也做一下(插完scan-chain和做完CTS以后有条件也做一下),如果需要VCD文件做power分析和指导PR工具的话,那么门仿是必须做的。如果design-service公司不负责调量产pattern的话,那么ATPG等的门仿是需要自己做的。
  门仿并不是sign-off标准,但是推荐还是做一下,经常还是能跑出问题来的。如果做sdf反标的门仿的话,对于async的多级dff要剔除掉(VCS和NC都有option,vcs可以查手册里“+optconfigfile”,NC查”+nctfile”)。反标Sdf仿真的时候推荐notimingcheckàno_notifyàchecking_timing with optconfigfile的三步走。
  前期在评估IP的时候,有可能个别模块可能需要单独搭门级环境,比如CPU-IP有RTL,要自己做flow,那么通常是需要做门仿的(有可能主要是为了跑vcd或saif做power分析)。
  Tb的修改:由于CTS和综合的原因,导致时钟名字和信号名字有变化,所以tb有可能要修改。另外,tb里的probe文件建议使用反沿采样,也是为了避免带sdf反标以后clk踩不到整个data-vector。除此之外,个人不太建议在门仿的时候依然使用自动化的tb。因为你的tb里抓的很多内部信号可能名字变了(或者被优化掉了),这样导致tb在门级跑的时候维护起来有些麻烦。有些信号即便名字不变,可能会反向,这样会导致你的checker误报错。毕竟在门仿的时候不用跑太多的testcase,可以靠几条和rtl仿真一一对应的仿真来覆盖。门仿毕竟不是为了function,而是为了检查timing。
       如果你的设计里用了不带reset的dff的描述,由于开始不定态的传播,可能导致你门仿失败。个人推荐的方法是:如果特别多的话,用脚本找到对应模块里所有dff,产生一个force-release文件(注意:很影响编译时间,所以能不用就不用)

Q:FPGA和仿真如何安排顺序?
A:首先是schedule优先,其次是力所能及。但是原则上是先仿真然后再上FPGA,仿真可以很快的扫清一些基本的bug给仿真的时间充裕的话,那就仿真尽量往前赶,尽量在上FPGA之前多测一些(不是太多case的情况下,FPGA的测试速度毕竟要快一些)。即便FPGA很着急上,起码也让仿真先用几条直接testcase调试通过最基本的功能。第一版FPGA可能因为接死、悬空和信号反向导致逻辑被优化掉,这些问题有时候用仿真也不能全发现,就要结合leda等lint工具。

Q:仿真如何复现FPGA发现的bug?
A:首先保证配置的一致性,可以考虑做一些内部的工具。仿真上要probe寄存器操作端口,FPGA上要能把firmware里的配置流程转成文本。
       如果配置一样还是不能发现的话,再去逻辑分析仪上debug时序。当然,CDC的问题在仿真上是看不到的。
       个人不建议做FPGA网表的门仿,有点得不偿失。

Q:FPGA不能cover的部分的验证?
A:PAD_Mux(Test_mux)、Clkrst、Power-management-unit 以及FPGA跑不到的高频所对应的功能。Clkrst这部分主要就是pll config、clock-gate、divider、soft-and-hard reset,从测试点的角度还是很明确的,RTL代码修改的少的话,可以考虑不用做太复杂的验证(但是clkrst模块里可能会有一些控制逻辑或者状态机,比如:sdram的切频,这里一般是需要一个状态机控制的,这个需要仔细和小心的验证。)
  PAD_mux个人比较推荐使用自动化的流程,因为代码风格非常固定,所以可以用脚本生成RTL和用脚本生成testcase(一般这样的testcase是一堆的force)
  PMU建议看看VCS的MVsim的文档,里面介绍的很清晰了。(还是要配合静态验证工具MVRC一起来做)没有MVSim的话,可以考虑用VCS的$power $isolate。

Q:固化的firmware如何验证?
A:个人不建议让仿真去覆盖firmware,但是对于FPGA和ASIC不一样的地方要重点覆盖到。大的流程要覆盖到,其他细节由FPGA保证。

Q:架构评估?
A:我经验也不多,举几个例子。比如你的总线拓扑合理不合理?内存控制器的效率(机制)是否满足你的应用?使用哪类Cache?Cache的大小?模块的FIFO深度够不够(error-injection可以测到)?算法需要多少mips(rvds等工具带的模拟器可以给出结论,但是要让模拟器能考虑到内存access的latency)?软件里如果有不少memcpy的话,要模拟系统运行起来以后memcpy的效率。
     如果没有人手专门用ESL(如Carbon的CMS)工具的话,建议在验证平台上做(当然一旦有大问题,要推翻架构会很麻烦)。

Q:哪些资源要节省?
A:当然首先是人(数)要节省,人的成本比起计算资源成本和存储资源成本要大多了。提高技术、提高自动化程度才能节省人的成本。(低Package这种方法属于伤天害理的手段,不是正当途径)
  减少硬盘需求(如果有必要) 共享simv/simv.daidir csrc(包括regression过程中自动清理磁盘空间);激励数据是否可以不一下子全产生出来(对于通讯类的比较有意义,由于是floating的激励数据,所以经常很短时间就需要GB的空间)。注意对每个人每个项目设置硬盘quota,避免被个别人撑爆存储。
  减少编译次数(soc项目里比较有必要,testcase基于firmware),parallel-compile or separate-compile,vmm-test,在一个testcase里做多个功能点的覆盖,fsdb/vpd的dump层次的改变不要重新编译(fsdb有command,vpd可能得用ucli)。

Q:设计规模大了编译很慢怎么办?
A:有时候设计规模太大导致编译很慢,但是SoC项目很多情况下,功能模块彼此之间是用总线隔开的(即便在功能模块之间有硬件连线也可以考虑用仿真模型来做替代)。在仿真某一个功能模块的时候,可以考虑dummy掉不相关的模块。
  但是这就引入了一个新问题“文件列表的维护”。基于这种dummy的思想,文件列表的维护就成了tb里的一个很关键的地方,要尽量避免维护太多的文件列表。我个人比较推荐利用脚本来自动产生所需要文件列表。除此之外,仿真用的文件列表里我个人比较推荐用绝对路径(避免别人debug的时候出现调错文件的问题,另外可以指定不同的工作目录)。CVS里用相对路径,相对路径转绝对路径的工作由脚本自动完成。

Q:编译还是运行option?
A:为了减少编译的次数,能使用运行的option就使用运行的option。比如使用$value$plusargs $test$plusargs

Q:Assertion谁来写?
A:建议RTL designer和IC验证工程师都写。内部实现细节的描述由RTL-designer自己写,模块之间的时序由IC验证工程师来写。
  Assertion的抽象层次有些高,写复杂了有时候极容易出现和你想象不一致的地方。而且如果spec上描述的不清楚,误报assertion-fail也会引入不必要的debug时间。

Q:IC验证工程师要不要看RTL?
A:不是很必要,但是有些设计背景比较强的验证工程师看代码通常能看到一些问题。个人建议还是拿出点时间来review一下RTL code。

Q:自动化的tb搭好了,波形对验证工程师来说还那么重要吗?
A:非常非常的重要。毋庸置疑!!波形是最直接的,checker可能写错,有问题没有报出来。但是没有激励就没有所要的波形信息。

Q:如何重用?
A:reuse可以分为横向和纵向。
    横向是指项目之间。这个reuse主要包括:文档和tb、script。
    纵向是指同一个项目内,一般是模块级和系统级(包括子系统级)。一般是tb和script。
    比如在一个项目中,所有的tb都是用run_sim和regress脚本的,只是带的filelist不同。对于tb来说,driver和generator可能不能reuse,但是一般monitor和scoreboard这类被动接收的一般都可以reuse。而且testcase通常是可以reuse的。
       对于SoC类项目,为了保持testcase的一致性,我个人比较倾向于都使用firmware做testcase,这就要求:
    1)模块的验证也要基于一个(类)soc的tb下验证。
    2)cpu-ip要尽量简单,否则cpu会占用太多的仿真资源。个人推荐用iss做cpu-ip,负责配置寄存器。

Q:regression什么时候做?做多少次?
A:tb好了以后,任何时候都可以做。下班后尽量提交regression到lsf里,让机器充分的跑。如果你的环境是random的,那么随机空间实际是很大的(随着random-test-point的增长指数级增长),所以只要seed不同,其实是可以跑到各种各样的情况。

Q:DPI要不要用?
A:有的人很喜欢用DPI,不过我个人不喜欢用。我尽量是把C封装好(自己写wrapper),产生可执行文件,然后在tb里用$systemf来调。不喜欢用DPI的原因主要是因为如果代码里有不太安全的地方(比如C代码里你不是在堆上而是在栈上开了一个大数组,或者C和SV之间的参数传递写法不合理),很容易造成coredump。而且你也不确定到底是SV写的不安全还是C写的不安全。另外,有些大公司的算法源代码是不提供的,只给你一个.o文件,这样coredump了你debug起来会让你有砍人的冲动。
  但是不用DPI也带来一些坏处:
    1)要自己写一些wrapper之类的代码
    2)静态变量处理要小心。举个例子:我是每帧调一次systemf来做比对,某个函数每次比对会被调用一次。函数里的静态变量就没什么静态的意义了。如果不做修改的话,肯定会出错。一般是要求算法组尽量少用静态变量,非用不可的话,我们会把静态变量改成全局变量,然后让systemf多一个参数。
  要说明的是:DPI“天然”的就是tb的一部分。但是我觉得把时间浪费在debug 算法C代码的优劣上是一件很不值得的事情(无论什么时候都是schedule优先),当然我也很佩服有些人对任何事情都“精益求精”的态度。
       无论用不用DPI,你都可以使用DDD这类debug工具。DDD这种工具在非DPI情况下用起来会更加的得心应手。

Q:Force要不要用?
A:有的人比较抵触用Force-release,觉得如果写的不注意的话,可能会浪费时间(debug或者re-compile)。个人觉得“规定所有人把各自模块的force语句写在一个文件里,然后再被一个统一的force_prj.sv include进去,并且include前要有`ifdef保护起来”应该可以规避掉一些风险。

Q:人手少的情况下怎么做验证?
A:我个人觉得验证不能大包大揽,人手少的话就要更多的靠RTL-designer自己做验证。对于某些模块验证工程师就不要做了,否则陷进去出不来,反而影响了核心模块的验证力度。可以适当的更多依赖FPGA。但是对于核心模块一定要做好验证(比如内存控制器以及FPGA覆盖不到的模块等)

Q:IP要不要验证?
A:首先是去找业界口碑好的IP(个人觉得对数字IP来说silicon-validition一样重要)。人手不够的时候,可以考虑让FPGA多承担一些IP的验证,对于IP里一些FPGA无法cover到的测试功能点,可以考虑用直接testcase的方法覆盖。

Q: Debug到什么程度请designer来debug?
A:首先schedule优先,然后本着“力所能及”的原则,有时间有精力就debug的深入一些,否则checker报错以后,确认一下不是checker误报,就可以先提交给RTL-designer。

Q:遗漏bug怎么办
A:开发过程(FPGA)乃至最终silicon-validition甚至已经产品化后都可能发现遗漏的bug,要重视这些被仿真遗漏掉的bug。要一个一个的做case-analysis,仔细的分析为什么testbench没有抓到这样的问题。而且对于TO以后发现的Bug,要在下一版里重点review,以保证不犯同样的错误。另外,对于每个bug都应该尽量加一条对应的assertion。

Q:验证工程师要不要深入了解自己负责验证的模块?
A:虽然不深入了解,也不影响刚开始的工作,但是要把自己负责的模块吃透的话我觉得是很有必要的,我希望验证工程师能从系统(架构)一直到应用这些层面上都能深入的了解自己负责的模块。

Q:分享的氛围。
A:我个人觉得验证的范围很广,一个人很难把各个方面都搞的很精通。经常的技术讨论和培训是非常有必要的。Team-leader应该营造一个很好的技术分享的氛围。

-----------------------------------------------------------
推荐的学习材料(For VMM User)
1)svtb.Pdf
2)vmm源代码
3)systemverilog for Verification
4)VCS目录下的文档(包含vmm文档)
5)例子(先把VCS目录下的例子看懂)
6)Snug paper
7)转夏晶帖:总结我的思路,如何在验证中发现和定位Bug(里面有些观点太偏激)
8)一些资源网站 比如verification-guild EEtimes EETOP等等

论坛里的一次关于Verification的大讨论


论坛里的一次关于Verification的大讨论【zz】

rhythm1988说:
为了增加可信度,先八卦一下本人的经历,本人从事IC这个行当超过十年,最开始的设计是用原理图方式做的,新千年后转向两个HDL语言,从事的主要是通讯芯片的设计和验证工作,最近的一个完成的事情是建立一个团队并实现大规模复杂芯片的验证平台,用的主要技术 手段是SC/SV+OVM.
平心而论,本人决非所谓高手、牛人。所谓的高手是什么,举个例子,IC行业用TCL语言的人不少,这个语言的发明人觉得研究中用C不爽,干脆自己写一个语言好了,同样的例子是linux和android的发明人,这些才是典型的高手。 所谓以无厚入有间就是指这种人。
我想来论坛一定有高手,只是大音希声,大道无形罢了!
之所以想讲一下验证,主要是以前工作忙,也不是喜欢管闲事,上了论坛,下两本书,打个酱油就走了。但潜水多年,发现问题还是那些问题,心态还是那些心态,没有什么变化,本着人人为我,我为人人的心态,就倚老卖老一次吧。
漫谈也得有点主线,下面就从国内的验证生态圈到验证技术发展再到验证职业生涯,说一说看法,顺便可能会跑题说说以前贴子提到的一些问题。
首先,验证生态圈,俗话说:男怕入错行、女怕嫁错郎。就验证而言,理论上和其余IC工作一样,没什么可以特别讲的,不过我们是在中国,那就有点中国特色了。先说源头吧,还是在伟大的天朝高等教育制度上了。举个例子,那本XIA老师挂名的VMM方法学的中译本,我是看得相当地累(中国语文太差),翻译有三点要求,信达雅,雅就算了,至少要达吧,要把原文给“达”过来吧,很可惜没有。好在我是先看的原文,后来发现团队中小伙子们总问一些古怪的问题,追踪溯源,拿过来一看,唉,XIA老师你又毁人不倦了。天朝的整个高等教育体制就是一个杯具,如果谁站出来说自己没有悲剧的话,那我还真要恭喜你,你父母的钱花的值得。BTW:本人就是应该被恭喜的范畴之列,本人的硕士导师我是感激一辈子了,可惜他为了种种原因,给大日本帝国服务去了,实际上损失的还是莘莘学子们。
跑题了,再回来说上面这个例子。XIA老师总算是有点名气,没“达”到,至多是水平不够高。还有一本验证方面的入门书,中文叫《编写测试平台》的,我是直接禁止团队成员看,“信达雅”根本就不着边,南辕北辙的地方多了去了。伯格龙老兄要是知道自己的书译成这样,不吐血才怪呢!
如果我们是这样的起点的话,那有什么古怪的情况都不奇怪了,学生四年七年运气好,进了一个正规的公司,那也比非大陆的学生晚了三五年的,起点不一样,发展能一样吗?
顺便比较一下,台湾和大陆的中译本的翻译人员和水平,大陆就不多说了,比如booch经典的《面向对象分析与设计》台湾译本是由几位具有几十年编程经验的程序师翻译的,还诚惶诚恐怕译不好,这就是差距。
如果大家的起点如此之低,那国内的验证生态圈水落船低就不足为奇了。再说说国内业界的生态圈,三大门派:纯洋鬼子,假洋鬼子和土财主。纯洋鬼子的核心在大陆之外毋庸置疑的,大陆就是个低成本的实验室(工厂),验证的核心和理念基本都不在大陆,派几个台湾人,香港人和新加坡人来管理一下就行了,买办的管理我不熟悉,但我接触的几个leader的思路和空间都被限制得比较死,具体不说了,得罪人。假洋鬼子的道道就太多了,基本上就是捞一票的心理,不说验证也就罢了,说多了,怕大家心里有阴影。说句实话,土财主们反而愿意做好验证,因为没有退路,只有往前走,没靠山,只有靠自己,但做事情就有点八仙过海了,准确地讲,不规范,感觉近来要好了一些。OK,顺便回答前面帖子里有个人说要帮设计人员找bug的疑惑和问题。这事情要分几方面来讲,首先,从你的说法上,大致可以看出你们的验证不够规范的地方,大家都知道验证是分层进行的,从unit到block到system,这个bug是那个层面的呢,功能性的还是连接性的,功能性的最多到block就应该消灭了,要有验证报告存档和审查,只有连接性的是system层面要考虑的,那么unit层面的呢,那才是设计人员必须要自己解决的问题,所以bug不能一概而言,这些都是Writing Testbenches那本书里讲过的,其次,你提供的VIP和平台可以达到那个层面呢?是system还是block呢?平台本身是否有测试报告呢?不然你怎么让设计人员信服,是设计出差而不是平台出错了。最后,况且验证策略有白、黑、灰三种,策略不同,定位的主体也是不同的,总的原则是让合适的人干合适的工作,验证人员不应把自己放在设计人员的对立面,只有一起尽在掌控中,才算是合格的验证人员,不然为什么boss要给你高薪呢?总要有个道理吧。
说完了验证的现状,再说说验证技术,看了一下最近的帖子,有个感觉普遍都还在应用操作层面。就拿讨论VMM和OVM的优劣的问题来说说,实际上这根本就不算是问题,无所谓谁优谁劣。其实有个人说了实情,Marvell就是自己的一套。对于业界的领先公司而言,那几个EDA公司就是追随者,技术上不存在领先的问题。所谓VMM和OVM都是大公司不玩了,他们再总结总结,把共性的东西提取一下,给没有实力去自己研发的Fabless厂商提供一个解决方案而已。以OVM为例,不到20K的源码,按业界工程师300行每月的产量,也就不到10个工程师团队的一年工作量,大公司要靠这个那还有江湖地位啊。诸位看看IBM的EDA,基本上就是自己的独立王国,EDA供应商的东西是最外围的,核心的永远是自己开发的,随便拿个出来,不好意思,就是标准,比如sugar语言,不就构成了PSL的基础了。另外再举个例子,写Writing Testbenches那本书的老兄伯格龙,我记得在synopsys的大客户全球支持团队(好像是这个名字或者类似),做的工作就是给业界大公司提供验证方面的支持。不继续扩展下去,点到为止。
下面结合职业生涯再讲讲验证工作和技术等等问题。
如果你选择了验证,或者是被验证了,我个人觉得和所有的研发工程师一样,没有什么区别。用狄更斯的话就是,这是个最好的年代,也是个最坏的年代。关键还在自己,如果你自己没有设置上限,那还有什么可以限制你的呢?
最后说一些体会:
1)IC上所有的工作都是殊途同归,唯一限制你的只有你的眼界,把眼光放远一点;
2)做事情要踏实,贪多嚼不烂,学多,不如学精,等能力上了一个台阶后,其它基本上触类旁通了,就好像武打小说的任督二脉,没打通,什么都白搭;
3)把基础打扎实,多看看老外的书,深入体会一下老外的思路和想法,比如:把VMM之类的搞懂了,还得想想为什么?本来想讲讲学习路线图,不过这属于技术经验,只供BOSS使用,另外讲了对初学者没有好处,这是一个复杂的多方位的学习体系,必须由leader来领路;
4)IC这个行当学习曲线漫长而陡峭,刚开始的几年内就讲待遇,只能事倍功半。
其它的再补充吧!

hover99说:
本来也想写一篇关于验证的文章,没想到被楼主抢先了。
其实楼主有点把大公司神话了,越是大公司技术越保守,尤其是验证,历史沉淀越厚,包袱越重。ic公司关心的是产品,工程师反而没有太多精力去搞什么方法学,即便搞出来也会受到项目组的抵制(假如现有的平台已经成功流片了多个产品,你会推翻它再搞一套新的吗)。
验证的目的是保证产品在多大程度上是可靠的,而不是找到bug。另外,本人认为验证工程师水平比较低的原因大部分验证工程师将大部分的时间花在建test case上,结果大致大部分人认为验证是一个技术含量比较低的工作,有一两年经验马上转去做设计。如果把debug能力作为验证工程师的重要素质,那么培养验证工程师的方向完全错了。
个人认为验证方法学主要解决三个问题,复用;testbench和test case的分离;testbench的鲁棒性。第一个问题(不仅包括项目之间的横向复用更包括自底向上的垂直复用)没啥好说的,无非就是节省工作量。第二个问题的本质就是分工,建test case的工程师需要对产品本身有更深入的了解,甚至就是设计工程师。第三个问题最关键,高效率的工作写testbench和设计基本上同步进行,这样就会导致写testbench的时候,设计是不确定的,极端情况是你的验证工作已经完成,这个时候设计突然改动了,这个时候就能体现出一个高水平的验证工程师的价值。所以从这一点上看,OVM比VMM1.1先进一代(VMM1.2基本上和OVM没啥区别),OVM比VMM晚了2年,技术上先进也是合理的。
最后,所谓中文译本基本上都是学生翻译的,而且很多术语根本就没有翻译标准。最好的参考资料就是英文的ref guide。当年夏老师那本verilog还是公认的有水平。
现在很多初创公司验证水平还停留在verilog的层次上,而对他们来说验证恰恰是最重要的,而且这些公司往往无法得到eda公司的支持,所以我认为验证服务还是有市场的。

rhythm1988说:
本来也想写一篇关于验证的文章,没想到被楼主抢先了。
其实楼主有点把大公司神话了,越是大公司技术越保守,尤其是验证,历史沉淀越厚,包袱越重。
LZ:有一个理论叫冰山理论,也许你看见的和听说的,只是水面上的部分,可能水下的部分更多。
一般老外的工程师都相当严谨,没有把握的东西一般不拿出来show。

ic公司关心的是产品,工程师反而没有太多精力去搞什么方法学,即便搞出来也会受到项目组的抵制(假如现有的平台已经成功流片了多个产品,你会推翻它再搞一套新的吗)。
LZ:很多公司都是死在这种思路上,具体讲,中层没有动力去更新自己,导致支持不了高层的策略,公司慢慢地就落伍了。这种温水煮青蛙的例子太多了。
举个例子:5、6年前的soc项目,现在可能只是一个subsystem,如果是你做验证怎么办?以不变应万变?
没有精力去搞?项目组也抵制?能不能PM给我那些公司?以后听说谁去那个公司要小心。
你说的情况只存在于老的项目中,项目处于维护状态,才停滞下来。BOSS也不会投入在已经不需要大量投入的项目。

验证的目的是保证产品在多大程度上是可靠的,而不是找到bug。
LZ:严格地讲,这句话概念上有错误。对于IC的验证有着严格的定义,我希望你是表达上的错误,混淆了verification(验证)、Reliability(可靠性)和Test(测试)等概念。
老外的书在这几个概念和方法上是有严格定义和界限的,并不是想当然中的那样。
如果你在我的团队中,我会希望你写一篇文章来描述你这个定义,论文中要有业界公认的定义是什么,你对定义的态度和看法,是希望在此基础上更广泛或更精确?还是愿意修改已有的定义。
如果你有兴趣,不妨就你说的验证的目的再写一点东西。
可以很坦白地告诉你,我从来没有看过那个资料里把验证的目的和可靠联系在一起,如果有希望你能告诉我。
最后把我的理论来源告诉你:在《writing tesebenches》中有这样一句话:The issues of design safety and reliability and techniques
for ensuring them are beyond the scope of this book. But it is the role of a verification engineer to ask those questions.

另外,本人认为验证工程师水平比较低的原因大部分验证工程师将大部分的时间花在建test case上,结果大致大部分人认为验证是一个技术含量比较低的工作,有一两年经验马上转去做设计。
LZ:test case是testbench的一部分,花时间构筑test case无可厚非,但将此作为验证工程师水平比较低的理由,就有点不靠谱了!
不能因为也许是你的环境是这样,就认为是这样的逻辑关系。
给你一个忠告:有机会就找个好的团队,正规地培养一下。

如果把debug能力作为验证工程师的重要素质,那么培养验证工程师的方向完全错了。
LZ:debug能力是整个IC行业,乃至整个IT行业的基本而且重要的能力,相比较起来,会不会验证或者什么方法学都没有那么重要!简单地讲,靠debug能力可以吃一辈子饭,其它的技术可就不一定了。

个人认为验证方法学主要解决三个问题,复用;testbench和test case的分离;testbench的鲁棒性。第一个问题(不仅包括项目之间的横向复用更包括自底向上的垂直复用)没啥好说的,无非就是节省工作量。第二个问题的本质就是分工,建test case的工程师需要对产品本身有更深入的了解,甚至就是设计工程师。第三个问题最关键,高效率的工作写testbench和设计基本上同步进行,这样就会导致写testbench的时候,设计是不确定的,极端情况是你的验证工作已经完成,这个时候设计突然改动了,这个时候就能体现出一个高水平的验证工程师的价值。
LZ:相信上面这段内容是你思考的结果,不过很可惜只得皮毛,另外还有一些偏差,限于篇幅原因,不展开讲。
等你上了一个台阶的话,自己再来看你的理解。从整个描述讲,贵公司在整个开发流程上还有相当多的漏洞或者不足。

所以从这一点上看,OVM比VMM1.1先进一代(VMM1.2基本上和OVM没啥区别),OVM比VMM晚了2年,技术上先进也是合理的。
LZ:没有必要纠结这个问题,有一句话,批判的武器不如武器的批判,OVM有历史继承性,并不是晚的原因,技术上也没有先进性,所谓先进与否要从基础原理上看,比如:OOP等等。

最后,所谓中文译本基本上都是学生翻译的,而且很多术语根本就没有翻译标准。最好的参考资料就是英文的ref guide。当年夏老师那本verilog还是公认的有水平。
LZ:所谓水平要分层次,语言是拿来用的,XIA老师的verilog后来是人手一本了,仿佛当年谭校长的c语言,可是语言之外还有很多东西。作为一部介绍Verilog的教材够了,所以我说至多水平不够高,呵呵。。。

现在很多初创公司验证水平还停留在verilog的层次上,而对他们来说验证恰恰是最重要的,而且这些公司往往无法得到eda公司的支持,所以我认为验证服务还是有市场的。

hover99说:
很不幸,本人就在楼主所说的M公司,而且在最核心的部门和美国工程师合作了2年,至少在去年我们最先进的产品仍然是使用verilog来验证的。非常不幸,你对大公司的评价和对我个人的评价完全陷入了悖论。在M公司(楼主说的纯洋鬼子)和以前的公司(楼主说的土财主),都遇到这么一个问题,当我们试图用新的验证技术去替换旧的验证环境时,会发现有大量的test case需要大量的人力去移植,结果时间和人力上都无法满足,好的情况就是两套环境并存并持续若干个项目,最终转移到新的平台,有一个有趣的现象在两套环境并存的过程中,几乎所有以前抱怨过老环境的人都认为老环境还是可以接受的。验证的最终就是追求功能覆盖率,新老技术都能做到这一点,只不过新技术效率更高并且更不依赖于验证工程师的素质。结果就是在新老技术交换过程中,效率更低下。所谓大公司的包袱救治指的这个。其实这种例子有的是,最典型的莫过于塞班,诺基亚算不算大公司?大家都知道塞班落伍了,但是提高技术甚至推到重来,诺基亚偏偏就是做不到。另外一个例子,synopsys的vip很多都是vera的,在大家看来太落后了,为什么还能存在?这是因为这些vip已经经过了大规模的验证,重写虽然可能提高效率甚至不用花费大量的时间开发,但是必须要重新花费大量的时间来验证vip本身的可靠性。所以这些vip从vera时代一直延续过vmm时代,最终到uvm终于无法适应了,只能重写。
所以说,技术上的革新都是被动的。革命在西方就是贬义词,大家更喜欢用进化,而进化本来就有被动适应的意思。
验证方法学只是一个手段,产品才是目的。对于pm来讲,最好是可以使用最简单的技术来完成任务。这就是工程和研究的区别!
如果你的验证平台在设计freeze之后,每一周都能找出若干个bug,我想pm不会觉得你的工作有多出色而是对你的验证感到绝望。我这里所说的验证可靠性,是指的是在流片之前pm有多大的信心来保证芯片回来是work的。如果我的验证平台一个bug都没发现,但是我能保证所有的可能情况都测试过了,你能说这个验证平台不合格吗?
楼主认为test case是testbench的一部分,我觉得你并没有理解vmm或者ovm的精髓。如果仔细研究vmm或者ovm,你就会发现,vmm/ovm花了很大的努力去把二者分开。楼主说的大客户支持(CAE)里面的工程师是验证架构工程师,所谓验证架构就是开发testbench的人。而且按照vmm或者ovm的理念,在testbench完成之后,需要改变的只是test case而不是testbench。我们用oop技术去屏蔽验证平台的实现细节,只开放最顶层的部分给test case,就像操作系统向开发者提供api一样。我们把写test case的人看做是验证平台的用户。我们部门20多人精通验证的只有2个人,但是却可以同时支持3个全新项目的验证工作。而这两个人又在很短的时间内积累了3种不同应用的验证架构经验。如果testbench和test case由同一个人完成,那么当他用1个月的时间写完testbench之后,又要花费3个月去建test case来验证。如果很快有第二版出来,那么他又不得不重复上面的工作,试想在这种情况下,验证工程师除了对他所验证的模块更熟悉之外,在验证方法学上有学到了什么?更可悲的是,当他对设计熟悉到一定程度的时候,很可能会把他熟悉的这部分交给他设计,然后又找一个新人给他做验证,如此循环。
实际情况是,相当一部分验证工程师在工作1,2年后会转为设计,还有一部分会专注于写test case,对他们来讲debug是一个重要能力(话说回来,写RTL和debug自己的RTL都不是什么技术活)。对于那些验证架构工程师来讲更重要的是用软件方式对testbench debug,两种debug根本就不是一回事。

hongjian77说:
一直在潜水,本帖虽然是验证漫谈,但是rhythm1988通篇只做了3件事:抱怨国内的环境,重复10年一本老书的观点,最后又崇拜了一下洋人。
看到rhythm1988的团队成员居然看中文资料,我简直要喷饭了。我和同事都是中国人,但是我们写文档发工作mail都用英文,有时候需要用中文写文档反而写不出来。仔细看了rhythm1988的回帖,确实有领导风范,就是说你不行,你的层次不够,具体那不行就要靠自己的慧根了,真是牛人!记得当年打cs的时候,大家都讨论那种枪厉害,突然有人说真正的牛人就是用匕首也能杀人,你们的讨论层次太低,于是被大家无比崇拜,结果打起来却发现水平so so。所以大家得到一个结论,要想做牛人,绝对不能展现出自己的实力,要说些似是而非的话,最重要的是要掩饰自己的观点。比如大家在讨论肉车的时候,明明你非常赞同,但是你也要说:没有肉车只有肉人。语言只是工具,vmm只是应用,这样一说,别人就不好意思问你这方面的问题了,即便是你一窍不通别人也无法察觉,对你只有仰视。rhythm1988从业10多年了,应该是管理层了吧。这些人对技术细节并不了解,也不屑于了解,不是说这些人水平低,而是说在这个层次的人关心的是flow和宏观问题。但是这些问题不是engineer关心的,flow追求的终极目标就是同样的任务任何人做出来效果都一样,记住体制中是培养不出牛人的。
不过看到下面hover99的帖子倒是觉得有些新意,特别注册一个id来谈谈我的观点。本人是designer,也懂一点vmm,不过我们soc的验证环境还是verilog的。以我的经验来看,bug往往出现在你认为不会出现bug的地方,让designer自己验自己的design,总觉得不靠谱。其次,hover99所说的只改testcase不该testbench,我觉得过于理想化了,假设设计要求增加错误检测功能需要driver产生error injection,这个时候除了改testbench还有别的方法吗?

rhythm1988说:
占个位置先!待续。。。很不幸,本人就在楼主所说的M公司,而且在最核心的部门和美国工程师合作了2年,至少在去年我们最先进的产品仍然是使用verilog来验证的。非常不幸,你对大公司的评价和对我个人的评价完全陷入了悖论。在M公司(楼主说的纯洋鬼子)和以前的公司(楼主说的土财主),都遇到这么一个问题,当我们试图用新的验证技术去替换旧的验证环境时,会发现有大量的test case需要大量的人力去移植,结果时间和人力上都无法满足,好的情况就是两套环境并存并持续若干个项目,最终转移到新的平台,有一个有趣的现象在两套环境并存的过程中,几乎所有以前抱怨过老环境的人都认为老环境还是可以接受的。验证的最终就是追求功能覆盖率,新老技术都能做到这一点,只不过新技术效率更高并且更不依赖于验证工程师的素质。结果就是在新老技术交换过程中,效率更低下。所谓大公司的包袱救治指的这个。
LZ:你看问题说具体了,就有讨论的空间了。你说的比较典型,OK!上面转换策略是你们具体执行的方式和碰到的问题,我提一个思路你看会不会好点?比如:你们的平台能否提前一到两年实现,并做好平台的测试工作呢(包括VIP)?团队的manager和leader能否深入产品去提前挖掘需求,做到一个提前量,也许抱怨的人就会少一些。
另外还有一个问题,即上面提到的大量的test case需要大量的人力去移植的说法。呵呵!上次有意没有点这个问题,看你这么执着,就说一说解决方案,非常遗憾的是,业界已经更新了大量test case的做法,具体的做法是少量的test case(少到多少有讲究)+自动更新随机种子+部分的定向测试的方式来完成覆盖率要求。
你仔细去看8楼的回答中,我压根就没有提所谓的大量test case的说法!!!你可以想象得到我看到这句话时的表情,应该说你在一个封闭的环境中,天空就那么大一点。
为了防止你吹毛求疵,我再把相关问题说透彻一些。
其实,我贯穿整个讨论一直在明确关于语言和验证工作的问题,只是没有显性的说出来。说了多少次了,开始就说牛人的做事情方式和思路,说了两个验证方法学的不存在优劣的问题,说了要把基础打扎实一些,其实都是在说这个问题,目的是希望看帖子的人自己能够有所悟!当你自己有悟的时候,才能够改变验证工作被动和地位不高的问题。
你没有悟出来吧,还把自己的一知半解给拿出来做理由,这就怪不得我下重手了。
我来解释一下最先进的产品仍然可以用VerilogHDL和VHDL来验证的理由吧。如果我们可以不怕麻烦的话呢,所有的问题都可以用C/C++,再源头就是汇编了,但很明显,有牛人用的不爽,干脆自己编一个出来,同时也造福象我等这样的平庸人士,VerilogHDL之类的就是这么出来的。
那好了,既然有牛人造出了Verilog,使C语言插上了时间性和并发性的翅膀,难道还有什么问题不可以用c加上verilog来解决呢?甚至更极端的,你们公司有大牛,干脆用c甚至汇编来解决问题,不是不可以哦!
所以说,方法学没有什么优劣的,既然systemverilog是半吊子的面向对象的方法,那么我VMM用CALLBACK,你OVM就没有资格来批评我,咱们都是半斤八两,有本事你OVM干脆搞个纯oop的硬件描述语言生态圈出来?这就是我为什么说没有优劣的原因。
不告诉你,是你整体还没有上这个台阶,贪多嚼不烂,后面居然成为攻击我不了解方法学的原因,彻底无语了。。。
最后说说M公司,不知道我说的“M”公司是不是你说的M公司,几年前听说M公司是唯一把核心业务放到中国来做的公司。我在多年(接近十年)前看看的一篇关于集成多子系统在单SOC芯片的论文,就是M公司的,文章应该是99年的DAC论文。记得看的时候是十一,没别的事,干脆仔细看看,应该承认“M”公司在新千年之前,就已经是业界领先了,想不到十年之后,还是如此而已,难怪没落得要私有化的程度,唉。。。

其实这种例子有的是,最典型的莫过于塞班,诺基亚算不算大公司?大家都知道塞班落伍了,但是提高技术甚至推到重来,诺基亚偏偏就是做不到。
LZ:这个问题我是外行,但尽量交流一下。其实类似的情况业界也有,新千年的时候是网络股火爆的时候,Intel花了60多亿美刀买了个做网络处理器的公司,Intel公司的技术实力不可以质疑吧,结果呢?一塌糊涂,最后公司好像不到7亿卖给了Marvell!
关于塞班的问题可能很复杂,但和Intel类似,根本上应该是高层在不熟悉的子领域中的策略有问题,一个正面的例子是Apple,其实我们看IPAD的硬件成本和售价,对比IMAC的成本和售价,就知道,在数据业务这个移动子领域中,商业模式发生了很大的变化。诺基亚的策略上没有苹果的策略合适,不是技术问题。
个人理解不应该拿来支持你的看法。

另外一个例子,synopsys的vip很多都是vera的,在大家看来太落后了,为什么还能存在?这是因为这些vip已经经过了大规模的验证,重写虽然可能提高效率甚至不用花费大量的时间开发,但是必须要重新花费大量的时间来验证vip本身的可靠性。所以这些vip从vera时代一直延续过vmm时代,最终到uvm终于无法适应了,只能重写。
LZ:这是你们自己的内部矛盾,按理我没有发言权。反证一下吧,但业界推出UVM来统一方法学,难道是推UVM的那帮人走路集体撞墙了,或者在集体梦游!业界大公司M明明发现VMM过渡不到UVM,还要硬推融合?
唉,都是我在给你们出主意,你们是什么公司啊?说得都有点不耐烦了!
有空请你们的leader多看看书和资料,去查查DAC2011的UVM主题,讲UVM中的tlm2的就是伯格龙老兄,synopsys公司的,实在不行请你们高层协调一下新思的资源,给你们制定一个转换路线。
路线大致说两句:vera是捐献给SV的,所以synopsys在VMM上特别用心(所有早一点推出来),从vera到vmm再到uvm,怎么可能走不通呢?UVM还要不要基于SV来开发了?
你说了这么多,除了证明你们的团队不思进取,我真看不出来还有什么内容!!!

所以说,技术上的革新都是被动的。革命在西方就是贬义词,大家更喜欢用进化,而进化本来就有被动适应的意思。
验证方法学只是一个手段,产品才是目的。对于pm来讲,最好是可以使用最简单的技术来完成任务。这就是工程和研究的区别!
LZ:请不要说一些似是而非的东西,我自认为想引导大家走向一个正确的职业道路,不希望象这种水平的来浑水摸鱼!

如果你的验证平台在设计freeze之后,每一周都能找出若干个bug,我想pm不会觉得你的工作有多出色而是对你的验证感到绝望。
LZ:很不好意思,pm是对你的工作感到绝望的,一个正规的验证过程的bug/时间曲线是个指数曲线,而不是你现在的状况!

我这里所说的验证可靠性,是指的是在流片之前pm有多大的信心来保证芯片回来是work的。
LZ:请不要越描越黑,我们是做技术的,说话要有依据。流片成功不是靠PM的信心,而靠科学地客观地设置一些流片条件来保证!合理而有效地设置这些条件,是PM应该因地制宜的或者坚定不移地执行的。回来能不能工作很大程度上依赖整个团队能否有效地执行PM设置的条件。

如果我的验证平台一个bug都没发现,但是我能保证所有的可能情况都测试过了,你能说这个验证平台不合格吗?
LZ:你还真会钻牛角尖!说句实话,帖子回到这基本上比较完整地了解了你的一个侧面。有一个感觉,你在验证原理和验证技术的学习方面没有形成系统观点,学习中思考量不够,特别是在基础理论上,可以预见你的知识体系相当零散,非常不幸的是,你用自己的臆想去填补了你知识体系中的空余部分,可惜非常遗憾的是,这些臆想绝大多数都是海市蜃楼!我对你的忠告在5年之内还绝对有效!!!
这样的问题我还是留给初学者思考吧,记住,这种问题在你学习验证理论的时候就应该解决,也就是说在你做学生的时候就应该解决了,可以看看这个问题问的方式,条件这么绝对,答案甚至不是选择题,你以为是本科生考试啊!
BTW:这个问题跟你们团队中的2个精通人士去讨论讨论,看看他们有什么看法吧!

楼主认为test case是testbench的一部分(看来你不是这样认为!而我认为除了DUT/DUV外,都是testbench,下面有人说的十年前的老书第一张图就表达了这个意思,你没有看出来,说你基础知识不到位不为过吧,OK!我孤陋寡闻了,你要不把你的理论基础说说吧?原创还是借鉴),我觉得你并没有理解vmm或者ovm的精髓(理由呢?理由呢?一句话就打发了,情何以堪!)如果仔细研究vmm或者ovm,你就会发现,vmm/ovm花了很大的努力去把二者分开(My God!你把VMM/OVM也算验证平台的一部分了吧!要不把操作系统也算进testbench去算了,怎么说操作系统也是软件哪!CPU就不算了,毕竟是硬件,上面开个玩笑,回去看看OVM的白皮书,有个层次图,以你的起点一定会得到你的结论)。楼主说的大客户支持(CAE)里面的工程师是验证架构工程师,所谓验证架构就是开发testbench的人(不知道啊!我看干脆以后IC公司的BOSS给伯格龙他们发工资算了)。而且按照vmm或者ovm的理念,在testbench完成之后,需要改变的只是test case而不是testbench(你这个意见有没有和EDA的AE或者FAE交流过,如果是的话,把这个(些)AE和FAE的名字发给我,我们公司以后他们不用来了)。我们用oop技术去屏蔽验证平台的实现细节,只开放最顶层的部分给test case,就像操作系统向开发者提供api一样。我们把写test case的人看做是验证平台的用户。我们部门20多人精通验证的只有2个人,但是却可以同时支持3个全新项目的验证工作。而这两个人又在很短的时间内积累了3种不同应用的验证架构经验。如果testbench和test case由同一个人完成,那么当他用1个月的时间写完testbench之后,又要花费3个月去建test case来验证。如果很快有第二版出来,那么他又不得不重复上面的工作,试想在这种情况下,验证工程师除了对他所验证的模块更熟悉之外,在验证方法学上有学到了什么?更可悲的是,当他对设计熟悉到一定程度的时候,很可能会把他熟悉的这部分交给他设计,然后又找一个新人给他做验证,如此循环。你们组织的现状我可能需要花更长的时间去理解,感觉有几个问题:1)精通验证的人比例太少,我对团队成员的要求是所有人都通晓几个基础,但个人有所突出,有方法学源码精通的、有覆盖率精通的、有脚本精通的、还有其它方面,你们组织的形态很古怪,是历史原因还是人文原因?你是不是2人之一?2)简略解释一下platform、testbench和VIP的概念,假设testcase属于testbench,通过下面的解释,大家会知道为什么有这个属于关系,platform是基于语言和验证方法学而言,范围比后两者更广泛,testbench和VIP是在platform的基础上针对某个IC而言,但后两者有联系也又有区别,按照testbench的定义是完成DUV的输入和观察对应的输出(可选),那么testcase就是完成testbench工作的一个步骤,所以有这个归属关系,为什么说VIP和testbench有联系也有区别呢?我们说testbench一直没有说到RM,只有RM可以不属于testbench,讲到这里应该明白为什么platform的范围更广了吧!当然RM可以不存在,也可以很复杂,如果复杂到可以多个项目重用就快接近VIP了,当然这还不是一个完整意义上的VIP。VIP和testbench的这种我中有你,你中有我的特点决定了要复用,必须基于某个flatform来做,因为必须基于某个具体方法学和语言来做,现在不是十年前个人英雄的时代了,一个人可以从汇编一直做到界面,甚至硬件,基于平台来做可以做到事半功倍。3)现在可以讲讲OVM等等的意义了,方法学提供了一个使用语言的套路,具体讲应用方法学可以很快地搭建好testbench(这话不是我讲的是Mentor的人讲的!相关资料很好找,网上到处都是),使工程师可以尽快投入到RM的开发中,而RM的开发才是验证工程师需要重点投入的部分,如果是多项目的复用,那么RM的开发需要遵照VIP的方式来实现,这个过程当然需要精通验证的人来把握咯,呵呵,换做港台的讲法就是“拿捏”。最后我们来大致分析一下结合hover99的部门情况,只是我觉得很悲哀,有18个人在做可以简化、没有技术含量的工作,另外两个人基本上是神仙,包罗万象,无所不能是其次,还能身体力行地做到做完做好,证据是“我们部门20多人精通验证的只有2个人,但是却可以同时支持3个全新项目的验证工作。而这两个人又在很短的时间内积累了3种不同应用的验证架构经验”,顺便明码一下,能不能把那两人的电话给我,我给业界的朋友们推荐推荐!中国IC界太需要这样的人才了!

实际情况是,相当一部分验证工程师在工作1,2年后会转为设计,还有一部分会专注于写test case,对他们来讲debug是一个重要能力(话说回来,写RTL和debug自己的RTL都不是什么技术活(如果你维持这种观点的话,对你的忠告也没有什么意义!))。对于那些验证架构工程师来讲更重要的是用软件方式对testbench debug,两种debug根本就不是一回事。
LZ:说句实话我不想回复这部分内容,但为了防止半瓶水害人,也为了防止有人借此来评价我不了解技术细节,算了!好事就做到底了。
本来想写在整段下面,后来发现错误太多,一句一句写算了!这里最后总结一下为什么你错误这么多吗?
因为你开始就错了,开始就把test case和testbench分开看,所以你后来看所以的后续资料都带了个有色眼镜,最惨绝人寰的是,你在错误的轨道中,还不断地用错误的思路来强化错误,诸位围观者不要以为这会负负得正,只能是技术地狱再往下一层。

rhythm1988说:
很厌烦换马甲出来的行为,是谁我不猜了,但这是阴险小人的行径,只能让人鄙视你
对于这个回帖,我只会毫不留情!
这里把底线划在这里,注册马甲进行攻击的,一律BS加鄙视!
有能耐你就真刀实枪地站出来讲,总想躲在阴暗的角落,不是有健康心理的人的行径。
下次有类似情况,先问侯你家人!

一直在潜水,本帖虽然是验证漫谈,但是rhythm1988通篇只做了3件事:抱怨国内的环境
(I服了you,你用“抱怨”这个词QJ了所有做验证的人,很遗憾的是,也许是这个工作QJ了你,而不是我们所有人。
我写这个帖子,是为了有志于做好验证工作,进而可以有尊严地做个工程师的人提供一个思路。
只有那些整天躲在阴暗角落、苟延残喘的人才会用抱怨这个词!)
,重复10年一本老书的观点
( 这更好笑了,诸位这辈子学的书有几本小于十年的!或者你给大家指导一本新一些的验证基础的书,说说感想?敢不敢?)
,最后又崇拜了一下洋人。
(“崇拜洋人”,我还以为你是义和团呢?
自己从来都是得过且过,还妄想出来装B,装了还想高薪,天底下那有那么好的事情。
群众的眼睛是雪亮的,就你这点能耐,还敢站出来撒野!)
(我先问大家一个问题,所谓70%的工作量在验证上,有谁去认真统计或者找过资料来印证的,做过了的不妨举个手。这个提法大概就是97年提出来的,北电有位老兄在98年DAC,发表一篇论文是关于多芯片复杂协议系统的开发和验证的,其中说到了这个问题,起先他肯定也怀疑过,怎么办?就在项目中统计一下,所以文章中专门列了一个小节来说明统计了那些,结果是什么?说到这大家都可以猜的到结果。说这个往事的目的是希望大家对自己的职业生涯要严谨和认真,做个有自尊的工程师(人),不要信口开河,知道了一点,可以吹出一头大象来)看到rhythm1988的团队成员居然看中文资料,我简直要喷饭了。我和同事都是中国人,但是我们写文档发工作mail都用英文,有时候需要用中文写文档反而写不出来。
(惭愧呀!惭愧!我们的团队只想站着当人,不想趴着当狗!只针对一个人!这话还能拿出来显摆,这不是阿Q吗!

仔细看了rhythm1988的回帖,确实有领导风范,就是说你不行,你的层次不够,具体那不行就要靠自己的慧根了,真是牛人!记得当年打cs的时候,大家都讨论那种枪厉害,突然有人说真正的牛人就是用匕首也能杀人,你们的讨论层次太低,于是被大家无比崇拜,结果打起来却发现水平so so。所以大家得到一个结论,要想做牛人,绝对不能展现出自己的实力,要说些似是而非的话,最重要的是要掩饰自己的观点。比如大家在讨论肉车的时候,明明你非常赞同,但是你也要说:没有肉车只有肉人。
(多年前我也玩CS,后来玩不动了,主要是费时间,体力也更不上了,其实大家都知道CS最吸引人的地方是团队,上面的说法也只能忽悠一下子猪头三而言,明眼人那能上这当啊,这个道理就像是江湖骗术,从古到今都有,为什么还常盛不衰,道理很简单猪头三不是年年都有,而是天天都有!

语言只是工具,vmm只是应用,这样一说,别人就不好意思问你这方面的问题了,即便是你一窍不通别人也无法察觉,对你只有仰视。rhythm1988从业10多年了,应该是管理层了吧。这些人对技术细节并不了解,也不屑于了解,不是说这些人水平低,而是说在这个层次的人关心的是flow和宏观问题。但是这些问题不是engineer关心的,flow追求的终极目标就是同样的任务任何人做出来效果都一样,记住体制中是培养不出牛人的。
(我一开始就说了我绝非牛人、高手!VMM/OVM可以很坦诚地和大家讲,我不是专家,专家是厂商的AE和FAE们。任何人有技术问题都可以和厂商联系,即使是没有厂商的学习者,比如:OVM可以上OVMworld去,是个开放论坛,其实Mentor和Cadence的那些专家特别喜欢回答问题,如果是有质量的问题,他们是绝对欢迎的,比如vi的做法就是先在OVM World中讨论出来,最后写到OVM COOKBOOK里去的。这就是心态开放的好处,三人行必有我师!当然问得都是文档和手册已经讲过的问题或者是一些初级问题,回答就不一定那么积极了,也许是让你再看看书或给个链接等
(既然说到本人的工作内容,就八卦一下。本人不是管理层,那不是兴趣所向,管理的工作繁琐,管理者是我沟通来投钱和投人的,其它的事情我一切帮他搞定的人,到时候就收结果的人,兴趣所在,没办法!
你对管理者和管理工作的理解太肤浅了,幼稚并可笑,不要以为你跟过几个废物点心,就好象看穿了世事一样。
我诚意地奉劝看过本帖的人士,把管理者看成是女(男)朋友,不是对立面,想想你和女(男)朋友还有个互相支持和体谅呢,和管理者不妨也这样。
管理者有其缺点,一定也有优点,人都是这样。这就像是找朋友,如果你实在是容忍对方的缺点,就天涯何处无芳草吧!如果你是个大帅哥,富二代,还怕没有女朋友,工程师的工作是类似的。
最可发一笑的是井底之蛙,总是流着口水,在YY!

不过看到下面hover99的帖子倒是觉得有些新意,特别注册一个id来谈谈我的观点。本人是designer,也懂一点vmm,不过我们soc的验证环境还是verilog的。以我的经验来看,bug往往出现在你认为不会出现bug的地方,让designer自己验自己的design,总觉得不靠谱。其次,hover99所说的只改testcase不该testbench,我觉得过于理想化了,假设设计要求增加错误检测功能需要driver产生error injection,这个时候除了改testbench还有别的方法吗?
(你这个马甲比hover99还差一些,error注入的问题,是要改testbench吗?有没有学过OOP,有没有学过设计模式?错误注入类总的思路采用工厂模式在testbench中调用的,还修改testbench?以你的经验来看,验证这两个字都不知道怎么写的,还来谈验证!
为了防止你还是无中生有,错误注入的问题可以多说两句,整个错误注入的策略是以工厂模式为基础,可能包括其它设计模式,动静结合的复合策略。如何实现好,可以算是一个验证平台实现的亮点!
这么基础的思路你都不了解,还敢说懂一点VMM,VMM的那本书很怀疑有没有认真看啊!
BTW:soc的验证环境是不是verilog或SV不重要,重要的是你们的人才是否能支撑达到验证的那些目的,如果你是Leader,很悬,具体原因看上面一个回复的内容)

hongjian77说:
我已经说了我是designer,在验证上面你怎么挖苦我都无所谓。要不是我们的团队需要做正规的verification,我才懒得注册id呢,没那个闲工夫。hover99,我已经把我的联系方式短消息给你了。如果有兴趣可以和我联系。
vmm除了generator之外有工厂模式吗?我知道error injection可以通过callback来实现,但是事先没有加callback,如何来实现error injection。
没想到对楼主冷嘲热讽了一下,楼主居然气急败坏到要问候我的全家。还好楼主没啥权利,否则我恐怕还有灭门的危险。

rhythm1988说:
 1)不要以为本人在design上就没有资格批评你,本人的设计生涯只比验证要长,是单纯的时间跨度,不是夹杂的时间段哦!要不你也写个设计体会,让我也冷嘲热讽一次,也做一次小人?很不好意思本人是跨界发展!
2)下面回答begineer001的问题也顺便帮你解个疑惑,让你占个便宜,因为你的人格我很鄙夷!
3)小人以退为进的风格不是没见过,哦!你说过很忙的,估计也没时间写设计体会了,又是我多情了。

beginner001说:
还是讨论问题本身吧。
VMM需要callback来实现才能实现error injection,OVM和UVM用factory 可以实现。

rhythm1988说:
你已经到门口了,如果VMM是callback,而ovm是工厂,又没有人规定VMM只能在一个地方用工厂模式,那么你就把工厂套在VMM上面就行了,这就是平台的工作。
其实,VMM的错误注入就是工厂模式,callback只是实现手段而已,只是VMM的错误注入方式,包括OVM的工厂,我还嫌不够灵活,在目前的错误注入的基础上,已经对此进行了创新,在回马甲的帖子中已经写出来策略了,不具体讲,这是吃饭的家伙。已经指了路,有悟性的人只好自己去琢磨,抱歉!
BTW:
有个怀疑希望是错觉,hongjian77是不是你的马甲?因为你们都太关心错误注入的问题,而这个问题我说过了是平台的亮点部分,很考验设计平台人员的综合素质。
任何验证平台只要一天没有在错误注入上有突破,那永远是瘸腿的验证平台。
诸位有没有注意到几个方法学上,在错误注入上都没有说具体,老外也很鬼的,吃饭的家伙哦!
当然是不是马甲,都无所谓啦,我这个帖子是诺亚方舟,但也只给有缘人。

rhythm1988说:
realygc说得很委婉!
关于我的方式和态度问题,我这里最后罗嗦一下。
对于hover99,基于对他在验证上落后比较多的判断,抱着良药苦口利于病,忠言逆耳利于行的心态,用的醍醐灌顶的手段。
在我读书的年代,还有一些老教师是从苏联那个体系来的,学术态度和研究精神无可挑剔,以身做则,写论文就是一个标点符号错误,也会挑出来!我希望在和hover99的互动中,重点在研究心态上给他一些启示,顺便也给围观者一点帮助,即我们可以在具体技术上落后于人,我们一定不能永远在做事情的方式方法上落后于人。如果是这样的话,我们的工作就永远没有尊严可言!
我们是做自然科学领域,不是人文领域,在自然科学领域的做事情的方式方法,其实诸位在大学的校训上都有,各位凭良知自问一下,有没有做到?做到了多少?
如果在讨论中,对他和诸位有不到之处,请多包涵!
对于hongjian77之流的小人行径,我的态度基本上是零容忍,这类型的人在任何技术团队中,都是害群之马,永远都是一颗定时炸弹。这么说并不是讲小人,不可以没有技术水平,而是对于一个团队来讲,小人行为永远都是不合适的,这是两码事情,要分开看。小人可以玩权术、玩阴谋、沽名钓誉、可以当领导,但绝对不适合在任何一个技术团队中生存。
说到老庄,不外儒道释,西方是圣经,本人没有资格评论。
不过,各位如果有空去西藏,或者去过西藏的,有没有注意一个现象:很多佛都是有两个形态,在面对芸芸大众上,永远是慈眉善目的端庄之态,在面对恶魔时,体态相貌比恶魔有过而无不及,只有少数几位可以做到千面不变。
我自问还没有修行到那个程度,对于小人,请不要在我面前晃来晃去,否则我会比你还小人!!!
不要以为躲起来玩阴的,就可以了,跟我玩这套,你还嫩了写 。
再重申一遍,本帖谢绝小人进入!!!

hover99说:
没想到搞成了火药厂。
VMM1.1之前是无法支持OVM那种工厂模式,原因很简单vmm里面一些参数是通过new传递过去的。VMM1.2之后全面引入OVM的东西,这也就是我说VMM比OVM落后的根本原因,更糟糕的是VMM1.2无法向下兼容VMM1.1。工厂模式是OOP固有的,不过实现起来严重依赖于工程师的素质。就像c++和java,理论上讲c++秒杀java,但是从工程上来讲,c++严重依赖于工程师的素质,高效的c++在平庸的工程师手中往往比java效率更低。验证方法学其实就是让大量平庸的工程师能写出高手才能写出的测试平台。副作用就是后台的复杂程度越来越高,潜规则越来越多。
至于楼主说我们的验证方法很落后,这就是我站出来发贴的初衷,不要迷信大公司,大公司的技术往往趋于保守。M公司根本没有所谓自己的一套验证方法学,NV没有,AMD也没有,LSI也没有,IBM或许有,但是IBM半导体现在也没有出彩之处。
恕我寡闻,还没有见到不用random测试的,random测试的最大优点就是在“蒙”,去“蒙”出导致设计出错的条件,通常对于已知条件的测试(比如输入的组合)random要想有效率必须加入反馈技术,否则大量direct测试是必须的(大量的规整的case很容易用脚本产生,效率反而比random要高)。但是,高效的random是否可以替代大量的case这也是不一定的,跟具体项目有关。
另外,我也没说过我们部门所有人都是做验证的,大部分人做设计的同时也要做验证(设计和验证完全分开是效率极低的做法),但是这些人是不可能对验证方法学有很深入的了解,验证平台是必须屏蔽实现细节的,有些公司甚至使用脚本来产生测试向量。
最后,和楼主说两句。楼主表现得太强势了,面对一个人,你肯能会产生上,中,下三种判断,不过你潜意识的会使用最差的判断。比如说,我说验证的目的不是为了找bug而是证明设计是在多大程度上是可靠的。你潜意识里马上把我当作连验证和DFT都搞不清的菜鸟。又比如,我说我们部门验证的核心人员只有两个,你马上把其余人当成笨蛋。我又说以前的项目有大量的case,你又想到有大量的case都是因为用的是direct测试甚至连random seed都没接触过。单纯看你的推断是合理的,但是联系起来看,你会潜意识的对其他人作出最差的判断。从不如自己的人身上也能学到东西,这样的人才是高人。
我的一个观点,未来的趋势是testbench和test case分离,写testbench的人可以不负责建立test case。楼主说这是错误的,我倒是很像听听楼主的见解。

rhythm1988说:
hover99,感觉你终于有那么一丝丝地悟了,不枉我费尽口舌地讲啊讲啊,待续。。。

呵呵!难得有你这样的老家伙出来当炮灰,你看hongjian77多“睿智”啊,直接马甲,想占个便宜就走,这是老江湖的做法,只是唉。。。还是那句话,出来混,迟早是要还的。
以我的感觉而言,实际上是喜欢你的执着劲,屡败屡战,还勇敢地继续站出来。
对我而言,有教无类,因才施教。
假以时日,给你适当地引导,你能在这个领域中有所作为的。
为什么对你下重手呢?有个理论叫“空杯理论”,你是有经验的人士,属于杯子不空的那种(实际上,我也是!真正不空的,就是那些飘过去的)
杯子不空呢也不是什么大事,只是你一直不愿意把杯子倒空,我只好帮帮你喽。
不要以为我是落井下石,我是想给你一条绳子,想不想上岸,就是你的事情了。
顺便说一下,你们现在的做法实际上是国内十年前的做法,给你一个佐证,因为你是“土洋结合”,可能听过这个故事,十年前,有拨人用TCL也搞了个验证平台出来,那时候他们就搞了随机。
如果你知道这码事,就不会认为我有“你又想到有大量的case都是因为用的是direct测试甚至连random seed都没接触过”之类的想法了。
不知道他们做法和你们现在是否很类似
实际上随机并不新鲜,SV把随机进化到受约束的随机了。
闲话说完了,还是进入正题吧。
由于没有太多时间一一回复他的观点,那么,我就只说几个重点问题:

其一,关于基础的问题,即关于“验证的目的”问题。对于原则性的问题,如果有人要修改,我一定是讨论到底的。不为别的,这个问题(概念)是我们的起点,我们整个验证工作的基石,不能有半点偏差和含糊,“差之毫厘,谬以千里”。
唉。。。我在8楼的回帖中,仅仅是希望你来解释一下,还写了很多可能来推测你具体的想法,并且很希望你写点东西来指导我,并且我的论点和论据都全了,自认为写出了自己的意思!关乎“菜鸟”何事?要不我是“菜鸟”怎样?心理上能平衡一点不?能真正focus到问题的本身上了吗?
真正郁闷的是11楼又出来说了一次可靠性这个问题,并且说这个问题之前,海阔天空,云遮雾绕地说了一堆工程什么的,可怜我这样的老家伙,脑子已经不灵光了,楞是没看懂,这些话之间有什么直接联系。
BTW:这次还没看懂!

其二,关于随机和testcase等问题的解释,我的理论来源主要来自于《SystemVerilog for verification》(第二版)这本书的第一章的图1-5,需要注意到的是你也了解验证的出口是功能覆盖率,所以我才用这张图。但为什么你们已经到了VMM还坚持原来的做法,我就搞不明白了。其实还想说具体点,算了,只送四个字:“不破不立”。

其三,关于大公司保守和迷信等问题,以我所了解的EDA用户会议,DAC等业界会议而言,保守的一定有,但不保守的很多,从IC公司在欧美研究所的论文看,保守的很少很少。当我们决定从事验证这个行业的时候,是考虑山中无老虎呢?还是?这个问题不多说了。

其四,关于工厂模式的应用,在20楼回答beginner001中已经点过了,这里再多说两句,工厂模式也是应用,关键在OOP的那些原则,依据那些原则,方法学没有的我就自己做上去。其实你说到了方法学、模式、C++/java等等,本来想多讲一点,为了防止更多地曲解,我还是不讲了。
顺便说点题外话,我是按照《Computer Architecture:A Quantiative Approach》那本书中提到的architect的要求来规划自己的团队,所以在我的团队中,不会呆板地依据方法学,唯一不破的可能只有OOP的原则,其它的都是技术手段。现在提出来给你参考。

最后,忍不住在回帖中又写了点!还有一些你对我的猜测,只能由你了。
还有,你能不能把贵公司的大名站内短信给我,回复了你这么多,没有功劳也有苦劳吧!这个要求不过分吧!

五月一说:
“在testbench完成之后,需要改变的只是test case而不是testbench。我们用oop技术去屏蔽验证平台的实现细节,只开放最顶层的部分给test case,就像操作系统向开发者提供api一样。我们把写test case的人看做是验证平台的用户。我们部门20多人精通验证的只有2个人,但是却可以同时支持3个全新项目的验证工作。而这两个人又在很短的时间内积累了3种不同应用的验证架构经验。如果testbench和test case由同一个人完成,那么当他用1个月的时间写完testbench之后,又要花费3个月去建test case来验证。如果很快有第二版出来,那么他又不得不重复上面的工作,试想在这种情况下,验证工程师除了对他所验证的模块更熟悉之外,在验证方法学上有学到了什么?更可悲的是,当他对设计熟悉到一定程度的时候,很可能会把他熟悉的这部分交给他设计,然后又找一个新人给他做验证,如此循环。”
对你说的testcase 和testbench的区别很感兴趣,能详细说下区别么?让我们拿一个实际模块级的项目来说吧,spec都是在不断的更新,在spec v0.1时,design and verification就开始同步工作了。可能到spec v0.5时,验证工作已经按照现有的spec完成了,搭建好了平台,跑完了所有的testcase,但这个时候由于trade-off,designer和A&A讨论后,发现design要修改,这时验证的平台已经不满足要求了,则需要很大的精力去修改。我一直在考虑这个事情,如何才能在验证的初期阶段就尽可能的避免这种情况的出现(我觉得现实项目中很多)?我的这个问题是不是可以理解为如何搭建一个健壮的testbench?
对于testcase而言,可以是源于function coverage的,的确run testcase会花费很多时间,但是我觉得交给其他人跑可能效果也不好,因为个人理解对于验证而言,不止是发现bug,还要协助定位bug。如果交给新人做,或者对这个模块了解很小的,可能从无法发现更深的bug。想听听你的见解。
另外声明: 出于每个人的见解和环境不一样,不参加任何技术外的争论~

rhythm1988说:
写点东西讨论讨论前面的几个问题:
1)关于验证的目的的问题,迄今为止只有一个目的“设计是否满足了spec”,既不是可靠性,也不是bug,从《writing testbenches》第一个版本迄今,没有任何一本书修改了这个概念。
如果哪位知道这个目的修改了,记得通知我学习学习。
关于这个目的可以稍微多讲一点,可靠性就有点不着边际了,找bug呢有点靠谱,但要分清楚bug是手段,不是目的,手段和目的混淆了,团队容易舍本逐末,这个应该不难理解。

2)36#的spec修改问题
首先,理论上spec的修改应该有版本的概念,当然实际上没有那么严格,spec的修改的确是常事,这是现实情况,不扩展讲团队怎么解决这个问题,但也不能忘了写spec是一个有艺术的活,做个类比吧,基本上就是孙悟空给唐僧画的圈圈。
其次,我们聚焦在验证团队如何应对spec的修改,spec都修改了,testbench没有道理不修改(modify),其实我很想从讲各种书上看到说不用modify这样的字眼,不过很遗憾,暂时没有!
再次,既然testbench的修改是不可以避免的,那也不是随心所欲,业界引入OOP等等,有一个目的是使修改量最少,当然不是单纯针对spec的演进问题。
最后,如何使修改量最少呢?使用方法学是个很好的手段,但更基本的是OOP的五大原则,特别是OCP原则(请各位有兴趣去看《敏捷软件开发》的相关章节,有详细的解释),具体的方法在《设计模式》这本书里面。
结论:针对多变的spec的验证场景,基于OOP的原则,合理搭配设计模式,把修改合理开放出来。
没有更多的东西!进一步的内容在你自己的实践中。

3)关于callback的问题(最后一次谈关于方法学先进与否的问题)
单纯地说callback不好或者好,不先进或者先进,那是藐视业界专家们的智慧,可以设想在是否使用callback的问题上,一定有个非常激烈的讨论,这是可以想象的。
callback破坏了类的内聚性,把修改交给了一个函数去实现(请不要和重写等等混淆了),可以说是OOP的大忌,但带来了灵活性,鱼和熊掌,怎么办?
这时候就有“专家”的作用,依据软件的规模,应用场景,包括其它限制条件,来决定是否使用。即使我用VMM的方法学,也可以绕过callback不使用,而达到callback的所有目的,这个权衡就需要“专家”,不是EDA的专家,而是验证团队中的专家。
而“专家”不能说拍脑袋说用就用,而是指定一个完整的使用策略,制定使用规则,把相关的不利因素限制在最小范围之内。

4)关于学习路线问题
依据业界的惯例,前十年都是基础工程师阶段,十年级别的出来做presentation,都基本不够格,二十年的都要好好地介绍一下自己的简历才可以。
所以,像我们这种人还要什么路线,什么都可以,找一个团队,随便什么语言都先好好吃个三五年,比如SV的communication机制,你学了三种,再想想为什么是这三种,其他的进程和线程通讯机制为什么不放进来,由点及面,这东西多了去了。
技术这条道路没有“九还丹”什么的,吃了就直接打通任督二脉,百毒不侵什么的。当然这么说并不是没有什么加速的手段,比如:良好的团队氛围,专家型领导的指导等等,但这些都是次要的,辅助的,这些只是让人少走弯路,为了做事情的方便(一般而言,走了弯路也不是坏事!)
关键还是在于自己,“知行合一”!

总而言之:
我和各位不在同一个环境中,我对各位的自身条件,团队情况,历史条件等等等等客观因素无从了解,说句实话也没有条件和义务去了解,所以我没有办法就具体问题来讨论,只能虚头八脑地讲喽!希望大家能理解!

在VIM里实现Verilog和System verilog的语法高亮


作者  Amit Sethi
description:
This script extends Verilog syntax highlighting, which comes along with Vim 6.3, and adds SystemVerilog stuff to it. It will recognize Verilog and SystemVerilog syntax in *.v, *.vh and *.sv files. The new syntax is named as "verilog_systemverilog". If your scripts are loaded correctly, you should see this syntax name when you execute the Vim command ":set syntax?" in your Verilog/SystemVerilog files.
这个插件实现了对*.v, *.vh and *.sv 文件的语法高亮支持。
 
install details
1. Untar the package verilog_systemverilog.tar.gz
2. Copy verilog_systemverilog/ftdetect/verilog_systemverilog.vim to your $HOME/.vim/ftdetect directory.
3. Copy verilog_systemverilog/syntax/verilog_systemverilog.vim to your $HOME/.vim/syntax directory.
4. Copy verilog_systemverilog/indent/* to your $HOME/.vim/indent directory.
Enjoy!

Windos下的vim一样适用。

IC设计流程 ZZ


原地址:http://www.cnblogs.com/jyaray/archive/2010/06/04/1751781.html

IC设计流程

今天彻底无语了,一个学弟问我,从Schematic到GDSⅡ的流程是什么,我竟然答之,仿真、综合、布局布线……事后,觉得不太对,查了一下资料,那里是不太对啊,简直是一点都不对,暴寒啊,也许是自己真是好久没做IC方面的东西了。
一般的IC设计流程可以分为两大类:全定制和半定制,这里我换一种方式来说明。
    1.1 RTLGDSⅡ的设计流程: 
                   这个可以理解成半定制的设计流程,一般用来设计数字电路。
                   整个流程如下(左侧为流程,右侧为用到的相应EDA工具):
                   一个完整的半定制设计流程应该是:RTL代码输入、功能仿真、逻辑综合、形式验证、时序/功耗/噪声分析,布局布线(物理综合)、版图验证。
                   至于FPGA设计,开发起来更加简单,结合第三方软件(像Modelsim和Synplify Pro),两大FPGA厂商Altera和Xilinx自带的QuartusⅡ和ISE开发平台完全可以应付与之有关的开发。
                   整个完整的流程可以分为前端和后端两部分,前端的流程图如下:
 
                   前端的主要任务是将HDL语言描述的电路进行仿真验证、综合和时序分析,最后转换成基于工艺库的门级网表。
后端的流程图如下,这也就是netlistGDSⅡ的设计流程
 
后端的主要任务是:
(1)将netlist实现成版图(自动布局布线APR)
(2)证明所实现的版图满足时序要求、符合设计规则(DRC)、layout与netlist一致(LVS)。
(3)提取版图的延时信息(RC Extract),供前端做post-layout 仿真。
         1.2SchematicGDSⅡ的设计流程:
                   这个可以理解成全定制的设计流程,一般用于设计模拟电路和数模混合电路。
                   整个流程如下(左侧为流程,右侧为用到的相应EDA工具):
 
                   一个完整的全定制设计流程应该是:电路图输入、电路仿真、版图设计、版图验证(DRC和LVS)、寄生参数提取、后仿真、流片。