登录注册   忘记密码

对于超大规模的集成电路,后端是如何做LVS和DRC验证的?

陆地上的橙子 | 2017/8/2 9:48:42

最近在做几个小电路(环形振荡器,需要流片)的后端部分,只需要手动写好netlist文件,在calibre里跑一下,手动debug。但很好奇一点,对于一些超大规模集成电路,比如CPU,人工进行检查是肯定不可能的,那如何保证LVS能通过,需要什么样的EDA软件?


  • akkstiv  |   2017/8/3 16:46:43

    有幸做过一次较大规模的混合Layout来说一下..

    首先.. 短答案是不保证... 只能用各种方法尽量保证.

    基本上这类大规模数字电路, 都是模块化写好/ 测试好, 然后再放到一起来综合的.  综合的步骤叫做"Hierarchical " (继承性? 谁来翻译一下...)

    打个比方, 我要做一个处理器, 那么蓝图画出来是这样的:

    (瞎画的, 谁敢较真我打谁! )

    那么工程师A就先开始画运算器部分..

    你不能保证运算器DRC/LVS clean, 总能保证加减法部分的DRC/LVS Clean吧?

    然后, IC Compiler有一套继承的方案, 就是你可以先把加减法的内部结构都画好, 然后检查到没有错误, 之后, 由底层的GDS文件生成FRAM 文件.

    这个FRAM文件就类似于一个占位的东西, 可以规定它的精细程度. 比如说最最粗犷的是"这一个方框内我承包了! 别的连线别进来! " 类似这样:

    白色方框是接口们, 黑线是导线. 瞎画的.

    这样, 在第一层, 工程师只需要做: 验证加减法运算器等是好用的,
    在第二层, 工程师们只需要把已经验证好的模块扔到高级的GDS文件里面, 然后就能保证模块内部不会出错. 这样工作量就减少到只需要验证模块间 不出错, 会容易很多.

    然后就这么一层一层迭代下去即可. 这样, 工作量就变为:
    1. 底层模块(一般都是重复利用率极高的模块, 工作量不大)
    2. 每个模块间的连线不出错
    3. 顶层模块间连线不出错
    4, 收工.

    实际做起来, 还会有各种比如Hierarchical 等级之间的冲突, 比如说我乘除法的继承等级比运算器还要高一级怎么办 之类的, 以及FRAM 文件精度之类的微调.  


  • Stark  |   2017/8/14 9:18:16

    现在数字电路是使用place&routing的工具来做的,基本上订好verilog的算法,然后设定好引脚的位置,layout是由电脑自动生成的,所以不会有drc和lvs问题。模拟电路或者大型数字电路不可避免需要手工绘制版图,那也是由一些类似invertor这样基本的器件画起的,而且在话基本元件的时候还要想清楚和其他元件怎么放在一起,也能过drc,怎么能把整体面积画到最小。这些都需要有一定的经验。所以在做大型电路的时候,其事一开始的元器件是最难画的,而且要经过反复推敲。总之集成电路版图是一门艺术,值得投入精力去研究。