1. 程式人生 > >!乾貨! 為設計指定輸入驅動強度 set_driving_cell set_drive set_input_transition

!乾貨! 為設計指定輸入驅動強度 set_driving_cell set_drive set_input_transition

!乾貨! 為設計指定輸入驅動強度 set_driving_cell set_drive set_input_transition

本文轉自:自己的微信公眾號《積體電路設計及EDA教程》

裡面主要講解數字IC前端、後端、DFT、低功耗設計以及驗證等相關知識,並且講解了其中用到的各種EDA工具的教程。

考慮到微信公眾平臺上面釋出的很多推文百度搜索不到,所以以後的推文也會在這裡進行轉載。

推文主要內容:

  • 為設計指定輸入埠驅動強度;

  • set_driving_cell命令;

  • set_drive命令;

  • set_input_transition命令;

  • 這三個命令之間的關係與區別。

 相信大家在做邏輯綜合或者寫sdc約束的時侯總糾結上面三條命令該怎麼用,那麼它們之間有什麼關係呢,且聽我慢慢道來。

 

為設計指定輸入驅動強度

我們知道,一個Cell的延遲與兩個內容有關,一個是Input Transition,另一個是Output Load,如下圖所示:

 

因此,對於整個設計的輸入埠(Input Port)而言,要想讓邏輯綜合工具(如DC)、佈局佈線工具(如ICC)、STA工具(如PT)精確計算輸入埠後邊驅動的單元的延遲,必須讓工具知道輸入埠的Transition時間。

如下圖所示,Transition時間越短(即越快Fast),Cell的延遲越小(從A埠到FF2的D埠延遲越小);反之,Transition越慢,從A埠到FF2的D埠的電路的延遲越大。因此我們需要為設計的輸入埠定義驅動能力。

 

 

一般的EDA工具(如DC等)預設所有輸入埠的Transition時間都是0,這顯然過於理想,因此,要想精確獲得輸入埠處電路的時序,為所有輸入埠設定合理的驅動能力或者Transition時間非常重要

定義輸入埠的驅動能力可以是標準單元庫中的一個緩衝器或反相器(buffer/inverter)單元(用set_driving_cell命令設定),也可以是指定的電阻值(用set_drive命令設定),還可以是set_input_transition,那麼它們有什麼區別呢?該如何選取?

 

對輸入埠指定驅動強度,方法好多哦,到底選哪種?

set_driving_cellset_drive還是set_input_transition呢?

 

set_driving_cell命令用法

應用場景:Block level

EDA工具(如DC)預設輸入埠訊號的Transition時間是0;

我們通過set_driving_cell命令來設定某個輸入埠前面是什麼驅動單元驅動它的,EDA工具會從指定的庫中查詢得出更加真實的Transition時間來代替零Transition。

 

set_driving_cell命令的語法:

set_driving_cell

[-lib_cell lib_cell_name]

[-library lib]

[-rise] [-fall]

[-min] [-max]

[-pin pin_name]

[-from_pin from_pin_name]

[-dont_scale]

[-no_design_rule]

[-none]

[-input_transition_rise rtran]

[-input_transition_fall ftran]

[-multiply_by factor]

port_list

 

舉例:

例1:將ddfs的所有輸入端的驅動單元設定為DFF1的管腳Q,並忽略該管腳上的設計規則

current_design ddfs

set_driving_cell -lib_cell DFF1 -pin Q -no_design_rule [all_inputs]

 

例2:為MY_DESIGN的輸入埠A設定驅動單元為OR3B或者FD1的Qn輸出Pin。

 

set_drive命令用法

應用場景:Chip level

set_drive命令通過為輸入埠指定電阻值的方法來為其定義外部驅動強度。在邏輯綜合工具進行優化期間,工具根據設定的驅動強度來計算由該輸入埠驅動的邏輯電路的延遲。

對於晶片級的設計(即頂層設計)而言,它的輸入埠的驅動能力很難用工藝庫中的某個具體單元去量化,因此我們一般不能用set_driving_cell來為其指定驅動強度。我們一般在頂層通過set_drive命令定義輸人電阻的大小,由於在頂層,要驅動的是負載較大的IO單元,故需要的驅動能力較強,典型的值是0.05,單位取工藝庫中電阻的單位,一般為kΩ;

 

