在S家的后端設計工具里,包括DC、ICC、ICC2、PT , 大體的命令都是相通的。并且主要命令的命名和分類都是有一定的相似性的( 但是要注意:盡管在相同的命令下,由于輸入和參數配置的差異,命令的結果可能會有不同,尤其是在delay計算方面 )。
簡單總結如下
這里,一起來關注一下get_* 命令家族,并且了解一下通用的選項filler 。
先一起看一下這類命令的選項描述。
既然是一個命令組,當然會有一些類似點,這個命令家族一般有如下的選項設計:
通用的選項細節描述如下
后三個選項比較好理解,這里一起來仔細看一下filter這個選項。
filter 簡單地說,是在當前的get_* 命令下的一個二次過濾的選項。具體可以使用什么樣的過濾方式方法,是基于這個命令所屬于的類(class) 的,這個命令組的命名方式,一般是get_$class ,譬如說 get_cell 所對應的類(class) 就是 cell ;get_clocks 所對應的類(class) 就是 clock 。所以,所有filter可以操作的范圍就是這個class里邊的數據/屬性。
下圖是cell 的 attribute的摘錄
用戶可以根據這個attribute列表的具體細節來對cell來進行二次過濾,一個舉例如下
得到所有full name中包含 lace的器件
# get all *lace* cell
get_cells -filter "full_name=~*lace*"
通過運行,會得到所有名字為lace 的cell,返回值如下:
這里使用條件運算符**=~** 是一個模糊匹配,place也是lace的模糊匹配的結果,這里就被正確的返回出來了。
再看一個稍微復雜一點的例子
得到所有的buffer cell,
但是cell名字一定是包含lace字符串的
# get all *lace* buffer
get_cells -filter "full_name=~*lace* && ref_name=~*BUF*"
另外一個很常用的filter例子是:
得到數據庫里所有的std-cell
然后計算它們的面積總和
get_cells -hier -filter "mask_layout_type==std"
set area 0
foreach_in_collection c [get_cells -hier -filter "mask_layout_type==std"] {
set area [expr [get_attribute $c area] + $area]
}
puts "Total std-cell area is $area"
這個執行結果如下
什么,這還不夠厲害,還有更彪悍的操作?
得到所有面積大于3 area_unit的
buffer/invert
get_cells -filter "area >3 && number_of_pins==2"
運行結果如下
這么復雜的操作,最好驗證一下,先來看一下面積
沒有問題,都是大于3的器件
再來看一下pin的數目
也都正確,都是兩個pin
最后來看一下,是不是都是buffer/invert
完美,所有的結果都被驗證正確無誤。
到這里,想必同學們都有了一種體會了吧。這里的 get_attribute 和 -filter 有著天人合一的感覺,一個是query 一個是 status。通過這種按需查找的方法。數據庫里的東東基本上都會被你摸個遍了。
這里再來看一個命令嵌套的組合拳
面積大于3 并且
有兩個以上的pin的非SPARE cell 的器件
它們的output pin
get_pins -of [get_cells -filter "area >3 && number_of_pins >2"] -filter "pin_direction==out && full_name!~*SPARE*"
嵌套,就是無休無止的嵌套,就是要在浩如煙海的數據大海中,找到你要的那根針!靈活使用這些命令,理論上講不存在命令行里找不到的那根針。
-
過濾器
+關注
關注
1文章
436瀏覽量
20173
發布評論請先 登錄
php中rename()函數的妙用
IC設計:Synopsys2018 版本 EDA 工具免費分享
ASIC邏輯綜合及Synopsys Design Compi
S參數在高頻測量中的妙用
linux中source命令的用法
SDRAM中的active命令介紹

評論