相信几乎每一位芯片设计从业人士都知道GDS文件是用来做什么的,特别是模拟版图工程师或者后端设计工程师差不多每天每时每刻都要跟它打交道,但它究竟是什么,它是如何演变而来的,估计就很少有人去了解。这里也没有兴趣以“茴香豆的茴有几种写法”的态度来做学究,而是以芯片设计工程师的视角简明扼要地讲清楚GDS文件的进化过程,其中会重点说明跟当下芯片设计关系紧密的几个点。
– 1971年,美国 Calma 公司推出了第一代GDS(Graphic Data System)格式,初版 GDS 主要是为了驱动早期的光绘机,数据结构非常扁平原始,仅有Layer 的概念,且受到当时计算机性能的严格限制,几何表达能力有限,且对复杂版图的支持极差;但先比之前“制版工人用刻刀在一张名为‘红膜(Peel-coat)’的双层塑料纸上把图形一块块刻出来”这种更加原始直观的“物理实现”模式已经是有了划时代的进步(你是不是也顺便发现所谓“版工”这一称谓最早的出处呢:)),该格式应该早已灭绝,没有任何现代EDA工具或代工厂还在使用它。
– 1978年,Calma 公司发布了第二代的数据格式,这就是至今为大家所熟知的 GDSII。GDSII 格式最核心的变化有两点:
1,引入了现代版图设计中最重要的概念——层级结构(Hierarchical Structure),它允许工程师定义独立的单元(Cell),并通过 SREF(结构引用)和 AREF(阵列引用)在顶层反复调用;
2,在layer的基础之上引入了datatype的概念,对层次定义进行了极大的扩展。
得益于这两条核心架构扩展,GDSII格式近50年来还在业内被普遍接受并使用,在过去技术不断迭代,标准时时更新的几十年里也不可谓不是一个奇迹。
– 在GDSII逐步统一集成电路版图数据格式的80年代,它主要经历了两次官方标准更新(GDSII Release 6.0 & 7.0),要点是规范了核心记录类型,以及放宽或移除了一些早期版本的结构性物理限制(例如放宽了多边形顶点的最大数量约束)
– 到了上世纪90年代,GDSII所有权辗转被Cadence收入囊中,自此之后,Cadence 对 GDSII 标准采取了“不更新、不维护”的放任态度,于是GDSII 的官方标准文档永远定格在了1989 年的 Release 7.0。但在摩尔定律的推动下,版图数据格式需求一直在持续急剧增在,业内主流EDA厂商在7.0协议的基础上对GDSII做了扩展,主要如下:

相信还有同行曾经由于cell name太长导致的一些LVS问题,正好可以对照上表看看是不是由于早期的标准限制而导致。
– 现在工艺越来越复杂,芯片越做越大,但由于GDSII底层框架近40年未作更新,由此而来的问题也越来越明显:文件体积太过庞大,读写速度太慢(跟GDS相伴而生的stream 这个概念也真是恰如其分),2004年SEMI(国际半导体产业协会)在 2004 年推出了OASIS(Open Artwork System Interchange Standard)格式标准,自然是更快,更强,体积更小…..,
也许有一天,我们也会不记得GDSII是什么,就如第一代GDS格式一样也会在业界灭绝,但不管标准如何演进,底层逻辑其实都是一样的,比如:
– 要理解你肉眼可见的版图数据库(OA database)跟二进制的GDSII/OASIS数据有时并不是完全等效的。我们经常会碰到LVS/DRC里报出的错误完全跟版图数据对不起来,这时你就要看看你的GDSII/OASIS数据到底是什么样子,是不是由于用错了layermap,又或者做出了错误的输出设置,导致送到DRC/LVS那边的GDSII数据跟你的版图图形已经发出了某种变异;我敢打赌100块人民币:应该有超过50%的模拟版图工程师是搞不清楚这两者之间的差别,或者他们从来没有试着去拿一份自己“定制”的layermap去产生“非默认设置”的GDSII文件过。当然,我很乐意输掉这个100块。

– 由于GDSII文件的限制,版图数据库里存在的某些东西,在GDSII里应该是再也找不到了,比如pcell,所以有些数据的转化在某种视角来看是等效的,但在另一种视角下也许就不是那么一回事了。试想一下,为什么有时候我们不仅仅要备份GDSII文件,还要整理一份比较清爽的OA database。
联系与交流
转载请注明出处;如需探讨文章内容,欢迎发送邮件至:
(点击链接将自动在邮件主题中填入本文标题)