set_drive命令的語法:

set_drive

resistance

[-rise] [-fall]

[-min] [-max]

port_list

 

· 阻抗resistance:非負的驅動阻抗,該值越小表示驅動能力越大。(一個MOS管的開關模型是一個電阻串聯一個開關,驅動一個MOS管柵極的是上一級MOS管的漏端,它總是通過該電阻連線到電源或者地,這裡設定的是MOS管等效電阻的大小);

·  埠名列表port_list:設定為哪些輸入埠設定驅動電阻。

 

由於通常情況下,設計的時鐘和復位端都由驅動能力很大的單元或樹形緩衝來驅動,所以可以用set_drive命令將這兩個埠的驅動電阻設定為0,也就是驅動強度為無窮大(該命令對當前設計有效)。

 

舉例:

例1:給設計的輸入埠A、B和C指定2.0 kΩ(單位一般是kΩ,跟庫中定義有關)的電阻,可以用該命令:

> set_drive 2.0 {A B C}

 

例2:為設計中的所有輸入埠指定12.3 kΩ的電阻,可以用該命令:

> set_drive 12.3 [all_inputs]

 

例3:將ddfs的時鐘和復位端的驅動設為無窮大,即驅動阻抗設為零:

current_design ddfs

set_drive 0 {clk, reset}

 

set_input_transition命令用法

應用場景:Chip level

我們可以用set_input_transition命令為輸入埠指定一個固定的transition時間,工具會用該transition時間來計算它驅動的邏輯電路的延遲。

對於頂層設計(Chip level的設計)而言,除了用set_drive命令之外,我們也可以使用set_input_transition命令來為其設定固定的transition時間,因為晶片外邊一般存在驅動能力比較強的器件和大電容。在這種情況下,transition時間相對獨立於當前設計中的電容。

  

Input Transition分為上升和下降的Transition時間。

set_input_transition命令的語法:

set_input_transition

transition

[-rise] [-fall]

[-min] [-max]

port_list

 

舉例:

例1:MY_DESIGN是Chip level的design,為其輸入埠A指定0.12ns的input rise和fall transition:

 

Summary總結

set_driving_cell與set_drive和set_input_transition的區別

我們也可以用set_driving_cell或set_drive或set_input_transition命令來指定輸入埠的驅動,那麼它們有什麼區別呢?

set_driving_cell命令通常是首選方法,因為它是最真實的模型。當我們的設計是模組級(Block level)的design時,我們的設計前面一般還有其他的設計。那麼前面模組的輸出便是我們模組的輸入,如下圖所示,我們可以根據外圍電路的輸出Cell來給自己的模組指定驅動強度:

當我們的設計是晶片級(Chip level)的頂層設計時,晶片外圍電路要驅動的是負載較大的IO單元,故需要的驅動能力較強,一般無法用庫裡面已有的單元來指定驅動強度,因此一般用set_drive命令。

對於頂層設計(Chip level的設計)而言,除了用set_drive命令之外,我們也可以使用set_input_transition命令來為其設定固定的transition時間,因為晶片外邊一般存在驅動能力比較強的器件和大電容。在這種情況下,transition時間相對獨立於當前設計中的電容。

如果多種指定方式發生衝突,那麼在工具中,最近使用的命令會覆蓋先前的命令。 

 

綜合應用舉例 

對於內部的一個模組sub_design2,由於是Block level的design,因此我們根據已知的前級設計的輸出單元用set_driving_cell來為本模組指定輸入埠的驅動強度。

對於Chip level的頂層設計top_level_design而言,晶片外部的電路需要驅動負載較大的PAD,因此需要使用set_drive命令來通過設定電阻值來指定輸入埠的驅動強度。

 

網易雲課堂視訊課程

連結:https://study.163.com/course/introduction/1005909004.htm

《Calibre DRC教程-一鍵搞定DRC》

《Calibredrv教程-提高流程自動化》

《搭建IC設計的EDA虛擬機器/伺服器》