浅谈模拟混合信号设计验证之:DV的鬼知道经历了sen mo
时间:12-12
整理:3721RD
点击:
本人小土 不知道怎么在这里的编辑更好的图片和格式。。。欢迎关注微信公众号: “模拟混合信号设计验证” (yaliDV) 和 “求是缘半导体”。来查看更漂亮的格式。。。
模拟混合信号设计验证?嘿,不就是一个跑仿真的嘛?刚毕业的小孩儿就可以做:搭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的“鬼知道经历了sen mo”:就让咱们借助于运动员小盆友的萌照来娱乐一把吧!
模拟混合信号设计验证?嘿,不就是一个跑仿真的嘛?刚毕业的小孩儿就可以做:搭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的“鬼知道经历了sen mo”:就让咱们借助于运动员小盆友的萌照来娱乐一把吧!