1. 程式人生 > ><DC guide ---5>

<DC guide ---5>

verilog 基礎 文件 語法 小寫 連接 ase 服務 分享

我們知道dc是為了約束.可是要約束誰? 怎麽能把位置描述清楚.?

技術分享

DC在讀入所有的verilog文件,link、check_design後,把整個current樹分成了一下幾個組成:

所有吃進來的module,都稱為design. 只有current-design的 in/out 被稱為Port

內部所有的例化,統一稱呼為cell,cell的in/out稱為pin.

剩余的連接線, 統一稱呼為net. 通過這些,基本上就能細分了. 至於clock是特殊的一種.先不講 .

在這幅圖中 design 有 { TOP ENCODER REGILE } INV因為是stdcell,不是verilog描述的,所以不能算design

cell有 { u1 u2 u3 u4}

需要詳細的了解下: design\port\cell\pin\net\clock的用法, 以get_designs為例子 這6個有一個共同的稱呼: Object 對象.

get_designs

技術分享

get_designs : 返回所有的design名字。 包括current-design、以及所有吃進去的verilog module

get_designs -h : 把current_design剔除掉,只是其他的designs

-quiet : 壓住warning信息不報.

-regexp 進行正則匹配,而不是使用dc內部的簡單匹配。

-nocase 不區分大小寫

-exac : 貌似是不匹配簡單項目,

-filer expression : 先get出結果,然後用expression對所有的結果進行過濾。得到最終的結果

pattern 匹配表達式.

技術分享

技術分享

使用 -regexp 選項, 此時使用的是TCL的正則表達式. 最好用 {} 括起來.這個時候 *表示任意數量 . 表示一個字符 ?表示0/1數量。

不適用 -regexp * 代表任意多個字符 ?代表1個任意字符

看下下面的例子: get_designs獲得所有。

get_designs -h 剔除current_design

-nocase -regexp 選項搭配。

技術分享

還需要註意一點 , get-designs 返回值不是list. 是一個collection. 本節最後,會將collection到底是什麽.

雖然從dc界面上看像是一個list.但其實是一個collection.可以套接在 collection命令上.

常見的collection命令有: add_to_collection remove_from_collection quiet_objects sizeof_collection filter_collection

我們知道 get_* 獲得的是collection,然後可以對其使用 add_to_collection remove_from_collection quiet_objects sizeof_collection filter_collection

這些命令進行 更細致的操作,從而得到想描述的object.

set foo [get_designs *]

set foo [ add_to_collection $foo [get_ports *] ] 在foo的基礎上增加ports

set foo [remove_from_collection $foo [get_designs *] ] 在foo的基礎上剔除掉designs,只剩下ports了

sizeof_collection $foo 得到是ports的個數。

quiery_objects $foo 得到ports的列表.

filter_collection 是依據 collection元素的屬性進行篩選的. 簡化變成get_* 的 -filter expression選項了。

需要理解一點: collection是集合, 很多元素的集合. 而且這些元素還有不同的屬性, dont_touch、is_mapped、is_cell、is_hierarchical等等。

我感覺整個collection是這樣的一個結構.

collection由元素組成,元素又有各種不一樣的屬性。 我們綜合時,就是要找到元素,確認其屬性,對其增加屬性。

技術分享

DC綜合時,也需要去根據我們 設置的屬性, 當然 prots\pin\design\cell\net\colck\自己本身的attribution都不一樣。

我們可以使用 list_attribute -class cell 查看cell的attribution。

我們約束的語法: 增加\刪減 每個attribution,達到我們的綜合目的.

後面的章節我們就要學習: 要去設置哪些屬性

我理解進行約束的過程,可以分成以下三步

(1) get_* 粗略獲得object、

(2) collection命令 微調object、

(3) 對目標object, 增加\刪減 attribution.

通過這三步,我們就能把約束,添加到目標位置. 達到了精確制導. 所有的語法都是為這個目的服務的.

<DC guide ---5>