作者:香水百合-2012 | 来源:互联网 | 2023-09-02 08:45
这是IC君的第26篇原创文章(同步于公众号icstudy)在集成电路IC项目的执行过程中,时间往往是一个奢侈品。为了赶上tapeout的schedule,IC工程师们(包括IC君)
这是IC君的第26篇原创文章 (同步于公众号 icstudy )
在集成电路IC项目的执行过程中,时间往往是一个奢侈品。为了赶上tapeout的schedule,IC工程师们(包括IC君)天天加班加点做着设计和验证,最近IC君因为长期加班又胖了3斤。
当IC设计工程师将需要的电路模块做完之后,就进入了漫长的仿真和验证之路,可以说仿真和验证占据了整个项目至少70%以上的时间。
只有经过充分的仿真和验证,抓出足够多的bug,大家才能放心的tapeout出去。有时候抓的bug少了,项目leader就觉得很奇怪,总觉得这个阶段应该抓出不少bug。
如果临近tapeout,仿真和验证还没做完,那就会影响项目的schedule。
既然仿真和验证所占的时间这么长,那我们有没有什么办法来提高仿真和验证的效率呢?IC君就自己的工作经验,来粗浅的谈一谈,也希望各位有什么好的经验留言分享。
1
首先,IC君将所做的仿真分为2大类:逻辑仿真 和 电路仿真。
逻辑仿真主要针对行为级、RTL级和门级网表的数字电路。
而电路仿真主要是针对spice格式的网表,如一些模拟电路、数模混合电路、SOC系统等;
对于逻辑仿真而言,提高仿真和验证的效率有如下几种:
1 filelist去掉不必要的文档,减少编译时间;
2 减少dump的信号,只dump需要模块的波形;
3 在testbench加入自动检查的语句:
这样可以在仿真跑完后,快速检查log文件来确定设计的正确性;比如信号之间的相对关系、信号的输出等。
4 简化电路:
比如在设计中用到一个很大的SRAM模块,如果把SRAM的电路都包含进去,仿真时间就会非常长。可以保留SRAM的一小部分,仿真时只会操作到SRAM的保留部分。当然简化电路的前提是被简化的电路模块已经经过充分验证了。 5与参考设计作比较:
快tapeout的时候,突然因为某些原因,不得不修改电路。改完之后也来不及验证所有case,可以与前一版的设计作比较,就能快速定位出哪些改错的地方。匆匆忙忙改的电路是最容易出bug的!
6 欢迎大家补充啊!
对于电路仿真而言,提高仿真和验证的效率有如下几种:
- 采用更快的仿真器。
工欲利其事,必先善其器。spice格式的仿真器有hspice,finesim,hsim等。通常情况下:
仿真时间: hspice> finesim > hsim
仿真精度: hspice>=finesim> hsim
很小的模块,这3者的速度都差不多。比较大的模块,一般finesim和hsim速度是hspice的好几倍。而且finesim和hsim都可以在速度和精度之间进行折衷:
另外 finesim还支持 并行仿真,只要cpu足够多,仿真速度就可以足够快。
2. 保存电路的某个状态给后续仿真用。
比如整个芯片需要reset过程或者一个高压setup过程,那就可以利用hsim run完这个过程,并保存.ic文件。接下来就可以用hspice .include “xx.ic”,仿真后续过程,节省了冗长的建立时间。
3. 加入自动检查的语句,提高仿真验证的效率。
如hspice 支持的vector 比较语句:
.vec “xx.vec”
其中xx.vec的内容如下:
这样就可以在特定的时间段比较输出的结果是不是我们预期的,并在log文件中记录。
如finesim的信号的setup 时间检查:
如hsim的信号的setup 时间检查:
4.简化电路
可以去掉不必要的电路,减少仿真时间。比如当你要仿真的模块中,A功能是操作SRAM的,B功能不会用到。那仿真A情况时可以用包含SRAM的网表,仿真B情况时用不包含SRAM的网表;网表的处理可以参考Tcl脚本在IC设计中的应用。
一些复杂的模拟电路和特殊电路,可以用verilogA model代替,上面提到的hspice仿真器都是支持verilogA model的。
5.欢迎大家补充啊!