上文从 DV 在老板层和员工层两方面做出了分析。跃跃欲动的准 DVer 又需要经过哪些历练呢?小白有何快速入门手册?在自动化征程上的硅农有着什么样的码农之路呢?DV 的八边形法则是啥?DV 又是什么四不像呢?且听此文介绍。
模拟混合信号设计验证?嘿,不就是一个跑仿真的嘛?刚毕业的小孩儿就可以做:搭 Test Bench,跑仿真,看结果。可是真的落到实地,刚毕业的小孩儿准备了什么才能跑起仿真来?具体每步怎么做?小白怎么入手?如果一开始就是大量的英文帮助文档,这是多么地打击一个初学者的热情哈?嘿嘿,这是有解决办法的。有一本很好的入门书,浙江大学何乐年老师、王忆大牛编著的《模拟集成电路设计与仿真》(此处必须的广告植入哦!)。里面有最基本的模拟电路概念,例如放大器,数模转换等;更是有模拟集成电路的仿真技术,例如怎么跑瞬态、怎么看增益 / 相位裕度,怎么看待噪声等。如果能把这本书好好研究一遍,恭喜你,已经真的进到 DV 的门槛里面来了。
好了,终于一个仿真搞定了,接下来却发现是大量的工艺电压温度(PVT)组合仿真;大量的大量的仿真。提交仿真,等待仿真,后处理结果。一些工作看着简单,但是谁知道提交上去的仿真,会不会 netlist 生不成啊,会不会中途仿真空间满了呢,又有的时候会不会仿真莫名其妙地就 Crash 了呢。好不容易有了大量仿真的结果,看那么多的波形,那么多的数据,一个个点开来又是超级的多。人肉工作最是累累累!这时候,你就会开始想着怎么偷懒了,如何在知道有大量仿真的情况下高效的工作呢,怎么能省事呢。恭喜你,因为你马上就进入了学习 Code 的阶段。
然而代码的世界,是一个侯门一入深似海的世界。
首先你发现用实际的电路仿真来建立 TB,建立 Checker,有点太慢了。于是你开始把一部分电路做成模型;开始的时候是在电路里用元器件做模型;后来写上代码的你喜欢用 Verilog/VerilogA/VerilogAMS 写;开始时候模型写的很简单,后来发现关心的东西多的时候,可以写的很复杂;渐渐的你喜欢上了 Wreal,搞得和实际的差不多。抑或你研究透了 table model 啥的,搞得更高大上一些。但是可能做的模型太复杂了,速度其实并没有优化多少,你又回过头来开始选择合适的模型:开始不成熟时候用简单的就行;愈发准确时候就用复杂的。“迭代”这个词语,你越发的知道其中的道理。
再后来,你已经在大量的仿真工作中,逐渐有点不喜欢一个一个点击的 ADE 了;于是你开始试图放弃 GUI 环境,通过代码来解决问题了;于是你开始向 EDA 跟班学习了。什么 Shell 啊,Skill 啊,以及里面的 Ocean 啥的,开始进入你的世界,脱离了经常在服务器负荷比较重的时候、点击啥就发白、响应半天的 GUI 界面;突然之间你会有一种飞起来的感觉;通过两只手敲击代码就能跑起来仿真,你会想着再也去繁琐的界面点点点了;当然了,事实证明后面还是有些陌生的工作得跑回去用通俗易懂的 GUI 界面。
由于知道有大量的仿真会等着自己来完成;你更注重于 Stim 和 Checker 的设计了。能 Calculator 提取出来的后处理数据固然不错,但是能够和芯片不停交互的 Checker 更是让人喜欢;抓数据,设置 Limit 范围;这样子大量仿真之后立马知道结果,多好啊。另外,为了大量仿真能够快速完成,你在尽可能的数字化,模拟信号数字化;Checker 数字化;等等,极尽全力就是为了加速。
通过 Checker,制造了大量的仿真数据。Perl 就欣然跑上舞台了。大量的文本处理,从来就离不开 Perl。想什么东西能够自动化生成,想什么结果能够规范的处理好,就来学习 Perl 吧。再后来,发现 Python 也不错,语法清晰简单,读起来不能说是朗朗上口、却也意思明了、一点就通;维护起来也更容易一些;所以一些人就放弃了有时候会感觉上有点复杂的 Perl,开始了追逐 Python 的道路。当然了,有了数据,Excel 也扮演了很重要的角色,VB/VBA 也开始进入大家的眼球。就是为了方便,大家纷纷在寻找着各种途径。
数字化程度越高,你也慢慢关心起来数字验证了。UVM,Coverage,Assert 等观念也开始进入视线。而 System Verilog 作为一个基础的语言工具,你又得学起来了;什么 Class,什么 Random,有些东西本来 Verilog 要半天才能搞定;System Verilog 几句话就行了。当然了,喜欢高级语言是没有尽头的,因为 SystemVerilog 上面还有 System C,C;等等等等;一个好好的硅农,正在像码农的方向飞速奔跑着。
来来来,看看这个示意图吧:简笔画本身依然是网络上摘录的,我这里就是负责它的组合拼凑,来赋予它思想和内涵的。
长途的码农道路奔跑的差不多的时候,终于整个 Flow 看起来已经建立的不错了。结果打开大量的仿真结果一看,竟然好多都没有跑完,仿真不收敛了;又或者是一些仿真结果,怎么看着都觉得不对劲。你又开始拿起来仿真器的原理和设置来研究了。牛顿迭代,仿真精度设置,Connection Rule,gmin 等乱七八糟的参数,让你开始眼花缭乱,原来里面的学问这么多;你开始下手来调试一些参数,摸索着会有什么样的变化。
发现点电路的 Bug,自然是 DV 的任务了。你以前是芯片当做黑盒子测试;慢慢地随着 Checker 的交互设计,你也加入了一些内部信号,使得一旦发现芯片有问题、咱就不玩了、就停掉仿真就可以了,不再继续跑了。再高的境界就是如果发现了 Bug,自己也深入里头去 Debug。这个时候发现 Design 的知识又很重要了,又回过头来开始和 Design 蹲班看电路。
随着芯片规模的增大,随着更多的人加入 DV 的工作;你发现你可以开始只负责 DV 的大环境平台。不再写具体的 TB,因为有人可以做更具体的工作了。然而,千万不要以为这样子就轻松了,因为 DV 的大环境事儿更多:不收敛了,有人来找你;模型有问题了,有人来找你;Golden 的 Task 在具体 TB 应用时候有问题了,又有人来找你。你也在揣摩着怎么在一代、二代、三代、n 代产品中,Reuse 的越来越高。至于什么“第一代叫王菲,第二代叫汪小菲”之类的信号变异等,我们大平台把 Alias 做好了,你爱叫啥名字就叫啥名字吧;内核保持不变就行了;没事别再为这些事情费脑子了。
经历过了撰写维护 DV 的大环境平台,你更是在逐步地累积经验和教训。慢慢的你会发现其实更具有挑战的事情,竟然是写 DV Plan。怎么写 DV plan,如何设置优先级,明白哪些必须要测试,哪些可以放后面。这些最根本的就是客户的需求,你需要和 System 好好沟通,挖掘出来客户到底喜欢啥。针对哪些客户有哪些不同的侧重点;客户到底希望什么时候拿到芯片,有哪些是他们的底线、肯定得满足等。抑或是 DV 的 Task 具体由哪些人做更好。哪些人擅长于这部分的测试,而另外一些人可能更有其他优势。总之是,项目的 Schedule 一如既往的紧之又紧,如何在有限的时间、有限的人力、有限的机器下面,发挥出来最大的价值,拉住客户,赢得市场,又成为了需要精细思考、谨慎布置的事情。
终于的,你也总结了一个 DV 的八边形法则:仿真速度(Sim Speed),仿真精度(Sim Accuracy),仿真空间(Sim Space);自动化程度(AutoMatic),长短期效率(Efficiency),复用程度(Reusable) ,优先程度(Priority)和覆盖率(Coverage)。各方利益相互冲突,分分秒秒相互撕扯,心里经常有无数不停打架的小人人,在叮叮咚咚地乱说话;而流片之前更是不断地有万千的马飞过!参见我画的图:这次终于不用用网络图片了;这些个拔河的小朋友们咱们还是可以纯手工鼓捣出来的!
总之,要成为一个模拟混合信号设计验证(DV)工程师,其实也很容易;要做好一个 DV,其实也不容易。等这些整的差不多明白的时候,你发现你已经和 Analog Design 有很大一部分交集了,又和 EDA 似乎有着千丝万缕的联系,然而也略知了一些 Digital DV 的套路;在写 DV Plan、设置优先级之类的时候,你也学习到了 System 的精髓。你终于发现自己开始四不像了,恭喜你,这就是 Analog/Mix-signal DV 的样子;这就是 DV 的“鬼知道经历了什么”:就让咱们借助于运动员小盆友的萌照来娱乐一把吧!
与非网原创内容,不经允许,不得转载!
系列汇总: