使用Calibre對GDS進行數(shù)據(jù)遍歷
掃描二維碼
隨時隨地手機看文章
在芯片的GDS數(shù)據(jù)里,使用Calibre對數(shù)據(jù)進行處理是非常常見的操作,但是GDS是一種和常規(guī)設計結構不太一樣的一種數(shù)據(jù),這里,通過這個小小的科普文章,一起看看怎么樣在GDS里邊做數(shù)據(jù)漫游吧!閑言少敘,ICer GO!
Verilog-like 數(shù)據(jù)結構
在芯片設計的世界中常用的數(shù)據(jù)結構就是verilog類型的了,通常是由module(設計)和instance(例化)組成,這樣通過對module的不斷instance,就可以形成一個層次化(hierarchy)的完整設計,在EDA工具里邊,不同家對verilog有自己的獨特的命名定義
- S家
- module:design/ref_name
- instance:cell/leaf_cell
- C家
- module:cell/ref_lib_cell_name
- instance:insts/Hinsts
基本在工作中,用上述的名詞,就可以完成對verilog-like的數(shù)據(jù)進行準確的描述。
GDS-like 數(shù)據(jù)結構
對于GDS數(shù)據(jù),由于其添加了很多的物理信息,所以這個數(shù)據(jù)結構和verilog-like相比,有其特殊性,基于常用的Calibre系列工具,它的數(shù)據(jù)命名大概類似如下:
基礎元素(base element)
- top-cell:當前GDS的頂層設計(top-design),類似verilog里的current_design
- cell:數(shù)據(jù)庫所有的設計,相當于verilog里的module,cell本層可以包含下列的實際結構,可以簡單的理解為leaf-instance
- poly/wire:指定cell下的metal 類型,可以是任何層的物理圖案,會出現(xiàn)在最后的wafer上,PS:需要mask的支持
- text:指定cell下的text,只是字符描述,不會出現(xiàn)在最后的wafer上,PS:常見的芯片logo等字符,其實是用某一層的polygon實現(xiàn)的
- Via:一個完整的VIA是包含cut、upper和lower layer的,這個不是單純的metal/text,所以在GDS里邊,這個被歸為cell*
- ref:指定cell所使用的設計,
- 如果只有名稱,那么可以理解為verilog里的module
- 如果具備了名稱和物理信息,那么可以理解為verilog里的instance。
- 支持嵌套調用
- 不支持hierarchy design(ref)
可以看到,整個GDS的主要結構還是仿效verilog-like,但是由于都是基于實際的物理設計,所以對于instance和hierarchy做了一些簡化處理。cell/ref可能靈活切換,取決于用戶看數(shù)據(jù)的層級/角度。
- Cell/ref
- Poly/text

具備了上述的數(shù)據(jù)定義知識,用戶就可以通過calibredrv里邊提供的命令完成數(shù)據(jù)的抽取和遍歷了。
注意:calibredrv命令默認返回的信息都是去重的(unique ),除非特殊聲明
GDS 數(shù)據(jù)遍歷
Calibre的家族可謂博大精深,根據(jù)用途,一般可以分為兩類
- 對GDS的查看(GUI)和數(shù)據(jù)遍歷:calibredrv系統(tǒng),啟動命令:calibredrv
- 對GDS的進行靜態(tài)規(guī)則檢查(DRC/LVS etc.):calibre系統(tǒng),啟動命令:calibre
這里,使用calibredrv -shell命令,就可以啟動calibredrv的命令行模式了,這個時候并不會彈出calibre的GUI,只有一個提示符。
這個也是一個TCL命令接口(PS:這個TCL接口比較古早,不支持命令自動補全 auto-complete,可能對于用慣S家/C家的用戶,還是有一些不太習慣。)
加載一個GDS文件 set L [layout create BIST.gds -dt_expand]
這里的L是GDS創(chuàng)建后的文件句柄,后面所有的操作,都需要借助這個句柄。
- 獲取當前設計(top-cell)
$L topcell
這個GDS的頂層只有一個就是BIST,當然Calibre也支持多個top-cell的GDS數(shù)據(jù),但是這個違背了層次化設計規(guī)則,建議所有的GDS都有且只有一個topcell
- 羅列出所有的cell(唯一化過的)
$L cells
這里的返回并沒有排序,也沒有上下級關系,有點類似于get_designs這類命令。
- 羅列出指定cell下的第一層引用(ref)
對所有當前層次(cell)下的所有l(wèi)eaf(包含ref)進行羅列,
結合下面的截圖,可以看到,只有第一層的高亮ref被返回,所以,類似verilog下的get_cells命令:
- 對于指定ref,查看在當前設計(top-cell)被引用了多少次
這個例子表明了nand_4p在整個BIST設計下,被例化的16次,每次例化都有不同的物理坐標信息,盡管設計內容是一樣的:
所以類似的,在當前top-cell下,top-cell(BIST),并沒有被例化過任何一次,這個和verilog里的current_design的道理是類似的。
- 獲取指定cell下的所有和具體inst和inst數(shù)量
- 獲取指定cell下的具體inst
$L iterarot ref $cell
這里返回的是ref以及具體的坐標等信息,這個就是上文說GDS里邊例化(instance)了
具體的返回信息解釋如下:
-
獲取指定cell的所有inst數(shù)量
方法一: $L refcount -parent nand_4p
方法二:llength [$L iterarot ref $cell]
這個命令是得到了指定cell下的所有子inst,這個和比children(只打印第一層)有如下區(qū)別:
- Children只輸出第一層的ref,iterator則包含了所有層次的 ref
- Children的輸出是uniq 后的ref信息
- Iterator 則是inst的信息
- 獲取指定cell下的所有poly
$L iterator poly $cell $layer_list range 0 n
返回值的說明:
所以,可以看到,是一個水平走線的一段metal
- 獲取指定cell下的所有text
$L iterator text $cell $layer_list range 0 n
返回值的說明:

【敲黑板劃重點】
通過上述講解,用戶基本上可以通過命令模式,遍歷出GDS里邊的所有類型的數(shù)據(jù),這個對于GDS的信息抓取或者數(shù)據(jù)比對有很好的參考作用,如果加以靈活運用,對于一些之前需要在APR里邊生成的信息,可以在完整的GDS里邊實現(xiàn)了,譬如:單孔的檢查,metal的面積/密度統(tǒng)計,layer信息的抽取等等,通過Calibre,可以給后端工程師提供更多維度的數(shù)據(jù)評判和比對。





